refactored project structure
This commit is contained in:
34
Cargo.lock
generated
34
Cargo.lock
generated
@@ -5,42 +5,8 @@ version = 4
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "AdventOfCode2025"
|
name = "AdventOfCode2025"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
|
||||||
"day01",
|
|
||||||
"day02",
|
|
||||||
"day03",
|
|
||||||
"day04",
|
|
||||||
"day05",
|
|
||||||
"day06",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day01"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day02"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day03"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"iter-first-max",
|
"iter-first-max",
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day04"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day05"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day06"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"itertools",
|
"itertools",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,5 @@ version = "0.1.0"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
day01 = {path = "src/day01"}
|
itertools = "0.14.0"
|
||||||
day02 = {path = "src/day02"}
|
iter-first-max = "0.1.2"
|
||||||
day03 = {path = "src/day03"}
|
|
||||||
day04 = {path = "src/day04"}
|
|
||||||
day05 = {path = "src/day05"}
|
|
||||||
day06 = {path = "src/day06"}
|
|
||||||
28
README.md
28
README.md
@@ -1,17 +1,19 @@
|
|||||||
# Advent of Code 2025
|
# Advent of Code 2025
|
||||||
```bash
|
```bash
|
||||||
day01:A => 1150 ( 87us)
|
day01:A => 1150 ( 50us)
|
||||||
day01:B => 6738 ( 85us)
|
day01:B => 1150 ( 48us)
|
||||||
day02:A => 31839939622 ( 8509us)
|
day02:A => 31839939622 ( 9568us)
|
||||||
day02:B => 41662374059 ( 67840us)
|
day02:B => 41662374059 ( 69966us)
|
||||||
day03:A => 16812 ( 143us)
|
day03:A => 16812 ( 83us)
|
||||||
day03:B => 166345822896410 ( 304us)
|
day03:B => 166345822896410 ( 287us)
|
||||||
day04:A => 1518 ( 213us)
|
day04:A => 1518 ( 192us)
|
||||||
day04:B => 0 ( 12us)
|
day04:B => 0 ( 0us)
|
||||||
day05:A => 0 ( 15us)
|
day05:A => 0 ( 0us)
|
||||||
day05:B => 0 ( 11us)
|
day05:B => 0 ( 0us)
|
||||||
day06:A => 6503327062445 ( 214us)
|
day06:A => 6503327062445 ( 203us)
|
||||||
day06:B => 9640641878593 ( 39us)
|
day06:B => 9640641878593 ( 27us)
|
||||||
|
day09:A => 4725826296 ( 163us)
|
||||||
|
day09:B => 0 ( 0us)
|
||||||
----------
|
----------
|
||||||
77631us
|
82834us
|
||||||
```
|
```
|
||||||
496
puzzles/input09.txt
Normal file
496
puzzles/input09.txt
Normal file
@@ -0,0 +1,496 @@
|
|||||||
|
97918,50201
|
||||||
|
97918,51425
|
||||||
|
98247,51425
|
||||||
|
98247,52647
|
||||||
|
98195,52647
|
||||||
|
98195,53859
|
||||||
|
98005,53859
|
||||||
|
98005,55071
|
||||||
|
97872,55071
|
||||||
|
97872,56297
|
||||||
|
97835,56297
|
||||||
|
97835,57522
|
||||||
|
97759,57522
|
||||||
|
97759,58659
|
||||||
|
97171,58659
|
||||||
|
97171,59849
|
||||||
|
96924,59849
|
||||||
|
96924,61075
|
||||||
|
96832,61075
|
||||||
|
96832,62278
|
||||||
|
96613,62278
|
||||||
|
96613,63385
|
||||||
|
96045,63385
|
||||||
|
96045,64538
|
||||||
|
95663,64538
|
||||||
|
95663,65837
|
||||||
|
95705,65837
|
||||||
|
95705,66999
|
||||||
|
95314,66999
|
||||||
|
95314,68121
|
||||||
|
94816,68121
|
||||||
|
94816,69159
|
||||||
|
94132,69159
|
||||||
|
94132,70235
|
||||||
|
93557,70235
|
||||||
|
93557,71392
|
||||||
|
93150,71392
|
||||||
|
93150,72594
|
||||||
|
92813,72594
|
||||||
|
92813,73464
|
||||||
|
91858,73464
|
||||||
|
91858,74283
|
||||||
|
90857,74283
|
||||||
|
90857,75827
|
||||||
|
91050,75827
|
||||||
|
91050,76622
|
||||||
|
90026,76622
|
||||||
|
90026,77623
|
||||||
|
89334,77623
|
||||||
|
89334,78461
|
||||||
|
88419,78461
|
||||||
|
88419,79592
|
||||||
|
87898,79592
|
||||||
|
87898,80529
|
||||||
|
87121,80529
|
||||||
|
87121,81258
|
||||||
|
86103,81258
|
||||||
|
86103,82506
|
||||||
|
85676,82506
|
||||||
|
85676,82951
|
||||||
|
84373,82951
|
||||||
|
84373,84417
|
||||||
|
84129,84417
|
||||||
|
84129,84738
|
||||||
|
82744,84738
|
||||||
|
82744,85431
|
||||||
|
81740,85431
|
||||||
|
81740,86272
|
||||||
|
80874,86272
|
||||||
|
80874,86984
|
||||||
|
79898,86984
|
||||||
|
79898,87707
|
||||||
|
78934,87707
|
||||||
|
78934,88651
|
||||||
|
78132,88651
|
||||||
|
78132,89825
|
||||||
|
77471,89825
|
||||||
|
77471,90048
|
||||||
|
76152,90048
|
||||||
|
76152,91026
|
||||||
|
75332,91026
|
||||||
|
75332,91113
|
||||||
|
73969,91113
|
||||||
|
73969,92433
|
||||||
|
73319,92433
|
||||||
|
73319,92653
|
||||||
|
72052,92653
|
||||||
|
72052,92817
|
||||||
|
70779,92817
|
||||||
|
70779,93561
|
||||||
|
69793,93561
|
||||||
|
69793,94429
|
||||||
|
68844,94429
|
||||||
|
68844,94816
|
||||||
|
67683,94816
|
||||||
|
67683,94825
|
||||||
|
66387,94825
|
||||||
|
66387,95504
|
||||||
|
65340,95504
|
||||||
|
65340,96215
|
||||||
|
64286,96215
|
||||||
|
64286,95778
|
||||||
|
62890,95778
|
||||||
|
62890,96609
|
||||||
|
61858,96609
|
||||||
|
61858,97235
|
||||||
|
60751,97235
|
||||||
|
60751,97506
|
||||||
|
59554,97506
|
||||||
|
59554,97496
|
||||||
|
58306,97496
|
||||||
|
58306,97162
|
||||||
|
57021,97162
|
||||||
|
57021,97638
|
||||||
|
55863,97638
|
||||||
|
55863,98017
|
||||||
|
54678,98017
|
||||||
|
54678,98087
|
||||||
|
53458,98087
|
||||||
|
53458,98404
|
||||||
|
52250,98404
|
||||||
|
52250,98467
|
||||||
|
51023,98467
|
||||||
|
51023,97591
|
||||||
|
49799,97591
|
||||||
|
49799,97549
|
||||||
|
48594,97549
|
||||||
|
48594,97447
|
||||||
|
47393,97447
|
||||||
|
47393,97559
|
||||||
|
46176,97559
|
||||||
|
46176,97590
|
||||||
|
44957,97590
|
||||||
|
44957,97139
|
||||||
|
43794,97139
|
||||||
|
43794,97718
|
||||||
|
42484,97718
|
||||||
|
42484,97235
|
||||||
|
41328,97235
|
||||||
|
41328,97025
|
||||||
|
40129,97025
|
||||||
|
40129,96569
|
||||||
|
38986,96569
|
||||||
|
38986,96439
|
||||||
|
37767,96439
|
||||||
|
37767,96227
|
||||||
|
36561,96227
|
||||||
|
36561,95775
|
||||||
|
35425,95775
|
||||||
|
35425,95708
|
||||||
|
34160,95708
|
||||||
|
34160,94873
|
||||||
|
33165,94873
|
||||||
|
33165,94442
|
||||||
|
32030,94442
|
||||||
|
32030,93853
|
||||||
|
30961,93853
|
||||||
|
30961,93475
|
||||||
|
29801,93475
|
||||||
|
29801,93145
|
||||||
|
28610,93145
|
||||||
|
28610,92571
|
||||||
|
27533,92571
|
||||||
|
27533,91778
|
||||||
|
26580,91778
|
||||||
|
26580,91054
|
||||||
|
25599,91054
|
||||||
|
25599,90700
|
||||||
|
24392,90700
|
||||||
|
24392,90098
|
||||||
|
23330,90098
|
||||||
|
23330,89610
|
||||||
|
22181,89610
|
||||||
|
22181,88575
|
||||||
|
21422,88575
|
||||||
|
21422,87836
|
||||||
|
20456,87836
|
||||||
|
20456,87257
|
||||||
|
19358,87257
|
||||||
|
19358,86584
|
||||||
|
18325,86584
|
||||||
|
18325,85761
|
||||||
|
17416,85761
|
||||||
|
17416,84396
|
||||||
|
17026,84396
|
||||||
|
17026,83497
|
||||||
|
16219,83497
|
||||||
|
16219,82724
|
||||||
|
15282,82724
|
||||||
|
15282,81812
|
||||||
|
14488,81812
|
||||||
|
14488,81287
|
||||||
|
13242,81287
|
||||||
|
13242,80044
|
||||||
|
12835,80044
|
||||||
|
12835,79273
|
||||||
|
11850,79273
|
||||||
|
11850,78300
|
||||||
|
11117,78300
|
||||||
|
11117,77140
|
||||||
|
10654,77140
|
||||||
|
10654,76100
|
||||||
|
10032,76100
|
||||||
|
10032,75292
|
||||||
|
9038,75292
|
||||||
|
9038,74404
|
||||||
|
8140,74404
|
||||||
|
8140,73087
|
||||||
|
7988,73087
|
||||||
|
7988,71995
|
||||||
|
7455,71995
|
||||||
|
7455,71036
|
||||||
|
6653,71036
|
||||||
|
6653,69869
|
||||||
|
6271,69869
|
||||||
|
6271,68669
|
||||||
|
5984,68669
|
||||||
|
5984,67752
|
||||||
|
5008,67752
|
||||||
|
5008,66446
|
||||||
|
5011,66446
|
||||||
|
5011,65435
|
||||||
|
4213,65435
|
||||||
|
4213,64209
|
||||||
|
4035,64209
|
||||||
|
4035,63114
|
||||||
|
3426,63114
|
||||||
|
3426,61827
|
||||||
|
3512,61827
|
||||||
|
3512,60715
|
||||||
|
2925,60715
|
||||||
|
2925,59521
|
||||||
|
2657,59521
|
||||||
|
2657,58341
|
||||||
|
2305,58341
|
||||||
|
2305,57063
|
||||||
|
2555,57063
|
||||||
|
2555,55868
|
||||||
|
2321,55868
|
||||||
|
2321,54631
|
||||||
|
2469,54631
|
||||||
|
2469,53453
|
||||||
|
1978,53453
|
||||||
|
1978,52239
|
||||||
|
1840,52239
|
||||||
|
1840,51023
|
||||||
|
1568,51023
|
||||||
|
1568,50187
|
||||||
|
94581,50187
|
||||||
|
94581,48595
|
||||||
|
2489,48595
|
||||||
|
2489,47360
|
||||||
|
1948,47360
|
||||||
|
1948,46149
|
||||||
|
2099,46149
|
||||||
|
2099,44932
|
||||||
|
2173,44932
|
||||||
|
2173,43745
|
||||||
|
2490,43745
|
||||||
|
2490,42544
|
||||||
|
2663,42544
|
||||||
|
2663,41373
|
||||||
|
3007,41373
|
||||||
|
3007,40066
|
||||||
|
2674,40066
|
||||||
|
2674,39008
|
||||||
|
3523,39008
|
||||||
|
3523,37778
|
||||||
|
3604,37778
|
||||||
|
3604,36502
|
||||||
|
3567,36502
|
||||||
|
3567,35540
|
||||||
|
4584,35540
|
||||||
|
4584,34126
|
||||||
|
4191,34126
|
||||||
|
4191,33194
|
||||||
|
5204,33194
|
||||||
|
5204,32063
|
||||||
|
5639,32063
|
||||||
|
5639,30930
|
||||||
|
6073,30930
|
||||||
|
6073,29848
|
||||||
|
6623,29848
|
||||||
|
6623,28717
|
||||||
|
7070,28717
|
||||||
|
7070,27492
|
||||||
|
7350,27492
|
||||||
|
7350,26613
|
||||||
|
8281,26613
|
||||||
|
8281,25390
|
||||||
|
8594,25390
|
||||||
|
8594,24514
|
||||||
|
9492,24514
|
||||||
|
9492,23522
|
||||||
|
10191,23522
|
||||||
|
10191,22173
|
||||||
|
10377,22173
|
||||||
|
10377,21180
|
||||||
|
11097,21180
|
||||||
|
11097,20343
|
||||||
|
12018,20343
|
||||||
|
12018,19523
|
||||||
|
12942,19523
|
||||||
|
12942,18816
|
||||||
|
13983,18816
|
||||||
|
13983,17981
|
||||||
|
14858,17981
|
||||||
|
14858,16809
|
||||||
|
15376,16809
|
||||||
|
15376,16068
|
||||||
|
16353,16068
|
||||||
|
16353,15030
|
||||||
|
17038,15030
|
||||||
|
17038,14301
|
||||||
|
18019,14301
|
||||||
|
18019,13410
|
||||||
|
18855,13410
|
||||||
|
18855,12559
|
||||||
|
19733,12559
|
||||||
|
19733,12152
|
||||||
|
20957,12152
|
||||||
|
20957,10852
|
||||||
|
21506,10852
|
||||||
|
21506,10788
|
||||||
|
22952,10788
|
||||||
|
22952,9988
|
||||||
|
23871,9988
|
||||||
|
23871,8781
|
||||||
|
24548,8781
|
||||||
|
24548,8442
|
||||||
|
25771,8442
|
||||||
|
25771,7748
|
||||||
|
26780,7748
|
||||||
|
26780,7638
|
||||||
|
28098,7638
|
||||||
|
28098,6597
|
||||||
|
28936,6597
|
||||||
|
28936,6634
|
||||||
|
30295,6634
|
||||||
|
30295,5530
|
||||||
|
31137,5530
|
||||||
|
31137,5119
|
||||||
|
32291,5119
|
||||||
|
32291,5171
|
||||||
|
33611,5171
|
||||||
|
33611,4750
|
||||||
|
34745,4750
|
||||||
|
34745,4394
|
||||||
|
35901,4394
|
||||||
|
35901,4192
|
||||||
|
37101,4192
|
||||||
|
37101,3248
|
||||||
|
38105,3248
|
||||||
|
38105,3209
|
||||||
|
39349,3209
|
||||||
|
39349,2909
|
||||||
|
40529,2909
|
||||||
|
40529,2965
|
||||||
|
41774,2965
|
||||||
|
41774,2208
|
||||||
|
42884,2208
|
||||||
|
42884,2578
|
||||||
|
44163,2578
|
||||||
|
44163,2700
|
||||||
|
45391,2700
|
||||||
|
45391,1938
|
||||||
|
46543,1938
|
||||||
|
46543,2387
|
||||||
|
47786,2387
|
||||||
|
47786,2473
|
||||||
|
48995,2473
|
||||||
|
48995,2002
|
||||||
|
50202,2002
|
||||||
|
50202,1582
|
||||||
|
51430,1582
|
||||||
|
51430,1775
|
||||||
|
52649,1775
|
||||||
|
52649,2210
|
||||||
|
53841,2210
|
||||||
|
53841,2166
|
||||||
|
55067,2166
|
||||||
|
55067,2369
|
||||||
|
56270,2369
|
||||||
|
56270,2715
|
||||||
|
57447,2715
|
||||||
|
57447,2376
|
||||||
|
58742,2376
|
||||||
|
58742,3117
|
||||||
|
59840,3117
|
||||||
|
59840,2894
|
||||||
|
61140,2894
|
||||||
|
61140,3742
|
||||||
|
62185,3742
|
||||||
|
62185,3817
|
||||||
|
63425,3817
|
||||||
|
63425,3989
|
||||||
|
64648,3989
|
||||||
|
64648,5057
|
||||||
|
65573,5057
|
||||||
|
65573,4922
|
||||||
|
66910,4922
|
||||||
|
66910,5185
|
||||||
|
68120,5185
|
||||||
|
68120,5964
|
||||||
|
69117,5964
|
||||||
|
69117,6674
|
||||||
|
70128,6674
|
||||||
|
70128,6710
|
||||||
|
71460,6710
|
||||||
|
71460,7450
|
||||||
|
72454,7450
|
||||||
|
72454,8385
|
||||||
|
73327,8385
|
||||||
|
73327,8392
|
||||||
|
74729,8392
|
||||||
|
74729,9508
|
||||||
|
75475,9508
|
||||||
|
75475,10041
|
||||||
|
76576,10041
|
||||||
|
76576,10869
|
||||||
|
77480,10869
|
||||||
|
77480,11720
|
||||||
|
78357,11720
|
||||||
|
78357,12429
|
||||||
|
79335,12429
|
||||||
|
79335,12852
|
||||||
|
80550,12852
|
||||||
|
80550,13833
|
||||||
|
81313,13833
|
||||||
|
81313,14720
|
||||||
|
82144,14720
|
||||||
|
82144,15684
|
||||||
|
82895,15684
|
||||||
|
82895,16530
|
||||||
|
83752,16530
|
||||||
|
83752,17162
|
||||||
|
84838,17162
|
||||||
|
84838,17952
|
||||||
|
85773,17952
|
||||||
|
85773,18787
|
||||||
|
86668,18787
|
||||||
|
86668,19898
|
||||||
|
87235,19898
|
||||||
|
87235,20534
|
||||||
|
88399,20534
|
||||||
|
88399,21819
|
||||||
|
88718,21819
|
||||||
|
88718,22937
|
||||||
|
89233,22937
|
||||||
|
89233,23968
|
||||||
|
89861,23968
|
||||||
|
89861,24660
|
||||||
|
91036,24660
|
||||||
|
91036,25849
|
||||||
|
91424,25849
|
||||||
|
91424,26916
|
||||||
|
92004,26916
|
||||||
|
92004,27802
|
||||||
|
92933,27802
|
||||||
|
92933,28832
|
||||||
|
93616,28832
|
||||||
|
93616,30336
|
||||||
|
93275,30336
|
||||||
|
93275,31169
|
||||||
|
94394,31169
|
||||||
|
94394,32316
|
||||||
|
94816,32316
|
||||||
|
94816,33403
|
||||||
|
95397,33403
|
||||||
|
95397,34581
|
||||||
|
95737,34581
|
||||||
|
95737,35916
|
||||||
|
95557,35916
|
||||||
|
95557,37120
|
||||||
|
95737,37120
|
||||||
|
95737,38230
|
||||||
|
96258,38230
|
||||||
|
96258,39290
|
||||||
|
97047,39290
|
||||||
|
97047,40627
|
||||||
|
96600,40627
|
||||||
|
96600,41738
|
||||||
|
97237,41738
|
||||||
|
97237,42902
|
||||||
|
97667,42902
|
||||||
|
97667,44190
|
||||||
|
97201,44190
|
||||||
|
97201,45331
|
||||||
|
97913,45331
|
||||||
|
97913,46539
|
||||||
|
98110,46539
|
||||||
|
98110,47754
|
||||||
|
98296,47754
|
||||||
|
98296,48987
|
||||||
|
97943,48987
|
||||||
|
97943,50201
|
||||||
BIN
src/.DS_Store
vendored
Normal file
BIN
src/.DS_Store
vendored
Normal file
Binary file not shown.
7
src/day01/Cargo.lock
generated
7
src/day01/Cargo.lock
generated
@@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day01"
|
|
||||||
version = "0.1.0"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "day01"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
28
src/day01/mod.rs
Normal file
28
src/day01/mod.rs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
pub mod part01a;
|
||||||
|
pub mod part01b;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::day01::{part01a, part01b};
|
||||||
|
|
||||||
|
const PUZZLE: &str = "L68
|
||||||
|
L30
|
||||||
|
R48
|
||||||
|
L5
|
||||||
|
R60
|
||||||
|
L55
|
||||||
|
L1
|
||||||
|
L99
|
||||||
|
R14
|
||||||
|
L82";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part01a() {
|
||||||
|
assert_eq!(part01a::solve(PUZZLE.to_string()), 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part01b() {
|
||||||
|
assert_eq!(part01b::solve(PUZZLE.to_string()), 6);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +1,9 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut solution: u64 = 0;
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
let mut file: File = File::open("src/day01/input01.txt").unwrap();
|
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
let mut dial: i32 = 50;
|
let mut dial: i32 = 50;
|
||||||
file_content.split("\n").enumerate().for_each(|(_, line)| {
|
puzzle.split("\n").enumerate().for_each(|(_, line)| {
|
||||||
let direction: i32 = match &line[0..1] {
|
let direction: i32 = match &line[0..1] {
|
||||||
"L" => -1,
|
"L" => -1,
|
||||||
"R" => 1,
|
"R" => 1,
|
||||||
@@ -25,4 +18,3 @@ pub fn solve() -> u64 {
|
|||||||
|
|
||||||
solution
|
solution
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,16 +1,9 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut solution: u64 = 0;
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
let mut file: File = File::open("src/day01/input01.txt").unwrap();
|
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
let mut dial: i32 = 50;
|
let mut dial: i32 = 50;
|
||||||
file_content.split("\n").enumerate().for_each(|(_, line)| {
|
puzzle.split("\n").enumerate().for_each(|(_, line)| {
|
||||||
let direction: i32 = match &line[0..1] {
|
let direction: i32 = match &line[0..1] {
|
||||||
"L" => -1,
|
"L" => -1,
|
||||||
"R" => 1,
|
"R" => 1,
|
||||||
@@ -37,4 +30,3 @@ pub fn solve() -> u64 {
|
|||||||
|
|
||||||
solution
|
solution
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
pub mod part01a;
|
|
||||||
pub mod part01b;
|
|
||||||
7
src/day02/Cargo.lock
generated
7
src/day02/Cargo.lock
generated
@@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day02"
|
|
||||||
version = "0.1.0"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "day02"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
19
src/day02/mod.rs
Normal file
19
src/day02/mod.rs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
pub mod part02a;
|
||||||
|
pub mod part02b;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::day02::{part02a, part02b};
|
||||||
|
|
||||||
|
const PUZZLE: &str = "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part02a() {
|
||||||
|
assert_eq!(part02a::solve(PUZZLE.to_string()), 1227775554);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part02b() {
|
||||||
|
assert_eq!(part02b::solve(PUZZLE.to_string()), 4174379265);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,8 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut solution: u64 = 0;
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
let mut file: File = File::open("src/day02/input02.txt").unwrap();
|
puzzle.split(",").for_each(|id_range| {
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
file_content.split(",").for_each(|id_range| {
|
|
||||||
match id_range.split_once("-") {
|
match id_range.split_once("-") {
|
||||||
Some((a, b)) => {
|
Some((a, b)) => {
|
||||||
a.parse::<usize>().expect("invalid range start")
|
a.parse::<usize>().expect("invalid range start")
|
||||||
@@ -1,15 +1,8 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut solution: u64 = 0;
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
let mut file: File = File::open("src/day02/input02.txt").unwrap();
|
puzzle.split(",").for_each(|id_range| {
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
file_content.split(",").for_each(|id_range| {
|
|
||||||
match id_range.split_once("-") {
|
match id_range.split_once("-") {
|
||||||
Some((a, b)) => {
|
Some((a, b)) => {
|
||||||
a.parse::<usize>().expect("invalid range start")
|
a.parse::<usize>().expect("invalid range start")
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
pub mod part02a;
|
|
||||||
pub mod part02b;
|
|
||||||
16
src/day03/Cargo.lock
generated
16
src/day03/Cargo.lock
generated
@@ -1,16 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day03"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"iter-first-max",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "iter-first-max"
|
|
||||||
version = "0.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "42ace18d32276b4ce7d8261c06b376398a4ea82e4715a5b37e46fddbff41a617"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "day03"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
iter-first-max = "0.1.2"
|
|
||||||
22
src/day03/mod.rs
Normal file
22
src/day03/mod.rs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
pub mod part03a;
|
||||||
|
pub mod part03b;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::day03::{part03a, part03b};
|
||||||
|
|
||||||
|
const PUZZLE: &str = "987654321111111
|
||||||
|
811111111111119
|
||||||
|
234234234234278
|
||||||
|
818181911112111";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part03a() {
|
||||||
|
assert_eq!(part03a::solve(PUZZLE.to_string()), 357);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part03b() {
|
||||||
|
assert_eq!(part03b::solve(PUZZLE.to_string()), 3121910778619);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +1,9 @@
|
|||||||
use iter_first_max::IterFirstMaxExt;
|
use iter_first_max::IterFirstMaxExt;
|
||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut solution: u64 = 0;
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
let mut file: File = File::open("src/day03/input03.txt").unwrap();
|
puzzle.lines().for_each(|battery_bank| {
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
file_content.lines().for_each(|battery_bank| {
|
|
||||||
let batteries = battery_bank
|
let batteries = battery_bank
|
||||||
.chars()
|
.chars()
|
||||||
.map(|c| c as u8 - 0x30)
|
.map(|c| c as u8 - 0x30)
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
use iter_first_max::IterFirstMaxExt;
|
use iter_first_max::IterFirstMaxExt;
|
||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
fn get_n_max(vec: &Vec<u8>, n: usize) -> Vec<u8> {
|
fn get_n_max(vec: &Vec<u8>, n: usize) -> Vec<u8> {
|
||||||
let mut n = n;
|
let mut n = n;
|
||||||
@@ -33,15 +31,10 @@ fn get_n_max(vec: &Vec<u8>, n: usize) -> Vec<u8> {
|
|||||||
max
|
max
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut solution: u64 = 0;
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
let mut file: File = File::open("src/day03/input03.txt").unwrap();
|
puzzle.lines().for_each(|battery_bank| {
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
file_content.lines().for_each(|battery_bank| {
|
|
||||||
let batteries = battery_bank
|
let batteries = battery_bank
|
||||||
.chars()
|
.chars()
|
||||||
.map(|c| c as u8 - 0x30)
|
.map(|c| c as u8 - 0x30)
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
pub mod part03a;
|
|
||||||
pub mod part03b;
|
|
||||||
7
src/day04/Cargo.lock
generated
7
src/day04/Cargo.lock
generated
@@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day04"
|
|
||||||
version = "0.1.0"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "day04"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
29
src/day04/mod.rs
Normal file
29
src/day04/mod.rs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
pub mod part04a;
|
||||||
|
pub mod part04b;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::day04::{part04a, part04b};
|
||||||
|
|
||||||
|
const PUZZLE: &str = "..@@.@@@@.
|
||||||
|
@@@.@.@.@@
|
||||||
|
@@@@@.@.@@
|
||||||
|
@.@@@@..@.
|
||||||
|
@@.@@@@.@@
|
||||||
|
.@@@@@@@.@
|
||||||
|
.@.@.@.@@@
|
||||||
|
@.@@@.@@@@
|
||||||
|
.@@@@@@@@.
|
||||||
|
@.@.@@@.@.";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part04a() {
|
||||||
|
assert_eq!(part04a::solve(PUZZLE.to_string()), 13);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore]
|
||||||
|
fn part04b() {
|
||||||
|
assert_eq!(part04b::solve(PUZZLE.to_string()), 43);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,18 +1,11 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut solution: u64 = 0;
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
let mut file: File = File::open("src/day04/input04.txt").unwrap();
|
let mut rows: Vec<Vec<u8>> = Vec::with_capacity(puzzle.len() + 2);
|
||||||
let mut file_content: String = String::new();
|
rows.push(vec![0u8; puzzle.len()]);
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
let mut rows: Vec<Vec<u8>> = Vec::with_capacity(file_content.len() + 2);
|
|
||||||
rows.push(vec![0u8; file_content.len()]);
|
|
||||||
rows.append(
|
rows.append(
|
||||||
&mut file_content
|
&mut puzzle
|
||||||
.lines()
|
.lines()
|
||||||
.map(|line| {
|
.map(|line| {
|
||||||
let mut col: Vec<u8> = Vec::with_capacity(line.len() + 2);
|
let mut col: Vec<u8> = Vec::with_capacity(line.len() + 2);
|
||||||
@@ -31,7 +24,7 @@ pub fn solve() -> u64 {
|
|||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
);
|
);
|
||||||
rows.push(vec![0u8; file_content.len()]);
|
rows.push(vec![0u8; puzzle.len()]);
|
||||||
|
|
||||||
rows.windows(3).for_each(|rows| {
|
rows.windows(3).for_each(|rows| {
|
||||||
rows[0]
|
rows[0]
|
||||||
7
src/day04/part04b.rs
Normal file
7
src/day04/part04b.rs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
|
0 // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
pub mod part04a;
|
|
||||||
pub mod part04b;
|
|
||||||
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
|
||||||
let mut solution: u64 = 0;
|
|
||||||
|
|
||||||
let mut file: File = File::open("src/day04/input04.txt").unwrap();
|
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
solution
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
7
src/day05/Cargo.lock
generated
7
src/day05/Cargo.lock
generated
@@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day04"
|
|
||||||
version = "0.1.0"
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "day05"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
31
src/day05/mod.rs
Normal file
31
src/day05/mod.rs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
pub mod part05a;
|
||||||
|
pub mod part05b;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::day05::{part05a, part05b};
|
||||||
|
|
||||||
|
const PUZZLE: &str = "3-5
|
||||||
|
10-14
|
||||||
|
16-20
|
||||||
|
12-18
|
||||||
|
|
||||||
|
1
|
||||||
|
5
|
||||||
|
8
|
||||||
|
11
|
||||||
|
17
|
||||||
|
32";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore]
|
||||||
|
fn part05a() {
|
||||||
|
assert_eq!(part05a::solve(PUZZLE.to_string()), 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore]
|
||||||
|
fn part05b() {
|
||||||
|
assert_eq!(part05b::solve(PUZZLE.to_string()), todo!());
|
||||||
|
}
|
||||||
|
}
|
||||||
4
src/day05/part05a.rs
Normal file
4
src/day05/part05a.rs
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
|
0 // TODO
|
||||||
|
}
|
||||||
7
src/day05/part05b.rs
Normal file
7
src/day05/part05b.rs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
|
0 // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
pub mod part05a;
|
|
||||||
pub mod part05b;
|
|
||||||
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
|
||||||
let mut solution: u64 = 0;
|
|
||||||
|
|
||||||
let mut file: File = File::open("src/day05/input05.txt").unwrap();
|
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
solution
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
|
||||||
let mut solution: u64 = 0;
|
|
||||||
|
|
||||||
let mut file: File = File::open("src/day05/input05.txt").unwrap();
|
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
solution
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
7
src/day06/Cargo.lock
generated
7
src/day06/Cargo.lock
generated
@@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day04"
|
|
||||||
version = "0.1.0"
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "day06"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
itertools = "0.14.0"
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
import math
|
|
||||||
import time
|
|
||||||
from itertools import zip_longest
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
solution = 0
|
|
||||||
with open("input06.txt", "r") as f:
|
|
||||||
start = time.time()
|
|
||||||
for equation in zip(*(line.split() for line in f.readlines())):
|
|
||||||
it = (int(e) for e in equation[:-1])
|
|
||||||
if equation[-1] == "+":
|
|
||||||
solution += sum(it)
|
|
||||||
if equation[-1] == "*":
|
|
||||||
solution += math.prod(it)
|
|
||||||
|
|
||||||
print(time.time() - start)
|
|
||||||
|
|
||||||
print(solution)
|
|
||||||
|
|
||||||
# ----------
|
|
||||||
|
|
||||||
solution = 0
|
|
||||||
with open("input06.txt", "r") as f:
|
|
||||||
start = time.time()
|
|
||||||
operator = " "
|
|
||||||
temp = 0
|
|
||||||
for col in zip_longest(*f.readlines(), fillvalue=" "):
|
|
||||||
if col[4] != " ":
|
|
||||||
operator = col[4]
|
|
||||||
solution += temp
|
|
||||||
temp = 0 if col[4] == "+" else 1
|
|
||||||
|
|
||||||
try:
|
|
||||||
if operator == "+":
|
|
||||||
temp += int("".join(col[:4]))
|
|
||||||
if operator == "*":
|
|
||||||
temp *= int("".join(col[:4]))
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
solution += temp
|
|
||||||
print(time.time() - start)
|
|
||||||
|
|
||||||
print(solution)
|
|
||||||
22
src/day06/mod.rs
Normal file
22
src/day06/mod.rs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
pub mod part06a;
|
||||||
|
pub mod part06b;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::day06::{part06a, part06b};
|
||||||
|
|
||||||
|
const PUZZLE: &str = "123 328 51 64
|
||||||
|
45 64 387 23
|
||||||
|
6 98 215 314
|
||||||
|
* + * + ";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part06a() {
|
||||||
|
assert_eq!(part06a::solve(PUZZLE.to_string()), 4277556);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part06b() {
|
||||||
|
assert_eq!(part06b::solve(PUZZLE.to_string()), 3263827);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,6 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut file: File = File::open("src/day06/input06.txt").unwrap();
|
let mut iters: Vec<_> = puzzle
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
let mut iters: Vec<_> = file_content
|
|
||||||
.lines()
|
.lines()
|
||||||
.map(|line| line.split_whitespace())
|
.map(|line| line.split_whitespace())
|
||||||
.collect();
|
.collect();
|
||||||
@@ -1,16 +1,9 @@
|
|||||||
use std::fs::File;
|
|
||||||
use std::io::Read;
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|
||||||
pub fn solve() -> u64 {
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
let mut solution: u64 = 0;
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
let mut file: File = File::open("src/day06/input06.txt").unwrap();
|
puzzle
|
||||||
let mut file_content: String = String::new();
|
|
||||||
file.read_to_string(&mut file_content)
|
|
||||||
.expect("Can't read file");
|
|
||||||
|
|
||||||
file_content
|
|
||||||
.lines()
|
.lines()
|
||||||
.map(|line| line.chars())
|
.map(|line| line.chars())
|
||||||
.tuple_windows::<(_, _, _, _, _)>()
|
.tuple_windows::<(_, _, _, _, _)>()
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
pub mod part06a;
|
|
||||||
pub mod part06b;
|
|
||||||
|
|
||||||
27
src/day09/mod.rs
Normal file
27
src/day09/mod.rs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
pub mod part09a;
|
||||||
|
pub mod part09b;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::day09::{part09a, part09b};
|
||||||
|
|
||||||
|
const PUZZLE: &str = "7,1
|
||||||
|
11,1
|
||||||
|
11,7
|
||||||
|
9,7
|
||||||
|
9,5
|
||||||
|
2,5
|
||||||
|
2,3
|
||||||
|
7,3";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part09a() {
|
||||||
|
assert_eq!(part09a::solve(PUZZLE.to_string()), 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore]
|
||||||
|
fn part09b() {
|
||||||
|
assert_eq!(part09b::solve(PUZZLE.to_string()), 24);
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/day09/part09a.rs
Normal file
19
src/day09/part09a.rs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
use std::ops::Add;
|
||||||
|
|
||||||
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
|
let mut solution: u64 = 0;
|
||||||
|
|
||||||
|
let points = puzzle
|
||||||
|
.lines()
|
||||||
|
.map(|line| line.split_once(',').unwrap())
|
||||||
|
.map(|(left, right)| (left.parse::<u64>().unwrap(), right.parse::<u64>().unwrap()))
|
||||||
|
.collect::<Vec<(u64, u64)>>();
|
||||||
|
|
||||||
|
points.iter().enumerate().for_each(|(i, point1)| {
|
||||||
|
points.iter().skip(i).for_each(|point2| {
|
||||||
|
solution = solution.max(point1.0.abs_diff(point2.0).add(1) * point1.1.abs_diff(point2.1).add(1));
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
solution
|
||||||
|
}
|
||||||
7
src/day09/part09b.rs
Normal file
7
src/day09/part09b.rs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
pub fn solve(puzzle: String) -> u64 {
|
||||||
|
0 // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
46
src/main.rs
46
src/main.rs
@@ -1,9 +1,10 @@
|
|||||||
use day01::{part01a, part01b};
|
mod day01;
|
||||||
use day02::{part02a, part02b};
|
mod day02;
|
||||||
use day03::{part03a, part03b};
|
mod day03;
|
||||||
use day04::{part04a, part04b};
|
mod day04;
|
||||||
use day05::{part05a, part05b};
|
mod day05;
|
||||||
use day06::{part06a, part06b};
|
mod day06;
|
||||||
|
mod day09;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
use std::fs::OpenOptions;
|
use std::fs::OpenOptions;
|
||||||
@@ -20,28 +21,31 @@ fn main() {
|
|||||||
file.write_all(b"# Advent of Code 2025\n```bash\n")
|
file.write_all(b"# Advent of Code 2025\n```bash\n")
|
||||||
.expect("Cannot write to file");
|
.expect("Cannot write to file");
|
||||||
|
|
||||||
let exercises: Vec<(&str, fn() -> u64)> = vec![
|
let exercises: Vec<(&str, fn(String) -> u64, &str)> = vec![
|
||||||
("day01:A", part01a::solve),
|
("day01:A", day01::part01a::solve, "puzzles/input01.txt"),
|
||||||
("day01:B", part01b::solve),
|
("day01:B", day01::part01a::solve, "puzzles/input01.txt"),
|
||||||
("day02:A", part02a::solve),
|
("day02:A", day02::part02a::solve, "puzzles/input02.txt"),
|
||||||
("day02:B", part02b::solve),
|
("day02:B", day02::part02b::solve, "puzzles/input02.txt"),
|
||||||
("day03:A", part03a::solve),
|
("day03:A", day03::part03a::solve, "puzzles/input03.txt"),
|
||||||
("day03:B", part03b::solve),
|
("day03:B", day03::part03b::solve, "puzzles/input03.txt"),
|
||||||
("day04:A", part04a::solve),
|
("day04:A", day04::part04a::solve, "puzzles/input04.txt"),
|
||||||
("day04:B", part04b::solve),
|
("day04:B", day04::part04b::solve, "puzzles/input04.txt"),
|
||||||
("day05:A", part05a::solve),
|
("day05:A", day05::part05a::solve, "puzzles/input05.txt"),
|
||||||
("day05:B", part05b::solve),
|
("day05:B", day05::part05b::solve, "puzzles/input05.txt"),
|
||||||
("day06:A", part06a::solve),
|
("day06:A", day06::part06a::solve, "puzzles/input06.txt"),
|
||||||
("day06:B", part06b::solve),
|
("day06:B", day06::part06b::solve, "puzzles/input06.txt"),
|
||||||
|
("day09:A", day09::part09a::solve, "puzzles/input09.txt"),
|
||||||
|
("day09:B", day09::part09b::solve, "puzzles/input09.txt"),
|
||||||
];
|
];
|
||||||
|
|
||||||
let start: Instant = Instant::now();
|
let start: Instant = Instant::now();
|
||||||
exercises.iter().for_each(|(day, func)| {
|
exercises.iter().for_each(|(day, func, filename)| {
|
||||||
|
let file_content = std::fs::read_to_string(filename).expect("Cannot read file");
|
||||||
let day_start: Instant = Instant::now();
|
let day_start: Instant = Instant::now();
|
||||||
let solution = format!(
|
let solution = format!(
|
||||||
"{:7} => {:15} ({:6}us)\n",
|
"{:7} => {:15} ({:6}us)\n",
|
||||||
day,
|
day,
|
||||||
func(),
|
func(file_content),
|
||||||
day_start.elapsed().as_micros()
|
day_start.elapsed().as_micros()
|
||||||
);
|
);
|
||||||
print!("{}", solution);
|
print!("{}", solution);
|
||||||
|
|||||||
0
story/story09a.txt
Normal file
0
story/story09a.txt
Normal file
0
story/story09b.txt
Normal file
0
story/story09b.txt
Normal file
Reference in New Issue
Block a user