ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 420
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
-530 kunlar
Postlar arxiv
1 420
ืงืื ืกืคืฆืืืช
ืฉื ื ืกืืคืืจืื ืื ืงืฉืืจืื ืขื ืคืขืจื ืฆืืคืืืช ืฉืืืื ืื ืืืชืจ ืืื ืืื ืืฉืืืข (ืืื ืืกืคืืง ืืฉืืื ืืืืคืืข ืคื ืืืืื).
ืืจืืฉืื ืืื ืืฉืืืื ืืื ืืืงืจ ืืืืืช ืืืฉ ufw. ืืืฉืคื ืฉื ื ืืื ืื ืขืืืืื ืืื ืืื. ืืฉืืคืขืืืื ufw ืืื ืืืกืื ืืืืืจืื ื ืื ืกืื ืืื ืื ืืืกื ืืืืืจืื ืฉืืืืคืื ืืงืื ืืืื ืจืื ืืืืงืจ. ืืืืืื ืืืจืืช ืื ืืคืขืืชื ืงืื ืืืื ืจ ืฉืืงืฉืื ืขื ืคืืจื 8080:
docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
ืืื ืชืคืขืืื ufw ืืื ืืืกืื ืืืืืจืื ืืืืืฅ ืืคืืจื 8080, ืืืืืืจืื ืขืืืื ืืืื ืกื ืืืืืขื ืืงืื ืืืื ืจ.
ืื ื ืืืื ืืฉืจืืืชื ืืช ืืืชื ืืืืช ืืืืช ืื ืืืื ืชื. ืืืืชื ืืืื ืฉืื ื ืขืืฉื ืืฉืื ืื ืืกืืจ ืืืงืื ืืืจ. ืืืจื ืืื ืฉืขืืช ืืืืชื ืืืืื ืืืฆืืชื ืฉืืกืืคืืจ ืืชืืขื ืืืฉื ืืื:
https://blog.jarrousse.org/2023/03/18/how-to-use-ufw-firewall-with-docker-containers/
ืืืื:
https://www.baeldung.com/linux/docker-container-published-port-ignoring-ufw-rules
ืืืื:
https://www.howtogeek.com/devops/how-to-use-docker-with-a-ufw-firewall/
ืืกืืคืืจ ืืฉื ื ืืื ืขื JanusGraph ืืืฆืืจืช ืืื ืืงืก ืืืืืื ืืืจืฃ. ืืขืืื ืืชืืขืื ืืจืืฉื ืื ืืฉืชืคืื ืืช ืืคืงืืื ืฉืืืฆืจืช ืืื ืืงืก ืืืืืื:
index = mgmt.buildIndex('byConsistentName', Vertex.class).addKey(name).unique().buildCompositeIndex()
ืจืง ืื, ืื ืื ืขืืื. ืืฉืืื ืืืฆืืจ ืืื ืืงืก ืืืืืื ืฉืื ืืืืื ืฉืืืจืื ื ืืฆืจืื ืืฆืืจื ืืืืืืืช ืฆืจืื ืืืงืฉ ืืื ื ืืืฉืชืืฉ ืื ืืื ืื ืื ืื ืขืืื ืื ืืืืืื ืืืจืืช:
index = mgmt.buildIndex('byConsistentName', Vertex.class).addKey(name).unique().buildCompositeIndex()
mgmt.setConsistency(index, ConsistencyModifier.LOCK)
ืืื ืื ืืชืืขื ืืคื ืืฉืืืืขืื ืืืคื ืืืคืฉ:
https://docs.janusgraph.org/advanced-topics/eventual-consistency/
ืื ืื ืฉื ื ืืกืืคืืจืื ืื ืขื ืฉืชื ืืื ืืืืืืืช ืฉืื ืืช ืืฉ ืงืฉืจ ืืืง ืืื ืืื. ืืฉื ื ืืืงืจืื ืืืกืจ ืชืฉืืืช ืื ืืฆืจื ืืขืืืช ืฉืืืืฉื ืืจืื ืืืชืจ ืงืฉื ืืชืงื. ืืืชืืืช ืงืื ืฉืืื ืื ืืืฉืชืืฉ ืชืืื ืืื ื ืืืืฉื ืฉื ืกืคืงื ืืช ืืจืืื ืืชืืื ืืืืื ืืช ืืื ืืืช ืฉืืื, ืื ืืฉืืืจืื ื ืจืืื ืืืื ืื ืืืืืื.1 420
ืืื ืื ืืืืช ืขืืื?
ืืืืืจ ืืืืืชื ืฉื ืืขืื ืืืื ืื ืจืง ืืช ืืขืจื ืฉืื ืื ื ืืคืกืืืื ืืื ืฉืื ืคืืชืจืื ืืืชื, ืืื ืื ืืช ืื ืืืื ืืืืื ืฉืื ืื ื ืฉืืจืคืื ืขื ื ืืกืืื ืืช ื ืืกืคืื ืืืชืืืื.
ืฉืจืช ืืฆืื ืฉืืืืืจ ืืืขืจืืช ื ืืืืจ ืฉืืืืืช ืืืคืฉืจ ืื ืืจืืืช ืืื ืืฉืืฉ ืืขืื ืืื ืืืคืืจ ืืืืืื ืฉื ืืฉืจืช ืืื ืืืืื ืื ื ืฉืืจ. ืืื ืื ืืฉืจืช ืื ืื ืื ืืื ืฉืฆืจืื ืื ืืืื ืื ืืืชืจ ืืขืืืช, ืืื ืืฉืืืจ ืืฉ ืืขืื ืืื ืื ืืจื ืืืื ืืืงืืจ ืืืชื ืืืชืงื ืืช ืืืืจ ืืืืืชื ืฉืฉืืืจ, ืืื ืฆืจืื ืืฉืจืืฃ ืฉืขืืช ืื ืืกืืื ืืช ืขื ืฉืืืืขืื ืืืฉืื.
ืจืื ืืืื ืื ืื ื ืืืืืื ืืจืืืช ืืช ืืืขืืืช ืฉืขืืฆืจืืช ืืืชื ื, ืืื ืืื ืื ื ืืื ืื ืืืข ืืชืืื ืืื ืืคืชืืจ ืืืชื ืื ืฉืืฉ ืืขืืืช ืฉื ืจืืืช ืืืชืจ ืืืืคืืช. ืืืื ืืืชืืจ ืฉืื ื (ืืืคืชืืื, ืืืืืื, ืืื ืืืื) ืืื ืืืืืช ืืช ืืขืืืช ืืืืืชืืช ืฉื ืืขืื. ืืขืื ืฉืขืืื ืืื ืขืืืื ืคืขื ืืืืืฉ ืื ืืืืฉ ืืื ืืืืคื, ืื ืื ืืืื ืืื ืื ืืืื ืฉื ืืฉืจืืคื.
1 420
ืืืค ืจืืืงื: ืขืืืฃ ืืืืชืจ ืขื ืืจื ืจื ืืชืื JSX
ืืืชืจ ืืื ืคืขืืื ืื ื ืจืืื ืงืื ืขื ืืืื ืืช ืืืืืช ืฉืื ืขืืื ืืืืื ืืืื. ืืืงืจื ืฉื ืจืืืงื ืชืื ืืช ืืืื ืืขืืืชืืช ืืื ืืื ืกืช ืืืืืงื ืืชืื ื JSX. ืื ืืชืืื ืคืฉืื ืขื ืืืื ืกืืื ืฉืืื ื ืงืืืืชืืื:
function App() {
const [text, setText] = useState(0);
return (
<div>
<button onClick={() => setText(t => (t + 1) % 2)}>Toggle</button>
{text == 0 ? <Text1 /> : <Text2 />}
</div>
)
}
ืืื ืืืจ ืืืื ืืืคื ืืืคืืฆืช.
ืื ืขืืฉืื ืืืงืื? ืื ืื ืื ืงื ืืื ืืืืฆืื ืืช ืืงืื ืืืืืขืจ ืืงืืืคืื ื ืื ื ืคืจืืช ืฉืืื ืจืง ืืฉืืื ืืืืืืงื ืืืืช. ืืืืื ื ืฉืฆืจืื ืืืชืืื ืืืื ืงืืืคืื ื ืื ืืืฆืื? ืืืื ื ืขืืืจ ืืช ืื ืืงืืืคืื ื ืื ื ืคืจืืช ืื ืงืื:
function Text({id}) {
if (id === 0) {
return <Text1 />
} else {
return <Text2 />
}
}
function App() {
const [text, setText] = useState(0);
return (
<div>
<button onClick={() => setText(t => (t + 1) % 2)}>Toggle</button>
<Text id={text} />
</div>
)
}
ืืฉืื ืืื ืื ื ืฆืืจื ืื ืื ืื ืืืชืจ ืื ืจื (ืืืฉื ืื ื ืฆืืจื ืฉืื ืืืืืจ ืืื ืืื ืงืืืคืื ื ืืืช) ื ืืื ืืืคืื ืืช Text ืืคืื ืงืฆืื ืืืืืช ืื ืงืื:
function Text1({color}) {
return <p style={{color}}>Text 1</p>
}
function Text2({color}) {
return <p style={{color}}>Text 2</p>
}
const Toggle = (...components) => (props) => {
const cls = components[props.id]
return React.createElement(cls, props);
}
const Text = Toggle(Text1, Text2);
function App() {
const [text, setText] = useState(0);
return (
<div>
<button onClick={() => setText(t => (t + 1) % 2)}>Toggle</button>
<Text id={text} color="red" />
</div>
)
}1 420
ืืืืืืช ืขื PGlite
ืืคืขืืชื ืืืื ืงืื ืืืืคืกืงืจืืคื ืฉืืชืืืจ ืืืกืืก ื ืชืื ืื PGlite, ืืฆืจ ืืืื, ืืื ืืก ื ืชืื ืื ืืฉืืฃ ืืืชื ืืืจื. ืืืืง ืืืืืื ืืื ืฉืื ืืื ืื ืืกืืก ื ืชืื ืื ืืืชืงื. ืื ืืงืื ืืฆืจืื ืจืง deno run ืืฉืืื ืืืจืืฅ:
import { PGlite } from "npm:@electric-sql/pglite"
async function main() {
const db = new PGlite()
await db.query("create table test(x integer, y integer);");
await db.query("insert into test values(1, 1);");
await db.query("insert into test values(2, 2);");
const result = await db.query("select * from test");
console.log(result);
}
main();
ืืคืจืืืงื ืขืืืื ืืฉืืื ืคืืชืื ืืืืจืืฉ ืขืื ืขืืืื ืขื ืฉื ืงืื ืชืืืื ื ORM-ืื ืืื ืืืจ ืืคืฉืจ ืืืืื ืขื ืืื ืฉืืคืืจืื ืืฉืืขืืชืืื ืืคืืชืื ืฉืืื ืืืื ืืืื ืืก ืืืงืืกืืกืื ืฉื JavaScript ืืฆื ืฉืจืช-
1. ืืืืจืืช - ืื ืื ืืกืืก ืื ืชืื ืื ืจืฅ ืืืืชื ืชืืืื ืืื ืืฉืจืช ืื ืืืชืจ ืืื ืืืืฆืื ืงืจืืืืช ืืืกืืก ืื ืชืื ืื.
2. ืฉืืืืชืืช ืืืชืจ ืคืฉืืืืช - ืืืฉื ืฉื ืืกืขืืฃ ืืงืืื, ืื ืื ืืกืืก ืื ืชืื ืื ืจืฅ ืืฆืื ืืืืชื ืชืืืื ืื ื ืืืื ืืืืฆืื ืื 20 ืฉืืืืชืืช ืืืืื ืืืืชืจ ืขื JOIN-ืื ืื ืืืืืจืื ืืืจืืืื ืืื ืืืืืืช.
3. ืืืืงืืช ืืืืจืืช ืืืงืืืืืืช - ืื ืขืืฉืื ืื ืืืืงื ืืืืื ืืืฆืืจ ืืขืฆืื ืืช ืืกืืก ืื ืชืื ืื ืืืืืจืื ืืชืื ื ืชืื ื Seed ืงืืืขืื.
4. ืคืืจืืื ื ืืืชืจ ืืืืจ ืืืคืืืงืฆืืืช Offline First - ืื ืืคืฉืจ ืืงืืช ืืช ืืืชื ืฉืืืืชืืช ืคืืกืืืจืก ืฉืืืจ ืืฉ ืื ื ืืคืฉืื ืืืจืืฅ ืืื ืืืคืืคื.
ืืื ืืืืืจืื ืืืื ืืขืืื ืืืชื ืขืืืื ืืืงืื ืื ืืฉ. ืื ืจืื ืฉืคืืจืืื ื ื Offline First ืืืื ืืืืจ ืืจืืฉืื, ืืืจื ืื ื ืชืืื ืืืฉืชืืฉ ื PGlite ืืชืฉืชืืช ืืืืืงืืช ืขื ืฉืืืื ืืกืคืืง ืืฆืื ืืืจืืฅ ืืช ืื ืืฉืืืืชืืช ืฉื ืืืขืจืืช ืืืืืชืืช ืืืื ืืื ืืืื ืืืืฆืื ืฉืืืืจื ืืืชื ืืชืืจ ืืกืืก ื ืชืื ืื ืืื. ืื ืฉืื. ืืื ืืงืจื ืื ืคืจืืืงื ืฉืฉืืื ืืขืงืื ืืืจืื.1 420
ืืืฉืง ืืื ืฉืขืืฉื ืืื
ืฆืจืืืื ืืืชืื ืฉืืงื ืืืฉื ืืืืงืก ืขืืืื (ืื ืืืื ืืฉืืื)?
ืืืฆืืจ ืชืืื ืืช ืืืืื ืื ืืืชืืืช ืืืฉืืช ืืืืจ ืืืฉืจ, ืืคื ืจืฉืืืช ืืืืืฆืื ืืจืฆืื ืืช ืฉื ืืฉืชืืฉ?
ืืืืืช ืืืืื ืฉืคื ืืงืืืฅ? ืื ืืชืจืื ืืช ืืืงืกื ืืฉืคื ืืืจืช?
ืืืคืฉ ืืชืืื ืื ืฉืืชืืืืื ืืจืฉืืืช ืืจืืืืื ืฉืืฉ ืืืฉืชืืฉ ืืืงืจืจ ืืจืืข?
ืืคืขื ื ืงืื QR ืืชืืื ื?
ืืฉื ืฆืืจื ืืคืชืืจ ืื ืืืช ืืืืขืืืช ืืจืฉืืื ืืืขืื (ืืืขืืืช ืจืืืช ื ืืกืคืืช), ืจืืื ื ื ืืคืฉ ืื ื ื ืกื ืืืฉืื ืขื ืืืืืจืืชื - ื ืืืืื ืืช ืืงืื, ืืคืื ืืืืคื ืืืืฉืื. ืื ืื ื ืจืืฆืื ืืืขืช ืื ืืงืื ืขืืฉื ืืืืืืช ืืกืืืืื ืืชืงื ืืช ืืคืืชืจืื ืืืฉืคืจ ืืืชื.
ืืื ืืคืฉืจ ืืืจ ืืืืืื ืขืชืื ืืกืื ืืืจ.
ืืืืชื ืขืชืื ืืคืฉืจ ืืืืืื ืืื ืืืงืื ืืืชืื ืืช ืืงืื ืืคืืชืจืื ืืืขืื ืื ืื ื ื ืืชืื ืงืื ืฉืื ืืืฉ ืืช ืืืขืื ืืืืื "ืืืจืงื" ืืื Chat GPT ืืืคืขื ื ืืช ืชืฉืืืชื. ืชืืงืื ื ืืืืื ืืืื ืืกื ืืื Prompt Engineering ืืืืืงืืช ืืืืืืืืืช ืืืื ืจืฉืืื ืฉื ืคืจืืืคืืื ืืืื ืื ืืจืืฉ ืืืชืืฆืืืช ืฉืื ืื ื ืืฆืคืื ืืงืื ืืืืืื ื. ืืืืืื ืืช ืืืจ ืฉื ืืงืฆืจ ืชืืืืื ืคืืชืื ืืฆืืจื ืืฉืืขืืชืืช, ืืขื ืืืื ืืื ืชืืืคื ืืืชืจ ืืจืืจื.
1 420
ืืืฉ ืืืชืจ - ืกืืืจืช useEffect
ืืื ืกืคืง ืฉ useEffect ืืื ื Hook ืืืืืื ืืืืชืจ ืืจืืืงื. ืืฆื ืืื ืืคืฉืจ ืืขืฉืืช ืืืชื ืืืื ืืืจืื ืืื ืืฉ ืืืื ืืงืจืื ืืื ืืืืช ืฆืจืื ืืืชื, ืืื ืืฆื ืฉื ื ืงื ืืืื ืืืฉืชืืฉ ืื ืื ื ืืื ืืืื ืจืื ืืื ืฉืื ื ืชืงืืื ืืืืืื ืืืืจืื ืืฉืืชืืืืื ืืืชืื ืืคืงืืื ืืงืืืคืื ื ืืืช.
ืขืื ืืฉืืชืื ืืจืืฉืื ื ืืช ืืื ืื ืื ืื ืืืจืืื ืื ืขืืื ืืืจืืืืช ืืืืื ืฉืื:
https://overreacted.io/a-complete-guide-to-useeffect/
ืืื ืขืืจ, ืืื ืจืง ืืืืื ืืกืืืืช ืื ืืกืืฃ ืขื ืฉืื ืื ืกืื ืืช ืืืืจืื ืขื ืงืื ืืืืชื ืงืฉื ืืจืืืช ืืช ืืืขืืืช.
ืืฉื ืื ืฉืขืืจื ืืื ืฉ useEffect ืืฆื ื ืฆืืจ ืื ืืขื ืืืข ืขื ืืื ืืืฉืชืืฉ ืื ื ืืื, ืืื ืืฉืื ืื ืืืื ืืืืืื ืืื ื ืคืืฆืื ืฉื ืืชืงื ืืื. ืืืจืืช ืฉืืืืืชื ืืช useEffect ืืงืืจืก ืจืืืงื ืืฉืืขืืจืื ืฉื ืืื ืืืืงืืื ืืื ืืคืฉืจ ืืื ืืช ืขื useEffect ืืจืื ืืืชืจ ืืืฉืจ ืืื ืืคืฉืจ ืืฉืืืจ ืืืชื.
ืืฉืืืข ืืขืงืืืช ืืื ืฉืืืืช ืืชืืืืืื ืืฉืืชื ืืกืืจ ืืช ืืฉืืขืืจืื ืืืื ืืงืืจืก ืืืืงืืื ืืืืฉ 3 ืกืจืืื ืขื useEffect ืืืืจืกืืืช ืืจืืืืช ืืืคืืจืืืช (ืฉืขื ืฉื ืืืืื ืขื useEffect ืืืจืชื? ืืืืื ืงืืืืชื). ืืคืขื ืืงืืชื ืื ืืืืื ืืืจืืืชื ืืช ืื ืืืขืืืืช ืฉืืคืฉืจ ืืขืฉืืช ืืืื ืืืืืช ืื ืืขืืช.
ืื ืืฉ ืืื ืฉืขื ืคื ืืื ืืื ืื ืืืชืจ, ืืืชื ืืืชืืื ืจืืืงื ืืืื ืืื, ืื ื ืืืืืฅ ืืืขืืฃ ืืื ืืกืืืจื ืืืืืืฉืช ืืงืืฉืืจ: https://www.tocode.co.il/bundles/react/toc ืฉืืขืืจืื 25-27.
ืืืื ืชืืื ืื ืืฉ ื ืืฉืืื ื ืืกืคืื ืฉืืืืชื ืจืืฆืื ืืจืืืช ืืงืืจืกืื ืืื ืื ืชืชืืืืฉื ืืืชืื, ืืคืฉืจ ืืจื ืืกื ืฆืจื ืงืฉืจ ืืื ืืืชืจ.
1 420
ืืืื ื ืชืงื ืืช cycle ืืคืืืชืื
ืืคืื ืงืฆืื cycle ืืชืื ืืืืืื itertools ืืคืืืชืื ืืืงืืช ืืืกืฃ ืฉื ืืืจืื ืืืืืืจื ืืืืจืืืจ ืืื ืกืืคื ืฉืื ืคืขื ืืืืืจ ืืช ืืืืจ ืืื ืืชืื ืืจืฆืฃ ืืืขืื. ืืืืืื ืืคืฉืจ ืืืฉืชืืฉ ืื ืขื ืืืืจืืืช abc ืืืืคื ืืื:
print(list(itertools.islice(itertools.cycle("abc"), 10)))
ืืืงืื ืืช ืืชืืฆืื:
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a']
ืืื ืืกืืืงื ืืฉ ืืขืืืช ืืืฉืง - ืืื ืืืืื ืืงืื ืจืง ืคืจืืืจ ืืื. ืืื ืื ืืืงืื ืจืฉืืืช ืืืืชืืืช ืืืืชื ืจืืฆื ืืืขืืืจ ืจืฉืืื ืฉื ืืกืคืจืื ืืืืชื ืฆืจืื ืืืชืื:
print(list(itertools.islice(itertools.cycle([1, 2, 3]), 10)))
ืืื ืืืจ ืืขืืืฃ ืืืชืื ืื ืกืืืจืืื ืขืืืืื ืืื ืกืืืจืืื ืืจืืืขืื. ืื ืขืืฉืื? ืืชืงื ืื. ืื ื ืื ืฉืืืจ ืืช ืืืืฉืง ืฉื cycle ืืื ืื ื ืื ืืืื ืืืชืื ืคืื ืงืฆืื ืขืืืคืช ืฉืชืขืฉื ืื ืืืื ืืืชืจ ืงืืื. ืื ื ืืงืื:
def easy_cycle(*args):
match args:
case [col] if hasattr(col, '__iter__'):
return itertools.cycle(col)
case _:
return itertools.cycle(args)
ืืคืื ืงืฆืื ืืืงืืช ืจืฉืืื ืฉื ืืืจืื ืืืืืงืช ืืช ืืคืจืืื ืฉื ืืืืจ ืืจืืฉืื ืฉืืื ืงืืืื. ืื ืื ืืฉืื ืฉืืคืฉืจ ืืขืฉืืช ืขืืื ืืืืจืฆืื ื ืขืืืจ ืืืชื ื cycle ืืื ืฉืื ืืืื. ืืื ืืฆื ืืืจ ื ืขืืืจ ืืช ืจืฉืืืช ืืืืจืื ืฉืงืืืื ื ื cycle.
ืืชืืฆืื ืคืฉืืื ืืขืืฉืื ืืืืฉืง ืืกืชืืจ ืื ืืฉืื ื ืฉืืื ืกืืืจืืื ืืจืืืขืื:
print(list(itertools.islice(easy_cycle("abc"), 10)))
print(list(itertools.islice(easy_cycle("a", "b", "c"), 10)))
print(list(itertools.islice(easy_cycle(["a", "b", "c"]), 10)))
ื .ื. ืืื ื ืืื ืื ืื ืื ืื ื Type Hints ืฉื ืคืืืชืื ืืื ืืืคืฉืจ ืื ืืืืืืจ ืฉืขืจื ืืืืืจ ืฉื ืืคืื ืงืฆืื ืฉืืชืืชื ืืื ืืขืจื ืืืืืจ ืฉื ืืคืื ืงืฆืื itertools.cycle. ืืื ืชืืื ืืคืฉืจ ืืืขืชืืง ืืชืืืืช ืื ืืืืชืจ ืขื ื Type Hint ืืืงืจื ืืื.1 420
def toColumns(matrix: Map[(Long, Long), Char]): List[String] =
val lastColumn = matrix
.keys
.collect { (row, column) => column }
.max
.toInt
0.to(lastColumn)
.map { col =>
matrix
.keys
.filter { case (_, c) => col == c }
.toList
.sortBy(_._1)
.map(matrix)
.mkString
}.toList
ืืื ืืกืคืืง ืืฉืืื ืืืืง ืืจืืฉืื. ืืคืืชืจืื ืขื ืื ืคืื ืงืฆืืืช ืืขืืจ ืฉืืืจ ืืชืื ื ืืื ืืกื ืืื:
@main
def day13part1(): Unit =
Source
.fromResource("day13.txt")
.getLines()
.toParagraphs
.map(toMatrix)
.toList
.map { m => (toLines(m), toColumns(m)) }
.collect { case (rows, column) =>
findMirrorInList(rows) * 100 + findMirrorInList(column)
}
.sum
.pipe(println)
ืืืงืืื ืื ืืืจืืฆื, ืืืฆืืืื ืืื ื ืืช ืจืฉืืืช ืืฉืืจืืช ืืจืฉืืืช ืืขืืืืืช, ืืืคืฉืื ืืจืืืช ืืืืคืืกืื ืืช ืืกืืื.
ืคืืชืจืื ืืืง 2
ืืืืง ืืฉื ื ืื ื ืฉืืข ืืกืืื ืืื ืืกืืฃ ืื ืืจืฉ ืืชืืื ืฉื ืื ืืขื ืงืื ืืืฉ. ืงืืื ืื ืืคืื ืงืฆืื swap ืฉืืืคืืช ืกืืืืืช ืื ืงืืื ืืืืืคื:
def swap(ch: Char): Char =
if (ch == '.') { '#' } else { '.' }
ืืขืืฉืื ืืคืืชืจืื - ืืืงืืื ืืช ืื ืืืืจืืฆืืช ืฉืื ื, ืืื ืืืจืืฆื ืืืงืืื ืืช ืื ืืืคืชืืืช ืืืื ืืื ืืงืก ืืืฆืจืื ืจืฉืืื ืืืฉื ืฉื ืืืจืืฆืืช, ืื ืฉืืืจืืฆื ืืืืื 9 ืชืืื ืืคืื ืขืืฉืื ื 9 ืืืจืืฆืืช ืืืืื 9 ืชืืื. ืื ืืืช ืืืืืจืืฆืืช ืืืืฉืืช ืืื ืืขืฆื ืืืคืื ืืชื ืืืื ืืงืก ืืกืืื ืืืืจืืฆื ืืืงืืจืืช. ืขืืฉืื ืืคืฉืจ ืืจืืฅ ืขื ืื ืืืืจืืฆืืช ืืืืฉืืช ืืืืคืฉ ืืื ืืจืืืช, ืจืง ืฆืจืื ืืฉืื ืื ืื ืืืืืจ ืืช ืืืจืื ืฉื ืืืืจืืฆื ืืืงืืจืืช. ืืืืืื ืืื ืืขืฆื ืืืืื ืืชืื ืืืืื, ืืืืืจ ืจืฆืื ืขื ืื ืืืืจืืฆืืช, ืืขืืืจ ืื ืืืจืืฆื ืืืฆืจืื n ืืืจืืฆืืช ืืืฉืืช ืืจืฆืื ืขืืืื. ืื ื ืฉืืข ืืกืืจืื ืืื ืืืืฉื ืืกืชืืจ ืืคื ืขื ืืืชืืจ.
ืืงืืฆืืจ ืื ืืงืื ืฉื ืืืืง ืืฉื ื:
@main
def day13part2(): Unit =
Source
.fromResource("day13.txt")
.getLines()
.toParagraphs
.map(toMatrix)
.toList
.map { m => (m, toLines(m), toColumns(m)) }
.collect { case (m, rows, columns) =>
val horizontalMirror = findMirrorInList(rows)
val verticalMirror = findMirrorInList(columns)
m
.keys
.map { k => m.updatedWith(k) { case Some(ch) => Some(swap(ch)) } }
.map { m => (findMirrorInList(toLines(m), Set(horizontalMirror)), findMirrorInList(toColumns(m), Set(verticalMirror))) }
.find { i => i != (0, 0) }
.map {
case (0, altVertical) => altVertical
case (altHorizontal, 0) => altHorizontal * 100
}
}
.map(_.getOrElse(0))
.sum
.pipe(println)
ืื ื ืื ืืืื ืฉืืคืฉืจ ืืงืืช ืืช ืืืืง ืืืจืืื ืืคืื ืงืฆืืืช ืขืืจ, ืืื ืืืจื ืฉืืจืฆืชื ืืืืขืชื ืืชืฉืืื ืื ืืื ื ืืจืืฉืชื ืฉืืชืืชื ืืกืคืืง ืงืื ืืฉืืื ืืชืจืืื ืืื ืืขืืืฃ ืืืืคืจื ืืื ื ืืื.
ืจืขืืื ืืช ืืื ืืฉืคืจ? ืคืืชืจืื ืืช ืืฉืคืืช ืืืจืืช? ืืืืื ืื ืืฉืชืฃ ืืชืืืืืช ืื ืืืืืจื.1 420
ืคืืชืจืื Advent Of Code 2023 ืืื 13 ืืกืงืืื
ืื ืื ืื ื ืืืฉืืืื ืืกืืืจื ืืืืช ืืื ืืืืืื ืฉืขืืจื ื ืืืจ ืืฆื ืืืืชืืจ ืืืื ืืฉืคืช ืกืงืืื. ืืืืจื ืฉื ืืคืืกืืื ืืืื ืืื ืืืืื ืืืืจ ืงืฆืช ืขื ืกืงืืื ืืื ืื ืืชืช ืืื ืืืืืืฆืื ืืืืืื ืืคืชืืจ ืืช ืื ืืฉืคืืช ืืืจืืช ืฉืืชื ืืืืืื. ืืืื ืื? ืืืื ื ืฆืืื ืืคืจืืื.
ืืืชืืจ
ืืงืื ืฉืื ื ืืืื ืืื ืจืฉืืื ืฉื ืืืจืืฆืืช ืขื ืฉืืจื ืจืืงื ืืื ืื ืืืจืืฆื ืืื ืฉืืืจืื ืืืืืื:
#.##..##.
..#.##.#.
##......#
##......#
..#.##.#.
..##..##.
#.#.##.#.
#...##..#
#....#..#
..##..###
#####.##.
#####.##.
..##..###
#....#..#
ืื ืืืจืืฆื ืืืืฆืืช ืชืืื ื ืขื ืืจืื ืืืืฆืข, ืืืจืื ืืืืื ืืืืืช ืืงื ืืืคืงื ืื ืื ืื ืืื ืื ื ืืืืื ืืืชื ืื ืืืืจืื ืฉืืฉื ื ืืฆืืืื ืฉื ืืืจืื ืืืื. ืืืืืื ืืฆืืืจ ืืจืืฉืื ืืืจืื ืืื ืืื ืืขืืืื ืืืืืฉืืช ืืฉืืฉืืช:
123456789
><
#.##..##.
..#.##.#.
##......#
##......#
..#.##.#.
..##..##.
#.#.##.#.
><
123456789
ืืคืฉืจ ืืจืืืช ืืื ืื ืฉืืฉืืื ืืขืืืื ืืื ืชืืื ืช ืจืื ืฉื ืื ืฉืืืืื ืื, ืืืฅ ืืื ืงืืืืช ืฉื ืืฆืืืช "ืจืืืง ืืื" ืืืฉื ืืขืืืื ืืจืืฉืื ื ืฉืืื ืื ืืชืืื ื. ืืชืืื ื ืืฉื ืื ืืืจืื ืืื ืืืคืงืืช ืืื ืืฉืืจื ืืจืืืขืืช ืืืืืฉืืช:
1 #...##..# 1
2 #....#..# 2
3 ..##..### 3
4v#####.##.v4
5^#####.##.^5
6 ..##..### 6
7 #....#..# 7
ืืืชืืจ ืืจืืฉืื ืฉืื ื ืืื ืืืฆืื ืืืคื ืืืจืื ืืื ืืกืืื ืืช ืืืืงืืืื ืฉื ืื ืืืจืืืช (ืื ืืื ืืืคืงืืช ืืืคืืืื ื 100, ืื ืืืืช ื ืฉืืจืช ืืื ืฉืืื).
ืืืืง ืืฉื ื ืฉื ืืชืจืืื ืื ืื ื ืืืืื ืฉืืคืฉืจ ืืืืืืฃ ืคืืงืกื ืืื (ืื ืงืืื ืืกืืืืืช ืื ืืกืืืืืช ืื ืงืืื) ืืืงืื ืืจืื ืืืงืื ืืืจ, ืืืืงืฉืื ืืืืชื ื ืืืฆืื ืืช ืื ืืืงืืืืช ืืืืฉืื ืฉื ืืืจืืืช.
ืคืืชืจืื ืืืืง ืืจืืฉืื
ืืคืื ืงืฆืื ืืืจืืืืช ืืชืจืืื ืืงืืืช ืจืฉืืื ืฉื ืืืจืืืืช ืืืืคืฉืช ืืช ื ืงืืืช ืืืจืื ืืจืฉืืื, ืืืืืจ ื ืงืืื ืฉืืืืจืืืืช ืืฉืืืื ืื ืชืืื ืช ืจืื ืฉื ืื ืฉืืืืื ื. ืืืืืืงื ืื ืืกืืืืช ืืื ืฆืจืื ืืฉืื ืื ืืืืคื ืื ืคืจื ืืืงืจื ืฉืื ืงืืื ืงืจืืื ืืืชืจ ืืชืืืืช ืืจืฉืืื ืื ืืกืืฃ ืืจืฉืืื:
def findMirrorInList(items: List[String], except: Set[Int] = Set()): Int =
1.until(items.length).map { i =>
if (i <= items.length / 2) {
items.slice(0, i) == items.slice(i, i * 2).reverse
} else {
val distanceFromEnd = items.length - i
items.slice(i - distanceFromEnd, i) == items.slice(i, items.length).reverse
}
}.zipWithIndex
.indexWhere { case (item, index) => item && !except.contains(index + 1) } + 1
ืขืืฉืื ืืคืฉืจ ืืืืฉืื ืืคืืขื ืื ืืงืื. ืืคืื ืงืฆืื ืืจืืฉืื ื ืืื toParagraphs ืฉืชืขืืืจ ืื ืืืืง ืืช ืืจื ืืฉืืจืืช ืืืืจืืฆืืช. ืืชืืชื ืขืืื ืืืจืืืืช ืืคืืกื ืืื. ืื ืืงืื:
class ChunkedIterator[T](iterator: Iterator[T])(p: (T => Boolean)) extends Iterator[List[T]] {
override def hasNext: Boolean = iterator.hasNext
override def next(): List[T] = {
if (!hasNext) throw new NoSuchElementException("next on empty iterator")
iterator.takeWhile(p).toList
}
}
extension (i: Iterator[String]) {
def toParagraphs: ChunkedIterator[String] = {
ChunkedIterator[String](i) { f => f.nonEmpty }
}
}
ืืืฅ ืืื ื ืืืจื ืฉืืืื ืื ืืืืง ืฉื ืฉืืจืืช ืืืื ืืืคืื ืืืชื ืืืืจืืฆื ืขื ืืคืื ืงืฆืื ืืืื:
def toMatrix(block: List[String]): Map[(Long, Long), Char] =
block
.zipWithIndex
.collect {
case (line: String, index: Int) => line.toList.zipWithIndex.map((ch, column) => (index, column, ch))
}
.flatten
.flatMap {
case (row, column, ch) => Map((row.toLong, column.toLong) -> ch)
}
.toMap
ืืื ืืืื ื ืื ืืืืฆื ืืืจืืฆื ืืชืืจ ืืืืื ืืฉืื ืืคืชื ืืื ืืื ืืื ืืงืกืื (ืฉืืจื ืืขืืืื) ืืืขืจื ืืื ืืชื ืฉื ืืฆื ืืืงืื ืืื.
ืฉืชื ืืคืื ืงืฆืืืช ืืืืืช ืืืงืืืช ืืช ืืืืจืืฆื ืืืืืืจืืช ืจืฉืืื ืฉื ืฉืืจืืช ืื ืจืฉืืื ืฉื ืขืืืืืช ืืื ื, ืืื ืฉื ืืื ืืืคืฉ ืืื ืจืฉืืื ืืืคื ืืืจืื:
def toLines(matrix: Map[(Long, Long), Char]): List[String] =
val lastRow = matrix
.keys
.collect { (row, column) => row }
.max
.toInt
0.to(lastRow)
.map { row =>
matrix
.keys
.filter { case (r, _) => row == r }
.toList
.sortBy(_._2)
.map(matrix)
.mkString
}.toList1 420
ืคืืื ืฆืืื (ืืืค ืืืืคืืฉ ืขืืืื)
ืืคืขืืื ืื ื ืืืคืฉ ืขืืืื ืฉืืืืืง ืืชืืืื ืืืืฉืืจืื ืฉืื. ืืืฆื ืืื ืื ื ืฆืจืื ืืฉืื ืข ืืช ืืืขืกืืง ืฉืื ื ืืืืจ ืืช ืืืืืจ ืืืกืืื ืืืฆืข ืืช ืืืืืืช ืืฆืืจื ืืืืื ืืืืชืจ.
ืืขืชืื ืืืชืจ ืงืจืืืืช ืื ื ืืืคืฉ ืขืืืื ืฉืชืงืื ืืืชื, ืขืืืื ืฉืื ื ืขืืืื ืื ืืืืข ืืื ืืืฆืข ืืื ืื ื ืืืฉื ืฉืืืื ืืืืื ืืฉื. ืืืฆื ืืื ืืืชืืจ ืืื ืืฉืื ืข ืืช ืืืขืกืืง ืฉืืฉ ืื ืืช ืืคืืื ืฆืืื ืืืฆืืื ืืขืฉืืช ืืช ืืืขืืจ (ืืืชืืช ืืื ืื, ื QA ืืืชืื ืช, ืืืชืื ืช ืืคืจืืืงื, ืื ืื ืืขืืจ ืืืจ ืฉืืชื ืืืืืื ืขืืื). ืื ืื ืืื ืงื ืืฉืื ืข ืืชืื ืืืจืืื ืืื ืืคืฉืจ ืื ืืฉืื ืข ืื ืฉืื ืืจืื. ืืื ืืืจืื ืฉืืืืชื ืื ืกื ืืืฆื ืืื-
1. ืืืืืื ืืงืืจืืช ืืืื ืืช ืืืืจืื ืืืืืื ืฉืขืฉืืชื ืืกืืืืก ืื ืืืื ืื ืืช ืืคืจืืืงืืื ืฉืืืฆืขืชื ืืืฆืืื.
2. ืืืชืืื ืืช ืืชืืืื, ืืื ืืืืืืจ ืขื ืืฆืืช ืชืืฆืจืื (ืื ืฉืืื 5 ืฉื ืื ืืชืื ืช ืืจืง ืืชืืื ืืคื ื ืืืืฉืืื ืงืืจืก UI/UX ืืืื ืื ืืฆืจ ืขืืืื ืืช ืืขืืฆืืืื ืืื ืืืืจืคืื).
3. ืืืืืื ืฉืื ืืืื ืืงืฆืืขืืื ืงืืืืื ืฉืขืฉืืชื, ืจืฆืื ืืืืชื ืืงืืื ืืืฆืืจืฃ ืืงืืจืืช ืืืืื.
4. ืืืืืช ืืืื ืื ืืชืงืืคืช ืืืฉืจื ืื ืืจืืื ืืฉืืจ. ืื ืืืื ืืืจืืฉืืช.
5. ืืืชืืื ืืงืื - ืชืื ืืื ืืืืคืืฉ ืฉืืื ืืืฆืื ืืงืืืืช ืืชืคืงืื ืื ืืืื ืื ืืคืืื ืืืชื ืืืืช ืืื ืืชื ืืืืืื ืืขืฉืืช ืืช ืืืืจ ืฉืืชื ืจืืฆืื ืืขืฉืืช. ืืืชื ืืชืื ืช ืืืื ืืื ืืช ืขืืฆืืื UI/UX ืืืคืืืงืฆืืืช ืืืืื ืืืช ืื ืืืชื ืืืืช. ืื ืืืื ืฉืืืืชื ืืฆืจืฃ ืืืชื ืืงืืจืืช ืืืื ืืื ืื ืฉืืืื ืืฉืื ืืืืจ ืขืืื ืืจืืืื.
ืืืืจ ืืืฉืื ืืฉืื ืืข ืืื ืืืจืืืช ืฉืืชื ืืืื ืื ืืช ืืืชืืจ ืืฉืืืื ืืืืจืื ืืืืชื ืฉืคื. ืืชืืจ ืืขืกืืง ืืืืชื ืืคืื ืืชืช ืฆ'ืื ืก ืืื ืฉืืชืืื ืืคื ื ืืืืฉืืื ืงืืจืก ืขืืฆืื ืืื ืืืจ ืืชื ืื ืืื ืืขืฆื-ืขื. ืืื ืื ืืื ืืื ืืืื ืฉืืื ืขืืืื ืจืืืง ืืืืขื ืืื ืืคืืงืก ืืืจื ืืฉื, ืืืจืื ืฉืืื ืขืฉื ืฉืื ืืืื ืืืืื ืืขืืจ ืืืืื ืืืชืืจ, ืืื ื ืืืื ืฆืจืื ืืขืฆื ืืืืจ ืืืืืฉ ืืืืฆืื ืืื ืขื ื ืืกืืื, ืืฉ ืกืืืื ืฉืืงื ืืช ืืกืืืื ืืืชื ืืช ืืืืืื ืืช.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
