ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 420
Obunachilar
+124 soatlar
+17 kunlar
-430 kunlar
Postlar arxiv
1 420
ืืขืืช ืืืืกืืจืงืฆืื
ืืฉืื ื ืืืื Generators ืืคืืืชืื ืื ื ืืืื ืืืชืืื ืขื ืืคืื ืงืฆืื ืืืืช ืฉืืืฉืืช ืืกืคืจ ืืกืืืจืช ืคืืืื ืืฆ'ื:
def fib(n: int) -> int:
a, b = 1, 1
for i in range(n):
a, b = b, a + b
return a
ืืื ืืืงืฉ ืืืชืืืืืื ืืืฉื ืืช ืืกืืื ืฉื 100 ืืืกืคืจืื ืืจืืฉืื ืื ืืกืืืจืช ืคืืืื ืืฆ'ื. ืืคืืชืจืื ื"ืคืฉืื" ืืื ืืืขืฉื ืืืกืืื ืืืืชืจ:
print(sum(fib(n) for n in range(100)))
ืืืื ืฉืืื ืืืื ืืืื ืืืฉืืืื ืืืืชืจืื. ืืืฆื ืืื ืืจืื ืืืชืจ ืืขืื ืืืชืื ืคืื ืงืฆืื ืืืฉื (ืื ืืืชืื Generator, ืืื ืื ืื ืืฉื ืฉื ืืฉืืขืืจ ืื ืืืื ืื ื ืงืืงื).
ืืืขืื ืฉืื ื ืืืชืื ืชืื ืืื ืฉืืื ืืื ื ืกืืืืช ืจืื ืืืื ืื ืื ื ืืขืืืคืื ืืืฉืชืืฉ ืืืืกืืจืงืฆืื ืืงืืืืช ืืื ืืคืชืืจ ืืขืืืช, ืื ืื ืืื ืชืงืืื, ืืื ืืขืฆืืจ ืืืื ืืช ืืืกืืจืงืฆืื ืืืฉื ืืื ืื ืื ืืืชืื ืืช ืื ืืงืื ืืืืฉ. ืืขืืื ืืืืืชื ืืกืืืื ืืจืืืช ืืฉืื ืฉืืืื ืืืืฉืื ืืืืื ืฉื ืกืืื ืคืืืื ืืฆ'ื ืืื ืืืื ืืืื, ืืืื ืืื ืืื ืฉืขืืืืื ืขื ืืืฆืจืื ืืืชืจ ืืฉืืื (ืื ืืฉ ืืื ืืืจ ืืืื ืืืกืืจืงืฆืืืช).
ืื ื ืจืืื ืืช ืืืืขืื ืืฉืืืืฉ ืืืืกืืจืงืฆืื ืื ืืืื ืืืขืจืืช ืงืืืืช. ืืฉืืฉ ืืฉืื ืฉืขืืื ืืื ืื ืืืฉืชืืฉ ืื, ืืื ืื ืืืื ืืืกืื ืื ืืืื ืืื ืคืืชืื ืืืืกืื ืืืื ืืืืื. ื ืืื ืื ืื ืืื ืืขืื ืืื ืืืื ื ืฉืืืจ ืืช ืืฉืืคืืจ ืืืืฆืืขืื ืืฉืื ืืืืคืืืืืืฆืื.
ืืื ืืืื ืืจืืืช ืื ืืช ืืฆื ืืฉื ื - ืชืืงืื ืืืืกืืจืงืฆืื ืืื ืื ืจืง ืกืืคืืจ ืฉื ืืืฆืืขืื ืืื ืื ืฉื ื ืืื ืืช ืืงืื, ืืฉื ืืื ืืืจ ืืืื ืืื ืืช ืืช ืืคืืฆ'ืจ ืืื. ืืื ืฉืืืชืจ ืคืืฆ'ืจืื ืื ืืืื ืขื ืืืกืืจืงืฆืื ืงืืืืช ืืืขืืืชืืช, ืื ืืืื ืงืฉื ืืืชืจ ืืืืฉื ืืฉื ืืช ืืืชื. ืืฉืืืืฉ ืืืืกืืจืงืฆืื ืื ื ืืื ื ืื ืื ื ืคืฉืื ืืืคืจืื ืืขืฆืื ื ืืืจ ืืืชืจ ืขืืืง.
ืืกืืืืืฆืื ืืืืช ืืื ืืื ืืชืงื ืืช ืืืืกืืจืงืฆืื ืืืจืืขื ืืืขืฉืืช ืจืืคืงืืืจ ืืื ืืงืื ืฉืืฉืชืืฉ ืื. ืื ืืื ืืื ืขืืืฃ ืืืชืืื ืื ืื ืื ืืืฉ. ืื ืื ืื ืืืงื ืงืฆืช ืืืชืจ ืืื ืืคืืชืื ืืคืืฆ'ืจ ืื ืืืื, ืืืื ืืื ืืืืืจ ืืช ืขืฆืื ืืืืจื ืื ืื ืื ื ื ืฆืืืจ ืขืื ืืื ื ืงืืืืช ืืืกืข ืืืคืื ืืืชืื ืชืื ืืืืื ืืืชืจ.1 420
ืืชืืจืื ืื ืชืืจืืฆืื
ืฉื ื ืืืฉื, ืคืจืืืงืืื ืืืฉืื, ืืืืืืช ืืืฉืื, ืืื ืืฉืืืืืืืช ืืืื ืืชืืืืื ืืืืชืงื ืืงืฉืืื ืืฉ ืื ื ืฉืชื ืืกืืจืืืืืช ืชืืืื-
1. ืืคืฉืจ ืืืชืืืืก ืืงืืฉื ืืืืฉ ืืชืืจ ืืชืืจ ืืื ืกืืช ืืืชืงืื ืืืจืืช ืืงืืฉื. ืื ืื ืืืจืื ืื ืืงืจื ืืื ืฉืชืื ื ืชื ืืืชืืื, ืื ื ืขืืืื ืืืื ืืขืฉืืช ืืช ืืื ืืื ืฉืื.
2. ืืคืฉืจ ืืืชืืืืก ืืงืืฉื ืืืืฉ ืืชืืจ ืชืืจืืฅ, ืืืืกืืืจ ืืขืฆืื ืืืขืืื ืืื ืื ืืคืฉืจ ืืืืฉืื ืืช ืืืืื.
ืืืืื ืคืฉืืื ืืื ืืชืื ืชืช ืฉืืืจ ืืื ืฉื ืื ืื ืืกืคืืง ืืจืืฆื ืืืขืืืื ืฉืื, ืื ืืจืืืฉื ืฉืืื ืืชืคืชืืช ืืชืื'ืก ืืฉืืกืชืืืช ืืืืจื ืื ืงืจื ืฉืื ืืืจ ืืขื ืืื ืืงืฆืืขืืช ืืืืชื ืฉื ืื. ืืืืื ืื ืืฉื ืื ืืืื ืืชืืืื ืืฉื ื ืืืช ืืจืืื ืืื ืฉืขืืจื ืืืจืฃ ืขืื, ืืชืืืฉื ืฉืื ื ืืงืืฉื ืืืืืื ืืืงืื ืืื ืืืจืืช ืฉืื ื ืฉื ืืืจ ืืื ืฉื ืื.
ืืืชื ืืชืื ืชืช ืขืฉืืื ืืืืืื ืื ืฆื ืืช ืืฉื ื ืืืืฉื ืืืืคืฉ ืขืืืื ืืืฉื, ืืื ืื ืืืจ ืืืื ืืื ืชืืื ืฉืืืื ืืืืืื ืจืฆื ืงืืืื, ืืขืืื ืืืจ ืื ืืืคื ืฉืืื ืืคื ื 3 ืฉื ืื ืืืืจ ืืื ืื ืืืชืจ ืืื ืืืืื ืืืืช. ืืงืืฉื ืืื ืืืื ืืืืืช ืชืืจืืฅ - ืืืขืชื ืฉืื ื ืื ืืกืคืืง ืืืื, ืืื ืฆืืคืืจ ืืืช ืืื, ืืฉืืื ืื ืืฉืืืจ ืืฉืื ืฉืขืืื, ืื ืืฉืืชื ืืขืฆืื ืืกื ืืื ืืฉ ืืืื ืื ืฉืื ืฉืืืืืื ืืืืืช ืืืงืื ืฉืื ืื ืืื ืื ืืืืช ืืงืืจ, ืืืื ืืคืฉืจ ืืืขืืืจ ืขืื ืฉื ื, ืฉื ืชืืื ืืืคืืื ืืืชืจ.
ืื ืฉืืคืฉืจ ืืืชืืืืก ืืงืืฉื ืืชืืจ ืืชืืจ - ืืจืืจ ืฉืื ื ืื ืืขืืืื ืช ืืื ืืืืืืช, ืฉืืืฉ ืฉื ืื ืื ื ืชืงืืขื ืืืืชื ืขืืืื ืืื ืืืคืง. ืืฉืืื ืืืคืฉ ืืื ืฉืฆืจืื ืืฆืืจื ืืจืืช ืืืฆื ืืฉืจื ืืืืฉืงืืข ืืช ืืืื ืฉืืชืคื ื ืืืืืืืื, ืืื ืืจืืจ ืฉืืฆืืจื ืืืกืชืืจ ืขื ืคืืืช ืืกืฃ ืื ืฉืืฉืคืืข ืขื ืืืื ืืื ืฉืื. ืื ื ืฉืืื ืืขืฉืืช ืืช ืืืืืชืืจืื ืืื ืฉืืฉื ื ืืืืช ืชืืื ืืืืืืช ืขืืืจื.
ืืื ืื ืืฆืืื? ืชืืื ืืืืืจื ืฉืื ื ื"ืืฆืืื". ืื ืืคืฉืจ ืืืขืช ืืจืืฉ ืื ืืืื ืืชืืฆืืืช ืืืืฆืื ืืืช ืฉื ืืืขืฉืื, ืืื ืืคืฉืจ ืืืืืช ืืืืืื ืฉืืฉืื ืื ื ืืืืจืื ืืืชืืืื ืขื ืืชืืจืื ืืืืืช ืืืจื ืืืืืืืช ืืืจืืช ืืงืฉืืื ืืฉื ื ืืืืช ืชืืื ืืืืืืช ืืืฉืืื.
1 420
ืืื ืืืืืื ืืฉืขืืืช ืื ืืืฉื?
ืืื ืืื ืืขืืื ืขื ืืื ืืืืืื ืฆืขืืจื, ืืืฉื ืืืืืืื ืฉืืืื ืืืืจืื ืขืืื ืืจืง ืขืืฉืื ืืฆืื ืืฉืืง. ืื ื ืื ืฆืจืื ืืฉืื ืข ืืชืื ืืขืืื ืขื ืืื ืืืืืืืช ืืืฉืืช ืื ืืืื ืจืฆืื ืืฉื ืืื, ืืืื ืืื ืืืืฃ ืืืืืืช ืืจืืฉืื ืฉืืืชื ืืืืื ืฉืคืช ืชืื ืืช ืฉืืฃ ืืื ืขืื ืื ืฉืืข ืขืืื. ืืื, ืืฉ ืื ืื ืืขื ืืชืจืื ืืช ืืืื ืืืืืืืช ืืืชืืงืืช ืืืคืจืืืงืืื ืืฉืืืื ืืืื ืืืื ืืืืืง ืคืขื ื ืืกืคืช. ืืื ืืื ืืืจืื ืฉืืคืฉืจ ืืื ืืช ืขืืืื ืืฉืขืืืืื ืขื ืืื ืืืืืืืช ืืฉืขืืืืช:
1. ืืืืืจ ืืื ืืื ืืขืจืืช ืฆื ืฉืืืฉื ืฉืืคืฉืจ ืืืืืื.
2. ืชืืขืื ืืื ืืจืฉืช ืืคืืชืจืื ืืช ืงืืืืื ืืื ืืขืื.
3. ืืืืืช ืฉืืื ืขื Chat GPT ืืื ืืืคืื ืืืชื ืืืืืืช.
4. ืงื ืืืืืก ืื ืฉืื (ืื ืขื ืื ืืืืืค, ืขืืืื ืงื ืืืชืจ ืืืืืก ืืชืื ืชื Java ืืืฉืจ ืืชืื ืชื Rust).
5. ืื ืืฉื ื ืืืื ืืขืื ืืฉ ืืื, ืืืฉืื ืืืจ ืืืจ ืฉืืจ ืืช ืืจืืฉ ืืืชื ืชืฉืืื ืืืื ืืจื ื. ืืจืื ืคืขืืื ืืคืืชืจืื ืืคืืื ืืืื ื ืืืจ ืืฉืคื.
ืืฆื ืฉื ื ืืื ืืืืืื ืืฉืขืืืช ืืฉืื ืื ืืื - ืืฉืขืืืช, ืืืฉ ืื ืืขื ืืฆืืื ืืกืืืืช ืืืืืจ ืืืื ืืืืืืืช ืืืฉืืช:
1. ืืคืฉืจ ืืคืชื ืืื ืืช ืื ืืืืื ืืืงืื ืจืื ืืืืช ืืืงื ืืืืื ืืจื ื ืื ืืคืจืืืงืืื ืงืื ืื.
2. ืคืืกืืื ืืืคืืื ืืืจืืืืื ืืจืื ืืืชืจ ืืืจ (ืื ืื ืืืื ืืืื ืืฉืชืฃ ืคืืกื ืขื Java ืืืื)
3. ืื ืืืืจืชื ื ืืื ืชืืฆืื ืืช ืขืฆืืื ืขืื ืฉื ืชืืื ืขื ืืืชืจ ื ืืกืืื ืชืขืกืืงืชื ืืื ืืื ืฉืื ืกืืืืื ืืืื ืืืืืื ืฉืืืจ ืชืืื ืก ืืืืื ืกืืจืื.
4. ืืื ืืื ืืจืืฉืช ืืืืืื ืืฉืืืืืื ืคืืชืจืื ืืืฉ ืืืขื ืืื ืืืขืื, ืืืืื ืืืืืืืช ืืืฉืืช ืืฉ ืืจืื ืืืชืจ ืกืืืื ืืืคืชืืข ืืืชื ื ืืืืื.
ืืื ืืชืื? ืืฉ ืืื ืกืืคืืจื ืืฆืืื ืื ืืืฉืืื ืืขืงืืืช ืืืืจื ืืื ืืืืืื? ืืืืื ืื ืืฉืชืฃ ืืชืืืืืช ืืืื ืืื ืืืืืืืช ืืืจืชื ืืืื ืื ื ืืืจ.
1 420
ืคืืชืจืื ืคืื ืงืฆืืื ืืื ื Advent Of Code ืืื 8 ืืืง 1 ืืคืืืชืื
ืืืืง ืืจืืฉืื ืฉื ืืื 8 ื Advent Of Code ืืื ืืืฉ ืคืฉืื ืืืื ืืื ืืืคืื ืืืื ืคืื ืงืฆืืืช reduce ืืคืืืชืื.
ืืืชืืจ
ืื ืื ื ืจืืืืื ืขื ืืื ืืืืืจ ืืฆืจืืืื ืืืฆืื ืืช ืืืฆืืื. ืงืืืื ื ืืคื ืืจืฉืืืช ืฆืขืืื ืฉืฆืจืื ืืงืืช ืืื ืืฆืืช, ืืื ืื ืืืจื ืื ื ืืื ืคืขืืื ืฆืจืื ืืขืฉืืช ืืช ืืืกืืื. ืงืื ืืืืืื ื ืจืื ืืื:
LLR
AAA = (BBB, BBB)
BBB = (AAA, ZZZ)
ZZZ = (ZZZ, ZZZ)
ืืฉืืจื ืืจืืฉืื ื ืืืืฆืืช ืืกืืื ืืืืจืื ืืฉ ืฉืืจื ืจืืงื ืืื ืืืคื. ืืืคื ืืืืื ืฉืืจืืช ืืฉืื ืฉืืจื ืืืจืืืช ืืืืื ืฉื ืืงืื ืืื ืฉืชื ืืคืฉืจืืืืช ืืื ืืืืฉืื ืืื ื - ืืืืช L ืืืืจืช ืฉืฆืจืื ืืืืฉืื ืฉืืืื ืืืคืฉืจืืช ืืจืืฉืื ื, ืืืืืช R ืืืืจืช ืฉืฆืจืื ืืืืฉืื ืืืื ื ืืืคืฉืจืืช ืืฉื ืื. ืืืกืืื ืืชืืื ืชืืื ื AAA ืืฆืจืื ืืืืืข ื ZZZ. ืืืืืื ืฉืื ื ื ืชืืื ื AAA, ื ืื ืฉืืืื ืื ืืืข ื BBB, ืืืจื ืื ืฉืื ืฉืืืื ืืื ืื ื ืืืืจืื ื AAA (ืื ืืฉืืจื ืฉื BBB ืืืคืฉืจืืช ืืจืืฉืื ื ืืื AAA), ืืืจื ืื ืืืื ื ืฉืื ื BBB. ืืืื ืฉืืืืจืืืช ื ืืืจื ืืื ืขืืืื ืื ืืืขื ื ืืกืืฃ ื ืืฆืข ืืืชื ืคืขื ื ืืกืคืช ื ืื ืฉืืืื, ืฉืืืื ืืืืื ื ืืื ื ืืืข ื ZZZ. ืกื ืืื ืืงื ืื ื 6 ืฆืขืืื ืืืืืข ืืกืืฃ.
ืคืืขื ืื ืืงืื ืืคืืืชืื
ืฆืขื ืจืืฉืื ืืฉืืื ืืชืจืื ืืช ืืื ืื ืื ืืคืืืชืื ืืื ืคืืขื ืื ืืงืื ืืื ืืืืงื ืคืฉืื ืขื ืืืืื ืจืืืืืจื:
def parse(input: typing.TextIO) -> tuple[str, dict[str, tuple[str, str]]]:
instructions = input.readline().strip()
map = {}
input.readline()
for line in input:
if m := re.search(r"(\w+) = \((\w+), (\w+)\)", line):
key, left, right = m.groups()
map[key] = (left, right)
return instructions, map
ืคืืชืจืื ืคืื ืงืฆืืื ืืื ืขื reduce
ืืืืง ืืฉื ื ืืืืืชืจ ืืขื ืืื ืืื ืืืฉืื ืืืกืืื. ืืช ืฉืืจืช ืืืืจืืืช ืืคืฉืจ ืืฉืื ืืชืื itertools.cycle ืืื ืืงืื ืืช ืืคืงื ืืืืจื ืืืื ืกืืคืืช ื itertools.takewhile ืืขืืืจ ืื ื ืืจืืฅ ืขื ืืืืืจืืืจ ืขื ืฉืืืืขืื ืืกืืฃ ืืืกืืื, ืืื ืขืืงืจ ืืงืื ืืื ืคืขืืืช ืืืืื.
ืคืขืืืช ืืชื ืืขื ืืืืื ืืื ืืืืืง ืคืขืืืช "ืงืืคืื" ืขื ืจืฉืืืช ืืฆืขืืื, ืื ืคืขื ืืืงืืื ืืช ืืืืงืื (ืื ื Accumulator) ืืืช ืืืืืื ืื ืืืื ืฉืืืื ืื ืืืื ื, ืืืชืงืืืื ืืคื ืืืคื ืืืืืื ืฉืงืืืื ื. ืืื ืืคืื ืงืฆืื ืืื:
def step(map):
def handler(location, direction):
if direction == "L":
return map[location][0]
elif direction == "R":
return map[location][1]
else:
raise Exception(f"Unknown direction {direction}")
return handler
ืฉืืื ืื ืืืื ื ืฉื ืคืื ืงืฆืื ืฉืืืืืจื ืคืื ืงืฆืื, ืืฉืืื ืืืชืืื ืฉืชืชืืื ืืคืขืืืช ืืงืืคืื.
ืืคืืืชืื ืืฉ ืืืื ื ืคืื ืงืฆืื functools.reduce ืฉืืืฆืขืช reduce ืืื ืืื ืื ืืชืืืื ืคื ืืืื ืฉืืื ืื ืืืืขืช ืืขืืื ืขื ืืืืจืืืจืื. ืืืงืืื ื ืฉืชืืฉ ื itertools.accumulate ืืื ืืงืื ืืช ืืชืืฆืื:
instructions, map = parse(open('input.txt'))
print(len(list(itertools.takewhile(lambda n: n != 'ZZZ',
itertools.accumulate(itertools.cycle(instructions),
step(map),
initial='AAA')))))1 420
ืฉืืชืืฃ ืืืืข ืืื ืืงืืจืืืจืื ืืงืื ืืืฆืื ื ืืคืืืชืื
ืืคืืกื ืืืื ืืื ืืืชืจ ืฉืืื ืืืฉืจ ืืืค. ืืฉ ืื ืืืืื ืืื ืืคืชืืจ ืืช ืืืขืื ืืื ืืฉืื ืืฉืืืข ืืขืืช ื ืืกืคืืช ืื ืื ื ืื ืืจืืฆื ืืื ื, ืืืกืืคืืจ ืืชืืื ืืืงืืจืืืจืื ืืฉืืชืืฃ ืืืืข ืืื ืืื ืืืื ืงืื ืฉื ืืชืืื ืืช ืืจืืฉื.
ืชืืืืจ ืืืขืื
ื ืืชืื ืืงืืจืืืจ ืืฉื counting ืฉืืืกืืฃ ืืคืื ืงืฆืื ืืื ื ืฉืืจืื ืืื ืคืขืืื ืงืจืื ืื:
def counting(f):
def inner(x: int) -> int:
inner.call_count += 1
result = f(x)
return result
inner.call_count = 0
return inner
ืืคืฉืจ ืืืฉืชืืฉ ืืืงืืจืืืจ ืืืืคื ืืื:
@counting
def twice(x: int) -> int:
return x * 2
twice(10)
twice(20)
twice(30)
print(f"twice was called {twice.call_count} times")
ืขืืฉืื ื ื ืกื ืืืฉืชืืฉ ืืืงืืจืืืจ ืืฆืืจื ืงืฆืช ืืืชืจ ืืฆืืจืชืืช ืื ืจืื ืืื ืืื ื ืฉืืจ. ืืชืืื ืืช ืืื:
@lru_cache()
@counting
def twice(x):
print(f"twice::{x}")
return x * 2
twice(10)
twice(10)
twice(10)
twice(10)
print(twice.call_count)
ืืืชืืฆืื ืืื ืืืคืกืช ืืขืจื 0.
ืืื ืื ืฉืืืจ
ืืืขืื ืืืืื ืืื ืืืงืืจืืืจ ืื ืืกืฃ lru_cache. ืืงืืจืืืจ ืื ืืฉื ื ืืช ืืคืื ืงืฆืื twice ืื ืฉืื ื ืืขืฆื ืืคืขืื ืืช ืืคืื ืงืฆืื ืฉ lru_cache ืืืืืจ, ืืขืื ืฉืืขืจื ืฉื call_count ื ืฉืืจ ืืคืื ืงืฆืื ืฉืืืงืืจืืืจ counting ืืฆืจ. ืืืขืฉื ืืฉืืจื ืืืืจืื ื ืฉื ืืงืื ืืืขืื ืืื ืฉืืื ืื ืืื ืืืืืข ืืืืชื ืขืจื ืฉืกืืคืจ ืืื ืคืขืืื ืงืจืื ืืคืื ืงืฆืื.
ืื ืืคืฉืจ ืืขืฉืืช ืืืงืื
ืืืขืื ืขื ืืงืืจืืืจืื ืืื ืฉืืื ืืื ืืืืช ืืื ืืืืืืจ ืขืจื: ืืงืืจืืืจ ืขืฆืื ืื ืืืืืจ ืขืจื, ืืืคืื ืงืฆืื ืฉืืื ืืืืืจ ืขืืืื ืืืืืจืก ืืืืฉื ืขื ืืื ืืงืืจืืืจ ืืืจ ืืืื ืื ืื ืื ืืคืฉืจ ืืืฉืชืืฉ ืืื ืืฉืืืจ ืขืจืืื. ืืืืฆื ืืืืื ืืืกืืคืืจ ืืื ืืื ืืฉืืืจ ืืช ืืขืจื ืืงืื ืืืืฆืื ื ืืืืขืืืจ ืืืชื ืคื ืืื ืืชืื ืืืงืืจืืืจ, ืืื ืืชืืงืื ืืื ืขืืื:
def counting_v2(counter):
def decorator(f):
def inner(x: int) -> int:
print(inner)
counter.inc()
# Before calling the decorated function ...
result = f(x)
# After calling the decorated function ...
# Modify the result value
return result
return inner
return decorator
twice_counter = Counter()
@lru_cache()
@counting_v2(twice_counter)
def twice(x):
print(f"twice::{x}")
return x * 2
twice(10)
twice(10)
twice(10)
twice(10)
print(twice_counter.value)
ืื ืืืคืืก ืืคืขื ืืช ืืขืจื ืื ืืื 1 (ืืืื ืฉืืืง ืืืงืจืืืืช ื ืืกืื ืขื ืืื lru_cache).
ืืืฉืืช ืื ื ืื ืืจืืฆื ืืืคืืชืจืื ืืื ืืืื ืืืืืืช ืฉืืื ืชืืื ืื ืืฆืืชื ืื ืื ืื ืืื ืืืชืจ. ืื ืืฉ ืืื ืจืขืืื ืืช ืืฉืื ืืฉืืืข ืืชืืืืืช.1 420
ืืื ืื ืืืฉื ืืื ืืชืืชื ืืช ืื
ืืงืจืืืช ืงืื, ืืืืฉืื "ืืื ืื ืืืฉื ืืื ืืชืืชื ืืช ืื ืืื" ืืืืื ืืืืืช ืืืืืช. ืืื ืืืืื ืืจืืื ืฉืืืงืื ืืืขืจืืช ืขืืืืื ืืืื ืฆืืจืืฃ ืืงืจืื ืืืงืื, ืฉืืงืื ืฉืื ืืื ืื ืืืืช ืฉืื ืืืืื ืืื ืื ืืช ืืืืฉืืจืื ืืืืืืืืช ืฉืฆืจืื ืืฉืืื ืืขืืืื ืืืืช. ืื ืืืชืจ ืืจืืข, ืืืืฆืจ ืืขืื ืฉืื ืืข ืขืฆืื ืฉืืืื ืคืฉืื ืืืืืงืื ืื ืืืื ืงืื ืฉ AI ืืืืฆืจ ืืื ืืืืื ืืืชื ืืืื ืืื ืกืืื ืืืชืืืฅ.
ืืืงืื ืืืคืื ืืืืจ ืืื, ืืืื ื ืฉืชืืฉ ื "ืืื ืื ืืืฉื ืืื ืืชืืชื ืืช ืื" ืืชืืจ ืืืช ืฉืฉืืื ืืขืืืจ ืืจืื ืืื ืืืืื ืืืชืจ ืขื ืืื ืืขืจืืืช ืขืืืืืช. ืืื ืื ืืืฉื ืืื ืืชืืชื ืืช ืื, ืืืื ืื ืกื-
1. ืืืืืง ืืช ืืคืื ืงืฆืื ืืืฉืืชื ืืืชื ืืืืฉ ืืืจื ืืืืื ืืช ืขืืืจื.
2. ืืืงืฉ ืืืืจ ืื ื AI ืืืกืืืจ ืื ืืช ืืื ืื ืื, ืืื ืืืฆืืข ืขืื ืืื ืืจืืื ืืืชืื ืืช ืืืชื ืืืจ.
3. ืืืชืื ืืกืคืืง ืืืืงืืช ืืื ืืฉืืืจ ืืช ืืงืื, ืืืืืื ืืื ืืื ื ืฉืืจ ืืืชื ืืื ืขืืื.
ื .ื. ืื ื ืื ืจืขืืื ืืืืฆืจ AI ืงืื - ืชืืกืฃ ื IDE ืฉืืืื ืืืกืื ืงืืขื ืงืื ืฉื ืืชืื ืืื ืืื ื ืืกืคืืง ืืืื. ืื ื ืืืื ืืืืชื ืฉืื ืื ืกืืช ืืืชื ืขื ืืื ืคืจืืืงืืื ืฉืื.
1 420
1. ืืื ืืจืื ืืื ืฉืจืคืชื ืขื ืืืืืืฉ ืฉื ืคืื ืงืฆืืืช ืืืืคืื
Day5Map::getDestinations, ืืขืืงืจ ืืืื ืฉื ืืกืืชื ืืืฆืื ืืืืื ืืืื ืืช ืืกืงืืื ืฉืชืขืืืจ ืื ืืืืืืฉ ืืื. ืืืจื ืฉืืชืขืืืคืชื ืืืืืคืืฉ ืื ืืชื ืืื ืืช ืืคืื ืงืฆืื ืืจืงืืจืกืืืืช ืืืฉื ืืื ืจืฅ ืืืจ.
2. ืื ื ืขืืืื ืื ืืืื ืฉืื ื ืืฉืชืืฉ ื ืืื ื Case Classes ืฉื ืกืงืืื. ืืฆื ืืื ืื ืืืืืงืื data ืืฆืืจื ืืืื ื ืืื ืืื ืืฆื ืฉื ื ืืืจ ืืืื ืื ืืจืืืฉ ืืื ืคืืชืื ืืื ืื ืขืฆืืื. ืืืื ืืืคืชื ืฉืฆืจืื ืืืืืจ ืืื ืืื ืฉืืืจืื ืื Immutable ืืื ืคืขื ืฉืจืืฆืื ืืฉื ืืช ืืฉืื "ืฉื ืืืืืืงื" ืืชืื ืคืื ืงืฆืื ืืืืืจืื ืืืืืงื ืืืฉ ืืืงืื.
3. ืื ืื ืื Pattern Matching ืฉื ืกืงืืื ืขืืื ืืื ืืืื ืืฆืืจื ืืงืื ื ืช. ืงืื ืืื ื ืจืื ืืืฉ ืืืืื ื ืืืชืืื ืืงืจืืื:
sourceIntervals match
case Nil => (sourceIntervals, destinationIntervals)
case head :: tail =>
this.ranges.find { r => ! r.getDestination(head).isEmpty } match
case None => loop(tail, destinationIntervals :+ head)
case Some(r) => loop(tail ++ r.getLeftover(head), destinationIntervals :+ r.getDestination(head))
ืืืืจืื ืกืงืืื ืืืฉ ืืื ืจืขืืื ืืช ืืื ืืฉืคืจ ืืช ืืงืื? ืื ืชืชืืืืฉื ืืกืคืจ ืื ืืชืืืืืช.1 420
start = Math.max(source.start, this.sourceStart) + offset,
end = Math.min(source.end, sourceStart + size) + offset,
step = 1)
def getLeftover(source: Interval): List[Interval] =
source.without(NumericRange.Exclusive[Long](
start = this.sourceStart,
end = this.sourceStart + this.size,
step = 1
))
}
ืืืืืงื ืฉืืืจืช ืืช ืฉืืืฉืช ืืืกืคืจืื ืืืืืืช ืฉืชื ืคืื ืงืฆืืืช ืืืืคืื ืืืืืื, ืืืช ืืืืืจื ืืช ืืืื ืืืขื ืื ืืืื ืืืงืืจ ืืชืืื ืืืื ืืืืคืื, ืืืฉื ืื ืชืืืืจ ืืช ืืืืง ืืืืื ืืืงืืจ ืฉืื ืืชืืื ืืืื ืืืืคืื, ืืืงืจื ืฉืืื ืฆืจืื ืืฉืืืจ ืืช ืืืืื ืืืื ืืืงืื.
ืืืืืงื ืืฉื ืื ืืืืฆืืช ืืคื ืฉืืื, ืืืืืจ ืืืกืฃ ืฉื ืืืื ืืืคืื. ืื ื ืฉืืจืชื ืื ืืช ืืฉื ืฉืื ืืืจืืช ืฉืืื ืื ืืฉืื ืืคืืชืจืื:
case class Day5Map(name: String, ranges: List[Day5Range]) {
def getDestinations(sources: List[Interval]): List[Interval] =
@tailrec
def loop(sourceIntervals: List[Interval], destinationIntervals: List[Interval]): (List[Interval], List[Interval]) =
sourceIntervals match
case Nil => (sourceIntervals, destinationIntervals)
case head :: tail =>
this.ranges.find { r => ! r.getDestination(head).isEmpty } match
case None => loop(tail, destinationIntervals :+ head)
case Some(r) => loop(tail ++ r.getLeftover(head), destinationIntervals :+ r.getDestination(head))
loop(sources, List())._2
def withAddedRange(range: Day5Range): Day5Map = {
Day5Map(this.name, this.ranges :+ range)
}
}
ืืคืื ืงืฆืื ืืืขื ืืื ืช ืืื ืืื getDestinations, ืฉืืืงืืช ืจืฉืืื ืฉื ืืืืืื ืืืืืืจื ืจืฉืืื ืืืฉื ืฉื ืืืืืื ืฉืื ืืขืฆื ืืชืืฆืื ืฉื ืืคืขืืช ืืืื ืืืืคืื ืฉื ืืืชื ืืคื. ืืฉืืื ืื ืืืงืืื ืื ืืืื ืืจืฉืืืช ืืืงืืจืืช, ืจืฆืื ืขื ืืืื ืืืืคืื ืืืืคืฉืื ืืื ืฉืืชืืื ืื. ืื ืืฆืื ื ื ืฉืืืจ ืืช ืืืืื ืืืื ืืืงืื, ื ืืคื ืืช ืืืืง ืฉืืชืืื ืืืื ืืืืคืื ืืืช ืืืืงืื ืฉืื ืืชืืืื ืืฉืืืจืื ืืจืฉืืืช ืืืงืืจืืช ืืืืืจืฆืื ืืืื.
ืืช ืคืืขื ืื ืืงืื ืขืฉืืชื ืืฉืืืื ืืืื ืกืืืื ืืืืืง ืืจืืฉืื. ืืืืืงื ืฉืฉืืืจืช ืืช ืืงืื ื ืจืืืช ืื:
case class Day5Part2Input(seeds: List[Interval], maps: List[Day5Map])
case class Day5Input(seeds: List[Long], maps: List[Day5Map]) {
def toPart2Input: Day5Part2Input =
Day5Part2Input(
seeds = seeds.grouped(2).toList.map {
case List(a, b) => a.until(a + b)
},
maps = maps
)
}
ืืืงืื ืฉืืื ื ืืืชื ืืื:
def parseInput(source: Source): Day5Input =
val newMapPattern: Regex = """([-\w]+) map:""".r
val seedsPattern: Regex = """seeds: ([\d\s]+)""".r
val mapLine: Regex = """(\d+) (\d+) (\d+)""".r
source
.getLines()
.foldLeft(Day5Input(List(), List()))((input, line) => {
line match
case seedsPattern(seeds) => Day5Input(seeds.split(' ').map(_.toLong).toList, List())
case newMapPattern(mapName) => Day5Input(
input.seeds,
input.maps :+ Day5Map(mapName, List())
)
case mapLine(destinationStart, sourceStart, size) =>
val range = Day5Range(sourceStart.toLong, destinationStart.toLong, size.toLong)
Day5Input(
input.seeds,
input.maps.updated(input.maps.size - 1, input.maps.last.withAddedRange(range))
)
case _ => input
})
ืืืืืื ืืืจืืืืช ืืงืื ืืื ืืื ืืืืืช reduce ืฉืขืืืจืช ืฉืืจื ืฉืืจื ืืืขืืื ืช ืืช ืืืืืงื ืืงืื ืฉืื ืื ื ืืื ืื ืืคื ืืชืืื ืฉื ืืฉืืจื. ืืืช ืชืื ืืช ืฉืื ื ืืฉืชืืฉ ืื ืืจืื ืืขืืืื ืขื ืงืื ืืงืกืืืืื ืืกื ืืื ืืงืื ืื ืืกืคืจ ืืฆืืจื ืืจืืจื ืื ืขืืฉืื ืขื ืื ืกืื ืฉืืจื.
ืืคืื ืงืฆืื ืืืืจืื ื ืืชืืื ืืช ืจืฆื ืขื ืืงืื, ืืืฆืขืช ืืช ืื ืืืืคืืืื ืืืืคืฉืช ืืช ืืชืืฆืื ืืงืื ื ืืืืชืจ ืืืื ื ืจืืืช ืื:
@main
def day5_part2(): Unit = {
val input = parseInput(Source.fromResource("day5.txt")).toPart2Input
val destinations = input.maps.foldLeft(input.seeds)((sources, map) => map.getDestinations(sources))
println(destinations.minBy(i => i.start).start)
}
ืืื ืืงืืื ืขื ืกืงืืื ืืืืฉืืืช ืืืืืืช ืขื ืืคืืชืจืื:1 420
ืคืืชืจืื Advent Of Code ืืื 5 ืืืง 2 ืืกืงืืื
ืืช ืืื 5 ืฉื Advent Of Code ืืฉื ื ืืงื ืื ืืจืื ืืื ืืขืื, ืืืจืืช ืฉืืกืืคื ืฉื ืืืจ ืืคืืชืจืื ืื ืืื ืืืชืจ ืืื ืืกืืื. ืืื ืชืืื ืืกืืืจื ืืืืช ื ืชืืื ืขื ืชืืืืจ ืืชืจืืื ืืื ืคืืชืจืื ืืฉืคืช ืกืงืืื, ืขื ืืื ืืืืื ืขื ืกืงืืื ืขืฆืื.
ืื ืฆืจืื ืืืฆืื
ืืงืื ืืืื ืืื ืืจืื ืืืกืืจืื ืืืืืื, ืืืืช ืืืชื ืจืง ืืืชืืื. ืื ืื ื ืขื ืงืื ืืืืื ืฉื ืจืื ืืื:
seeds: 79 14 55 13
seed-to-soil map:
50 98 2
52 50 48
soil-to-fertilizer map:
0 15 37
37 52 2
39 0 15
fertilizer-to-water map:
49 53 8
0 11 42
42 0 7
57 7 4
water-to-light map:
88 18 7
18 25 70
light-to-temperature map:
45 77 23
81 45 19
68 64 13
temperature-to-humidity map:
0 69 1
1 0 69
humidity-to-location map:
60 56 37
56 93 4
ืืืฉืืขืืช ืฉืื ืงืฆืช ืืฉืชื ื ืืื ืืืืงืื, ืืื ืื ืื ื ื ืชืืงื ืืื ืืืืง ืืฉื ื. ืื ืฉืืื ืื ืฉืื ืื ื ืืชืืืืื ืขื ืฉืืจื ืฉื ืขืจืืื ืขื ืืชืืืืืช seeds, ืืืืจืื ืืืกืฃ ืฉื ืืืืงืื ืฉื "ืืคืืช". ืืขืจืืื ืื ืืขืฆื ืืืืืื ืฉื ืขืจืืื, ืืื ืื ื ืฆืจืืืื ืืืืืช ืืื ืืืืืืื ืืืื ืืืืืื ืืืฉืชื ืืช ืืืืฆืขืืช ืืืคืืช ืืืืฉื ืืืงืกื. ืืืื ืืฆืืื ืขื ืืื ืืืกืคืจ ืื ืืื ืืชืืื ืืื ืืืื ืืืืื, ืื ืฉืืจืช ื seeds ืืืืืื ืืืืจืช ืขื ืฉื ื ืืืืืื, ืืจืืฉืื ืืชืืื ื 79 ืืืืื 14 ืืกืคืจืื ืืืืืจ ืขื ืืืกืคืจ 92 ืืขื ืืืื, ืืืฉื ื ืืชืืื ืืืกืคืจ 55 ืืืืืื 13 ืืกืคืจืื.
ืืช ืืืคืืช ืืฉ ืืงืจืื ืืชืืจ ืืืกืฃ ืฉื ืืืื ืืืคืื, ืื ืืื ืืืจืื ื-3 ืืกืคืจืื, ืืืกืคืจ ืืืืฆืขื ืืืืจ ืืืืื ืืกืคืจ ืืืืื ืืชืืื, ืืฉืืืฉื ืืืืจ ืื ืืืจื ืืืืื ืืืืกืคืจ ืืจืืฉืื ืืฆืืื ืืช ืืืชืืื ืฉื ืืืื ืืืขื, ืื ืืืงืกื ืืืืืื ืืืืคืื:
50 98 2
ืืืืจ ืฉืืืกืคืจ 98 ืืืืคื ืืืกืคืจ 50, ืืืืกืคืจ 99 ืืืืคื ืืืกืคืจ 51 - ืื ืืืืืื ืืืจืืช, ืื ืืืืื ืฉืืชืืื ื 98 ืืืืจืื 2 ืืกืคืจืื ืืืืคื ืืืืื ืืืืจื ืฉื ื ืืกืคืจืื ืฉืืชืืื ื 50.
ืขืืฉืื ืืืฉืืื - ืืฉ ืืงืืช ืืช ืืืืืืื ืืฉืืจืช ื seeds, ืืืคืืช ืืืชื ืืจื ืืืคืืช ืขื ืฉืืืืขืื ืืืคื ืืืืจืื ื ืืืืืคืืก ืื ืืืกืคืจ ืืงืื ืืืืชืจ ืฉืืคืฉืจ ืืืืืข ืืืื. ืื ืืกืฃ ืืกืคืจ ืฉืืื ืื ืืืคืื ืืืคื ืืกืืืืช ื ืฉืืจ ืืื ืฉืืื ืืืืื ืืืชืืคืืช ืืืคื ืืืื.
ืืื ืืืฉืช ืืื
ืื ืฉืืืืื ืืชืจืืื ืืื ืืื ืฉืืืื ืื ืืืืคื "ืืื ืฉืืื" ืืื ืืคื ืืืช ืืฉื ืื, ืืืืืื ืื ื ืืงื ืืช ืืื ืืืืคืื:
52 50 48
ืืืช ืืืืื ื 60 ืขื 70 ืื ืืืืื ืงืืื ืื ืื ืืืืื ื ืืฆื ืืชืื ืืื ืืืืคืื, ืืื 60 ืืืืคื ื 62, 61 ืืืืคื ื 63 ื 69 ืืืืคื ื 71, ืกื ืืื ืืืืื ื 60 ืขื 70 ืืืจื ืืืฉืื ืืื ืืืืคืื ืืืคืื ืืืืื 62 ืขื 72.
ืืื ืื ืืืืื ืฉืืชืืืชื ืืืชื ืืื ื 40 ืขื 60 ืื ืืืฆื ืืืชืจ ืืกืืื, ืื ืืืกืคืจืื ื 50 ืขื 60 ืืืืคื ืืคื ืืื ืืืืคืื ืืืืคืื ื 52 ืขื 62, ืืื ืืืกืคืจืื ื 40 ืขื 50 ืืืฉืืจื ืืื ืฉืื ืื ืืื ืืืืคืื ืื ืืชืืื ืืื, ืืื ืืืืื ืืงืืจ ืืื ืงืืืืชื ืืืคืื ืืฉื ื ืืืืืื ืืืคื ืืืื.
ืืื ืื ืืคืืชืจืื ืืืื ืคืื ืงืฆืื ืจืงืืจืกืืืืช ืฉืชืืงื ืจืฉืืื ืฉื ืืืืืื ืืจืฉืืื ืฉื ืืืื ืืืคืื, ืืชืขืืืจ ืืช ืื ืืืืืืื ืืจื ืืืื ืืืืคืื ืขื ืืงืืืช ืจืฉืืื ืืืฉื ืฉื ืืืืืื, ืืืชื ื ืฉืื ืืืืื ืืืืคืื ืืืืืง ืืื.
ืคืืชืจืื ืืกืงืืื
ืื ื ืืชืืื ืืชืืกืคืช ื Range ืืืืกืืฃ ืคืื ืงืฆืื ืฉืฉืืืจืช ืืืชื ืืคื Range ืืืจ ืืืืืืจื ืืช ืืืืงืื ืื Range ืฉืื ื ืืฆืืื ื Range ืืฉื ื. ืื ืืขืืืจ ืื ื ืืืชืืืื ืขื ืืืืืื ืฉื ืืฆืืื ืจืง ืืืงืืช ืืชืื ืืื ืืืคืื:
import scala.annotation.tailrec
import scala.collection.immutable.NumericRange
import scala.io.Source
import scala.util.chaining.*
import scala.util.matching.Regex
type Interval = NumericRange.Exclusive[Long]
extension (self: Interval) {
def without(other: Interval): List[Interval] =
if (self.isEmpty || other.isEmpty || self.end <= other.start || self.start >= other.end) {
List(self)
} else {
val left = if (self.start < other.start) List(NumericRange.Exclusive[Long](self.start, other.start, step = 1)) else Nil
val right = if (self.end > other.end) List(NumericRange.Exclusive[Long](other.end, self.end, step = 1)) else Nil
left ++ right
}
}
ืืืื ืืคืฉืจ ืืืืฉืื ืืืืืงื ืฉืืืืฆืืช ืืื ืืืคืื. ืืืื ืฉืืื ืืคื ืืฉ ืืจืื ืืืื ืืืคืื ืืืงื ืื ืืื ืืืืื ืืช ืืชืจืืื ืืืช ืืชืคืงืื ืฉื ืื ืืืง ืืืืชื ืขื ืฉื ืงืฆืช ืืคืฉื ืืืืืงื ืื:
case class Day5Range(sourceStart: Long, destinationStart: Long, size: Long) {
def toSourceRange: Interval =
this.sourceStart.until(this.size + this.sourceStart)
def getDestination(source: Interval): Interval =
val offset = this.destinationStart - this.sourceStart
NumericRange.Exclusive[Long](1 420
ืืืืจืื ืืืคืกืืื
ืื ืืฉ ืืืจ ืฉืืืื ืืื ืืฉื ืฉืื ื ืืืชืจ ืืื ืื ืืืืืืช ืืืคืกื, ืื ืฉืืืจื ืืฆืืจื ืืืกืืจืืืช ืืืืงื ืืืืชืจ ืืคืกืืื ืื ืืคืกืืื ืืืชืจ ืืืืืื.
ืืื ืืืืจ ืฉืื ืืืื ืืืืืืช ืืืคืกื ืืจืง ืืขืื ืืช ืกืืื ืืืืืืจ, ืื ืืชืื ืชืื ืขื ืืืื ืืช ืืืืืช ืืฆืืืืื ืืืืฉืื ืืขืืื ืขื ืคืืฆ'ืจ ืฉืืื ืืขืฆื ืืืจ ืฉืืืจ, ืืื ืืืืื ืฉืืงืื ืฉืืืจ ืืชืื ื ืืื ืืืืืืืช ืืฉืื ืืืจ ืืื ืื ืืฆื ืืืกืื ืืื.
ืืฉ ืืืื ืฉืืืืจ ืืื ืืื ืฉืืคืฉืจ ืืขืฉืืช ืืฉืืื ืืคืจืืืงื ืืื git stash. ืื ืกืืืฉ, ืื ืืืฆืืจ ืืืื ืืจืื ืฅ ืฉืขืื ืืืืฉืืื ืืืฉืื ืืืื ืืืฆืืข "ืืืืืืช ืืช ืืคืืฆ'ืจ", ืกืืืฉ ืฉืื ืจืืืื (ืืืืืฆืืช ืืืืืืช ืื ืกืืช git restore, ืืื ืื ืืฃ ืคืขื ืื ืืื ืืืืฅ), ืืฉืื ืืกืคืจืื ืขืืื ืืืฃ ืืื.
ืืงืืืจ ืืช ืืคืืฆ'ืจ, ืืืืฆืื ืืช ืืืืจืกื ืืืืืฉืื ืืืื. ืืกืคืจืื ื ืืื ืืืื ื ืื ื ืืช ืื ืืืืฉ ืืืคืก ืืืจื ืืืจืช.
1 420
ืืืื ืืืืชื: ืขืืืฃ ืืืฉืืืช ืืืคืืกืื ืืคืืืชืื ืขื is
ืืืื ืืจ ืฉื ืคืืืชืื ืืชืจืื ืขืืื ืืืื ืื ืืชืืชื ืงืื ืืื:
if type(x) == int:
...
ืืื, ืื ืขื ืืื ืืืชื ืื ืื ื ืืฉืชืืฉ ื type ืื ื isinstance ืืคืขื ืืืื ืืงืจื ืืืืช ืจืฆืืชื ืืืืืง ืืช ื type. ืื ืฉืืคืจืืข ืื ืืื ืืืืงื ื ==, ืื ืืขืืื ืฉื ืืืื ืืจ ืืฉืืืื ืืื ืืืคืืกืื ืชืขืืื ืืื ืืืชืจ ืขื is, ืืืืืจ ืื ืืงืื ืฉืืืืชื ืฆืจืื ืืืชืื:
if type(x) is int:
...
ืื ืืขืืืื ืขื ืืืคืืกืื ืืืืช ืืฉืืืืืื ืื ืืืชื ืืืจ.
ื ื, ืืืืชื ืืืืืง ืื ืืฉ ืืืื ืืืื ืจืืฆื ืืื ืฉืชื ืืืคืฉืจืืืืช:
In [2]: %timeit type(8) == int
15.6 ns ยฑ 0.091 ns per loop (mean ยฑ std. dev. of 7 runs, 100,000,000 loops each)
In [3]: %timeit type(8) is int
13.4 ns ยฑ 0.0661 ns per loop (mean ยฑ std. dev. of 7 runs, 100,000,000 loops each)
ืืื ืืฉ, ืืื ืื ืื ืงืื ืฉืื ืื ืืืืช ืืฉื ื, ืื ืฉืืืคื ืืช ืืฉืืื ืืขื ืืื ืฉื ืืขื. ืืืืืจ ืืขื ืืขื ืืขื ืจืื ืื ืืชืืืืืื ืขื PEP8 ืื ืื ื ื ืฉืืจืื ืขื is ืืื ืืืฉืืืช ืืืคืืกืื, ืืื ืื ืืฉืืืืืช ื None.
ื .ื. ืืืงืืืืช ืืืชืจ ืืขื ืืื ืื ืืฉืืืื ืขื is ืื == ืืืืื ืืืืืช ืืขืืช ืืฉืืขืืช, ืืืฉื ืืขืืืื ืขื ืจืฉืืืืช:
In [14]: [1, 2, 3] == [1, 2, 3]
Out[14]: True
In [15]: [1, 2, 3] is [1, 2, 3]
Out[15]: False
ืืื ืืืงืจืื ืืืื ืืืจื ืืื ื ืฉืงืืข ืืืชืจ ืืืฉืื ืืืืืจืช ืืืืคืจืืืจ ืื ืืื ืฉืืชืืื ืืื ืฉืืชืืื ืืช ืืืืจื ืืขืฉืืช.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
