Skip to content

Commit 5fcd46a

Browse files
committed
Add solution to 2023-12-05
1 parent a1d90e8 commit 5fcd46a

File tree

3 files changed

+593
-0
lines changed

3 files changed

+593
-0
lines changed

2023/day05/input

+207
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
seeds: 104847962 3583832 1212568077 114894281 3890048781 333451605 1520059863 217361990 310308287 12785610 3492562455 292968049 1901414562 516150861 2474299950 152867148 3394639029 59690410 862612782 176128197
2+
3+
seed-to-soil map:
4+
2023441036 2044296880 396074363
5+
2419515399 3839972576 454994720
6+
274688417 699823315 258919718
7+
533608135 0 431744151
8+
965352286 431744151 161125324
9+
3391658630 2936663910 903308666
10+
200749950 1177785526 73938467
11+
2874510119 1440389999 315892137
12+
1916089471 2440371243 20593195
13+
0 977035576 200749950
14+
1936682666 1957538510 86758370
15+
1440389999 2902130623 34533287
16+
1126477610 592869475 106953840
17+
3190402256 1756282136 201256374
18+
1474923286 2460964438 441166185
19+
1233431450 958743033 18292543
20+
21+
soil-to-fertilizer map:
22+
1479837493 1486696129 480988794
23+
3637384566 3730606485 267472485
24+
70483107 174821741 921411492
25+
3586173142 3071290434 51211424
26+
1960826287 1166716340 319979789
27+
3952751562 3398939385 283772589
28+
0 1096233233 70483107
29+
1166716340 1967684923 313121153
30+
3904857051 3682711974 47894511
31+
2902018973 3122501858 276437527
32+
991894599 0 174821741
33+
3416901681 2902018973 169271461
34+
3178456500 3998078970 238445181
35+
36+
fertilizer-to-water map:
37+
4274676882 2765984054 20290414
38+
3642266392 2324011621 382224743
39+
3159410287 4157769177 137198119
40+
3437898965 2786274468 204367427
41+
2136710407 1497332580 94233249
42+
4121681656 2706236364 59747690
43+
2362529584 1912615374 411396247
44+
4181429346 3961317447 93247536
45+
270199336 152334204 473273308
46+
1977000445 3853228854 108088593
47+
2085089038 1304420652 51621369
48+
1407624846 2990641895 345516575
49+
908901118 638701782 307729932
50+
3296608406 1356042021 141290559
51+
743472644 625607512 13094270
52+
2230943656 3721642926 131585928
53+
0 946431714 270199336
54+
2773925831 3336158470 385484456
55+
4024491135 1815424853 97190521
56+
756566914 0 152334204
57+
1304420652 4054564983 103204194
58+
1753141421 1591565829 223859024
59+
60+
water-to-light map:
61+
139728365 0 27290780
62+
4161521920 2345099742 65970280
63+
3549264451 2411070022 15588060
64+
846553766 4012820620 62155872
65+
3276913175 3215861697 30588309
66+
7256118 139495191 27523954
67+
3653026602 3908255344 104565276
68+
2007806695 3246450006 21131889
69+
426542603 2677155019 292403006
70+
3265259672 4167732422 11653503
71+
2959802238 3267581895 77570040
72+
2766290955 2562319792 114835227
73+
779480399 3352881787 3460872
74+
718945609 995514267 33385697
75+
908709638 1675494216 164534584
76+
1547970680 1643941067 31553149
77+
1579523829 2009572806 335526936
78+
782941271 2969558025 63612495
79+
752331306 465171569 27149093
80+
237284175 1454682639 189258428
81+
3757591878 3724399189 59699158
82+
2881126182 3784098347 78676056
83+
1520219770 2426658082 27750910
84+
3564852511 1366508548 88174091
85+
2383999106 3681454004 42945185
86+
4287237444 3345151935 7729852
87+
2242562254 3649815914 31638090
88+
3307501484 753751300 241762967
89+
34780072 27290780 104948293
90+
2028938584 3033170520 182691177
91+
3037372278 237284175 227887394
92+
3817291036 3356342659 5821939
93+
0 132239073 7256118
94+
1360895538 1266240382 51601463
95+
3823112975 492320662 230498145
96+
2274200344 1840028800 109798762
97+
4053611120 2454408992 107910800
98+
2426944291 1317841845 48666703
99+
1073244222 3362164598 287651316
100+
1457977942 1203998554 62241828
101+
2591192365 1028899964 175098590
102+
1412497001 3862774403 45480941
103+
2475610994 4179385925 115581371
104+
4227492200 1949827562 59745244
105+
1915050765 4074976492 92755930
106+
2211629761 722818807 30932493
107+
108+
light-to-temperature map:
109+
3741602262 2758947303 142653736
110+
628739598 2901601039 50811783
111+
1842260329 1084521599 145122645
112+
2990409993 3493390513 390865485
113+
4190333929 4159289690 83510514
114+
984282519 2952412822 202948629
115+
1826968660 3155361451 15291669
116+
1329953386 2288178120 328046945
117+
830513455 3304469747 74190775
118+
1187231148 2616225065 142722238
119+
2705943734 836690664 247830935
120+
3381275478 1332397059 281233458
121+
679551381 605080109 150962074
122+
1987382974 756042183 44013157
123+
4159289690 4263923057 31044239
124+
1772730322 3250231409 54238338
125+
2549609472 2131843858 156334262
126+
1658000331 3378660522 114729991
127+
298584178 195831363 330155420
128+
3662508936 525986783 79093326
129+
4273844443 4242800204 21122853
130+
2953774669 800055340 36635324
131+
2031396131 1613630517 518213341
132+
265644560 162891745 32939618
133+
162891745 1229644244 102752815
134+
904704230 3170653120 79578289
135+
136+
temperature-to-humidity map:
137+
671484955 1144907174 532089323
138+
1414132335 1960778188 125717021
139+
2631474761 2586973888 1058655511
140+
1991131055 744338927 221864400
141+
2212995455 192320896 28611061
142+
192320896 2186552402 224875394
143+
2241895588 966203327 169532208
144+
1744764149 431490014 67442815
145+
1812206964 2106058626 80493776
146+
516655377 1135735535 9171639
147+
1559412773 1775426812 185351376
148+
2622156499 2577655626 9318262
149+
1203574278 220931957 210558057
150+
3690130272 4094120212 156346211
151+
3946017132 3645629399 348950164
152+
525827016 598680988 145657939
153+
1892700740 1676996497 98430315
154+
3846476483 3994579563 99540649
155+
2577655626 4250466423 44500873
156+
1539849356 2086495209 19563417
157+
2241606516 598391916 289072
158+
417196290 498932829 99459087
159+
160+
humidity-to-location map:
161+
547577859 2546258172 54451455
162+
2564186976 3913248498 28610653
163+
2460249359 129990669 103937617
164+
257798579 3257354132 21143365
165+
511274864 3365252234 24536388
166+
412475023 3389788622 98799841
167+
2843712442 3615348771 251219053
168+
0 2984989380 24111266
169+
1074541266 4051128852 126947592
170+
3109497668 265707418 9056683
171+
3268495430 1450483293 18654108
172+
1298820860 954974424 392849235
173+
1691670095 1469137401 93027519
174+
3886041222 2131196811 39611681
175+
2797706800 1347823659 46005642
176+
3767841776 233928286 19835810
177+
743957513 253764096 11943322
178+
4068806743 3941859151 109269701
179+
2754107115 1910801576 16288912
180+
1223331059 2244121482 75489801
181+
3118554351 1393829301 56653992
182+
3094931495 3009100646 14566173
183+
3991994741 893524279 61450145
184+
692486724 2192650693 51470789
185+
1008564686 2952439802 32549578
186+
535811252 3603582164 11766607
187+
1784697614 2698363640 44335967
188+
755900835 2353038285 193219887
189+
278941944 1777268497 133533079
190+
3925652903 3488588463 66341838
191+
3558101581 2742699607 209740195
192+
949120722 3305808270 59443964
193+
2624116446 0 129990669
194+
1939852817 274764101 520396542
195+
3175208343 2037909724 93287087
196+
3287149538 2600709627 97654013
197+
650681177 1562164920 41805547
198+
3787677586 795160643 98363636
199+
1829033581 1927090488 110819236
200+
4053444886 3897886641 15361857
201+
1201488858 2170808492 21842201
202+
3384803551 1603970467 173298030
203+
2770396027 3278497497 27310773
204+
1041114264 2319611283 33427002
205+
602029314 3554930301 48651863
206+
2592797629 3866567824 31318817
207+
24111266 3023666819 233687313

2023/day05/solutions.py

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from functools import reduce
2+
from itertools import count
3+
4+
with open("input") as f:
5+
data = f.read().strip()
6+
7+
seed_line, *maps = data.split("\n\n")
8+
seeds = list(map(int, seed_line.split(":")[1].split()))
9+
10+
fs = []
11+
finvs = []
12+
for m in maps:
13+
ns = [list(map(int, l.split())) for l in m.split("\n")[1:]]
14+
15+
def f(x, ns=ns):
16+
return next(
17+
(
18+
target + x - source
19+
for target, source, n in ns
20+
if source <= x < source + n
21+
),
22+
x,
23+
)
24+
25+
def finv(x, ns=ns):
26+
return next(
27+
(
28+
target + x - source
29+
for source, target, n in ns
30+
if source <= x < source + n
31+
),
32+
x,
33+
)
34+
35+
fs.append(f)
36+
finvs.append(finv)
37+
38+
39+
def compose(*F):
40+
return reduce(lambda f, g: lambda x: f(g(x)), F)
41+
42+
43+
# Part 1
44+
print(min(compose(*fs[::-1])(seed) for seed in seeds))
45+
46+
47+
# Part 2
48+
def is_needed(n):
49+
return any(x <= n < x + y for x, y in zip(seeds[::2], seeds[1::2]))
50+
51+
52+
is_seed_loc = compose(is_needed, compose(*finvs))
53+
print(next(filter(is_seed_loc, count())))

0 commit comments

Comments
 (0)