ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
1 419
# ืืืค ืืื: ืจืืืืืก ืืืจื ืืื ื
ืคืงืืืช git commit --amend ืืื ืืจื ืืืื ื ืืื ืืฉื ืืช ืคืจืืื ืฉื ืงืืืื ืื ืืืืขืช ืงืืืื ืืืจื ืฉืืฆืจืชื ืืืช ืืืขืืช. ืืืขืื ืืืชื ืฉืื ืืืจ ืืฆืจืชื ืขื ืฃ ืฉืืฆื ืืืงืืืื ืืืฉื ืืืชื ืงืืืื ืฉืืฉืืชื ืฉืืืงืชื ืืืืืจ ืืฉืื ื ืืืื ืืืืฉ ืืช ืืขื ืฃ. ืืขืืจืช
git rebase --onto ืืคืฉืจ ืืคืชืืจ ืืช ืืกืืคืืจ ืืืกืืช ืืงืืืช ืืืชืงื ืืช ืืขื ืฃ.
## ืืจืืคื ืืืขืืืชื
ืืฉืืื ืืืืืื ื ืืฆืืจ ืจืืคื ืืชืืงืื ืืืฉื ืขื ืืคืงืืืืช:
$ git init .
$ git commit --allow-empty -m c1
$ git commit --allow-empty -m c2
$ git commit --allow-empty -m c3
$ git switch -c dev
$ git commit --allow-empty -m d1
$ git commit --allow-empty -m d2
$ git commit --allow-empty -m d3
$ git commit --allow-empty -m d4
ืขืืฉืื ื ืืืืจ ื main ืื ืขืืื ืืช ืืืืขืช ืืงืืืื ืืืืจืื ื:
$ git switch main
$ git commit --amend -m 'fixed commit message' --allow-empty
ืืืืื:
$ git log --oneline --graph --all
* cebfcab (HEAD -> main) fixed commit message
| * 784bb2c (dev) d4
| * 4f51f1e d3
| * 595d953 d2
| * cbcb09c d1
| * 707a378 c3
|/
* e09e80f c2
* aa0e4ca c1
## ืื ืืงืจื ื merge
ืืืื ื ื ืื ืฉืื ืืืืกืชื ืืฉืืืืช ื amend ืืื ื ืจืืฆื ืืืื ืืืจื ืืช ืขื ืฃ ืืคืืชืื. ืื ื ืืคืขืื:
$ git merge dev
ืืืืคืชืขืชื ืืงืืืื ืืคื ื ืืชืืงืื c3 ื ืื ืก ืืืื ืืจืง ืืืืื ืืืชื:
* 72ab395 (HEAD -> main) Merge branch 'dev'
|\
| * 784bb2c (dev) d4
| * 4f51f1e d3
| * 595d953 d2
| * cbcb09c d1
| * 707a378 c3
* | cebfcab fixed commit message
|/
* e09e80f c2
* aa0e4ca c1
## ืื ืืงืจื ื rebase
ื ืืืืจ ืืช ืืืฆื ืืืื ืฉืืื ืืคื ื ื merge ืขื:
$ git reset cebfcab
ืื ื ืกื ืืืฉืชืืฉ ื rebase ืืืงืื ื merge. ืื ื ืืคืขืื:
$ git switch dev
$ git rebase main
ืืืจื ืืคืขืื ืื ื ืืกืชืื ืฉืื ืืืื ืืืืคืชืขืชื ืื ื ืฉืื ืจืืื ืืช c3, ืืืจืืช ืฉืขืฉืืชื ืื amend ืืืืืืขื ืืืชื ืฆืจืืื ืืืืืืง:
* 1cbdec3 (HEAD -> dev) d4
* 9008326 d3
* c4c2918 d2
* 17683c9 d1
* e69bcf4 c3
* cebfcab (main) fixed commit message
* e09e80f c2
* aa0e4ca c1
## ืชืืงืื ืขื rebase onto
ื ืืืืจ ืืช ืืืฆื ืืืื ืฉืืื ืืคื ื ื rebase ืขื:
$ git reset 784bb2c
ืืขืืฉืื ืืืืข ืืืื ืฉื ืฉืื ืื ืฉืืฉ ืืขืื ืื ืชืงื ืืืชื. ืืืงืื ืืืฉืชืืฉ ื rebase ืจืืื ืื ื ืืืงืฉ ืืืื ืฉืืขืฉื ืจืืืืืก ืจืง ืืงืืืืืื ืฉืงืจื ืืืจื c3 ืืขื ืฃ dev ืืืฉืื ืืืชื ืขื main. ืื ื ืจืื ืืื:
$ git switch dev
$ git rebase --onto main 707a378 dev
$ git log --oneline --graph --all
* c6a7432 (HEAD -> dev) d4
* d6071d0 d3
* 06107ec d2
* 2eb5f05 d1
* cebfcab (main) fixed commit message
* e09e80f c2
* aa0e4ca c1
ืืืื ืืืืืง ืจืฆืืชื ืฉืืืืกืืืจืื ืชืืจืื. ืืงืืืื ืืืขืืืชื ืชืืงื ืืืขื ืฃ ืฉืืฆื ืืื ื ืขืืืื ืืืืจืืืช ืืืืื ืืื ืืฆื ืืืงืืืื ืขื ืืืืืขื ืื ืืื ื. ืื ืื ืืืื ื ืฉืืื ืื ื hash-ืื ืืื ืืคืฉืจ ืืืืืื ืฉืคืฉืื ืฉืื ืืชื ืืช ืืืืขืช ืืงืืืื ืืื ืืืฉืคืืข ืขื ืฉืื ืืืจ ืืืจ.1 419
# ืืืค ืืืืืื: ืืื ืืืฆืืจ Pull Request ืืฉืืจืช ืืคืงืืื
ืืืจืืช ืฉืืจืื ืคืขืืื ืื ืื ื ืืืืืืื ืืื ืืฉื ืืื, ืืืืืื ืืื ื ืืื ืืื ืื ืื ืื ื Pull Requests ืฉื ืืืืืื (ืืื ืื ืฉื ืืื ืกืืฃ ืกืคืงื ืืืืกืื ืืื ืืืจืื) ืืื ื ืืืง ืืืื. ืืื ืจืง ืืืื ืฉืืฉืื ืื ืืืง ืืืื ืื ืืืืจ ืฉืื ืื ื ืืืืืื ืืขืืื ืืืืฉืง ืืืคืืคื. ืกืคืฆืืคืืช ืืืืืืื ืืฉ ืืืืืช ืืื ืคืืชืื ืืฉืืจืช ืืคืงืืื, ืฉืืืคืฉืจืื ืืื ืืช ืกืงืจืืคืืื ืืื ืคืขืืื ื ืคืืฆื ืฉื ืจืฆื ืืขืฉืืช.
ืืืืค ืฉื ืืืื ืื ื ืจืืฆื ืืืฆืืจ Pull Request ืืฆืืจื ืืืืืืืืช ืืื ืืืกืื ืืขืฆืื ืืงืืื ืฉื ืืืงืกื ืืืืชืจืช ืืืชืืื ื PR, ืื ืืฉ ืื ืืืจ ืกืงืจืืคื ืฉืืืืข ืืืืฆืจ ืืช ืืืงืกืืื ืืืื ืืชืื ืืงืื.
ืฉืื ืจืืฉืื ืื ื ืืชืงืื ืืช ืืืืืช ืืื ืฉืืจืช ืืคืงืืื ืฉื ืืืืืื ืืคื ืืืืจืืืช ืืขืืื ืืื:
https://cli.github.com/manual/installation
ืขื ืืง ืื ืืื ืืืืฆืขืืช
brew install gh, ืืขื ืืืื ืืช ืืืจืืืื ืงืืืฅ ืืชืงื ื ืืืงืืฉืืจ https://github.com/cli/cli/releases/tag/v2.11.3. ืืฉ ืื ืืชืงื ื ืืืื ืืงืก ืืื ืื ื ืืชื ืืื ืืืืื ืก ืืงืืฉืืจ ืืฉืืื ืืืฆืื ืืช ืืืืจืืืช.
ืืืจื ืฉืืฉ ืื ื ืืช ืืืื ืขื ืืืืฉื ืื ื ืฆืจืื ืืืืจ ืืืชื ืืืืืืื. ืืคืงืืื ืืืืืืจ ืืื:
$ gh auth login
ืืืจื ืืคืขืื ืืืคืชื ืืื ืืคืืคื ืืชืฆืืจืื ืืืฉืจ ืฉืืชื ืื ืืชื ืืฉืืชื ืืกืืืืื ืืืฉืช ืืืืืืื ืืฉืืจืช ืืคืงืืื.
ืืืืจื ืืืืืืจ ื ืืื ืืืฉืชืืฉ ืืคืงืืื ืืืื ืืื ืืืฆืืจ Pull Request ืืฉืืจืช ืืคืงืืื. ืืืืืื ืฉืื ืื ื ืฉืืื PR ืืืฉืชืืฉ ynonp-test ืืืคืจืืืงื cli-pull-request-demo:
gh pr create -R ynonp-test/cli-pull-request-demo --title "Pull request title" --body "Pull request body"1 419
# ืจืง ืขืื ืฉืขื
ืืื ืืงืจื ื ืฉื ืืื ืืงืก ืืื ืืืชืจ ืืฆืื ืื ืืื ืืก ืืืจืืืืืก ืืื ืืืืชืจ ืขื ืฉืขืชืืื ืฉืื ื ืืืืื, ืืืืงืืื ืืืฉื ืืืชืื ืขืื ืงืื? ืื ืฉืื ืฉืืืคื ืืช ืืงืจื ื ืืืฆืื ืืื ืืืืืง ืฉืืงืื ืืืขืช ืืืงืฆืืขื ืฉื ืืื ืืก, ืฉืืงืื ืืขืช ืฉืขืืื ืืืืคืืข ืื ืืื ืืืืชืจ ืขื ืฉืขืชืืื ืฉืื ื?
ืืืงืื ืฉืืื - ืืื ืืื ืืืื ืืืชืจ ืืื ืืื ืฉืืืคืชืืื ืืืืจืื ืืืชืจ ืืขืืืง ืืช ืืืื ืืืืืื? ืืื ืฉืืืคืชืืื ืืฉื ืื ืืืชืจ ืืื ืืจืืืขืื ืืืชืจ? ืืื ืฉืืฉืขืืช ืฉืืืฉืงืขืืช ืืงืืืื ืืืฉืงืขืืช 100% ืืงืืืื?
ืืืืงื ืืืื ืฉืืคืจืืืงื ืฉืืื ืืฉืื, ืื ืืืื ืืืืกืืฃ ืืืื ืจืง ืขืื ืฉืขื ืฉื ืขืืืื. ืคืจืืืงืืื ืืฉืืืื ืฆืจืืืื ืืชืื ืชืื ืขื ืฉืืืจืช ืืืื ืฉืืืืืช ืื ืืื ื ืืืืื, ืืื ืคื ืื, ืืื ืืืฉืคืื ืืืชืืืืืื ืืืื ืืืจ ืืืจ ืฉืืืคื ืืชืื ืืื ืฉืืชื.
1 419
ืืืฉืืืื ืืคืืืชืื ืืืืื ืืืจืืื ืืื ืฉืืงืืื'ืจ ื ืื ืืืื ืืขืืื ืขื ืืืืื ืืืฉืืืจ ืืช ืื ืืืฉืชื ืื ืืชืืจ ืฉืืืช ืืืืืื. ืืืืืื ืืื ืืขืจื ืืืืื ืฉืขืืืจ ื reduce ืืื ืืืืจืฆืืืช ืืคืื ืงืฆืืืช ืืขืืืื ืืงืืืืช ืืช ืืขืจื ืืืฉื ืืฉื. ืืคืืืชืื ืืืืืืฅ ืืื ืื ืงืืื ืืื ืืืชื ืื ืืขืื ืืืืืืจ ืืฉืชื ื ืืื ืืื ืืืืืืื ืฉืฆืจืื ืืฉืืืจ. ืืืืืื ืืืืง ืืฉื ื ืืคืืืชืื ื ืจืื ืืื:
pos = 0
depth = 0
aim = 0
with open('day2.txt') as f:
for line in f:
op, count = line.split()
match [op, count]:
case ["forward", n]:
pos += int(n)
depth += (aim * int(n))
case ["down", n]:
aim += int(n)
case ["up", n]:
aim -= int(n)
print(pos * depth)
ืื ืคืืชืจืื ืืืชืจ ืงืฆืจ ืฉืืืื ืื ืืช ืืืืืื ืืื ืืช ืคืื ืงืฆืืืช ืืืืคืื, ืืื ืืืืชื ืืงืื. ืฉื ื ืืืืจืื ืฉืืืคืืื ืืช ืงืื ืืคืืืชืื ืืงืืื ืืืชืจ ืื ืืืืจื ืืืกืคืจ (ืืคืื ืงืฆืื int ืืืชืจ ืงืฆืจื ื Integer/parseInt) ืื Pattern Matching ืฉืืื ืชืืื ืื ืืฆืืชื ืื ืื ืื ืืงืืื ืื ื Clojure.1 419
# ืืฉืืงืื ืขื ืงืืื'ืจ: ืคืืชืจืื AoC 2021 Day 2
ืื ื ืืืฉืื ืขืื ืืื ืืืืืืื ืืงืืื'ืจ ืฉืื ื ืืืืจื ืืงืื ื ืงืืืช ืืื ื ืืกืคืช ืขื ืืืืืืื ืืื ืชืื ืืช ืคืื ืงืฆืืื ืืื ืืคืจืืฆืืืจืื, ืืืื ืฉืคืืช ืืขืืืืืช ืืืชื ื ืืืืืจ ืืืืื ืืืฉืื ืืกืืื. ืืืื ืืคืืชืจืื ืืงืฆืจ ืืืชืจ ืืืืงื ืืื ืืคืืืชืื, ืืื ืื ืืงืืื'ืจ ืืื ืืช ืืงืกื ืฉืื.
## ืื ืื ืื ื ืืื ืื
ืืชืจืืื ืฉื ืืื 2 ืืื ืคืฉืื ืคืืขื ืื ืืืจืืืช: ืื ืื ื ืืฆืืืืช ืืืงืืืื ืืฃ ืขื ืืืกืืื ืืืชืืื ื. ืืืกืืื ืื ืื ืืชืืจ ืจืฆืฃ ืฉื ืฉืืจืืช ืืื ืฉืืจื ืืฉ ืคืงืืื ืืื forward, down ื up, ืืืกืคืจ ืฉืืืืจ ืืืื ืืืืืืช ืืืื. ืืฆืืืืช ื ืืกืขืช ืืื ืื ืืืืื ืืืฉ ืื ืืืงืื ืืืคืงื ืืขืืืง. ืงืื ืืืืืื ื ืจืื ืื:
forward 5
down 5
forward 8
up 3
down 8
forward 2
ืืืืง ืืจืืฉืื ืืคืงืืื forward X ืืืืจืช ืืืื X ืฆืขืืื ืงืืืื, ืืคืงืืื down ืืืื ืืืคืงืืื up ืืืขืื. ืืืฉืืื ืืื ืืืืืช ืืืคื ืชืืื ืืฆืืืืช ืืกืืฃ ืืืกืืื ืืขืืจืช ืฉื ื ืขืจืืื - ืขืืืง ืืืืงืื ืืืคืงื, ืืืืืคืืก ืืช ืืืคืืชื.
ืืืืง ืืฉื ื ืฉื ืืชืจืืื ืืขื ืืื ืื ืืกืชืืืื ืืืฉืืขืืช ืืคืงืืืืช ืืฉืชื ื. ืื ืื ื ืฆืจืืืื ืืืคื ืืขืจื ื ืืกืฃ ืฉื ืงืจื aim. ืืคืงืืืืช ืืืชื ืคืงืืืืช ืืื ืืืฉืืขืืช ืืคืขื ืืื:
1. ืคืงืืืช down ืืขืื ืืช ื aim
2. ืคืงืืืช up ืืืจืืื ืืช ื aim
3. ืคืงืืืช forward ืืื ืงืืืื ืืื ืืืกืืคื ืืช aim ืืคืื ืืคืจืืืจ ืฉืงืืืื ืืขืืืง.
## ืคืืชืจืื ืืงืืื'ืจ
ืงืืื'ืจ ืืื ืฉืคื ืคืื ืงืฆืืื ืืืืช ืืืชืืจ ืฉืืื ืืืืืื ืฉืื ืื ื ืืจืืฆืื ืืื ืืืคืื ืจืฉืืื ืฉื ืืืจืืืช ืืขืจื ืืืื ืืื ืืืืืช reduce. ืื ืฉืื ื reduce ืืื ืืคืขืื ืฉื ืคืื ืงืฆืื ืฉืืงืืืช ืืช ืืขืจื "ืฉืืกืคื ื" ืขื ืขืืฉืื ืืืช ืืขืจื ืืืืฉ, ืืืืืืจื ืขืจื ืฆืืืจ ืืืฉ ืฉืืฉืืฉ ืืงืื ืืืืืจืฆืื ืืืื.
ืืืื ืฉืืชืจืืื ืืืืืง ืืฉื ื ืืืงืื ืืืื ืืื ืืฉืืขืืช ืืคืงืืืืช ืฉืื ื, ืืคืฉืจ ืืืชืื ืคืื ืงืฆืื ืืืืคืื ืืืืืจืฆืื ืฉื ื reduce ืืื ืืื ืืฉื ื ืืืืงืื. ืืืืง ืืจืืฉืื ืืื ืชืืื:
(defn part1 [position line]
(let [[command value-str] (str/split line #"\W")
value (Integer/parseInt value-str)]
(case command
"forward" (update position :horizontal + value)
"up" (update position :depth + (* -1 value))
"down" (update position :depth + value))))
ืืืืืง ืืฉื ื ืืื ืชืืื:
(defn part2 [position line]
(let [[command value-str] (str/split line #"\W")
value (Integer/parseInt value-str)]
(case command
"forward" (-> position
(update :horizontal + value)
(update :depth + (* (:aim position) value)))
"up" (update position :aim + (* -1 value))
"down" (update position :aim + value))))
ืืืืืื ืืจืืฉืืช ืฉืงืืจืืช ืืช ืืงืื ืืืจืืฆื ืืช ื reduce ืืื:
(let [input (->> "input.txt"
(slurp)
(str/split-lines))
pos1 (reduce part1 {:horizontal 0 :depth 0} input)
pos2 (reduce part2 {:horizontal 0 :depth 0 :aim 0} input)]
(println (apply * ((juxt :horizontal :depth) pos1)))
(println (apply * ((juxt :horizontal :depth) pos2))))
ืืคืงืืื ืฉืืืืจืช ืขื ืขืฆืื ืืื ืืจืื ืืื ืืื update, ืืืืืื:
"forward" (update position :horizontal + value)
ืคืงืืืช update ืืงืืืช ืืืืื, ืืคืชื, ืคืื ืงืฆืืืช ืขืืืื ืืคืจืืืจืื ืจืืฉืื ืืื ืืคืื ืงืฆืืืช ืืขืืืื, ืืืืืืจื ืืืืื ืืืฉ ืืืจื ืืคืขืืช ืคืื ืงืฆืืืช ืืขืืืื ืขื ืืขืจื ืืืฉื ืืืชืืืช ืืขืจื ืฉืืืืืจื ืืืคืชื. ืืืืืื ืฉืืืืงืชื ืคืื ืงืฆืืืช ืืขืืืื ืืื ืคืืืก, ืืืคืชื ืืื :horizontal ืืืคืจืืืจ ืืงืืืข ืืคืืืก ืืื ืืขืจื ืฉืืืคืืข ืืฉืืจื. ืคืงืืืช update ืชืืกืืฃ ืืคืืืก ืืช ืืคืจืืืจ ืืฉื ื (ืืืขืฉื ืื ืืืื ืืคืจืืืจ ืืจืืฉืื) ืฉืืื ืืขืจื ืฉืืจืืข ื ืืฆื ืืืืืื ืืืคืชื :horizontal, ืืชืืชืื ืืช ืืชืืฆืื ืืืืืื ืืืฉ ืฉืืืชื ืืื ืื ืชืืืืจ. ืืืืืื ืืืืฉ ืืื ืืืื ืืงืื ืืืืืจืฆืื ืืืื ืฉื ื reduce ืืืื ืืกืืฃ ื ืงืื ืืืืื ืฉืืืืฆื ืืช ืืืืงืื ืืืืจืื ืฉื ืืฆืืืืช.
ืคืงืืื ืืขื ืืื ืช ื ืืกืคืช ืืื ืืื ืคืงืืืช ืืืืคืกื ืืกืืฃ:
(println (apply * ((juxt :horizontal :depth) pos1)))
ืืืื ืฉ pos1 ืืื ืืืืื, ืืคืงืืื juxt ืืืงืืช ืืื ื ืืช ืืขืจืืื ืฉื :horizontal ื depth ืืืืืืจื ืืขืจื ืขื ืฉื ืืื, ืืื * ืฆืจืืื ืืืคืื ืืช ืฉื ื ืืืืืจืื ืืืขืจื. ืืื ืืืื ืฉ * ืืฆืคื ืืงืื ืฉื ื ืคืจืืืจืื ืืคื ืืื ืืงืืืช ืืขืจื, ืื ืื ื ืืฉืชืืฉืื ื apply ืฉืืื ืืื ืืืืืืช ืฉื ืคืืืชืื - ืืชืคืงืืื ืืืคืื ืืขืจื ืฉื ืฉื ื ืืืืจืื ืืฉื ื ืคืจืืืจืื ื ืคืจืืื ืืคืื ืงืฆืื.
## ืคืืชืจืื ืืฉื ืืคืืืชืื1 419
ืืืืจ ืืจืืฉืื ืฉืงืืคืฅ ืืจืืฉ ืืงืจืืืช ืืคืืืชืื ืืื ืื ืืกืืื ืฉืื ืืืืืข ืืคืืชืจืื ืืื ืืืฉืื ืืืชืจ ืืื. ืฆืจืื ืืืืืจ ืื ืืขืจื ืืงืืื ืฉืงืจืืชื? ื ื ืืกืืจ ื ืืฆืืจ ืืฉืชื ื ืืฉืืืื. ืฆืจืื ืืกืคืืจ ืืืจืื? ื ื ืืื ืืขืื ื ืืฆืืจ ืขืื ืืฉืชื ื. ืื ืื ืืืฉื ืจืขื ืืื ืืื ืื ืืจืื ื Code Reuse ืืืืืช ืืืชืจ ืงืฉื, ืืืืืช ืืคืืืชืื ืืื ืืืชืจ ืงื ืืืชืื ืื ืืื ืืืืืงืื ืื ืคืจื.
## ืืืฉืืืช ืืืืฉื
ืืืฉืืืื ืืื ืคืืืชืื ืืงืืื'ืจ ืื ืืืื ืช, ืื ืืคืฉืจ ืืื ืืืชืื ืงืื ืคืืืชืื ืืจืื ืืืชืจ ืืื ืืื ืฉืืชืืชื. ืืขืืืื ืืฉืืืคืฉืชื ืื ืืจืฉืช ืคืืชืจืื ืืช ืคืืืชืื ืจืืืชื ืฉืื ื ืื ืืืืื ืฉืืงืืชื ืืช ืืืืฉื ืฉื ืืืืืื. ืื ื ืคืืชืจืื ื ืืกืฃ ืืืจืฉืช ืืคืืืชืื ืฉืืงื ืืืชื ืืืฉื:
import sys
prev_depth = int(input())
depth = int(input())
count = 0
while depth:
if depth > prev_depth:
count += 1
prev_depth = depth
v = sys.stdin.readline()
if v == '':
break
depth = int(v)
print(count)
ืืื ื ืขืื ืืื:
nums = [199, 200, 208, 210, 200, 207, 240, 269, 260, 263]
cnt = 0
for i in range(len(nums) - 1):
if nums[i] < nums[i+1]:
cnt += 1
print(f'Ans: {cnt}') # 7
ืืฆื ืฉื ื ืืคืืชืจืื ืืื ืืคืืืชืื ืืืงื ืืืฉื ืืืื ืืจืื ืืืชืจ ืืื ืฉืืชืืชื ืืงืืื'ืจ:
def task1():
data = load_data()
x, y = data[:-1], data[1:]
result = sum(1 for xs, ys in zip(x, y) if ys > xs)
print(result)
ืื ืฉืืื ืฉืื ืืืจ ืืฉืคื ืขืฆืื ืฉืืืจืื ืืืฉื ืืกืืืืช.
ืืฆื ืฉื ืงืืื'ืจ ืืงืื ืฉืื ืืื ืื ืืืคืืกื ืืืืืคืืฉ ืืจืฉืช ืืื ืื ืืขื ืคืืชืจืื ืืช ืขื partition. ืคืืชืจืื ืืื ืืืชืจ ืงืฆืจ ืืืชืจ ืขื ืื ืืขืกืง ืฉื ืืืืงื ืืืืืืช ืืืฉืชืืฉ ืืขืืืื ืฉ map ืืงืืื'ืจ ืืืื ืืงืื ืืื ืจืฉืืืืช:
(defn answer-01 [input]
(count (filter true? (map < input (rest input)))))
ืืื ืืชืืื ืืช ืืืื ืืืคืืช ื:
(ns aoc21-01
(:require [clojure.string :as str]))
(def input (map parse-long (str/split-lines (slurp "input.txt"))))
(defn answer-01 [input]
(count (filter true? (map < input (rest input)))))
(def three-sliding-window
(map + input (next input) (nnext input)))
(defn answer-02 []
(answer-01 three-sliding-window))
(prn (answer-01 input))
(prn (answer-02))1 419
# ืืฉืืงืื ืขื ืงืืื'ืจ: ืคืืชืจืื AoC 2021 Day 1
ืืขืงืืืช ืืืืฆื ืฉื ืืืจ ืืชืืืชื ืืงืจืื ืขื ืงืืืืื, ืืืืื ืจืฆืืชื ืืืชืื ืืื ืคืืกืืื ืขื ืืชืืื ืืืช ืืจืืฉืื ืืช ืฉืื ื ืืืชื ืืงืืืืื ืืืื ืืื ืฉืคื ื ืืืื. ืืืขืื ืฉืื ืืื ืงืืืง ืื ืขืืืชื ืืช ืงืืืืื ืืืื ืชืืื, ืืื ืืืื ืฉืืืจ ืืืืชื ืืชืื ื JVM ืืืฉืืชื ืืขืืื ืงืฆืช ืขื ืงืืื'ืจ. ืืืืืืื ืฉืืืจื ืืื ืืืื ืืชืจืื ืฉืคื ืืื ืืคืชืืจ ืืื ืชืจืืืืื ื Advent Of Code ืืชืืืชื ืขื ืคืืชืจืื ืืืื ืืจืืฉืื ื 2021 ืืงืืื'ืจ. ืืชืืฆืื ืืคืืกื ืืคื ืืื ืืื ืขื ืืื ืืก ืฉื ืืฉืืืื ืืคืืืชืื ืืื ืืืืื ืืช ืืืืืืื ืืืืฉืืช.
## ืื ืื ืื ื ืืื ืื
ืืช ืืชืจืืื ืืืื ืืคืฉืจ ืืืฆืื ืืงืืฉืืจ ืืื:
https://adventofcode.com/2021/day/1.
ืืืงืืฆืืจ ืืืขืืจืืช ืืื ืฉืืฉ ืื ื ืกืืืจื ืฉื ืืกืคืจืื, ืืืฉื:
199
200
208
210
200
207
240
269
260
263
ืืื ืื ื ืฆืจืืืื ืืืืื ืืื ืคืขืืื ืืืกืคืจืื ืขืืืื, ืืืืืจ ืืื ืืกืคืจืื ืืฉ ืืกืืืจื ืฉืื ืืืืืื ืืืชืจ ืืืืกืคืจ ืฉืืื ืืคื ืืื. ืืืงืจื ืฉืื ื ืืืกืคืจ ืืื 7.
ืืืืง ืืฉื ื ืฉื ืืชืจืืื ืืืฉืืื ืืขืฉืืช ืืช ืืืฉืืง ืืืชืจ ืืขื ืืื, ืื ืื ื ืฆืจืืืื ืืืืง ืืช ืืกืืืจื ืืฉืืฉืืช, ืืืฉื ืกืืื ืฉื ืื ืฉืืืฉื ืืกืคืจืื ืฆืืืืื ืืื ืืกืคืืจ ืืช ืืกืคืจ ืืขืืืืช ืืกืืืจืช ืืกืืืืื. ืืืืืื ืฉืื ื ืื ืืืืจ ืฉืืืกืคืจ ืืจืืฉืื ืืกืืืจืช ืืกืืืืื ืืื 199+200+208 ืฉืื 607, ืืืกืคืจ ืืฉื ื ืืกืืืจืช ืืกืืืืื ืืื 200+208+210 ืฉืื 618 ืืื ืืืื. ืืกืืืจื ืืืืช ืืฉ 5 ืืกืคืจืื ืฉืืืืืื ืืืชืจ ืืื ืฉืืื ืืคื ืืื.
## ืคืืชืจืื ืงืืื'ืจ
ืืืืื ื ืืจืืฉืื ื ืฉืืืชื ืื ืืืชืจืืื ืืื ืืื ืฉืืืื ื ืื ืืืืง ืืช ืืจืฉืืื ืืืืืืช. ืื ืืฆืืื ืืืคืื ืืช ืืจืฉืืื ืืจืฉืืื ืืืืช:
199, 200
200, 208
208, 210
210, 200
200, 207
207, 240
240, 269
269, 260
260, 263
ืื ืืคืฉืจ ืืืื ืืืจืืฅ filter ืคืฉืื ืขื ืจืฉืืืช ืืืืืืช ืืื ืืกื ื ืจืง ืืช ืืื ืฉืืื ืืฉื ื ืืืื ืืืจืืฉืื ืืืกืคืืจ ืืื ืืืืืช ื ืฉืืจื. ืืืื ืืืขืชื ืืคืื ืงืฆืื partition ืฉื ืงืืื'ืจ ืฉืืืืขืช ืืขืฉืืช ืืืืืง ืืช ืื:
user=> (partition 2 1 [199 200 208 210])
((199 200) (200 208) (208 210))
ืขืืฉืื ืืคืฉืจ ืืืฉืชืืฉ ืืืจืืง ืืื ืืื ืืกืคืืจ ืืื ืืืื ืืื ืื ืืืืืื ืืืชืจ ืืื ืฉืืื ืืคื ืืื, ืืืืืจ ืืืื ืืืืืืืช ืืืืืจ ืืฉื ื ืืืื ืืืชืจ ืืืจืืฉืื.
(defn count-inc [input]
(count (filter (partial apply <)
(partition 2 1 input))))
ืืืกืืื ืื ืื ืฉื ืฉืืจ ืื ืืงืจืื ืืช ืงืืืฅ ืืงืื, ืืฉืืืจ ืืืชื ืืฉืืจืืช, ืืืคืื ืื ืฉืืจื ืืืกืคืจ ืืืืฉืชืืฉ ืืคืื ืงืฆืืืช ืฉืืชืืชื. ืืืืง ืืจืืฉืื ืื ืืกื ืืื ืืืคืขืื ืืช count-inc ืขื ืืงืื, ืืืืืง ืืฉื ื ืงืืื ืื ื ืืืืง ืืช ืืจืฉืืื ืืฉืืฉืืช, ืืืจื ืื ืกืืื ืื ืฉืืฉื, ืืื ืขื ืจืฉืืืช ืืชืืฆืืืช ืืคืขืื ืืช count-inc. ืื ืืงืื ืฉื ืฉืืจ ืืชืืื ืืช:
(require '[clojure.string :as str])
(let [input (->> "input.txt"
(slurp)
(str/split-lines)
(map read-string)
)]
(println (count-inc input))
(println (count-inc
(map
(partial apply +)
(partition 3 1 input)))))
ืกื ืืื ืืงืื ืืฉื ื ืืืืงืื ืืงื 18 ืฉืืจืืช (ืืืื ืฉืืจืืช ืจืืื), ืฉืื ืืืฉ ืืืื.
## ืคืืชืจืื ืืฉื ืฉืืื ืื ืืคืืืชืื
ืืืจื ืฉืืชืืชื ืืช ืืคืืชืจืื ืืงืืื'ืจ ื ืืืจืชื ืฉืืฉืืชืจืืื ืคืืจืกื ืืืงืืจ ืคืชืจืชื ืืืชื ืืคืืืชืื. ืืื ืืื ื ืกืืืืช ืื ืืฉืงืขืชื ืืืชืจ ืืื ืืคืืชืจืื ืืชืืืื ืืืืื ืจืืื ืื ืืืืชื ืืคืจืกื ืืช ืืงืื ืืื ืืฉืื ืืงืื, ืืื ืจืง ืืฉืืื ืืฉืืืื ืื ื ืืืฉื ืฉืื ืื ืืืื ืจืขืืื ื ืืื ืืืืืืง ืืืชื ืืื:
def part1():
count = 0
last_value = 0
with open('day1.txt') as f:
for line in f:
if last_value > 0 and int(line) > last_value:
count += 1
last_value = int(line)
print(count)
def part2():
count = 0
last_value = []
with open('day1.txt') as f:
for line in f:
if len(last_value) < 3:
last_value.append(int(line))
continue
next_window = last_value[1:] + [int(line)]
if sum(next_window) > sum(last_value):
count += 1
print(f"prev={last_value}; next={next_window}")
last_value = next_window
print(count)1 419
# ืืืจืื: ืืืื ื ืืชืื ืฆ'ื ื Python ืขื Web Sockets
ืื ืื ืื Web Sockets ืืืืข ืืขืืื ืืืื ืืจื ื ืืืืคืฉืจ ืืืคืืคื ืืืฉืจืช ืืื ืืชืงืฉืจ ืืฆืืจื ืื-ืืืืื ืืช. ืื ืื ืื ืื ืืจืืฉ ืืืืื ืฉืืื ืืืืื ืืช ืืืกืืก ืืืจืื ืืขืจืืืช ืืื ืืจื ื ืฉืื ืื ื ืืืืจืื ืืืื, ืืืืืื ืื ืืืขืจืืืช ืืื ืืืจืื ืืชืขืืื ืื ืขื ืืืกื ืื ืืืฉืื ืขืฉื ืืฉืื ืืืงืื ืืืจ (ืืืืืื - ืืืฉืื ืขืืฉื Like ืืคืืืกืืืง ืืคืชืืื ืื ื ืจืืื ืืช ืื ืขื ืืืกื ืฉืื, ืืื ืืืขืื ืืืืฉ ืืช ืืขืืื).
ืฉืืืืฉ ืคืืคืืืจื ื Web Sockets ืืื ืืื ืืืช ืฆ'ื ืืื ืืฉืชืืฉืื, ืืืคืืื ืืชืืชื ืืขืืจ ืืืจืื ืืืืืืฉ ืชืงืฉืืจืช ืื ืืืืื ืืช ืืื ืฉืจืช ืคืืืชืื ืืืงืื ืจืืืงื. ืืืื ืืจืฆื ืืืจืืืช ืืื ืืืืจ ืืช ืืืชื ืฉืจืช ืคืืืชืื ืืืงืื ืคืืืชืื, ืืื ืืื ืืช ืฆ'ื ืืฉืืจืช ืืคืงืืื ืืคืืืชืื ืืืื.
## ืคืืชืื ืงืื ืืฉืจืช
ืืกืคืจืื python-socketio ืืกืคืงืช ืืืืืฉ ืืืื ื ืื ืืขืืืื ืขื Web Sockets ืืคืืืชืื. ื Web Sockets ืืงืื ืืืื ืืฉืืื ืืืืขื ืืฉืจืช ืืื ืืืคืขื ืงืื ืืฆื ืืฉืจืช, ืื ืฉืฉืจืช ืฉืืื ืืืืขื ืืืงืื ืืื ืืืคืขื ืงืื ืืฆื ืืืงืื. ืืื ืืฆื ืืฉืจืช ืื ื ืืกื ืืื ืฆืจืื ืืืชืื ืคืื ืงืฆืื ืฉืชืชืืื ืืื ืืืืขื ืฉืืฉืจืช ืืืื ืืงืื, ืืืขืืืฃ ืืช ืื ืืงืฆืช ืงืื ืื ืืื ืฉืืคืขืื ืืช ืืฉืจืช.
ืืืงืจื ืฉื ืฆ'ืื ืืกืคืืงื ืื ืคืื ืงืฆืื ืืืช - ืื ื ืืงืจื ืื message - ืฉืชืืคืขื ืืฉื ืื ืกืช ืืืืขื, ืชืืคืืก ืืืชื ืืืกื ืืฆืจืื debug ืืื ืชืฉืื ืืืชื ืืื ืืืงืืืืช ืืืืืืจืื.
ืืงืื ืืืื ืฉื ืืฉืจืช ืืืื:
from aiohttp import web
import socketio
sio = socketio.AsyncServer(cors_allowed_origins='*', aync_mode='aiohttp')
app = web.Application()
sio.attach(app)
@sio.on('message')
async def message(sid, message):
print("Socket ID: " , sid)
print(message)
await sio.emit('message', message, broadcast=True);
if __name__ == '__main__':
web.run_app(app, port=4000)
ืืืฉืืื ืืืคืขืื ืืืชื ื ืฆืืจื ืืืชืงืื ืืช ืืกืคืจืืืช socketio ื aiohttp:
$ pip install python-socketio aiohttp
## ืคืืชืื ืฆื ืืงืื
ืืงืื ืืฆื ืืืงืื ืจืฅ ืืืืืื, ืงืืจื ืฉืืจื ืืืืฉืชืืฉ ืืฉืืื ืืืชื ืืฉืจืช. ืืืจื ืืื ืืืื ืืงืื ืืืืขืืช ืืืฉืจืช (ืฉืืงืืืืช ืืืจืื ืฉืืื). ืืืื ืืขืืืื ืขื ืฉืืจืช ืืคืงืืื ืืืชืจ ื ืื ืื ืืขืืื ืืืืฉืง Threads ืืืฉืจ ืืืืฉืง asyncio, ืืืื ืื ื ืืชืงืื ืืช ืืืืืื ืืืืกืกืช ื Threads ืขื ืืคืงืืื:
$ pip install "python-socketio[client]"
ืืืืืื ืื ืคืื ืงืฆืื ืฉืืืคืืช ืืืืจืืข ืื ืฆืจืืื ืืืืืช async, ืืืื ืืืืืืืืช "ืชืชืคืจืฅ" ืืชืืื ืืช ืืฉืืืจืืข ืืงืจื. ืืืืจืืข ืืืืื ืฉืืืื ืืงืจืืช ืืื ืงืืืช ืืืืขื ืืืื ืืงืื ืืืื ืืืงืื ื ืจืื ืื:
import asyncio
import socketio
sio = socketio.Client()
@sio.event
def message(data):
print('I received a message!')
print(data)
sio.connect('http://localhost:4000')
print('my sid is', sio.sid)
while True:
line = input(":> ")
if len(line) > 0:
sio.emit('message', {'text': line})
## ืืคืขืื ืืฉืืื
ืื ื ืฉืืจืชื ืืช ืืฉืจืช ืืงืืืฅ ืืฉื server.py ืืืช ืืืงืื ืืงืืืฅ ืืฉื client.py, ืืืื ืืคืขืื ืืืืื ืืื ืฉืจืช ืืืขืื ืฉื ื ืืืื ืืช ืฉื ื ืืงืืืืช ืฉืื ืื:
# first window
$ python server.py
# second window
$ python client.py
# third window
$ python client.py
ืขืืฉืื ืืคืฉืจ ืืืชืื ืฉืืจืช ืืงืกื ืืืื ืืืืื ืืช ืฉื ืืืงืืืืช ืืืจืืืช ืืช ืืืชื ืฉืืจื ืืืคืืขื ืืืืื ืฉื ืืืงืื ืืฉื ื, ืื ืื ืืืืื ืื ืืืจ ืฉืืชืืืจ ืืืืชื ืจืฉืช (ืืืชืงื ืื ืืช ืืืชืืืืช) ืืคืฉืจ ืื ืืืืจ ืืื ืืื ืืืฉืืื ืฉืื ืื.1 419
# ืืืค ืคืืงืกืืืงืก: ืืืืคืืื width ืขื ืืืืืื
ืืืืื ื ืฉื ืื ืืฃ HTML ืฉืืืืืง ืืชืืืช ืฆื ืืชืืื ืืจืืื. ื ื, ืืชื ืืืืจืื ืืืื, ืืฉืื ืืื:
<div class="main">
<div class="sidebar" >
<ul>
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
</ul>
</div>
<div class="content">
<p>
Flexbox is really cool if you know how to use it
</p>
</div>
</div>
ืขื ืืืืจืืช ื CSS ืืืืืช ืืคืฉืจ ืืงืืืข ืฉืืจืฉืืื ืืชืืืช ืืฆื ืชืืงื 300 ืคืืงืกืืื ืืืชืืื ืืืจืืื ืืงืื ืืช ืื ืืฉืืจ:
.main {
display: flex;
}
.sidebar {
width: 300px;
}
.content {
flex: 1;
}
ืืื ืื ืชื ืกื ืืช ืื ืืืืช.
ืืืืคืืื width ืฉื ืชืืืช ืืฆื ืืื ืจืง ืืืง ืืืกืืคืืจ. ื ืืื, ื HTML ืืืืืื ืืื ืืืืช ืืงืืข ืืช ืืจืืื, ืืื ืื ืจืง ืืืื ืฉืืืคืืคื ืื ืืฆื ืกืืื ืืืื ืืืืืฅ ืืืชื ืงืฆืช. ืื ื ืขืืื ืืช ื HTML ืื ืืกืืฃ ืชืืื ื ืจืืื:
<div class="main">
<div class="sidebar" >
<ul>
<li>hello world</li>
<li>hello world</li>
<li>hello world</li>
</ul>
</div>
<div class="content">
<p>
Flexbox is really cool if you know how to use it
</p>
<div>
<img src="https://placekitten.com/400/300" />
</div>
</div>
</div>
ืืขืืฉืื ื ืฉื ื ืืช ืืืื ืืืืื ื ืืื ืืจืืืช ืฉืืฉืื ืืกืืื ืืืคืืคื ืืชืืื ืืืืืืฅ - ืืื ืื ืจืืฆื ืืฆืืืจ ืคืก ืืืืื ืืืคืงื ืืฉืืื ืืืชืื, ืืืื ืืื ืืืืชืจ ืขื ืืืง ืืืจืืื ืฉื ืชืืืช ืืฆื. ืื ื ืงืืืคื ืืืฉืืงืื:
<iframe height="300" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/ynonp/embed/ExQLEyK?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/ynonp/pen/ExQLEyK">
Untitled</a> by Ynon Perek (<a href="https://codepen.io/ynonp">@ynonp</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
ืืกืืื ืฉืืื ืืจืฉื ืืขืฆืื ืืื ืืืฉืชืืื ืืื ืฉืื ืืืืจื ื ืขืจื ืืืืคืืื flex-shrink ืฉื ืชืืืช ืืฆื, ืืขืจื ืืจืืจืช ืืืืื ืฉื ืืืคืืื ืื ืืื 1 - ืฉืืืืจ ืฉืืืชืจ ืืืืืฅ ืืช ืืืืื ื ืื ืื ืืืกื ืืขืืืช ืืืงืืืืช ืืืจืื.
ืืจื ืงืฉืืื ืืืชืจ ืืงืืืข ืจืืื ืืืื ืืชืื ืืืื ืคืืงืก ืืื ืืฆืืื ืืช flex-shrink ืืืืืช 0 (ืืขื ืืืจื ืื ืืช flex-grow):
.sidebar {
width: 300px;
flex-shrink: 0;
flex-grow: 0;
}
ืืืืจื ืืืืช ืืืจืืื ืืช ืืืคืืคื ืืืฉืืืจ ืืช ืืืืื ื ืืจืืื 300, ืื ืื ืืื ืืื ืืขืืืฃ ืืืจืช.
ืืื ืื ืื ื ืืืจ ืคื ืฉืืื ืืืืืืจ ืฉ width ืืื ืื ืืืจื ืืื ืืืื ืืงืืืข ืืืื ืฉื ืืื ืืชืื ืืืื ืคืืงืก, ืืืื ืฉืืืื ืคืืงืก ืืืื ืื ืืืืืช ืื ืื. ืืืืคืืื flex-basis ืืงืืข ืืช ืืจืืื ืื ืืืืื ืฉื ืืืืื ื ืืคื ืืืืื ืืืืื ืืืื ืืงืื ืืื ืขืืืฃ:
.sidebar {
flex-basis: 300px;
flex-shrink: 0;
flex-grow: 0;
}
ืืืื ืืฉ ืืืจ ืงืืฆืืจ ืืจื ืคืืงืกื ืฉืืื ืคืืฉืชื ืืื ืืื ื ืืืืืืืช:
.sidebar {
flex: 0 0 300px;
}1 419
ืื ืืืื ืืืงืจ ืืื ืื ื ืืืืืจ ืื ืคืกืคืกืชื ืืขืื ืขืฉืจ ืืงืืช ื ืชืืื ืืืืื ืจ ืขื OAuth. ืืืืื ืื ืืืืื ืก ืืงืืฉืืจ:
https://us06web.zoom.us/j/87293615835?pwd=SkNjaXNRYmVibXcwSjBEdmorRFZIdz09
ืืชืืื ืืช -
ืืกืืจ ืื ืื OAuth ืืืืื ืืขืืืช ืื ืื ืืคืชืืจ
ืคืืชืื ืฉืจืช API ืฉืืืื ืขื ืืื OAuth
ืคืืชืื ืงืืืืื ื ืจืืืงื ืฉืืืคืฉืจ ืืืงืืืืช ืืืชืืืจ ืืืืฆืข ืคืขืืืืช ื API
1 419
# ืคืืฆ'ืจ ืงืจืืค ืืืื ื
ืคืืฆ'ืจ ืงืจืืค ืื ืืชืืคืขื ืฉืงืืจืืช ืืฉืื ื ืืืชื ืืขืจืืช ืืืืืจ "ืื ืืืจ ืืฉ ืื X ืฉืืื ืืืชืื ืื Y". ืืคืืฆ'ืจ ืงืจืืค ืืกืื ืืช ืืืขืช ืืืืืจื ืืขืกืงืืช ืืืืืชืืช ืฉื ืืืขืจืืช, ืืฉืืื ืืืชื ื ืืื ืืช ืืืจืื ืฉืืืงืืืืช ืื ืจืฆื ืจืง ืื ืื ื ืจืืื ืืืืฉื ืื. ืื ืื ื ืืืืขืื ืืืืืช ืคืืฆ'ืจืื ืฉื ืื ืกื ืืืจื ืืืืช ืืืืฆืขืืช ืื ืืืืืืงืืช - ืื ืืฉ ืคืืฆ'ืจ ืฉืืฃ ืืื ืื ืืฉืชืืฉ ืื, ืื ืจืื ืฉืืื ืืื ืคื ืืื ืืื ืืืื ื.
ืื ืืืืืื ื ืืฉื ืืืฉ ืืืื ืืืืืช ืคืืฆ'ืจ ืงืจืืค, ืืื ืืคืขื ืืจืื ืืืชืจ ืงืฉื ืืืืืช ืืืชื. ืื ืืืืืชื ืืืืื ืจืืืงื ืืืื ืืืืืช ืฉืืืืจืื ืืจืืฉืื ืฉืืื ืก ืืืื ืืกืืืจ ืืื ืืืฉืชืืฉ ื webpack ืืื ืืื ืืช ืคืจืืืงื ืจืืืงื - ืืขืืฉืื ืื ื ืืืฆื ืืช ืขืฆืื ืืืื webpack ืจืง ืืฉืืื ืืืืช ืืืืื ืจืืืงื. ืื ืคืืฆ'ืจ ืงืจืืค, ืื ืืช ืจืื ืืขืืืื ืฉืื ืืืชืื ืช ืจืืืงื ืื ื ืืขืืืจ ืืื ืืืขืช ืืืืืคืืง (ืืืืื ืืคืืื ืืขืืื ืขื ืคืจืืืงื ืฉืื ืื ืืืขืืื). ืืืฆื ืืื ืืืืจ ืืืฉืชืื ืืขืฉืืช ืืื ืืืฆืื ืืืจืื ืืืจ ืฉืืืื ืขื ืืืืืคืืง, ืื ืืืืื ืจืง ืืช ืืืื ืืืื ืืืืคืืง ืฉืื ื ืฆืจืื ืืื ืืืงืื ืคืจืืืงื ืืื ืฉืืืื ืืืชืืงื ืืืืืื ืืช ืืืืื ืขืืื ืื ื ืขืืื.
ืืื ืืืขืื ืืืืืชืืช ืขื ืืื ื ืืื ืืืืืง ืืืืคื ืืคืืฆ'ืจ ืงืจืืค. ืจืื ืืคืขืืื ืืืืืื ื ืืฉื ืืืฉ ืื ื ืื ืื ืืชืืืฅ ืืืืืข ื"ืืฉืื ืฉืขืืื" ืฉืื ื ืืืื ืืืื ืื ืขื ืืืข ืืืื ื, ืืคืืกื ืืืชื ืืชืืจ ืคืืฆ'ืจ ืงืจืืค. ืืืื ืื ืื ื ื ืคืืืฉ ืืชืื ืชื ืฆื ืฉืจืช ืฉืื ืืืืขืื SQL, ืื ืืฉ ORM ืฉืืืชื ืืฉืืืื ืืช ืืฉืืืืชืืช.
ืืืืจืืช ืืืื ืขื SQL, ืื ื ืืฉืื ืืืื ืืืจืื ืฉืืฉืืืื ืืืฆืืื ืฉืื ื ืืืชืื ืชืื ืืื ื ืคืืฆ'ืจ ืงืจืืค. ืืื ืืืืืง ืืืืจ ืฉืืืคื ืืืชื ื ืืืชืื ืชืื ืืืืื ืืืชืจ, ืืืื ืืืืืง ืืืืจ ืฉืืืคืฉืจ ืื ื ืืืืื ื ืืฉืืื ืืืฉืื ืืืจ ืืืชืจ. ืืืขื ืชืืื ืฉืืื ืืืืื ืงืฆืช ืืืชืจ ืืืืื ืืืื ืื ืืจืฉ ืืืืกืชืื ืืคืืฆ'ืจ ืงืจืืค, ืืืงืื ืืืคืกืื ืืืืื ืืช ืฉืืืจื ืื ืืืื ืืืื ืงืฉื ืืืฉืืื ืืืชื.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
