2023 day 5 part 1.
This commit is contained in:
parent
825ebea299
commit
b8d8df06d6
93
2023/day5.py
93
2023/day5.py
@ -1,13 +1,104 @@
|
|||||||
import sys
|
import sys
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from typing import Literal, TypeAlias
|
||||||
|
|
||||||
|
MAP_ORDER = [
|
||||||
|
"seed",
|
||||||
|
"soil",
|
||||||
|
"fertilizer",
|
||||||
|
"water",
|
||||||
|
"light",
|
||||||
|
"temperature",
|
||||||
|
"humidity",
|
||||||
|
"location",
|
||||||
|
]
|
||||||
|
|
||||||
lines = sys.stdin.read().splitlines()
|
lines = sys.stdin.read().splitlines()
|
||||||
|
|
||||||
|
seeds: list[int] = []
|
||||||
|
maps: dict[tuple[str, str], list[tuple[int, int, int]]] = {}
|
||||||
|
|
||||||
|
# parsing
|
||||||
|
index = 2
|
||||||
|
while index < len(lines):
|
||||||
|
l0 = lines[index]
|
||||||
|
p1, _, p2 = l0.split("-")
|
||||||
|
p2 = p2.split()[0].strip()
|
||||||
|
|
||||||
|
index += 1
|
||||||
|
maps[p1, p2] = []
|
||||||
|
while index < len(lines) and lines[index]:
|
||||||
|
n1, n2, n3 = lines[index].split()
|
||||||
|
maps[p1, p2].append((int(n1), int(n2), int(n3)))
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
|
||||||
|
def find_location(seed: int) -> int:
|
||||||
|
value = seed
|
||||||
|
for map1, map2 in zip(MAP_ORDER[:-1], MAP_ORDER[1:]):
|
||||||
|
for target, start, length in maps[map1, map2]:
|
||||||
|
if value >= start and value < start + length:
|
||||||
|
value = target + (value - start)
|
||||||
|
break
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def find_range(
|
||||||
|
values: tuple[int, int], map: list[tuple[int, int, int]]
|
||||||
|
) -> list[tuple[int, int]]:
|
||||||
|
r_start, r_length = values
|
||||||
|
ranges: list[tuple[int, int]] = []
|
||||||
|
print(r_start, r_length)
|
||||||
|
for target, start, length in map:
|
||||||
|
# start is in the range
|
||||||
|
if start <= r_start and r_start < start + length:
|
||||||
|
if r_start + r_length < start + length:
|
||||||
|
ranges.append(
|
||||||
|
(target + r_start - start, r_length)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
ranges.append(
|
||||||
|
(target + r_start - start, length - (r_start - start))
|
||||||
|
)
|
||||||
|
elif start < r_start:
|
||||||
|
if r_start + r_length < start + length:
|
||||||
|
ranges.append(
|
||||||
|
(target + r_start - start, target + r_start - start + r_length)
|
||||||
|
)
|
||||||
|
elif start >= r_start and r_start >= start
|
||||||
|
|
||||||
|
if r_start <= start and start < start + length:
|
||||||
|
print(start, length, target)
|
||||||
|
if r_start + r_length < start + length:
|
||||||
|
ranges.append(
|
||||||
|
(target + (start - r_start), target + (start - r_start) + length)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
ranges.append((target + (start - r_start), target + length))
|
||||||
|
|
||||||
|
return ranges
|
||||||
|
|
||||||
|
|
||||||
# part 1
|
# part 1
|
||||||
answer_1 = ...
|
seeds = [int(s) for s in lines[0].split(":")[1].strip().split()]
|
||||||
|
answer_1 = min(find_location(seed) for seed in seeds)
|
||||||
print(f"answer 1 is {answer_1}")
|
print(f"answer 1 is {answer_1}")
|
||||||
|
|
||||||
# part 2
|
# part 2
|
||||||
|
parts = lines[0].split(":")[1].strip().split()
|
||||||
|
seeds_p2 = [(int(s), int(e)) for s, e in zip(parts[::2], parts[1::2])]
|
||||||
|
|
||||||
|
for seed in range(seeds_p2[0][0], seeds_p2[0][0] + seeds_p2[0][1]):
|
||||||
|
print(seed, find_location(seed))
|
||||||
|
print("---")
|
||||||
|
|
||||||
|
seeds_p2 = [seeds_p2[0]]
|
||||||
|
for map1, map2 in zip(MAP_ORDER[:-1], MAP_ORDER[1:]):
|
||||||
|
seeds_p2 = [s2 for s1 in seeds_p2 for s2 in find_range(s1, maps[map1, map2])]
|
||||||
|
print(seeds_p2)
|
||||||
|
|
||||||
answer_2 = ...
|
answer_2 = ...
|
||||||
print(f"answer 2 is {answer_2}")
|
print(f"answer 2 is {answer_2}")
|
||||||
|
250
2023/inputs/day5.txt
Normal file
250
2023/inputs/day5.txt
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
seeds: 3640772818 104094365 1236480411 161072229 376099792 370219099 1590268366 273715765 3224333694 68979978 2070154278 189826014 3855332650 230434913 3033760782 82305885 837883389 177854788 2442602612 571881366
|
||||||
|
|
||||||
|
seed-to-soil map:
|
||||||
|
496269031 1203272644 52136246
|
||||||
|
548405277 496269031 457095898
|
||||||
|
1005501175 953364929 249907715
|
||||||
|
|
||||||
|
soil-to-fertilizer map:
|
||||||
|
217408321 2086205436 25053699
|
||||||
|
2604208456 1670861921 31003781
|
||||||
|
1631572552 0 258383552
|
||||||
|
129225554 3768288787 36192668
|
||||||
|
2421205388 2905533654 126666762
|
||||||
|
242462020 3399542287 357404885
|
||||||
|
866152503 3032200416 253960559
|
||||||
|
2039921781 2262442546 381283607
|
||||||
|
2635212237 2714844607 190689047
|
||||||
|
3613008578 1753855801 23976114
|
||||||
|
3636984692 1503365158 167496763
|
||||||
|
1340671861 2111259135 274956
|
||||||
|
1889956104 806620565 149965677
|
||||||
|
0 3286160975 113381312
|
||||||
|
2987089260 956586242 546778916
|
||||||
|
2547872150 3756947172 11341615
|
||||||
|
3846919647 3807789063 43277850
|
||||||
|
3533868176 258383552 79140402
|
||||||
|
165418222 1701865702 51990099
|
||||||
|
1120113062 586061766 220558799
|
||||||
|
2559213765 2217447855 44994691
|
||||||
|
3807789063 4255836712 39130584
|
||||||
|
3890197497 3851066913 404769799
|
||||||
|
1340946817 1777831915 42087923
|
||||||
|
2881175496 2111534091 105913764
|
||||||
|
113381312 2643726153 15844242
|
||||||
|
1383034740 337523954 248537812
|
||||||
|
2825901284 2659570395 55274212
|
||||||
|
599866905 1819919838 266285598
|
||||||
|
|
||||||
|
fertilizer-to-water map:
|
||||||
|
3950520280 1751042330 139651634
|
||||||
|
936578795 3912173308 42397072
|
||||||
|
3553681000 1722281506 28760824
|
||||||
|
697953317 651809140 90189394
|
||||||
|
3582441824 876081661 368078456
|
||||||
|
978975867 2358439651 252255693
|
||||||
|
1495879532 2678320518 199775133
|
||||||
|
1910380638 3308279888 122339216
|
||||||
|
3355092099 1561901004 91630618
|
||||||
|
3187667509 2033753243 70292073
|
||||||
|
2752202873 3816184128 41568037
|
||||||
|
648600286 479585511 49353031
|
||||||
|
3149600631 2356473769 1965882
|
||||||
|
1695654665 2629130810 49189708
|
||||||
|
201901143 385568770 94016741
|
||||||
|
536376004 741998534 3182157
|
||||||
|
2472303091 3954570380 279899782
|
||||||
|
539558161 257732262 15304877
|
||||||
|
3131165165 2610695344 18435466
|
||||||
|
3446722717 1890693964 106958283
|
||||||
|
2793770910 1653531622 40823934
|
||||||
|
9849113 65680232 192052030
|
||||||
|
2878736712 2104045316 252428453
|
||||||
|
1792836692 2878095651 117543946
|
||||||
|
2172585320 1244160117 273599019
|
||||||
|
2060645804 3884012463 28160845
|
||||||
|
3257959582 3719051611 97132517
|
||||||
|
408449515 745180691 127926489
|
||||||
|
876081661 4234470162 60497134
|
||||||
|
1231231560 3043631916 264647972
|
||||||
|
3151566513 1997652247 36100996
|
||||||
|
2446184339 3430619104 26118752
|
||||||
|
803816626 582518586 69290554
|
||||||
|
554863038 9849113 40157204
|
||||||
|
2146325022 3857752165 26260298
|
||||||
|
788142711 50006317 15673915
|
||||||
|
295917884 273037139 112531631
|
||||||
|
2834594844 1517759136 44141868
|
||||||
|
4090171914 3456737856 204795382
|
||||||
|
2088806649 3661533238 57518373
|
||||||
|
1744844373 2995639597 47992319
|
||||||
|
2032719854 1694355556 27925950
|
||||||
|
595020242 528938542 53580044
|
||||||
|
|
||||||
|
water-to-light map:
|
||||||
|
556810106 840812947 14926117
|
||||||
|
2598413684 2184905392 114045192
|
||||||
|
2130064037 1600958027 248227533
|
||||||
|
1271028210 1253957270 39538107
|
||||||
|
3521286912 4262821917 32145379
|
||||||
|
1930562940 1944404618 64932992
|
||||||
|
4252373354 3302720391 42593942
|
||||||
|
1109026743 279496091 162001467
|
||||||
|
725777554 2565853410 3969864
|
||||||
|
2712458876 1330352326 185715465
|
||||||
|
4039742261 3173278185 129442206
|
||||||
|
0 2064417497 120487895
|
||||||
|
299311037 855739064 257499069
|
||||||
|
729747418 1849185560 95219058
|
||||||
|
1373001379 767226476 66231296
|
||||||
|
571736223 688212171 79014305
|
||||||
|
1878676528 2890412515 51886412
|
||||||
|
2898174341 682278717 5933454
|
||||||
|
1781236499 441497558 97440029
|
||||||
|
3090089298 3673052565 50139248
|
||||||
|
1365646204 833457772 7355175
|
||||||
|
1738475707 2412172480 42760792
|
||||||
|
1995495932 2569823274 134568105
|
||||||
|
3193548680 3476912261 196140304
|
||||||
|
824966476 538937587 143341130
|
||||||
|
3553432291 3723191813 486309970
|
||||||
|
3140228546 4209501783 53320134
|
||||||
|
968307606 1113238133 140719137
|
||||||
|
4169184467 3090089298 83188887
|
||||||
|
650750528 204469065 75027026
|
||||||
|
1439232675 2704391379 186021136
|
||||||
|
2511835025 1516067791 84890236
|
||||||
|
1625253811 2298950584 113221896
|
||||||
|
3389688984 3345314333 131597928
|
||||||
|
2378291570 0 22623317
|
||||||
|
2596725261 2942298927 1688423
|
||||||
|
1310566317 2009337610 55079887
|
||||||
|
2940964744 201446459 3022606
|
||||||
|
120487895 22623317 178823142
|
||||||
|
2904107795 1293495377 36856949
|
||||||
|
2400914887 2454933272 110920138
|
||||||
|
|
||||||
|
light-to-temperature map:
|
||||||
|
1244459013 624435822 80444775
|
||||||
|
2608592263 3309263777 172991510
|
||||||
|
3165402867 2278806547 335097905
|
||||||
|
292819381 1643978777 105413752
|
||||||
|
704475267 462426854 15399493
|
||||||
|
3696584161 2678497330 345840247
|
||||||
|
2891254573 3613542439 34162874
|
||||||
|
1894523870 281665589 180761265
|
||||||
|
1706897891 1456352798 187625979
|
||||||
|
398233133 1877125477 198159658
|
||||||
|
4176101046 3482255287 104541624
|
||||||
|
2278806547 3662029939 329785716
|
||||||
|
3500500772 4098883907 196083389
|
||||||
|
4280642670 3647705313 14324626
|
||||||
|
4149492660 3024337577 11203522
|
||||||
|
85784517 0 207034864
|
||||||
|
2925417447 3231118601 78145176
|
||||||
|
0 1749392529 85784517
|
||||||
|
4160696182 3215713737 15404864
|
||||||
|
4042424408 3991815655 107068252
|
||||||
|
1129076520 207034864 74630725
|
||||||
|
596392791 1348270322 108082476
|
||||||
|
3100809989 2613904452 64592878
|
||||||
|
1326100451 1114082357 234187965
|
||||||
|
2864509045 3586796911 26745528
|
||||||
|
2781583773 3132788465 82925272
|
||||||
|
1560288416 477826347 146609475
|
||||||
|
3003562623 3035541099 97247366
|
||||||
|
719874760 704880597 409201760
|
||||||
|
1324903788 1875928814 1196663
|
||||||
|
1203707245 1835177046 40751768
|
||||||
|
|
||||||
|
temperature-to-humidity map:
|
||||||
|
2622049454 736812858 79169969
|
||||||
|
3979548277 2854489162 116161222
|
||||||
|
0 2175018874 84480806
|
||||||
|
567798788 2400631546 48501534
|
||||||
|
3627076350 2837901836 16587326
|
||||||
|
1459224370 1289368272 21397154
|
||||||
|
3018037189 3252694507 93925363
|
||||||
|
4095709499 4063232797 21404553
|
||||||
|
1675574530 2560175285 695067
|
||||||
|
650203851 328659590 327259736
|
||||||
|
3143763337 3475937023 49576
|
||||||
|
1591893253 2091337597 83681277
|
||||||
|
3655324442 3516768137 39649206
|
||||||
|
1125784995 2259499680 94582805
|
||||||
|
1082589333 280432563 43195662
|
||||||
|
1676269597 1011614859 3965286
|
||||||
|
3955996260 4039680780 23552017
|
||||||
|
2701219423 684725863 52086995
|
||||||
|
977463587 2387091631 13539915
|
||||||
|
3643663676 3346619870 11660766
|
||||||
|
3143812913 3556417343 483263437
|
||||||
|
2907111949 3358280636 110925240
|
||||||
|
2293944099 2615629615 132579811
|
||||||
|
991003502 920029028 91585831
|
||||||
|
1513630670 1015580145 78262583
|
||||||
|
196718861 1310765426 316320664
|
||||||
|
1680234883 1638774240 331394507
|
||||||
|
2011629390 815982827 1882146
|
||||||
|
2874635247 4084637350 32476702
|
||||||
|
3701704795 2998403042 254291465
|
||||||
|
2426523910 1093842728 195525544
|
||||||
|
2837901836 3475986599 8980753
|
||||||
|
3694973648 3469205876 6731147
|
||||||
|
3111962552 3484967352 31800785
|
||||||
|
616300322 662956301 21769562
|
||||||
|
1220367800 1627086090 10492300
|
||||||
|
1480621524 2354082485 33009146
|
||||||
|
2846882589 2970650384 27752658
|
||||||
|
1352028950 323628225 5031365
|
||||||
|
2753306418 655919326 7036975
|
||||||
|
513039525 2560870352 54759263
|
||||||
|
84480806 1637578390 1195850
|
||||||
|
2013511536 0 280432563
|
||||||
|
85676656 2449133080 111042205
|
||||||
|
1357060315 817864973 102164055
|
||||||
|
638069884 2748209426 12133967
|
||||||
|
1230860100 1970168747 121168850
|
||||||
|
|
||||||
|
humidity-to-location map:
|
||||||
|
3071447765 3790677895 35519893
|
||||||
|
501148922 1470714761 60946444
|
||||||
|
949413779 3960084356 1114317
|
||||||
|
2276139972 547813284 42132370
|
||||||
|
261623667 0 220957931
|
||||||
|
0 220957931 207965683
|
||||||
|
2629055810 2988733812 367963097
|
||||||
|
936813255 2507216386 12600524
|
||||||
|
3106967658 2402339659 33240399
|
||||||
|
909841910 3356696909 11084951
|
||||||
|
1030029700 920191219 341387512
|
||||||
|
2503236334 3572469232 125819476
|
||||||
|
1371417212 1666455982 273052538
|
||||||
|
2997018907 3367781860 25674024
|
||||||
|
3311094548 2519816910 468916902
|
||||||
|
2021404744 1531661205 83389724
|
||||||
|
3140208057 1939508520 59879232
|
||||||
|
259387264 428923614 2236403
|
||||||
|
950528096 1334878052 79501604
|
||||||
|
2446901229 1414379656 56335105
|
||||||
|
1644469750 3393455884 140294896
|
||||||
|
3022692931 3698288708 48754834
|
||||||
|
4042169428 1999387752 252797868
|
||||||
|
1805974329 3981490698 215430415
|
||||||
|
1784764646 501148922 21209683
|
||||||
|
889549885 3961198673 20292025
|
||||||
|
3780011450 522358605 10399946
|
||||||
|
2104794468 1261578731 73299321
|
||||||
|
3790411396 3842084182 118000174
|
||||||
|
2318272342 2252185620 113574154
|
||||||
|
4003450976 3533750780 38718452
|
||||||
|
2178093789 4196921113 98046183
|
||||||
|
3908411570 3747043542 43634353
|
||||||
|
562095366 2435580058 71636328
|
||||||
|
2431846496 532758551 15054733
|
||||||
|
920926861 3826197788 15886394
|
||||||
|
3952045923 1615050929 51405053
|
||||||
|
207965683 431160017 51421581
|
||||||
|
633731694 2365759774 36579885
|
||||||
|
670311579 700952913 219238306
|
||||||
|
3200087289 589945654 111007259
|
33
2023/tests/day5.txt
Normal file
33
2023/tests/day5.txt
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
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
|
Loading…
Reference in New Issue
Block a user