uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 420
Obunachilar
+124 soatlar
+17 kunlar
-430 kunlar
Postlar arxiv
ToCode
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, ืื‘ืœ ื–ื” ื”ื ื•ืฉื ืฉืœ ื”ืฉื™ืขื•ืจ ืื– ื‘ื•ืื• ืœื ื ืงืœืงืœ). ื”ื‘ืขื™ื” ืฉืœื ื• ื›ืžืชื›ื ืชื™ื ื”ื™ื ืฉืžื›ืœ ืžื™ื ื™ ืกื™ื‘ื•ืช ืจื•ื‘ ื”ื–ืžืŸ ืื ื—ื ื• ืžืขื“ื™ืคื™ื ืœื”ืฉืชืžืฉ ื‘ืื‘ืกื˜ืจืงืฆื™ื” ื”ืงื™ื™ืžืช ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื•ืช, ื’ื ืื ื”ื™ื ืชืงื•ืœื”, ื•ืœื ืœืขืฆื•ืจ ื•ืœื‘ื ื•ืช ืื‘ืกื˜ืจืงืฆื™ื” ื—ื“ืฉื” ืื‘ืœ ื’ื ืœื ืœื›ืชื•ื‘ ืืช ื›ืœ ื”ืงื•ื“ ืžื—ื“ืฉ. ื‘ืขื•ืœื ื”ืืžื™ืชื™ ื”ืกื™ื›ื•ื™ ืœืจืื•ืช ืžืฉื”ื• ืฉื“ื•ืžื” ืœื—ื™ืฉื•ื‘ ื”ืื™ื˜ื™ ืฉืœ ืกื›ื•ื ืคื™ื‘ื•ื ืืฆ'ื™ ื”ื•ื ืžืื•ื“ ื’ื‘ื•ื”, ื•ื”ื•ื ื’ื“ืœ ื›ื›ืœ ืฉืขื•ื‘ื“ื™ื ืขืœ ืžื•ืฆืจื™ื ื™ื•ืชืจ ื‘ืฉืœื™ื (ื›ื™ ื™ืฉ ื‘ื”ื ื›ื‘ืจ ื”ืžื•ืŸ ืื‘ืกื˜ืจืงืฆื™ื•ืช). ืื ื™ ืจื•ืื” ืืช ื”ื˜ื™ืขื•ืŸ ืœืฉื™ืžื•ืฉ ื‘ืื‘ืกื˜ืจืงืฆื™ื” ืœื ื˜ื•ื‘ื” ื‘ืžืขืจื›ืช ืงื™ื™ืžืช. ื›ืฉื™ืฉ ืžืฉื”ื• ืฉืขื•ื‘ื“ ื—ื‘ืœ ืœื ืœื”ืฉืชืžืฉ ื‘ื•, ื•ื’ื ื–ื” ื™ื›ื•ืœ ืœื—ืกื•ืš ืœื™ ื”ืžื•ืŸ ื–ืžืŸ ืคื™ืชื•ื— ื•ืœื—ืกื•ืš ื”ืžื•ืŸ ื‘ืื’ื™ื. ื ื›ื•ืŸ ื–ื” ืœื ื”ื›ื™ ื™ืขื™ืœ ืื‘ืœ ื‘ื•ืื• ื ืฉืื™ืจ ืืช ื”ืฉื™ืคื•ืจ ื”ื‘ื™ืฆื•ืขื™ื ืœืฉืœื‘ ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”. ืื‘ืœ ื›ื“ืื™ ืœืจืื•ืช ื’ื ืืช ื”ืฆื“ ื”ืฉื ื™ - ืชื™ืงื•ืŸ ื”ืื‘ืกื˜ืจืงืฆื™ื” ื”ื•ื ืœื ืจืง ืกื™ืคื•ืจ ืฉืœ ื‘ื™ืฆื•ืขื™ื ืืœื ื’ื ืฉืœ ื ื›ื•ื ื•ืช ื”ืงื•ื“, ื•ืฉืœ ื›ืžื” ืžื”ืจ ืื•ื›ืœ ืœื‘ื ื•ืช ืืช ื”ืคื™ืฆ'ืจ ื”ื‘ื. ื›ื›ืœ ืฉื™ื•ืชืจ ืคื™ืฆ'ืจื™ื ื‘ื ื•ื™ื™ื ืขืœ ืื‘ืกื˜ืจืงืฆื™ื” ืงื™ื™ืžืช ื•ื‘ืขื™ื™ืชื™ืช, ื›ืš ื™ื”ื™ื” ืงืฉื” ื™ื•ืชืจ ื‘ื”ืžืฉืš ืœืฉื ื•ืช ืื•ืชื”. ื‘ืฉื™ืžื•ืฉ ื‘ืื‘ืกื˜ืจืงืฆื™ื” ืœื ื ื›ื•ื ื” ืื ื—ื ื• ืคืฉื•ื˜ ื—ื•ืคืจื™ื ืœืขืฆืžื ื• ื‘ื•ืจ ื™ื•ืชืจ ืขืžื•ืง. ื‘ืกื™ื˜ื•ืืฆื™ื” ื›ื–ืืช ื”ื›ื™ ื˜ื•ื‘ ืœืชืงืŸ ืืช ื”ืื‘ืกื˜ืจืงืฆื™ื” ื”ื’ืจื•ืขื” ื•ืœืขืฉื•ืช ืจื™ืคืงื˜ื•ืจ ืœื›ืœ ื”ืงื•ื“ ืฉื”ืฉืชืžืฉ ื‘ื”. ืื ืื™ืŸ ื–ืžืŸ ืขื“ื™ืฃ ืœื”ืชื—ื™ืœ ืžื ื’ื ื•ืŸ ื—ื“ืฉ. ื’ื ืื ื–ื” ื™ื™ืงื— ืงืฆืช ื™ื•ืชืจ ื–ืžืŸ ื‘ืคื™ืชื•ื— ื”ืคื™ืฆ'ืจ ื”ื ื•ื›ื—ื™, ื”ื–ืžืŸ ื”ื–ื” ื™ื—ื–ื™ืจ ืืช ืขืฆืžื• ื•ื‘ื“ืจืš ื’ื ืื ื—ื ื• ื ืฆื‘ื•ืจ ืขื•ื“ ื›ืžื” ื ืงื•ื“ื•ืช ื‘ืžืกืข ืœื”ืคื•ืš ืœืžืชื›ื ืชื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ.

ToCode
1 420
ืืชื’ืจื™ื ืื• ืชื™ืจื•ืฆื™ื ืฉื ื” ื—ื“ืฉื”, ืคืจื•ื™ืงื˜ื™ื ื—ื“ืฉื™ื, ื—ืœื•ืžื•ืช ื—ื“ืฉื™ื, ืื‘ืœ ื›ืฉื”ื—ืœื•ืžื•ืช ื”ืืœื” ืžืชื—ื™ืœื™ื ืœื”ื™ืชืงืœ ื‘ืงืฉื™ื™ื ื™ืฉ ืœื ื• ืฉืชื™ ืืกื˜ืจื˜ื’ื™ื•ืช ืชื’ื•ื‘ื”- 1. ืืคืฉืจ ืœื”ืชื™ื™ื—ืก ืœืงื•ืฉื™ ื”ื—ื“ืฉ ื‘ืชื•ืจ ืืชื’ืจ ื•ืœื ืกื•ืช ืœื”ืชืงื“ื ืœืžืจื•ืช ื”ืงื•ืฉื™. ื’ื ืื ื“ื‘ืจื™ื ืœื ื™ืงืจื• ื›ืžื• ืฉืชื›ื ื ืชื™ ื‘ื”ืชื—ืœื”, ืื ื™ ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœืขืฉื•ืช ืืช ื”ื›ื™ ื˜ื•ื‘ ืฉืœื™. 2. ืืคืฉืจ ืœื”ืชื™ื™ื—ืก ืœืงื•ืฉื™ ื”ื—ื“ืฉ ื‘ืชื•ืจ ืชื™ืจื•ืฅ, ื•ืœื”ืกื‘ื™ืจ ืœืขืฆืžื™ ื•ืœืขื•ืœื ืœืžื” ืื™ ืืคืฉืจ ืœื”ื’ืฉื™ื ืืช ื”ื—ืœื•ื. ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ื”ื™ื ืžืชื›ื ืชืช ืฉื›ื‘ืจ ื›ืžื” ืฉื ื™ื ืœื ืžืกืคื™ืง ืžืจื•ืฆื” ืžื”ืขื‘ื•ื“ื” ืฉืœื”, ืœื ืžืจื’ื™ืฉื” ืฉื”ื™ื ืžืชืคืชื—ืช ื•ืชื›ืœ'ืก ื›ืฉืžืกืชื›ืœืช ืื—ื•ืจื” ืœื ืงืจื” ืฉื•ื ื“ื‘ืจ ืžืขื ื™ื™ืŸ ืžืงืฆื•ืขื™ืช ื‘ืื•ืชืŸ ืฉื ื™ื. ื›ืื™ืœื• ื›ืœ ื”ืฉื ื™ื ื”ืืœื” ื”ืชืื—ื“ื• ืœืฉื ื” ืื—ืช ืืจื•ื›ื” ืื‘ืœ ืฉืขื‘ืจื” ื›ื”ืจืฃ ืขื™ืŸ, ื‘ืชื—ื•ืฉื” ืฉืื ื™ ื‘ืงื•ืฉื™ ื™ื•ืžื™ื™ื ื‘ืžืงื•ื ื”ื–ื” ืœืžืจื•ืช ืฉืื ื™ ืฉื ื›ื‘ืจ ื›ืžื” ืฉื ื™ื. ืื•ืชื” ืžืชื›ื ืชืช ืขืฉื•ื™ื” ืœื”ื—ืœื™ื˜ ืœื ืฆืœ ืืช ื”ืฉื ื” ื”ื—ื“ืฉื” ื•ืœื—ืคืฉ ืขื‘ื•ื“ื” ื—ื“ืฉื”, ืื‘ืœ ืื– ืžื”ืจ ืžืื•ื“ ื”ื™ื ืชื’ืœื” ืฉื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืจืฆื” ืงื“ื™ืžื”, ื”ืขื•ืœื ื›ื‘ืจ ืœื ืื™ืคื” ืฉื”ื™ื” ืœืคื ื™ 3 ืฉื ื™ื ื•ื›ื‘ืจ ืื™ืŸ ืœื” ื™ื•ืชืจ ืžื“ื™ ื”ื–ื“ืžื ื•ื™ื•ืช. ื”ืงื•ืฉื™ ื”ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืชื™ืจื•ืฅ - ื™ื“ืขืชื™ ืฉืื ื™ ืœื ืžืกืคื™ืง ื˜ื•ื‘ื”, ื˜ื•ื‘ ืฆื™ืคื•ืจ ืื—ืช ื‘ื™ื“, ื‘ืฉื‘ื™ืœ ืžื” ืœืฉื‘ื•ืจ ืžืฉื”ื• ืฉืขื•ื‘ื“, ืžื” ื—ืฉื‘ืชื™ ืœืขืฆืžื™ ื•ืกืš ื”ื›ืœ ื™ืฉ ื”ืžื•ืŸ ืื ืฉื™ื ืฉื—ื•ืœืžื™ื ืœื”ื™ื•ืช ื‘ืžืงื•ื ืฉืœื™ ืื– ืื™ืŸ ืœื™ ื–ื›ื•ืช ืœืงื˜ืจ, ื•ื›ื›ื” ืืคืฉืจ ืœื”ืขื‘ื™ืจ ืขื•ื“ ืฉื ื”, ืฉื ืชื™ื™ื ื•ืืคื™ืœื• ื™ื•ืชืจ. ืื• ืฉืืคืฉืจ ืœื”ืชื™ื™ื—ืก ืœืงื•ืฉื™ ื‘ืชื•ืจ ืืชื’ืจ - ื‘ืจื•ืจ ืฉืื ื™ ืœื ืžืขื•ื“ื›ื ืช ื˜ื›ื ื•ืœื•ื’ื™ืช, ืฉืœื•ืฉ ืฉื ื™ื ืื ื™ ืชืงื•ืขื” ื‘ืื•ืชื” ืขื‘ื•ื“ื” ืœืœื ืื•ืคืง. ื‘ืฉื‘ื™ืœ ืœื—ืคืฉ ื›ืžื• ืฉืฆืจื™ืš ืืฆื˜ืจืš ืœืจื“ืช ืœื—ืฆื™ ืžืฉืจื” ื•ืœื”ืฉืงื™ืข ืืช ื”ื–ืžืŸ ืฉื”ืชืคื ื” ื‘ืœื™ืžื•ื“ื™ื, ื•ื›ืŸ ื‘ืจื•ืจ ืฉืืฆื˜ืจืš ืœื”ืกืชื“ืจ ืขื ืคื—ื•ืช ื›ืกืฃ ืžื” ืฉื™ืฉืคื™ืข ืขืœ ื”ื™ื•ื ื™ื•ื ืฉืœื™. ืื ื™ ืฉืžื—ื” ืœืขืฉื•ืช ืืช ื”ื•ื•ื™ืชื•ืจื™ื ื›ื“ื™ ืฉื”ืฉื ื” ื”ื–ืืช ืชื”ื™ื” ืžื™ื•ื—ื“ืช ืขื‘ื•ืจื™. ื”ืื ื–ื” ื™ืฆืœื™ื—? ืชืœื•ื™ ื‘ื”ื’ื“ืจื” ืฉืœื ื• ืœ"ื™ืฆืœื™ื—". ืื™ ืืคืฉืจ ืœื“ืขืช ืžืจืืฉ ืžื” ื™ื”ื™ื• ื”ืชื•ืฆืื•ืช ื”ื—ื™ืฆื•ื ื™ื•ืช ืฉืœ ื”ืžืขืฉื™ื, ืื‘ืœ ืืคืฉืจ ืœื”ื™ื•ืช ื‘ื˜ื•ื—ื™ื ืฉื›ืฉืื ื—ื ื• ื‘ื•ื—ืจื™ื ืœื”ืชืžื•ื“ื“ ืขื ืืชื’ืจื™ื ื•ืœืœื›ืช ืื—ืจื™ ื”ื—ืœื•ืžื•ืช ืœืžืจื•ืช ื”ืงืฉื™ื™ื ื”ืฉื ื” ื”ื–ืืช ืชื”ื™ื” ืžื™ื•ื—ื“ืช ื•ื—ืฉื•ื‘ื”.

ToCode
1 420
ื˜ื›ื ื•ืœื•ื’ื™ื” ืžืฉืขืžืžืช ืื• ื—ื“ืฉื”? ืื™ืŸ ื›ืžื• ืœืขื‘ื•ื“ ืขื ื˜ื›ื ื•ืœื•ื’ื™ื” ืฆืขื™ืจื”, ื—ื“ืฉื” ื•ืžื‘ื˜ื™ื—ื” ืฉื›ื•ืœื ืžื“ื‘ืจื™ื ืขืœื™ื” ื•ืจืง ืขื›ืฉื™ื• ื™ืฆืื” ืœืฉื•ืง. ืื ื™ ืœื ืฆืจื™ืš ืœืฉื›ื ืข ืืชื›ื ืœืขื‘ื•ื“ ืขื ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช ื›ื™ ื›ื•ืœื ืจืฆื™ื ืœืฉื ืœื‘ื“, ื•ืื™ืŸ ื›ืžื• ื”ื›ื™ืฃ ื‘ืœื”ื™ื•ืช ื”ืจืืฉื•ืŸ ืฉื›ื•ืชื‘ ื‘ืื™ื–ื• ืฉืคืช ืชื›ื ื•ืช ืฉืืฃ ืื—ื“ ืขื•ื“ ืœื ืฉืžืข ืขืœื™ื”. ืื‘ืœ, ื™ืฉ ื’ื ืœื ืžืขื˜ ื™ืชืจื•ื ื•ืช ืœื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื•ื•ืชื™ืงื•ืช ื•ืœืคืจื•ื™ืงื˜ื™ื ื—ืฉื•ื‘ื™ื ืื•ืœื™ ื›ื“ืื™ ืœื‘ื“ื•ืง ืคืขื ื ื•ืกืคืช. ืืœื” ื›ืžื” ื“ื‘ืจื™ื ืฉืืคืฉืจ ืœื‘ื ื•ืช ืขืœื™ื”ื ื›ืฉืขื•ื‘ื“ื™ื ืขื ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืžืฉืขืžืžื•ืช: 1. ื—ื™ื‘ื•ืจ ื˜ื•ื‘ ืœื›ืœ ืžืขืจื›ืช ืฆื“ ืฉืœื™ืฉื™ ืฉืืคืฉืจ ืœื“ืžื™ื™ืŸ. 2. ืชื™ืขื•ื“ ื˜ื•ื‘ ื‘ืจืฉืช ื•ืคื™ืชืจื•ื ื•ืช ืงื™ื™ืžื™ื ืœื›ืœ ื‘ืขื™ื”. 3. ื™ื›ื•ืœืช ืฉื™ื—ื” ืขื Chat GPT ื‘ืœื™ ืœื”ืคื™ืœ ืื•ืชื• ืœื”ื–ื™ื•ืช. 4. ืงืœ ืœื’ื™ื™ืก ืื ืฉื™ื (ื›ืŸ ืขื ื›ืœ ื”ื”ื™ื™ืค, ืขื“ื™ื™ืŸ ืงืœ ื™ื•ืชืจ ืœื’ื™ื™ืก ืžืชื›ื ืชื™ Java ืžืืฉืจ ืžืชื›ื ืชื™ Rust). 5. ืœื ืžืฉื ื” ืื™ื–ื” ื‘ืขื™ื” ื™ืฉ ืœื›ื, ืžื™ืฉื”ื• ืื—ืจ ื›ื‘ืจ ืฉื‘ืจ ืืช ื”ืจืืฉ ื•ื›ืชื‘ ืชืฉื•ื‘ื” ื‘ืื™ื ื˜ืจื ื˜. ื”ืจื‘ื” ืคืขืžื™ื ื”ืคื™ืชืจื•ืŸ ืืคื™ืœื• ืžื•ื‘ื ื” ื›ื‘ืจ ื‘ืฉืคื”. ืžืฆื“ ืฉื ื™ ื˜ื›ื ื•ืœื•ื’ื™ื” ืžืฉืขืžืžืช ื›ืฉืžื” ื›ืŸ ื”ื™ื - ืžืฉืขืžืžืช, ื•ื™ืฉ ืœื ืžืขื˜ ืžืฆื‘ื™ื ื•ืกื™ื‘ื•ืช ืœื‘ื—ื•ืจ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช: 1. ืืคืฉืจ ืœืคืชื— ืœื‘ื“ ืืช ื›ืœ ื”ื›ืœื™ื ื•ืœืงื‘ืœ ืจื•ื— ื’ื‘ื™ืช ื—ื–ืงื” ืžื”ืื™ื ื˜ืจื ื˜ ื’ื ืœืคืจื•ื™ืงื˜ื™ื ืงื˜ื ื™ื. 2. ืคื•ืกื˜ื™ื ื”ื•ืคื›ื™ื ื•ื™ืจืืœื™ื™ื ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจ (ื›ื™ ืžื™ ื‘ื›ืœืœ ื”ื•ืœืš ืœืฉืชืฃ ืคื•ืกื˜ ืขืœ Java ื”ื™ื•ื) 3. ืื ื”ื™ืžืจืชื ื ื›ื•ืŸ ืชืžืฆืื• ืืช ืขืฆืžื›ื ืขื•ื“ ืฉื ืชื™ื™ื ืขื ื™ื•ืชืจ ื ื™ืกื™ื•ืŸ ืชืขืกื•ืงืชื™ ืžื›ืœ ื”ืื ืฉื™ื ืกื‘ื™ื‘ื›ื ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉื›ื‘ืจ ืชื™ื›ื ืก ืœืžื™ื™ื ืกื˜ืจื™ื. 4. ืื™ืŸ ื›ืžื• ื”ืจื’ืฉืช ื”ื’ื™ืœื•ื™ ื›ืฉืœื•ืžื“ื™ื ืคื™ืชืจื•ืŸ ื—ื“ืฉ ื•ืžืขื ื™ื™ืŸ ืœื‘ืขื™ื”, ื•ืœื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช ื™ืฉ ื”ืจื‘ื” ื™ื•ืชืจ ืกื™ื›ื•ื™ ืœื”ืคืชื™ืข ืื•ืชื ื• ืœื˜ื•ื‘ื”. ื•ืžื” ืืชื›ื? ื™ืฉ ืœื›ื ืกื™ืคื•ืจื™ ื”ืฆืœื—ื” ืื• ื›ื™ืฉืœื•ืŸ ื‘ืขืงื‘ื•ืช ื‘ื—ื™ืจื” ื˜ื›ื ื•ืœื•ื’ื™ื”? ืžื•ื–ืžื ื™ื ืœืฉืชืฃ ื‘ืชื’ื•ื‘ื•ืช ืื™ื–ื” ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื‘ื—ืจืชื ื•ืื™ืš ื–ื” ื ื’ืžืจ.

ToCode
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')))))

ToCode
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). ืื™ืฉื™ืช ืื ื™ ืœื ืžืจื•ืฆื” ืžื”ืคื™ืชืจื•ืŸ ืื‘ืœ ื—ื™ื™ื‘ ืœื”ื•ื“ื•ืช ืฉื‘ื™ื ืชื™ื™ื ืœื ืžืฆืืชื™ ืžื ื’ื ื•ืŸ ื˜ื•ื‘ ื™ื•ืชืจ. ืื ื™ืฉ ืœื›ื ืจืขื™ื•ื ื•ืช ืืฉืžื— ืœืฉืžื•ืข ื‘ืชื’ื•ื‘ื•ืช.

ToCode
1 420
ืื™ืŸ ืœื™ ืžื•ืฉื’ ืœืžื” ื›ืชื‘ืชื™ ืืช ื–ื” ื‘ืงืจื™ืืช ืงื•ื“, ื”ืžื—ืฉื‘ื” "ืื™ืŸ ืœื™ ืžื•ืฉื’ ืœืžื” ื›ืชื‘ืชื™ ืืช ื–ื” ื›ื›ื”" ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืžื“ื›ืืช. ื”ื™ื ื™ื›ื•ืœื” ืœืจืžื•ื– ืฉื—ืœืงื™ื ื‘ืžืขืจื›ืช ืขื•ื‘ื“ื™ื ื‘ื’ืœืœ ืฆื™ืจื•ืฃ ืžืงืจื™ื ื’ืœืงื˜ื™, ืฉื”ืงื•ื“ ืฉืœื™ ื”ื•ื ืœื ื‘ืืžืช ืฉืœื™ ื•ืื•ืœื™ ืื™ืŸ ืœื™ ืืช ื”ื›ื™ืฉื•ืจื™ื ื•ื”ื™ื›ื•ืœื•ืช ืฉืฆืจื™ืš ื‘ืฉื‘ื™ืœ ื”ืขื‘ื•ื“ื” ื”ื–ืืช. ืื• ื™ื•ืชืจ ื’ืจื•ืข, ืœื™ื™ืฆืจ ืžืขื™ืŸ ืฉื›ื ื•ืข ืขืฆืžื™ ืฉื›ื•ืœื ืคืฉื•ื˜ ืžื“ื‘ื™ืงื™ื ื›ืœ ื”ื™ื•ื ืงื•ื“ ืฉ AI ืžื™ื™ืฆืจ ื‘ืœื™ ืœื”ื‘ื™ืŸ ืื•ืชื• ื•ืœื›ืŸ ืื™ืŸ ืกื™ื‘ื” ืœื”ืชืืžืฅ. ื‘ืžืงื•ื ืœื™ืคื•ืœ ืœื‘ื•ืจ ื”ื–ื”, ื‘ื•ืื• ื ืฉืชืžืฉ ื‘ "ืื™ืŸ ืœื™ ืžื•ืฉื’ ืœืžื” ื›ืชื‘ืชื™ ืืช ื–ื”" ื‘ืชื•ืจ ื“ืœืช ืฉืฉื•ื•ื” ืœืขื‘ื•ืจ ื“ืจื›ื” ื›ื“ื™ ืœืœืžื•ื“ ื™ื•ืชืจ ืขืœ ืื™ืš ืžืขืจื›ื•ืช ืขื•ื‘ื“ื•ืช. ืื™ืš ืœื™ ืžื•ืฉื’ ืœืžื” ื›ืชื‘ืชื™ ืืช ื–ื”, ื•ืœื›ืŸ ืื ืกื”- 1. ืœืžื—ื•ืง ืืช ื”ืคื•ื ืงืฆื™ื” ื•ืœืฉื›ืชื‘ ืื•ืชื” ืžื—ื“ืฉ ื‘ื“ืจืš ื”ื’ื™ื•ื ื™ืช ืขื‘ื•ืจื™. 2. ืœื‘ืงืฉ ืžื—ื‘ืจ ืื• ืž AI ืœื”ืกื‘ื™ืจ ืœื™ ืืช ื”ืžื ื’ื ื•ืŸ, ื•ืื– ืœื”ืฆื™ืข ืขื•ื“ ื›ืžื” ื“ืจื›ื™ื ืœื›ืชื•ื‘ ืืช ืื•ืชื• ื“ื‘ืจ. 3. ืœื›ืชื•ื‘ ืžืกืคื™ืง ื‘ื“ื™ืงื•ืช ื›ื“ื™ ืœืฉื‘ื•ืจ ืืช ื”ืงื•ื“, ื•ืœื”ื‘ื™ืŸ ืื™ืš ื”ื•ื ื ืฉื‘ืจ ื•ืžืชื™ ื”ื•ื ืขื•ื‘ื“. ื .ื‘. ื”ื ื” ื’ื ืจืขื™ื•ืŸ ืœืžื•ืฆืจ AI ืงื˜ืŸ - ืชื•ืกืฃ ืœ IDE ืฉืžื–ื”ื” ื•ืžืกืžืŸ ืงื˜ืขื™ ืงื•ื“ ืฉื ื›ืชื‘ื• ื‘ืœื™ ื”ื‘ื ื” ืžืกืคื™ืง ื˜ื•ื‘ื”. ืื ื™ ื‘ื˜ื•ื— ื”ื™ื™ืชื™ ืฉืžื— ืœื ืกื•ืช ืื•ืชื• ืขืœ ื›ืžื” ืคืจื•ื™ืงื˜ื™ื ืฉืœื™.

ToCode
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))
ืžื›ื™ืจื™ื ืกืงืืœื” ื•ื™ืฉ ืœื›ื ืจืขื™ื•ื ื•ืช ืื™ืš ืœืฉืคืจ ืืช ื”ืงื•ื“? ืืœ ืชืชื‘ื™ื™ืฉื• ืœืกืคืจ ืœื™ ื‘ืชื’ื•ื‘ื•ืช.

ToCode
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)
  }
ื›ืžื” ืœืงื—ื™ื ืขืœ ืกืงืืœื” ื•ืžื—ืฉื‘ื•ืช ื›ืœืœื™ื•ืช ืขืœ ื”ืคื™ืชืจื•ืŸ:

ToCode
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](

ToCode
1 420
ืžื›ื•ืจื™ื ืœื”ืคืกื“ื™ื ืื ื™ืฉ ื“ื‘ืจ ืฉื”ืžื•ื— ื”ืื ื•ืฉื™ ืฉื•ื ื ื™ื•ืชืจ ืžื›ืœ ื–ื” ืœื”ื•ื“ื•ืช ื‘ื”ืคืกื“, ืžื” ืฉื’ื•ืจื ื‘ืฆื•ืจื” ืื‘ืกื•ืจื“ื™ืช ื“ื•ื•ืงื ืœื™ื•ืชืจ ื”ืคืกื“ื™ื ืื• ื”ืคืกื“ื™ื ื™ื•ืชืจ ื’ื“ื•ืœื™ื. ื›ืžื• ืžื”ืžืจ ืฉืœื ืžื•ื›ืŸ ืœื”ื•ื“ื•ืช ื‘ื”ืคืกื“ ื•ืจืง ืžืขืœื” ืืช ืกื›ื•ื ื”ื”ื™ืžื•ืจ, ื›ืš ืžืชื›ื ืชื™ื ืขื ื›ื•ื•ื ื•ืช ื˜ื•ื‘ื•ืช ืžืฆืœื™ื—ื™ื ืœื”ืžืฉื™ืš ืœืขื‘ื•ื“ ืขืœ ืคื™ืฆ'ืจ ืฉื”ื•ื ื‘ืขืฆื ื—ื•ืจ ืฉื—ื•ืจ, ื‘ืœื™ ืœื”ื‘ื™ืŸ ืฉื”ืงื•ื“ ืฉื›ื‘ืจ ื›ืชื‘ื ื• ื”ื•ื ื”ืžืœื›ื•ื“ืช ื•ืฉื•ื ื“ื‘ืจ ื˜ื•ื‘ ืœื ื™ืฆื ืžื”ืกื‘ืš ื”ื–ื”. ื™ืฉ ื™ืžื™ื ืฉื”ื“ื‘ืจ ื”ื›ื™ ื˜ื•ื‘ ืฉืืคืฉืจ ืœืขืฉื•ืช ื‘ืฉื‘ื™ืœ ื”ืคืจื•ื™ืงื˜ ื”ื•ื git stash. ื›ืŸ ืกื˜ืืฉ, ืœื ืœื™ืฆื•ืจ ืื™ื–ื” ื‘ืจืื ืฅ ืฉืขื•ื“ ื—ื•ื“ืฉื™ื™ื ืžื™ืฉื”ื• ื™ื‘ื•ื ื•ื™ืฆื™ืข "ืœื”ื—ื™ื•ืช ืืช ื”ืคื™ืฆ'ืจ", ืกื˜ืืฉ ืฉืœื ืจื•ืื™ื (ื”ืืžื™ืฆื•ืช ื™ื›ื•ืœื•ืช ืœื ืกื•ืช git restore, ืื‘ืœ ืœื™ ืืฃ ืคืขื ืœื ื”ื™ื” ืื•ืžืฅ), ื•ืฉืœื ืžืกืคืจื™ื ืขืœื™ื• ืœืืฃ ืื—ื“. ืœืงื‘ื•ืจ ืืช ื”ืคื™ืฆ'ืจ, ืœื”ื•ืฆื™ื ืืช ื”ื’ื™ืจืกื” ื•ืœื”ืžืฉื™ืš ื”ืœืื”. ื‘ืกืคืจื™ื ื˜ ื”ื‘ื ืื•ืœื™ ื ื‘ื ื” ืืช ื–ื” ืžื—ื“ืฉ ืžืืคืก ื‘ื“ืจืš ืื—ืจืช.

ToCode
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
ืื‘ืœ ื‘ืžืงืจื™ื ื›ืืœื” ื‘ื“ืจืš ื›ืœืœ ื ืฉืงื™ืข ื™ื•ืชืจ ืžื—ืฉื‘ื” ื‘ื‘ื—ื™ืจืช ื”ืื•ืคืจื˜ื•ืจ ื”ื ื›ื•ืŸ ืฉื™ืชืื™ื ืœืžื” ืฉื”ืชื•ื›ื ื™ืช ืืžื•ืจื” ืœืขืฉื•ืช.