refactored project structure
This commit is contained in:
34
Cargo.lock
generated
34
Cargo.lock
generated
@@ -5,42 +5,8 @@ version = 4
|
||||
[[package]]
|
||||
name = "AdventOfCode2025"
|
||||
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 = [
|
||||
"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",
|
||||
]
|
||||
|
||||
|
||||
@@ -4,9 +4,5 @@ version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
day01 = {path = "src/day01"}
|
||||
day02 = {path = "src/day02"}
|
||||
day03 = {path = "src/day03"}
|
||||
day04 = {path = "src/day04"}
|
||||
day05 = {path = "src/day05"}
|
||||
day06 = {path = "src/day06"}
|
||||
itertools = "0.14.0"
|
||||
iter-first-max = "0.1.2"
|
||||
28
README.md
28
README.md
@@ -1,17 +1,19 @@
|
||||
# Advent of Code 2025
|
||||
```bash
|
||||
day01:A => 1150 ( 87us)
|
||||
day01:B => 6738 ( 85us)
|
||||
day02:A => 31839939622 ( 8509us)
|
||||
day02:B => 41662374059 ( 67840us)
|
||||
day03:A => 16812 ( 143us)
|
||||
day03:B => 166345822896410 ( 304us)
|
||||
day04:A => 1518 ( 213us)
|
||||
day04:B => 0 ( 12us)
|
||||
day05:A => 0 ( 15us)
|
||||
day05:B => 0 ( 11us)
|
||||
day06:A => 6503327062445 ( 214us)
|
||||
day06:B => 9640641878593 ( 39us)
|
||||
day01:A => 1150 ( 50us)
|
||||
day01:B => 1150 ( 48us)
|
||||
day02:A => 31839939622 ( 9568us)
|
||||
day02:B => 41662374059 ( 69966us)
|
||||
day03:A => 16812 ( 83us)
|
||||
day03:B => 166345822896410 ( 287us)
|
||||
day04:A => 1518 ( 192us)
|
||||
day04:B => 0 ( 0us)
|
||||
day05:A => 0 ( 0us)
|
||||
day05:B => 0 ( 0us)
|
||||
day06:A => 6503327062445 ( 203us)
|
||||
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 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;
|
||||
file_content.split("\n").enumerate().for_each(|(_, line)| {
|
||||
puzzle.split("\n").enumerate().for_each(|(_, line)| {
|
||||
let direction: i32 = match &line[0..1] {
|
||||
"L" => -1,
|
||||
"R" => 1,
|
||||
@@ -25,4 +18,3 @@ pub fn solve() -> u64 {
|
||||
|
||||
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 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;
|
||||
file_content.split("\n").enumerate().for_each(|(_, line)| {
|
||||
puzzle.split("\n").enumerate().for_each(|(_, line)| {
|
||||
let direction: i32 = match &line[0..1] {
|
||||
"L" => -1,
|
||||
"R" => 1,
|
||||
@@ -37,4 +30,3 @@ pub fn solve() -> u64 {
|
||||
|
||||
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 file: File = File::open("src/day02/input02.txt").unwrap();
|
||||
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| {
|
||||
puzzle.split(",").for_each(|id_range| {
|
||||
match id_range.split_once("-") {
|
||||
Some((a, b)) => {
|
||||
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 file: File = File::open("src/day02/input02.txt").unwrap();
|
||||
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| {
|
||||
puzzle.split(",").for_each(|id_range| {
|
||||
match id_range.split_once("-") {
|
||||
Some((a, b)) => {
|
||||
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 std::fs::File;
|
||||
use std::io::Read;
|
||||
|
||||
pub fn solve() -> u64 {
|
||||
pub fn solve(puzzle: String) -> u64 {
|
||||
let mut solution: u64 = 0;
|
||||
|
||||
let mut file: File = File::open("src/day03/input03.txt").unwrap();
|
||||
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| {
|
||||
puzzle.lines().for_each(|battery_bank| {
|
||||
let batteries = battery_bank
|
||||
.chars()
|
||||
.map(|c| c as u8 - 0x30)
|
||||
@@ -1,6 +1,4 @@
|
||||
use iter_first_max::IterFirstMaxExt;
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
|
||||
fn get_n_max(vec: &Vec<u8>, n: usize) -> Vec<u8> {
|
||||
let mut n = n;
|
||||
@@ -33,15 +31,10 @@ fn get_n_max(vec: &Vec<u8>, n: usize) -> Vec<u8> {
|
||||
max
|
||||
}
|
||||
|
||||
pub fn solve() -> u64 {
|
||||
pub fn solve(puzzle: String) -> u64 {
|
||||
let mut solution: u64 = 0;
|
||||
|
||||
let mut file: File = File::open("src/day03/input03.txt").unwrap();
|
||||
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| {
|
||||
puzzle.lines().for_each(|battery_bank| {
|
||||
let batteries = battery_bank
|
||||
.chars()
|
||||
.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 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");
|
||||
|
||||
let mut rows: Vec<Vec<u8>> = Vec::with_capacity(file_content.len() + 2);
|
||||
rows.push(vec![0u8; file_content.len()]);
|
||||
let mut rows: Vec<Vec<u8>> = Vec::with_capacity(puzzle.len() + 2);
|
||||
rows.push(vec![0u8; puzzle.len()]);
|
||||
rows.append(
|
||||
&mut file_content
|
||||
&mut puzzle
|
||||
.lines()
|
||||
.map(|line| {
|
||||
let mut col: Vec<u8> = Vec::with_capacity(line.len() + 2);
|
||||
@@ -31,7 +24,7 @@ pub fn solve() -> u64 {
|
||||
})
|
||||
.collect(),
|
||||
);
|
||||
rows.push(vec![0u8; file_content.len()]);
|
||||
rows.push(vec![0u8; puzzle.len()]);
|
||||
|
||||
rows.windows(3).for_each(|rows| {
|
||||
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 {
|
||||
let mut file: File = File::open("src/day06/input06.txt").unwrap();
|
||||
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
|
||||
pub fn solve(puzzle: String) -> u64 {
|
||||
let mut iters: Vec<_> = puzzle
|
||||
.lines()
|
||||
.map(|line| line.split_whitespace())
|
||||
.collect();
|
||||
@@ -1,16 +1,9 @@
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
use itertools::Itertools;
|
||||
|
||||
pub fn solve() -> u64 {
|
||||
pub fn solve(puzzle: String) -> u64 {
|
||||
let mut solution: u64 = 0;
|
||||
|
||||
let mut file: File = File::open("src/day06/input06.txt").unwrap();
|
||||
let mut file_content: String = String::new();
|
||||
file.read_to_string(&mut file_content)
|
||||
.expect("Can't read file");
|
||||
|
||||
file_content
|
||||
puzzle
|
||||
.lines()
|
||||
.map(|line| line.chars())
|
||||
.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};
|
||||
use day02::{part02a, part02b};
|
||||
use day03::{part03a, part03b};
|
||||
use day04::{part04a, part04b};
|
||||
use day05::{part05a, part05b};
|
||||
use day06::{part06a, part06b};
|
||||
mod day01;
|
||||
mod day02;
|
||||
mod day03;
|
||||
mod day04;
|
||||
mod day05;
|
||||
mod day06;
|
||||
mod day09;
|
||||
use std::time::Instant;
|
||||
|
||||
use std::fs::OpenOptions;
|
||||
@@ -20,28 +21,31 @@ fn main() {
|
||||
file.write_all(b"# Advent of Code 2025\n```bash\n")
|
||||
.expect("Cannot write to file");
|
||||
|
||||
let exercises: Vec<(&str, fn() -> u64)> = vec![
|
||||
("day01:A", part01a::solve),
|
||||
("day01:B", part01b::solve),
|
||||
("day02:A", part02a::solve),
|
||||
("day02:B", part02b::solve),
|
||||
("day03:A", part03a::solve),
|
||||
("day03:B", part03b::solve),
|
||||
("day04:A", part04a::solve),
|
||||
("day04:B", part04b::solve),
|
||||
("day05:A", part05a::solve),
|
||||
("day05:B", part05b::solve),
|
||||
("day06:A", part06a::solve),
|
||||
("day06:B", part06b::solve),
|
||||
let exercises: Vec<(&str, fn(String) -> u64, &str)> = vec![
|
||||
("day01:A", day01::part01a::solve, "puzzles/input01.txt"),
|
||||
("day01:B", day01::part01a::solve, "puzzles/input01.txt"),
|
||||
("day02:A", day02::part02a::solve, "puzzles/input02.txt"),
|
||||
("day02:B", day02::part02b::solve, "puzzles/input02.txt"),
|
||||
("day03:A", day03::part03a::solve, "puzzles/input03.txt"),
|
||||
("day03:B", day03::part03b::solve, "puzzles/input03.txt"),
|
||||
("day04:A", day04::part04a::solve, "puzzles/input04.txt"),
|
||||
("day04:B", day04::part04b::solve, "puzzles/input04.txt"),
|
||||
("day05:A", day05::part05a::solve, "puzzles/input05.txt"),
|
||||
("day05:B", day05::part05b::solve, "puzzles/input05.txt"),
|
||||
("day06:A", day06::part06a::solve, "puzzles/input06.txt"),
|
||||
("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();
|
||||
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 solution = format!(
|
||||
"{:7} => {:15} ({:6}us)\n",
|
||||
day,
|
||||
func(),
|
||||
func(file_content),
|
||||
day_start.elapsed().as_micros()
|
||||
);
|
||||
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