Compare commits

...

5 Commits

Author SHA1 Message Date
Bram 2eea8f113d Add day 9 + remove compiler warnings 2025-12-11 08:44:59 +01:00
Bram df6262af0e Add day 11 (semi-clean version) 2025-12-11 08:31:28 +01:00
Bram 7e12367e85 Add day 10 part 1 (rough version) 2025-12-10 10:26:47 +01:00
Bram 33362cef62 Add messy day 8 2025-12-08 16:43:02 +01:00
Bram 35023c79a2 Prepare day 8 2025-12-08 00:40:24 +01:00
14 changed files with 2812 additions and 32 deletions

View File

@ -5,4 +5,6 @@ edition = "2024"
[dependencies]
colored = "3.0.0"
itertools = "0.14.0"
petgraph = "0.8.3"
regex = "1.12.2"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,497 @@
98254,50455
98254,51678
98235,51678
98235,52880
97862,52880
97862,54126
98170,54126
98170,55348
98077,55348
98077,56531
97689,56531
97689,57637
96893,57637
96893,58863
96899,58863
96899,60170
97225,60170
97225,61251
96487,61251
96487,62456
96302,62456
96302,63504
95563,63504
95563,64780
95595,64780
95595,66007
95424,66007
95424,67085
94829,67085
94829,68132
94177,68132
94177,69198
93597,69198
93597,70571
93679,70571
93679,71581
92966,71581
92966,72553
92201,72553
92201,73783
91912,73783
91912,74838
91298,74838
91298,75645
90292,75645
90292,76555
89476,76555
89476,77942
89347,77942
89347,78924
88619,78924
88619,79839
87806,79839
87806,80963
87250,80963
87250,81892
86448,81892
86448,82814
85638,82814
85638,83468
84550,83468
84550,84606
83959,84606
83959,85308
82934,85308
82934,85766
81705,85766
81705,86447
80696,86447
80696,87298
79831,87298
79831,88549
79261,88549
79261,89319
78305,89319
78305,89822
77162,89822
77162,89953
75794,89953
75794,90604
74779,90604
74779,91165
73712,91165
73712,92092
72845,92092
72845,93117
72007,93117
72007,92994
70588,92994
70588,94234
69820,94234
69820,94583
68635,94583
68635,95191
67558,95191
67558,95449
66346,95449
66346,95121
64948,95121
64948,95955
63943,95955
63943,96113
62725,96113
62725,96661
61612,96661
61612,97153
60474,97153
60474,96735
59145,96735
59145,97078
57979,97078
57979,97243
56781,97243
56781,97716
55619,97716
55619,97410
54369,97410
54369,98082
53205,98082
53205,98230
51989,98230
51989,97571
50756,97571
50756,97753
49549,97753
49549,98019
48329,98019
48329,98099
47105,98099
47105,97844
45901,97844
45901,97294
44739,97294
44739,97476
43497,97476
43497,97825
42210,97825
42210,97423
41037,97423
41037,97367
39798,97367
39798,96775
38679,96775
38679,96167
37580,96167
37580,96134
36326,96134
36326,95543
35237,95543
35237,95144
34091,95144
34091,94615
32995,94615
32995,94781
31619,94781
31619,93974
30635,93974
30635,93797
29373,93797
29373,92636
28584,92636
28584,92671
27194,92671
27194,92034
26147,92034
26147,90801
25459,90801
25459,90403
24283,90403
24283,89917
23147,89917
23147,89500
21949,89500
21949,88206
21385,88206
21385,87650
20283,87650
20283,86800
19410,86800
19410,85754
18715,85754
18715,85603
17217,85603
17217,84345
16729,84345
16729,83501
15859,83501
15859,82837
14795,82837
14795,81579
14375,81579
14375,80822
13402,80822
13402,80184
12259,80184
12259,78795
12065,78795
12065,77809
11369,77809
11369,77030
10371,77030
10371,76106
9562,76106
9562,74790
9377,74790
9377,73793
8693,73793
8693,72892
7821,72892
7821,72017
6862,72017
6862,70764
6637,70764
6637,69545
6379,69545
6379,68704
5252,68704
5252,67545
4843,67545
4843,66140
5123,66140
5123,65191
4145,65191
4145,64074
3611,64074
3611,62801
3608,62801
3608,61472
3901,61472
3901,60474
2846,60474
2846,59212
2920,59212
2920,57954
3073,57954
3073,56822
2471,56822
2471,55634
2160,55634
2160,54435
1875,54435
1875,53198
2015,53198
2015,51969
2257,51969
2257,50758
2282,50758
2282,50423
94860,50423
94860,48342
2368,48342
2368,47097
1766,47097
1766,45933
2525,45933
2525,44743
2746,44743
2746,43515
2655,43515
2655,42342
2983,42342
2983,41118
3007,41118
3007,39829
2774,39829
2774,38720
3394,38720
3394,37465
3407,37465
3407,36244
3587,36244
3587,35114
4077,35114
4077,34140
4994,34140
4994,33074
5590,33074
5590,31843
5763,31843
5763,30594
5931,30594
5931,29452
6370,29452
6370,28522
7241,28522
7241,27453
7812,27453
7812,26312
8257,26312
8257,25408
9113,25408
9113,24031
9200,24031
9200,23175
10122,23175
10122,22308
11005,22308
11005,21470
11907,21470
11907,20413
12514,20413
12514,19537
13352,19537
13352,18377
13860,18377
13860,17643
14858,17643
14858,16856
15785,16856
15785,15832
16471,15832
16471,14620
16999,14620
16999,14072
18151,14072
18151,12912
18764,12912
18764,12226
19789,12226
19789,11978
21139,11978
21139,11161
22040,11161
22040,9943
22677,9943
22677,9926
24128,9926
24128,9337
25184,9337
25184,8409
26042,8409
26042,7797
27094,7797
27094,7307
28209,7307
28209,7061
29438,7061
29438,6451
30486,6451
30486,5391
31353,5391
31353,4879
32468,4879
32468,4840
33757,4840
33757,4494
34924,4494
34924,4012
36046,4012
36046,3959
37295,3959
37295,3126
38334,3126
38334,3239
39613,3239
39613,2564
40717,2564
40717,2853
42008,2853
42008,2670
43206,2670
43206,2090
44357,2090
44357,1762
45554,1762
45554,2084
46805,2084
46805,2482
48039,2482
48039,1581
49230,1581
49230,1659
50456,1659
50456,2018
51669,2018
51669,1956
52891,1956
52891,2193
54094,2193
54094,2609
55271,2609
55271,2933
56446,2933
56446,2626
57715,2626
57715,2378
59000,2378
59000,2984
60125,2984
60125,3267
61310,3267
61310,3453
62521,3453
62521,3695
63723,3695
63723,4637
64704,4637
64704,4590
66001,4590
66001,5549
66941,5549
66941,5859
68117,5859
68117,6136
69315,6136
69315,6915
70290,6915
70290,7153
71521,7153
71521,8054
72417,8054
72417,8244
73694,8244
73694,8468
74979,8468
74979,9798
75587,9798
75587,10499
76571,10499
76571,11039
77667,11039
77667,11227
79038,11227
79038,12404
79672,12404
79672,12733
80977,12733
80977,13711
81752,13711
81752,14626
82570,14626
82570,15348
83567,15348
83567,16696
83938,16696
83938,17486
84857,17486
84857,18429
85614,18429
85614,18778
87070,18778
87070,19757
87813,19757
87813,21197
87945,21197
87945,22088
88772,22088
88772,23049
89511,23049
89511,23822
90547,23822
90547,25084
90826,25084
90826,25924
91795,25924
91795,27089
92210,27089
92210,28402
92314,28402
92314,29161
93515,29161
93515,30242
94093,30242
94093,31603
94009,31603
94009,32639
94681,32639
94681,33723
95255,33723
95255,34810
95847,34810
95847,36069
95912,36069
95912,37269
96132,37269
96132,38512
96157,38512
96157,39596
96836,39596
96836,40686
97592,40686
97592,41917
97680,41917
97680,43180
97510,43180
97510,44434
97251,44434
97251,45627
97447,45627
97447,46818
97729,46818
97729,48017
98055,48017
98055,49234
98160,49234
98160,50455

View File

@ -0,0 +1,187 @@
[###.#.] (1,3,5) (0,2,5) (1,3) (2,3,5) (0,2,4) (0,1,2,4) {44,25,63,29,33,40}
[.#..#] (0,1,2) (0,2,4) (0,2,3) (3,4) {157,11,157,141,5}
[####.##.] (0,1,4,5,6,7) (1,3,5) (1,7) (0,5,6) (1,6) (0,5) (0,3,4,6,7) (0,1,3,4,5,6) (0,1,2,4,6) (4,5) {26,55,3,15,30,51,27,26}
[.#.##] (0,1,3) (3,4) (0,1,2,3) (0,1,2,4) (1) (1,2,4) (1,4) {29,62,39,28,57}
[#......#] (0,7) (1,2,4,6,7) (0,1,3,4,5,7) (0,1,2,3,5,6) (1,2,6,7) (1,2,5) (1,2,3,6,7) (3,4) {187,222,214,211,36,185,213,48}
[.#.#] (0,2) (1,3) (0,3) (1,2) (1) (3) {26,175,20,180}
[..##] (2) (1,3) (3) (0,2,3) {17,13,19,35}
[.#.#] (0,2,3) (1,3) {16,14,16,30}
[.#.....#] (0,1,3,4,5,7) (0,2,3,4,5,6,7) (0,4,5,6) (0,1,3,4,5) (1,4,7) (2,3,5,6,7) (1,3) (0,3,4,5,6) (4,7) {165,42,14,161,199,166,148,50}
[#.#####] (0,1,3,5,6) (2,3,4,5,6) (0,3,4,5,6) (1,4) (2,3,4,6) (3,4,5) (1,2,3,5,6) (0,3,4) {40,47,25,83,68,65,48}
[..##.#] (0,2) (1,3,4) (2,3,5) (1,2,4) (0,1,4,5) (1,2,3,4,5) (0,5) (1,2) {38,167,178,138,154,148}
[.###.] (0,1,3,4) (2,4) (1,3,4) {20,35,20,35,55}
[#.##] (3) (1,3) (0,3) (0,2) (0,1,3) (0) {42,36,8,56}
[#.#.#] (0,1,2) (1,3,4) (0,1) (1,3) (2,4) (0,1,4) (1,2,4) {28,50,33,6,46}
[##.##.] (0,2,3,4) (2,4) (3,4,5) (0,1,4,5) (0,1,2,4) (0,1,2,3) {36,28,27,19,48,23}
[##..###] (0,1,3,4,5) (0,3) (2,3,5) (1,2,4,6) (1,4,5) (1,2,3,6) (0,2,4,5,6) {30,50,48,39,51,42,38}
[###.] (0,1,2) (0,1,2,3) {152,152,152,20}
[####..] (0,1,2,4) (1,3) (1,5) (0,2) {24,31,24,3,17,11}
[....#.##] (0,7) (2,4,7) (5) (1,4,5,7) (0,2,3,4) (1,2) (0,1,2,3,4,5,6) (3,6) (5,6) (0,2,3,4,5) {24,27,38,32,57,36,21,41}
[#.#.#] (0,3,4) (0,4) (1,3,4) (0,2) (3,4) (1) {141,15,4,39,163}
[#.###..] (1,4,5) (3,5) (2,6) (0,1,3,4,5,6) (0,2,3,4) (3,4,5,6) (6) {13,14,11,37,38,38,44}
[#..####.#] (0,1) (0,3,4,6,8) (1,2,3,4,5,6,7,8) (0,2,3,4,5,6) (1,2) (2,4) (0,2,4,5,8) (1) (0,1,3,6,7,8) (3,7) (6,7,8) {42,36,53,204,53,39,56,206,52}
[.#####..#.] (0,1,2,3,5,8,9) (0,1,2,3,4,7,8,9) (0,1,3,5,6,7,8,9) (4,6) (0,4,6) (0,1,2,3,7) (2,6,7,9) (3,4,8) (3,4,5,7) (0,3,4,9) (3,6,7,8,9) (2,3,5) {96,61,54,102,80,57,67,62,61,84}
[...#.] (2,3) (0,1,3) (0,2) (0,1,2) (0,4) (0) {22,2,31,14,3}
[...###] (0,1,4,5) (2,3) (3) (1,2,3,4,5) (0,1,2) (0,1,3,5) {42,47,28,35,16,31}
[...###..##] (2,3,4,7,9) (0,1,2,3,4,6,9) (3,4,6) (3,8) (0,1,2,3,4,5,9) (1,9) (2,3,5,6,7,8) (0,1,2,4) (0,1,4,5,6,7,8) (0,4,5,6,7,8) (1,4) {33,49,48,63,65,41,55,55,52,35}
[..##.] (1,2) (3,4) (0,3,4) (0,2) (2,3) {15,0,11,24,22}
[..#.###] (0,1,2,3) (0,1,4,6) (0,4,5,6) (0,3,4,6) (2,3,4,5) {53,25,20,40,55,19,44}
[#.#.#.#...] (2,5,8) (0,1,2,3,4) (0,2,4,6) (1,4,5,6,8,9) (3,7,8,9) (0,2,3,5,6,7,9) (3,5,6,8,9) (2,3,4,5,6,7,9) (2,4,5,6,7) {41,14,69,227,51,220,229,60,198,223}
[..###.] (2) (0,2,3,5) (1,4,5) (0,1,3) (1,4) (1,2,3,4) (2,4,5) {25,44,50,34,52,44}
[...#..#] (3,6) (0,3,4,5) (0,2,6) (0,1,2,5) (0,1,2,3,4,6) (1,2,3,4) {38,25,29,44,39,14,29}
[.#..#..#] (0,1,3,4) (4,6) (1,3,4,7) (3,5,7) (3) (0,3,7) (2,4,7) {15,25,19,55,49,11,5,48}
[##...#..#.] (5,6) (1,3,5,7,8,9) (1,3,4,8,9) (2,3,5,7) (2,5) (0,3,5,7,8) (0,4,7,9) (1,2,3,4,5,6,8,9) (1,2,7,8) {25,40,49,52,24,71,29,56,60,27}
[.#.......#] (2,9) (0,1,3,4,7,8) (1,6,8) (0,2,3,4,6,7,9) (7,8) (0,1,3,4,5,6,7,9) (0,1,2,9) (5,6,7) (1,2,3,4,6,8) (1,2,3,4,5,6,8,9) (0,3,5,6,7,8,9) (0,2,3,4,5,6,8) (4,5,6,7,9) {234,68,67,267,70,239,278,236,297,233}
[#.##...#.] (1,2,3,4,5,6,7,8) (0,1,3,5,8) (0,3,5,6) (3,4,5,6) (3,8) (0,6,7,8) (0,1,4,5,6,7,8) (1,2,3,6,7) (0,1,5,6,7) {39,46,18,33,20,34,53,47,34}
[##.#] (2,3) (1) (0,1,3) {9,24,129,138}
[...####] (0,2,3,4,6) (0,1,2,4,5,6) (0,2,4,5,6) (0,1,3,4) (1,4,6) {34,30,18,29,46,5,30}
[##.##] (0,3) (1,3,4) (0,1,2) (0,1,3) (1,4) (2,4) (0,4) {174,55,39,159,43}
[###.] (1,2,3) (0,2) (1,2) (0,1,2) {177,189,203,7}
[..#..] (1,4) (0,3) (2) {4,11,19,4,11}
[#...#] (2,3,4) (1,2,3,4) (0,1,4) (0,1) {14,17,12,12,17}
[.##.####.] (1,2,3,4,5,7,8) (1,2,4,5,6,7) (1,2,3,4,6,7) (4,5) (0,4,5,8) (0,1,2,3,4,5,8) (5,6) (0,1,2,6,7) {10,43,43,19,51,42,41,39,7}
[##...#..] (0,1,3,4,5,6) (0,2,3,6,7) (4,6) (0,1,2,3,4,5) (1,2,3,4,5,7) (3,4,5,6,7) (0,1,2,3,5,6) (1,2,3,5,6) (0,1,3,5,6) (1,2,7) {207,240,65,248,49,242,226,34}
[#..####.#] (1,3,5,6,7) (1,2,4,5,6,7) (0,4,5,6,7) (0,1,2,3,6,7,8) (0,1,2,3,8) (2,3,6) (0,3,5,6,7,8) (2,3,4,6,7,8) {42,58,60,67,51,60,90,84,41}
[#.#####..#] (0,3,7) (1,4,5,6,7,8) (0,1,2,4,5,6,8,9) (6,7) (0,3,6,9) (1,2,3,4) (1,2,5,6,8) (0,3,4,8,9) (0,1,2,3,4,5,7,8) (1,4,5,9) (0,2,3,4,7,8,9) {153,42,41,156,65,32,131,55,39,153}
[####.#.###] (0,2,3,4,5,6,7) (0,3,4,5,6,7) (0,1,2,3,5,7,8,9) (0,1,8) (0,1,2,9) (0,1,2,3,5,6) (1,2,3,4,5,8,9) (0,3,4,5,8,9) (0,2,4,5,6,8,9) {81,65,69,56,44,72,39,33,63,58}
[.#.#.] (0,4) (4) (1,2) (1,3) (1,3,4) (1,2,3) (0,1,4) {19,45,21,19,45}
[#####.##..] (4,5) (1,4,6,7,9) (6) (1,2,8) (7,8) (0,5,6,7,8) (1,2,9) (1,3,5) {9,50,26,14,24,37,36,20,16,30}
[#....####] (0,1,2,3,5,7) (0,3,4,5,7,8) (0,3,5,6,8) (0,2,3,4,5,6,7,8) (1,5,6,7) (0,2,3,6,7,8) (1,2,3,6,8) (0,4,7) (1,2,5) {40,28,39,49,7,33,48,33,42}
[##..#..] (3,4,6) (0,1,3,4,5) (1,3) (1,2) (0,1,4,5) (0,3,4,5,6) (0,1,2,3,4,6) (0,4,5,6) {61,71,25,61,65,47,39}
[.##.#.##.] (0,2,3,4,6,7) (0,2,3,4,7,8) (0,1,2,7) (0,2,3,5,8) (0,6) (1,4,5,6,7) (0,1,2,3,4,6,7) (0,1,2,4,6,7,8) (0,1,8) {73,49,52,31,35,3,28,53,32}
[####..##.#] (0,1,2,3,4,6) (0,7,9) (0,1,2,3,5,6,7,8,9) (1,2,5,6,7,9) (1,3,8,9) (1,2,3,4,5,6,7,8) (1,2,3,6,7,9) (5,6,7,9) (1,2,3,6,7) (1,4,6) {16,95,61,61,32,52,85,65,42,64}
[#...#....] (0,4) (2,3,5,6) (2,4,5,6,8) (0,2,3,7,8) (0,2,3,4,6,7,8) (2,5,8) (1,2,5,6,8) (3,4,5,8) {9,0,27,23,24,33,12,7,37}
[.#.#..##.#] (0,2,3,4,5,7,8) (0,3,4,5,6,8,9) (0,1,2,3,5,6,7,9) (1,2,3,5,6,8) (2,7,8) (0,3,4,5,6,9) (2,4,6,8) (3,7,8) (0,3,4,5,6,7,8,9) (0,1,3,5,7,8,9) {57,30,29,74,36,65,50,52,58,53}
[###.#] (0,1,4) (0,3,4) (2) {20,1,3,19,20}
[..##.#..] (3,4,5) (0,1,2,4,7) (0,2,5,6,7) (0,2,3,5,6) (0,2,4,5,6,7) (2,3,5) {39,1,57,32,27,62,38,31}
[#..##.#..#] (2,3,6,9) (6,7) (2,4,5,8) (0,1,2,5,6,8,9) (3,9) (0,1,3,4,5,8,9) (0,1,2,3,4,5,6,8,9) (0,2,4,5,6) (2,5,8) (1) (0,1,4,6,7,8,9) (0,1,2,4,5,6,7,8) (1,2,6) {65,81,91,28,74,84,83,41,84,40}
[###.#] (0,1,2,4) (3,4) (2,3) (0) (1,4) {37,38,30,20,48}
[#.#.] (0) (2,3) (3) (1,3) {20,1,1,7}
[.###..#.] (0,7) (0,2,4) (3,5,6) (3,5) (2,4,5,6,7) (0,1,3,4,6) (0,3,4,5) (0,6,7) {49,14,13,41,42,37,43,27}
[#.....#] (2,4,5) (0,1,5) (1,6) (2,3,5,6) (2,4) {20,21,35,2,33,36,3}
[####..] (0,1,4,5) (1,2,4,5) (0,1,2,4) (0,1,2,3) (2,4,5) (0,2) {166,52,198,19,46,34}
[...#] (1) (0,1,2) (0,2) (1,3) {201,37,201,16}
[.#####..#] (0,5) (1,6,8) (3) (1,3,5,6,8) (2,5) (4,6) (0,4,5,7) {19,12,4,16,28,35,32,8,12}
[.#.#] (0,2,3) (0,1,3) (0,1) (1,3) (2,3) {38,27,14,23}
[####....] (0,1,2,5,7) (0,2,3,4,6,7) (3,6) (0,1,2,3,4,5,6) (1,6) (4,7) (0,3,4,5,7) (2,5) (1,4,5) {42,45,30,50,63,50,49,51}
[#.#...#] (0,3,4,5,6) (0,1,2,3,4) (0,1,3,4,5) (2,3,4,5,6) (1,2,5,6) (0,1,5) (1,2,4) {183,184,185,186,198,42,36}
[..#.#.##.] (0,2,8) (0,7,8) (7,8) (0,5,8) (2,6) (1,6) (0,2,3,5,7,8) (0,3,5,6,8) (0,2,4,5,7) (0,1,2,3) {59,202,50,27,8,39,221,39,49}
[.#.#######] (2,4) (3,4,6,9) (1,3,4,5,6,7,8,9) (3,4,5,6,7) (0,1,2,3,4,6) (1,2,3,4,5,6,7,8,9) (0,4,8) (0,1,4,5,6,8,9) (0,1,3,4,6,7,8,9) (0,1,2,3,4,5,6,8,9) {54,55,46,250,281,224,254,222,55,51}
[#....] (0,4) (2,3) (1,2,3) (1,4) (0,1,4) {28,130,107,107,44}
[..###] (2,3,4) (1,2,3,4) (0,2,3) (0,1,4) {117,117,22,22,129}
[#.....#..#] (1,3,4,6,8) (0,2,3,4,5,7,9) (2,3,4,8) (0,4,8) (5,7) (6,7) (0,1,3,4,6,7,8,9) (0,1,2,4,5,7,8) {34,38,37,53,64,18,40,47,57,23}
[###.] (0,1,2) (1,3) {7,7,7,0}
[#...] (1,3) (0,2) (0,3) (0,1,3) {45,18,18,32}
[...#.#.] (1,2,6) (1,4,6) (0,2,3,5) (3,5) (3,4) {13,37,32,29,22,25,37}
[....##] (0,3) (1,2,3,4) (1,5) (0,1,3,4) (2,4,5) (2,3,4) (0,1,2) (2,5) {43,228,44,44,46,195}
[.#..#] (1,2) (0,1,4) (0,2) (1,4) (0,3) (1,2,3,4) (0,1,3) {40,214,192,38,35}
[#..#.#.#..] (2,3,4,5) (1,3,4,6,7,9) (0,2,3,4,5,7,8,9) (2,6,8,9) (5,8) (0,5,8) (0,1,2,3,5,6,8) (0,1,2,3,4,6,7,8) (1,4) (2,5) (0,1,4,7,9) {37,30,63,35,49,44,33,34,55,46}
[######.] (0,3,4,6) (2,3,5) (2,5) (2,3) (0,1,2,4,5) (1,2,6) (0,6) (2,4,5,6) (0,1,2,5) {9,26,74,36,11,36,28}
[.#..] (3) (0,1,3) (1) (0,2) {28,25,20,24}
[.#..] (2) (1,3) (0,3) (1) (0,1) {18,22,17,16}
[.####.#.#.] (0,1,4,5,6,8,9) (4,9) (1,2,3,4,8,9) (1,3,4,5,6,8) (4,8) (0,2,3,9) (1,7,8) (0,2,3,4,5,6,7,8) (0,2,3,6,7) (0,1,2,3,4,9) (1,2,3,5,6,8,9) {27,42,30,39,62,22,26,10,50,35}
[##.#..##..] (0,3,8) (0,2,3,9) (1,2,3,4,6,7,8,9) (4,6,7) (0,4,5,7,8,9) (1,2,3,4,5,8,9) (0,3,4,5,8,9) (0,3,4,7,9) {49,21,30,60,68,28,29,50,50,63}
[.##.#.] (1,3) (1,2) (4,5) (0,1,3) (1,4) (5) (0,3,4) {15,25,3,20,4,4}
[.#....#.#] (2,3,6) (0,1,2,4,5,6,7,8) (0,1,2,3,4,5,7,8) (5,6,7) (3,4) (0,1,3,7) (0,4,8) (0,2,8) (1,2,4,5,7,8) (0,1,3,4,6,7) {216,214,66,206,67,47,47,215,56}
[#..#..] (1,2,3,5) (0,3) (0,1,4) (0,2,3,4,5) (0,3,4) (2,4,5) (0,1,3,5) {45,26,35,51,39,45}
[###.#] (0,4) (2) (0,2,3) (0,2,3,4) (0,1,2,4) (1,3) {20,8,21,25,6}
[##..#..#] (0,1,4,5,7) (5,7) (0,3,5,6,7) (1,3,4,6) (0,1,4,5) (1,2,4,5) {21,21,5,5,21,32,5,19}
[.###..] (0,2,3,4) (3,5) (1,2,5) (0,2,3) {19,9,28,25,2,15}
[#.#..] (0,1,3,4) (0,2) (0,2,3,4) {35,14,21,32,32}
[.##..##.] (1,2,4) (0,1,5) (2,3) (0,1,2,3,4,6) (1,3,5,7) (1,2,7) {33,54,134,119,25,21,15,11}
[#.#.###] (0,1,2) (0,2,5) (0,3,4,6) (0,1,3,5) (1,2,4,5,6) (0,1,2,4,5,6) (0,3,5,6) {179,163,145,37,12,35,21}
[###...] (1,2,4) (1,4,5) (2,3,4) (1,2) (0,1,5) {10,47,38,10,29,19}
[###.] (0,1,2) (0,1) (0,3) {203,36,16,167}
[.##.....] (0,3,4,5,7) (0,1,2) (2,3,4,5,6,7) (0,2,4,5,7) (0,1,3,4,5,6) (0,4,5,6,7) (0,1,2,4,6) {64,34,52,22,53,39,29,38}
[.#.##....#] (5,8,9) (1,2,3,4,6,7) (6,7) (1,2,4,6) (0,2,3,5,8,9) (3,4,7,9) (2,6,9) (0,1,3,6,7,9) (1,2,5,6,7) (0,1,2,4,5,6,7) {48,71,86,48,42,48,96,71,19,50}
[..##.##] (0,2,5,6) (3,4,5,6) (1,3,5,6) (0,2,3,5,6) (2,3,5,6) (1,2,3,4,5,6) (1,4) (0,4) (2,4,5,6) {37,42,62,70,65,87,87}
[#.#.####.] (0,1,2,3,6,7,8) (0,1,2,6,7) (0,2,6,7) (1,4,5) (5,6) (0,1,4,6,8) (0,3,4,6,7,8) {10,21,7,4,15,32,30,8,6}
[##.#.##.#.] (0,1,2,5,7) (0,1,2,3,4,5,7,9) (0,3,4,5,7) (1,2,4,5,6,8) (0,2,3,7,9) (0,2,3,5,6,7,8) (0,2,4,5,6,7,8,9) (0,3,5) (1,2,4,5,6,8,9) {102,56,95,67,60,105,42,82,42,54}
[#...###.#] (0,1,2,3,5,6,7,8) (1,2,6,8) (0,1,2,4) (2,3,4,6) (2,3,5,7) (1,3,4,5,7,8) (4,6,7) {6,37,45,50,34,40,23,40,33}
[#.#.#.] (0,1,2,3,5) (0,1,2,4) (1,2,3,4,5) (0,1,3,5) {50,52,38,35,19,35}
[#..#.##] (0,1,2,4,6) (3,6) (2,3) (0,5) (0,2,3,4,6) (0,5,6) (0,1,3,5,6) (0,3) (3,5) {36,12,12,51,5,49,32}
[...#.##..#] (1,6) (3,4,5) (0,1,3,4,5,6,8,9) (0,6,9) (5,7,9) (2,4,5) (0,4,6,8) (0,2,3,4,5,8,9) (0,1,2,3,6,7,8,9) (7) (3,6) {42,13,11,42,51,41,56,24,31,32}
[...#] (2,3) (3) (0) (1) (0,1) {16,26,0,17}
[...#..##..] (3,5,6,8) (0,1,3,4,6,7,9) (0,2,4,5,9) (2,3,6,9) (0,1,2,6,7,9) (1,5,7,9) (5,7) (3,6,7) (2,3,4,5,6,7,8) (0,1,4,5,6,7,8) {54,40,50,58,61,73,82,63,48,51}
[.#...] (2,3,4) (1,2,3,4) (0,2,3) (2) (1,3,4) (4) (0,1) {18,34,34,47,41}
[..#.#] (0,1,3) (0,1,2,3) (1,4) (0,1,2) (0,2) (2,3) {22,22,14,17,4}
[#..#......] (1,4,7) (2,3,4,8) (7,8) (0,1,2,4,7,8) (1,3,5,6,7,8) (2,4) (0,2,3,4) (0,1,2,3,5,6,8) (1,8) (0,3,5) (0,1,2,3,5,8,9) {26,45,30,20,36,20,8,41,52,0}
[..#...] (1,2,3) (0,1,2,5) (0,2,3,4) (0,2,4) (1) (2,3,5) (1,2,3,4) {20,35,47,31,25,12}
[##..#.#.#] (0,1,2,3,4,5,7) (1,5,6,7,8) (1,3,4,5,6) (3,6,7,8) (0,5,7) (0,4,7) (2,4,6) (0,1,3,4,5,7) (1,3,4,5) (0,1,3) {27,45,31,46,40,35,50,45,29}
[.#.####] (4) (4,5,6) (1,2,3,5,6) (2,3) (2,3,4,5,6) (1,2) (0,5) {9,34,73,55,51,57,48}
[..####....] (0,1,2,5,6,7) (1,3,4,6) (1,3,4,6,7,8,9) (0,1,2,3,8,9) (0,1,5) (0,1,2,3,4,5,7,9) (3,6) (0,2,3,8) (0,1,4,6,7,8,9) (0,7) {63,83,29,73,65,14,74,66,54,56}
[...#] (1,2) (0,1) (0,3) (2,3) (0,1,3) {14,5,4,17}
[#..#] (1) (0) (2) (0,1,3) (0,1,2) {16,20,15,2}
[##..#.] (1,2,3) (1,2,3,4,5) (0,2,4) (0,2,3,5) {25,187,212,193,201,188}
[##.###.#.#] (5) (0,2,5,7,9) (6,8) (0,3,4,5,8,9) (0,2,3,6,7,8,9) (0,1,2,3,8,9) (4,6,7,9) (2,5,6,8) (0,2,6,7,8) (0,3,4) (0,1,2,3,5,7,8,9) (0,1,3,4,8) {75,26,62,51,38,46,65,57,90,54}
[.#.##] (0,1,3) (2,3) (1,3,4) {12,16,16,32,4}
[#.#....###] (0,5) (0,1,8) (0,1,2,3,4,5,6,7,9) (1,8) (2,3,5,6,9) (0,2,3,4,5,7,8,9) (1,2,3,4,5,7) (0,2,7,8,9) (1,3,5,6,7,8,9) (0,2,3,4,5,6,8,9) {60,34,64,61,44,74,41,52,46,62}
[.....#] (2,3,5) (0,2,4) (1,2,3,5) (3,5) (2,5) (0,3,5) (0,1,2) (0,3,4,5) {30,14,26,16,12,20}
[...#..#.] (0,1,2,3,6) (0,4,6,7) (1,3,4,5) (1,2,5,6,7) (0,1,2,3,4,7) (0,1,5) (5,6) (0,2,4,5,6,7) {45,38,37,33,26,26,42,23}
[####] (0,1,3) (2,3) (0,1) {20,20,19,24}
[#.##.] (2,4) (2,3,4) (0,1,3) (0,1) (0,2,3) {27,22,33,21,28}
[#####.#] (3,4,5,6) (0,4) (0,1,3,5) (2,4,5) (3,4,5) (3,5) (3,5,6) {17,10,7,159,46,166,16}
[###..] (3,4) (1,2) (0,1,4) (1,4) {5,18,13,1,6}
[#.#.##.###] (0,2,3,4,6,7,8,9) (1,3,5,6,8,9) (0,1,3,4,5,6,9) (3,5,6) (0,1,2,3,8) (2,3,8) (0,3,4,9) (0,1,2,4,5,7,8,9) (0,3,5,6) (2,4,5,6,9) (0,5,7,8) (0,5,6,7,8,9) (0,1,3,4,5,6,7,8) {122,57,78,106,78,115,90,72,105,76}
[###....##] (3,6,7,8) (0,3,6) (0,1,2,3,5) (0,1,3,4,6,7,8) (4,7) (0,1,2,3,6) (0,1,5,7) (0,1,2,7,8) (6,8) (5,8) (0,1,4,5,6,7,8) {112,94,52,84,40,47,99,75,86}
[##......##] (2) (0,1,2,4,5,7,8,9) (0,1,2,3,4,5,8,9) (0,2,4,5,6,7,9) (0,1,4,7) (0,4,9) (0,1,6,8) (4,6) (5) (3,4,6,8) (0,3,5,6) (0,3,5,6,7,9) {58,20,22,42,60,49,45,8,26,37}
[....#..] (1,3,4) (2,6) (0,1,2,3,4) (1,2,3,4,5) (1,2,4,6) (0,5,6) (0,1,3,5,6) (4,6) {20,51,42,49,54,32,37}
[####.] (0,2,3) (0,4) (2,3,4) (0,2) (0,1,3,4) (0,3,4) {48,13,47,53,41}
[.#.##.#..#] (4,5,7) (0,2,3,4,5,6,7) (0,3,4,5,6) (1,3,5,7) (2,8) (0,1,2,3,4,5,6,9) (0,1,3,4,5,6,8,9) (0,1,3,4,5,6,7,8,9) (2,4,5,8) (3,4,5,9) (4,7,8) (3,6,7,9) (0,2,3,5,6,8,9) {42,30,63,73,70,92,46,50,68,48}
[..#...] (0) (0,1,2) (4) (2,3,5) (1,2,4,5) (3,4) (1,2) {33,40,47,27,50,18}
[#.##...##] (1,2,3,4,6,7,8) (5,6,8) (0,2,4,6,7) (0,5,8) (2,4,6,7) (0,2,3,6,7,8) (1,3,4) (0,1,2,3,6,7) {46,137,63,155,160,6,64,63,30}
[##.....##] (0,1,2,6,7) (0,1,3,4,6,7) (0,1,3,4,8) (2,6) (0,2,3,4,6,8) (2,6,8) (2,3,6,7) (3,5,6) (4,8) (0,1,3,4) (0,1,3,4,5,6,7,8) {75,61,74,98,68,34,123,60,50}
[#..######.] (0,3,4,5,7,8) (0,2,3,5,9) (1,2,3,5,6,7,8,9) (0,1,3,4,5,6,7,8,9) (3,4,5,7,9) (1,2,8) (6) (0,3,4) (2,3,9) (1) (7,8) (0,1,2,4,6,7,8,9) {170,155,44,188,180,174,145,180,173,170}
[...###] (0,1,5) (0,1,3,4) (0,3,4,5) (1,2,5) {59,58,18,39,39,57}
[#...#..#] (0,1,2,3,4,6) (4,6) (1,5) (0,1,2,3,5,7) (5,6) (0,1,2,3,6) (0,1) (1,2,4,5,6,7) {26,44,32,19,24,182,194,17}
[#.#.#] (0,1,2) (3) (0,1,3) (0,2,4) {21,17,14,16,4}
[#.###.#] (2,3) (1,6) (0,4,5,6) (0,3,5,6) (2,4,5) {17,10,23,22,18,30,27}
[#.##] (0) (0,1,2) (3) (0,2,3) (1,2) (1,3) {48,52,56,35}
[.#....] (1,2,3,4) (0,2,5) (0,1,5) (0,3,4,5) (2,3,4) {21,23,26,27,27,21}
[#.###.] (3,4,5) (2,4,5) (1,3,4,5) (0,5) (1,2,3,4,5) {132,25,18,42,50,182}
[..#####] (0,1,2,3,4,5) (2,3,4,5,6) (0,6) (0,3,5) (1,2,3,4,5) (1,2,4,6) {38,21,24,27,24,27,22}
[..##.##] (1,2,3,5,6) (0,2,3,5,6) (2,4,6) (4,5) (0,1,2,3) (1,2,4,6) (0,4) (0,3,5,6) (2,3,5,6) {49,27,65,47,57,42,50}
[#....#] (0,1,2,3,4) (0,2,5) (1,3,4) (0,5) (0,2,3,4) (0,1,2,4,5) {178,166,166,154,168,41}
[..#....] (0,2,3,4,6) (0,2,6) (1,2,4,5,6) (0,1,3,4,6) (2) (1,2,3,5,6) {43,46,77,48,49,33,76}
[.##..##] (1,2,3,4,5,6) (2,3,5,6) (0,1,2,3,4) (1,2,5,6) (0,1,2,3) (1,3,4,5,6) (2,4) {31,56,66,55,55,28,28}
[##.##..#.#] (0,1,3,4,5,6,9) (0,1,5,6,7,8,9) (1,4,5,6,8,9) (0,3,8) (0,3,5,7) (1,4,5,9) (2,4,5) (1,7) {189,49,16,182,58,81,32,23,166,49}
[#.....#.] (6,7) (0,6) (1) (0,1,2,3,4,5,6) (4,6) (0,1,2,3,4,6) (1,2,3,4,6) (0,3) (1,5,6) (0,1,2,3,5,7) {46,198,194,211,209,8,228,3}
[..#.#..#] (0,1,2,4,5,7) (1,5) (0,2,3,4,5,6) (0,2,3,5,6) (0,1,3,6) (3,6) (4,5) {62,28,55,62,52,75,62,18}
[#.###.##.] (1,2,6,8) (0,2,3,4,5,7,8) (1,5,8) (0,1,3,4,5,6) (0,2,3,4,6,7) (5) (5,7) (0,1,3,4,5) (1,6,8) (5,6,7) (0,1,3,5,6,7,8) {34,213,177,34,21,66,191,27,202}
[.#......#] (0,1,2,4,7) (1,3,4) (0,1,2,4,5,6,8) (0,1,3,4) (0,3,4,5,6,7,8) (2,4,6,7) (2,3,4,5,6,7) (0,3,5,8) (1,2,3,4,5,6,8) (1,2,4,5,6,7,8) (0,1,5,7,8) {51,57,39,52,78,54,51,36,46}
[..###.###.] (0,1,2,4,6,9) (2,4,5,6,7) (0,3,5) (1,2,5,7,9) (1,2,8,9) (0,1,2,4,6,7,8,9) (2,3,4,6,7,8) (1,2,4,9) (0,1,2,3,5,6,8,9) (1,3,8) (0,1,2,4,5,6,7,9) (5,6) {50,66,77,44,46,65,67,47,43,56}
[.#.##..] (3,4,6) (0,3,4,5) (3,4,5,6) (0,1,3,4,6) (0,1,2,5) (0,2,5,6) (1,5,6) (0,4) (1,2,3,4,5) {45,51,38,57,68,68,62}
[..#.] (0,3) (1,2,3) (1,3) {8,19,6,27}
[.#...] (3,4) (2,4) (0,3,4) (1,3) (2) {1,0,22,1,12}
[#...####] (1,2,5) (3,5,6,7) (3,4) (0,1,6,7) (1,3,6,7) (0,4,5,6,7) {30,33,0,30,16,27,60,60}
[####..##..] (0,4,5,6,7,9) (0,2,4,6,9) (0,1,2,3,5,6,7,8) (1,9) (0,1,3,4,5,6,7,8) (0,1,3,7,9) (3,7) (1,3,4,6,7,9) (1,2,3,4,5,7,8,9) (0,1,2,6,8) (0,1,2,4,8,9) (0,1,2,7,8,9) (1,3,5,7,8) {211,227,193,67,188,46,42,85,204,212}
[.####] (2,3) (0,1) (1,2,3,4) (0,3,4) {7,14,13,13,7}
[#..##...#] (3,6,8) (3,5,7,8) (0,3,4,8) (0,7) (1,2,3,5,6,7) (0,1,8) (2,3,4,5) {22,28,189,229,176,209,33,46,49}
[#..##] (0,2,3,4) (0,1,2,4) (1,2,3) {14,174,175,162,14}
[###.#####] (0,5) (0,2,3,4,5,7,8) (0,2,3,4,6,7,8) (0,1,2,3,5,7,8) (0,1,3,4,7,8) (4,6,7,8) (1,2,5,6,8) (0,6,8) (3,4,5,6) {72,32,43,50,51,56,40,62,74}
[.#.###.#] (0,1,2,3,5,6,7) (1,2,5,6) (1,4,5,6,7) (1,3,7) (0,2) (0,2,3,4,5,6,7) (2,3) (4,5) {32,42,172,154,27,48,45,40}
[#.......] (4,6) (1,3,4,5,6,7) (0,1,2,3,6,7) (0,1,3,4,5,6,7) (1,2,3,4,7) (0,1,2,7) {40,60,38,46,39,22,31,60}
[###..#..##] (0,1,2,5,8) (2,3,4,5,7) (4,5,6,7) (1,2,6,9) (1,3,5,8,9) (3,5,7,9) (0,1,2,3,4,6,7,9) (1,7) (0,2,3,5,6,7) (1,2,3,5,6,7,8,9) (0,1,2,4,7,8,9) (0,3,6,8,9) {43,59,63,69,60,67,53,82,46,58}
[##.##.#] (0,1,2,3,5,6) (0,1,6) (0,1,2,3,5) (0,2,3,4) (0,1,3,4,5,6) (0,3,4) (1,3,5) (1,2) {64,70,51,73,34,53,27}
[#....#] (0,5) (4,5) (2,3,4,5) (0,3) (0,1,2,3,5) (1,2,3) (1,3) (3) {13,20,32,45,18,27}
[..###..#.] (0,1,4,5,6,8) (2,3) (1,2,3,4,7,8) (0,1,2,3,4,5,6) (2,3,4,6,7,8) (0,6,7) (1,4,6,7) (0,1,5,6,7) (1,2,3,4,5,6,7) {66,84,43,43,66,67,91,62,26}
[...#.###.] (0,1,4,5,6,8) (0,1,2,3,4,7) (0,1,3,4,5,6,7,8) (0,1,5,6) (0,2,3,4,5,7) (1,3,7) (0,2,3,4,7) (1,2,3,4,5,7) {73,67,44,58,73,52,36,58,29}
[.##.##..#] (2,3,4) (0,2,4,5,6,7,8) (0,7,8) (0,1,2,3,4,6,8) (0,2,5,8) (2,3,4,5,7) (0,1,2,7) (1,5) {47,27,64,47,58,29,31,32,45}
[###.] (1,3) (0,1,2) {2,7,2,5}
[#.##..##] (1,4) (3,5) (0,3) (0,3,4,5,6,7) (0,2,5,6) (6,7) (1,2,4,5,6) (0,1,2,3,6,7) (0,1,3,4,6,7) {176,47,23,186,34,29,47,38}
[..##.#.] (0,1,2,4) (2,3,6) (0,1,3,4,5,6) (2,3,5) (0,2,4,5) {129,116,35,136,129,143,121}
[.#.#.#] (0,1,2,4,5) (0,1,5) (1,3,4) (0,1,2) (1,3,5) {17,34,15,17,27,20}
[####.#.] (0,1,2,3,6) (0,2,3) (0,6) (0,1,4,6) (1,2,3,4,5) (0,1,4) {34,37,23,23,36,15,8}
[####.#.#] (0,1,2,3,4,6) (3,5) (0,2,5) (0,1,2,3,4,5) (0,1,7) (0,3,6) (0,1,2,4,6) {70,38,46,63,31,44,39,7}
[..##.] (1,3) (3) (2,3) (0,1,4) {1,18,20,44,1}
[.#....#.] (0,7) (1,2,3,4,5,7) (0,1,2,5,6,7) (2,3) (1,3) (1,2,4,5,6,7) (1,4,6) (0,2,5) {50,64,53,33,28,43,41,42}
[.##.#.##] (1,2,7) (0,2,3,4,5,6,7) (4,6) (0,1,2,3,4,7) (0,1,2,4) (0,6,7) (0,1,5) (2,3) (3,5,6,7) {42,42,46,28,37,15,40,59}
[..###..#.] (7,8) (3,4) (1,2,7) (0,2,7) (0,1,3,4,5,6,7) (1,5,7,8) (3,5) (1) (0,1,3,4,8) (3,6) {49,63,24,69,46,24,38,54,30}
[#.....] (0,1,3,4,5) (0,1,5) (0,3) (0,3,4) (1,2,5) (1,2,4,5) (0,1,2,4) {53,76,41,33,45,71}
[....###..#] (0,2,3,4,6,8) (0,1,3,4,5,6,7,9) (1,7,9) (1,3,5,6,8) (1,6) (2,3,4,5,8) (5) (0,1,7,8) {44,61,26,55,35,49,49,36,66,16}
[.##...#.#.] (0,1,2,3,4,6,7,9) (6,7) (0,3,4,6,7,8,9) (1,2,4,5,6,8,9) (0,2,4,5,6,7,8,9) (1,2,3,4,6,7,8,9) (0,1,3,4,9) (0,3,4,5,6,7,9) (0,1,2,4,6,7,8) {56,70,54,72,93,31,93,73,50,93}
[..#...##..] (2,6,7) (0,1,2,3,4,5,8,9) (0,2,3,4,6) (1,2,3,4,5,6,7,9) (2,3,4,5,7,9) (0,8,9) (0,1,2,3,4,5,7,9) (0,2,3,4,5,6,7,8) {41,32,58,52,52,49,40,45,30,35}
[#..##.] (0,1,2,4,5) (0,1,3) (2,3,4) (0,2,5) (1,3,4,5) (4) (4,5) (1,3,4) {46,55,34,43,52,36}
[#.#.] (0) (2) (1,2,3) (1,2) (0,3) (0,1) {205,41,37,191}
[##.#] (0,1) (2) (3) (1,3) (0) (0,1,3) {150,22,8,18}

View File

@ -0,0 +1,636 @@
ngx: mgt dpm fiq
obs: din fhn tde
arj: zlz olw
jne: dlg rvw nez znh akl ykj qjd ted ziq nfm lyx fqq clj amn yfx svy hgr vpf lph xjq zhs yqs tjy jyv
qfo: rsh pym
qlu: ssk
iap: zde ahj
zsn: nwa
yob: sot yzl ipk
quk: gbk xee
cam: nfy krb gcg
yzl: keh hqp hyd rwd
ewy: lwq rar ibn
kqf: cba
ine: nyv
ofy: vqw ayn kfa
eyc: nmk ydv
ull: dfr yoo
zuv: bsr fwe zwf
nfi: nby xnr cqg
xry: jne
nmk: tuk zin
ukc: pym rsh
inl: spm vzs vfa
xkn: ylg mub kfe dxo
izh: ogy huj umq
yes: joo foc gbi obs
vfa: yqi rnb xog epo
tzd: mcs
qhl: bcs ilh pwi
nzo: igj vev ezq ovi
jru: uag hmh
fbr: vkw
rll: out
joj: eje
ise: asm
dht: out
tcj: kdy jne cba
yvv: ovi igj vev ezq
wrp: toe qyy
urz: vfk
amn: lbv
olr: loc wqu
jyv: ine fgu rkh sca
mfw: fbc
irq: yzw wff arj
yke: btx
gto: irq voj mjc kwr
gwe: vev ovi
ipk: hyd rwd hqp
cba: jyv lyx clj fqq qjd ykj ted ziq zhs nfm vpf qvq xjq lph znh akl dlg rvw yfx svy nez hgr
gcg: gwv gpd
mzd: dse zsv
xit: igj
gbk: dpm
hqp: aev cps yxl
qjz: ahg mqz
xjq: mod fxr
ovi: ndd xdb rti qzo bys zct eyc qjz jyg ymo tyc rql wdt zfm qhl mwq laf wtr flm zxn
pym: sxa nxd
ubi: lsf rur
mhb: xdl cso ivw klt wwj
dwd: dsb sqa
ilh: kxo kqf
hgg: fbc uvx tui
ghf: fej uzq xqk vup aum
cqg: urz qww yea qqm
kfa: joj
xvy: xnr ikz
okt: vyo
vnr: vip
ube: hbp
nzn: uvx
eje: ssk you nor smf lua
wck: dgm fft uoa
xvi: cba
laf: ilh fyl bcs
lwq: yqm pbh dht
xlh: xee
ebs: kdy jne
xog: hvz
rql: loz xhp qdd fjr kxy
enu: out
cmq: nzn bcr czj
ozq: cba kdy
eys: vev igj
rkh: ejo vcu
ihu: bsr
ekp: eys ozn zvk nzo oap
car: jne kdy cba
lmy: rvh
lnm: jne
qgr: uvx
hmh: cfm
dbx: unc dgm
zry: dke xcl
onc: wce
sot: keh
koc: lua
aiv: odt cfm
umq: cps yxl
jhm: uvx fbc
zbu: ezq vev
iys: ozq
ike: hez
foc: tde
qhm: hcn vjs jru jxv
vvx: ezq ovi
xya: kdr
rvw: zms cbk
odn: fbc tui
yqs: tpz zrm ljr
mjc: yzw arj ydm csw
vqw: joj dac qgv ppy omh
ttt: ise
vaw: yes dke
tcl: yzm cmq qqt
hbp: tui uvx fbc
ojr: fft uoa
vzs: amk xog rnb
zrn: sjt jvv jhm
meb: rxj qif
gov: aev uho cps yxl
kwr: csw ydm yzw
gxb: ueq znm
cdj: nor smf lua ssk you
ctb: zbu
nzv: paa car
ydv: arh nhm zin wtn tuk
qzo: eji vnr skw twk
mml: omx xry tcj
krl: uho cps
ecj: wsy kxs ube hgj
fiq: lur cdj ksy zln
rar: tcm yqm
cta: vyo yxf
din: zoz rjt
qon: ihu ncv
mje: flt ise
tea: xdl cso
igj: bys eyc zct rti ndd iru jyg qjz rql flm zxn laf mwq
smf: xpx mck zpr cam tea wmb dkp rmk fxc oof lsk ull ito dwv lex
ito: pxx qfo uei ukc
yba: nnx qlu njz
ald: out
kfe: zsv jwn luj dse
rpe: lsf iph rur
ghe: nfi
tde: zoz dlc
dzo: wce
dak: mbu eng awg
xpx: ukc pxx
fwe: iyz krl
nez: pem
ciu: xhe vaw yjr wqt iap drz okt ric rmr jbn hrj aie tzd kis
vip: qbt ebs ltp ogk
akv: qfn xub
gze: dhl zlg wce
tyc: cul rvh bfv gtq
zlg: igj
drz: yxf vyo
wtn: lrn
huj: yxl cps uho
opp: rcm nch
ahd: gbk
zhs: mmq
flm: ojr
zfm: wck mqz dbx
fva: xza dhk zrn
wjk: fej xqk vup uzq aum
ric: meb lsc
jyl: zin tuk
rur: dak cqq dyy
wqw: ezq vev igj
fnp: kdy jne cba
agn: hei koc
hqj: mzd
bys: vnr skw twk eji
ymo: jyl nhq
rcm: svp
mck: xvy
vpf: ljr tpz
zvk: ovi
zms: rky zjm
qen: xja dhm
njf: rfr wrp bqm
jyg: pwi bcs fyl
cul: ozq lnm ham
pbh: out
iqx: ecj vkw hgv xny
ahj: ppa jwl
uqc: qen lbq
bsx: gto
rnb: qks zep
dac: eje nji
oel: hbo ahd quk xlh
cqq: mbu eng
jsg: zbb ymw
wce: vev
omx: kdy
nji: you nor smf
zrp: vvx wqw zqz eqn
fkz: you ssk lua nor
xdl: reh ptj
kxs: hbp cgr
lua: blo wmb cam tea cri dwv ull ito uqc lsk ghe lex mhb
iru: gtq bfv rvh iys cul
sce: cps
aer: ezq
stm: nfi ehl
pnu: fkz
xcl: gbi obs kai foc
nyv: tui
svy: zms
jqh: kwr voj
dhl: ovi igj vev
byq: wce dhl kdr
qht: jie iwf
cvf: xub
eng: out
rky: zrn
hdh: tzd dvw gul cta aqu sjk wqt vvb yjv qhm qyi ric
zsv: alg
nhq: zin tuk wtn arh
mxy: meb
sqa: hmu qcb adp
nnx: ssk you nor lua
nch: svp iwf
fcz: igj
nuv: ewy nxd
omh: zpe nji
ksy: ssk you nor lua smf
whv: ilk urf
sxa: rar ibn
cbk: ayx rky zjm fva
gbi: kfr tde
yzw: uaw olw
zlz: out
qbt: jne
qfn: tui
qxm: ilq gov
qww: ptp cck
ehl: ikz xnr nby cqg
cps: oel ckm cre ofy ghf hsl vza kcr wjk njf wzd tyo laa kaj tee lvd ttt
eji: ssx vip
wij: nvb alg
yqi: qks zep sce
hrj: xcl
keh: cps yxl uho
ugv: yvv zbu fcz
tee: bqm
jxv: aiv
jwl: thf vwr ctb
yoo: hez jqh gto
jvv: tui fbc
vjs: qiz aiv uag
alg: wew
blo: wwj klt ivw
kvt: xdq
mrt: out
mwq: ydv jyl tkf
you: ull uqc xpx mck dkp wmb rmk cam mhb
zep: uho
hcn: uag
kai: kfr fhn din
vgh: gbk ngx
inu: ube sxx
qbz: hei koc
xqk: qbz agn oct rtl
vev: qjz tyc jyg ymo iru ndd rti akp qzo bys eyc mwq laf wtr flm lmy zxn wdt zfm qhl
rvo: uba
jql: vev
dnq: ott
hwr: nch
ibn: tcm pbh yqm dht
kfr: jql rjt zoz
alp: amk xog epo rnb
svp: out
btx: tui fbc
dwv: lbq qen qfq
ptp: ict nal jyo ald
fky: nor lua ssk you
dxo: zsv jwn
bfv: lnm ham
awx: qiz
gwd: ugv
ndd: bcs pwi
toe: njz
lrn: tcj omx
jwn: alg nvb
zoz: ovi ezq vev
qgk: lua ssk
fgy: cck
qqm: vfk cck
zrm: fov
dfr: hez rwu jqh
dkp: bsx fmv
qdd: nzv dno
gtq: ozq lnm
ozn: vev
sxx: cgr
dyy: mbu mrt
xdb: ydv nmk nhq jyl
kdy: zhs yqs tjy svy hgr yfx amn lph xjq vpf ziq nfm ted ykj qjd lyx fqq clj rvw dlg akl qvq znh
dlm: gze byq dzo onc
kse: ssk smf
nul: gwd
vio: ecj
reh: zjv whv guw
gys: ssk you nor smf
jyo: out
hyd: cps yxl uho
wdt: iys
fxr: lcm
snc: uho aev yxl cps
wsy: cgr hbp
ydm: uaw olw zlz
kcr: kfa ayn vqw
kdr: ovi ezq igj
oyi: pnw kmw qgk
rjt: ezq vev igj ovi
yjr: ggc dlm
wqt: ahj
voj: arj csw wff yzw
zpr: xvy nfi ehl
cvr: jne kdy
ilk: rll loc
urn: tcm dht
dke: gbi
iri: nch
loz: dno zsn nzv
thf: aer fcz yvv
wff: uaw
hmu: huj cdn
qee: cmq qqt
lbq: cws sic xja dhm
qqt: czj ocy nzn bcr mfw
uql: qfn uba xub
nal: out
qks: aev uho yxl cps
sic: opp fex
sjt: tui
ott: izh hmu qcb adp
nwa: cba jne kdy
qcb: huj zrz cdn
vvb: dke yes
laa: wrp
arh: lfm mml lrn hcy
wlk: ylg
uzq: agn qbz rtl
znm: alp spm
cws: iri opp
ckm: flt tmi
fft: gnf fnp
ppf: ueq
fmv: gto rwu
fgu: pwn
uvx: tiq xkn kvt rkd kye veb dnq kvc hqj wlk gxb
xnr: qqm fgy urz
qiz: odt ekp cfm
jzn: fbc uvx
pwn: tui
svr: ciu hdh jmf
nor: zpr stm oof est uqc
ict: out
bcr: tui uvx fbc
cdn: yxl uho aev
rwd: yxl cps uho aev
dsb: qcb
gul: dlm
adp: huj ogy cdn umq
vfk: ald ict nal
wzd: xlh vgh quk ahd
ayn: dac qgv omh
ted: fbr vio gte dqu
cri: lbq
glg: tui uvx
gpd: rur
vza: fej uzq vup xqk
vwr: aer fcz gwe yvv
tui: rkd xkn yob dwd veb kye qon dnq ppf mwh wlk gxb
ymw: akv cfz
iph: dyy
vkw: sxx ube kxs wsy
ssx: ebs gqi ltp
qvq: egd
yea: ptp cck
lfm: xvi
cbe: kse nnx njz qlu gys
paa: kdy
gte: ecj hgv
ogk: cba jne kdy
qgv: zpe eje nji
qyi: vjs jru hcn
lsk: uei
ziq: sca mmq ine fgu
vup: qbz oct rtl
hsl: rfr
wym: snc
ncv: fwe bsr qxm
dno: cvr car paa nwa
hgy: zjv
zct: rvh cul iys
frm: loc
mgt: cdj lur zln
mmq: glg
jej: uql cvf akv
ekk: fjr qdd xhp loz
mbu: out
zwf: ilq gov iyz
urf: rll wqu enu
epo: sce qks zep
xhp: eit
mcs: mcu rxj qif
zpe: smf lua ssk
uaw: out
vuf: zbb jej
lcm: fbc
oap: igj ezq
yqm: out
xja: iri fex hwr
cso: ptj
hbo: gbk ngx
kxy: dno eit
kvc: sun yzl
ezq: ndd xdb eyc zct bys qjz ymo rql zfm qhl mwq ekk zxn lmy flm wtr
uoa: fnp wbw
zjv: frm
hez: kwr voj mjc
unc: fnp usx
dhm: hwr
iyz: uho
wtr: eji twk
cfz: xub
xfb: btx jzn lcm odn
aie: yxf vyo
jmf: zry yjv mxy ehz qyi ric okt aie hrj rmr wqt vaw yjr vvb drz aqu iap
dqu: hgv inu
wbw: jne
qyy: nnx qlu
ggc: dzo xya byq gze
xdo: rur rng iph lsf
wmb: ike yoo
est: dfr fmv bsx
dgm: wbw usx fnp gnf
jie: out
qjd: pem vuf
amk: zep
rwu: mjc
rsc: umq cdn zrz huj
akp: xhp kxy fjr loz
sca: vcu ejo nyv pwn
olw: out
wun: dzo gze byq xya
sun: hyd hqp
fjr: eit dno nzv
nhm: hcy lrn pyf
tyo: xlh vgh hbo
nfm: yke xfb fxr
pwi: peq
pem: jej ymw zbb
xza: jhm jvv sjt
akl: egd cbk
xhe: meb
lur: ssk you smf
cck: jyo
bqm: cbe toe yba
kaj: vup xqk uzq
uba: tui uvx
uho: njf wjk rwa kcr vza cre ofy hsl ghf oel ckm mje ttt kaj tee lvd laa tyo
tuk: mml
ilq: aev
rsh: nxd sxa ewy
gwv: iph lsf rur
mub: luj dse jwn wij zsv
mod: lcm jzn btx qgr
oku: yxl cps uho
xny: hgj
zin: lrn hcy
hgr: xfb
lex: krb nfy ves quu
pnw: ssk you lua nor
egd: fva
ogy: aev
skw: tdu ssx vip
zjm: zrn xza
wew: uho aev yxl cps
dhp: ott ewm sqa
nvb: oku wew
xdq: qxm xyh fwe zwf
kmw: lua smf nor you
dvw: dlm
zrz: yxl aev
hei: smf ssk
klt: reh
usv: hwr iri
czj: tui uvx
quu: rpe
luj: nvb
oof: nfy krb quu
yxf: xit zqz wqw vvx
ehz: zde nul
yxl: ttt wjk tee lvd laa vza hsl ghf ofy oel wzd
mdq: nor lua smf
cre: wrp
fqq: sca rkh fgu
asm: qgk kmw pnw fkz
tjy: dqu gte fbr vio
fhn: zoz jql dlc
mwh: xdq ncv zuv
zxn: tkf
lvd: kfa vqw ayn
ikz: urz fgy qqm
hvz: aev cps yxl
ayd: kse
rvh: ham lnm
eqn: igj
ppy: zpe
nfy: xdo ubi rpe
fyl: kqf kxo
ltp: cba
ahg: fft
ham: kdy jne cba
awg: out
spm: amk rnb xog yqi
aum: qbz agn
iwf: out
lbv: jej ymw
nxd: ibn rar lwq urn
veb: zuv
rmr: mcs lsc meb
qfq: usv cws sic dhm
vcu: uvx fbc
rtl: hei fky koc
nzd: ctb
kxo: jne kdy cba
dnn: gwe
rwa: ise flt tmi
rmk: ehl nfi
vyo: xit
ocy: tui
loc: out
njz: nor
yjv: wun dlm ggc
ivw: reh ptj
fov: otv
kye: znm inl
aev: mje rwa tee kaj lvd ghf hsl tyo oel ckm
aqu: jxv awx vjs
wwj: hgy reh
gnf: cba kdy jne
tdu: ltp ogk qbt ebs
mqz: unc fft dgm uoa
hcy: tcj xvi xry omx cvi
pyf: omx cvi xvi
dlc: ovi igj ezq
fbc: yob tiq dwd kpa lov dhp kvc qon tdd dnq mwh wlk hqj
dhk: sjt jvv jhm
otv: bcr nzn mfw czj ocy
lsc: qif mcu
usx: jne kdy
mcu: ezq vev igj ovi
rfr: toe cbe yba ayd
zln: ssk smf nor
ylg: zsv jwn dse luj
bcs: kxo peq kqf
ptj: whv guw zjv
krb: xdo gwv gpd
zbb: rvo cvf cfz akv
csw: zlz olw uaw
ssk: mhb lex lsk uqc ghe oof ull cam tea cri fxc wmb dkp xpx mck stm zpr blo
lov: ipk
lsf: cqq dyy
yfx: pem jsg lbv
tpz: qee fov
twk: ssx tdu vip
hgj: hbp hgg
ayx: xza
tiq: yzl sun
dpm: lur mdq
cvi: kdy cba
ppa: ugv thf dnn ctb
jbn: zde ahj
tkf: nhm tuk wtn zin
gqi: cba
dse: wym
nbp: ewy sxa nxd
tcm: out
cfm: eys oap
xub: uvx fbc
fxc: qfq qen
dlg: vio fbr gte iqx
peq: jne kdy
zde: nzd gwd ppa
guw: frm ilk olr
uei: rsh pym nuv
oct: hei fky
clj: yke
yzm: mfw
fej: rtl oct
xee: mgt
ueq: spm vzs alp
ljr: fov tcl
eit: paa
rkd: dxo kfe mub
hgv: wsy kxs ube hgj
odt: oap zvk eys ozn
rti: qdd xhp fjr
wqu: out
lph: ine
kpa: dxo
rng: dak
upd: qee tcl
sjk: zrp vyo
tdd: dsb ewm sqa
ykj: pem vuf lbv
tmi: asm pnu
nby: yea
xyh: iyz krl
flt: pnu oyi
lyx: zrm upd ljr
pxx: nbp
cgr: uvx fbc
znh: ljr
uag: ekp cfm
qif: ovi igj vev
rxj: igj ezq
kis: wun
bsr: iyz gov
zqz: ezq vev
joo: fhn
ejo: uvx tui
ewm: rsc
fex: qht
ves: gpd gwv xdo ubi rpe

129
bram/rust/src/day_08/mod.rs Normal file
View File

@ -0,0 +1,129 @@
use crate::utils;
use itertools::Itertools;
use petgraph::unionfind::UnionFind;
use std::collections::{BinaryHeap, HashMap};
const COORD_SPACE: usize = 1000;
const MAX_PAIRS: usize = 1000;
pub fn answer(text: String) -> (usize, u32) {
// Get coordinates
let coords: [Coord; COORD_SPACE] = text.trim()
.split_whitespace()
.filter_map(Coord::from)
.collect::<Vec<Coord>>()
.try_into()
.unwrap();
// Find all equivalence classes
let pairs = PairQueue::from(&coords);
let mut uf = UnionFind::new(COORD_SPACE);
for ( c1, c2 ) in pairs.pairs.iter().rev().map(|cp| (cp.c1, cp.c2)) {
// println!("Coord {c1} ({:?}) and coord {c2} ({:?}) are close together!", coords[c1], coords[c2]);
uf.union(c1, c2);
}
// println!("{:?}", uf);
// Collect sizes of equivalence classes
let mut groups: HashMap<usize, usize> = HashMap::new();
for x in uf.into_labeling().iter() {
*groups.entry(*x).or_insert(0) += 1;
}
// println!("{:?}", groups);
let mut equiv_class_sizes : Vec<isize> = groups
.values()
.map(|v| -1 * (*v as isize))
.collect();
equiv_class_sizes.sort_unstable();
// println!("{:?}", equiv_class_sizes);
( (equiv_class_sizes[0] * equiv_class_sizes[1] * equiv_class_sizes[2]).abs() as usize
// 87048 too high
, 0
)
}
#[derive(Debug)]
struct Coord { x: u64, y: u64, z: u64, }
impl Coord {
fn dist_euclid(&self, other: &Coord) -> i64 {
( self.x.abs_diff(other.x).pow(2)
+ self.y.abs_diff(other.y).pow(2)
+ self.z.abs_diff(other.z).pow(2)
) as i64
}
fn from(s: &str) -> Option<Coord> {
let ( x, yz ) = s.split_once(",")?;
let ( y, z ) = yz.split_once(",")?;
Some(Coord {
x: utils::str_to_u64(x)?,
y: utils::str_to_u64(y)?,
z: utils::str_to_u64(z)?,
})
}
}
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
struct CoordPair {
distance: i64,
c1 : usize,
c2 : usize,
}
struct PairQueue {
max_distance: i64,
pairs: BinaryHeap<CoordPair>,
}
impl PairQueue {
fn from(coords: &[Coord; COORD_SPACE]) -> PairQueue {
let pairs = coords
.iter()
.enumerate()
.combinations(2);
let mut queue = PairQueue::new();
for pair in pairs {
let (i, c1) = pair[0];
let (j, c2) = pair[1];
queue.insert(
CoordPair { distance: c1.dist_euclid(c2), c1: i, c2: j }
);
}
queue
}
fn insert(&mut self, pair: CoordPair) {
// println!("At max: {} (size {}) | Distance = {} | Max distance = {} (too large: {})", self.pairs.len() >= MAX_PAIRS, self.pairs.len(), pair.distance, self.max_distance, pair.distance >= self.max_distance);
if self.pairs.len() >= MAX_PAIRS && pair.distance >= self.max_distance {
// println!("STOPPING!");
return;
}
self.max_distance = self.pairs
.peek()
.map(|cp| cp.distance)
.unwrap_or(pair.distance)
.max(pair.distance);
// println!("Going on! Self distance = {}, pair distance = {}", self.max_distance, pair.distance);
self.pairs.push(pair);
if self.pairs.len() > MAX_PAIRS {
self.pairs.pop();
// println!("Popping {:?}", self.pairs.pop());
}
}
fn new() -> PairQueue {
PairQueue {
max_distance: 0,
pairs: BinaryHeap::with_capacity(COORD_SPACE + 1)
}
}
}

110
bram/rust/src/day_09/mod.rs Normal file
View File

@ -0,0 +1,110 @@
use itertools::Itertools;
use crate::utils;
pub fn answer(text: String) -> (u64, u64) {
let mut coords: Vec<Coord> = text
.trim()
.split_whitespace()
.filter_map(Coord::from)
.collect();
if let Some((idx, _)) = coords.iter()
.enumerate()
.min_by_key(|(_, c)| c.x)
{
coords.rotate_left(idx);
}
( coords.iter()
.combinations(2)
.map(|items| items[0].square_to(items[1]))
.max()
.unwrap_or(0)
, 0
// , coords.iter()
// .combinations(2)
// .map(|items| ( items[0], items[1], items[0].square_to(items[1])))
// .filter(|(c1, c2, _)| !overlaps_with(&coords, *c1, *c2))
// .map(|(_, _, size)| size)
// .max()
// .unwrap_or(0)
// 4638696212 too high
)
}
struct Coord { x: u64, y: u64 }
impl Coord {
fn from(s: &str) -> Option<Coord> {
let (x, y) = s.split_once(",")?;
Some(Coord { x: utils::str_to_u64(x)?, y: utils::str_to_u64(y)? })
}
fn square_to(&self, other: &Coord) -> u64 {
(self.x.abs_diff(other.x) + 1) * (self.y.abs_diff(other.y) + 1)
}
}
// enum Direction { NegX, NegY, PosX, PosY }
// fn overlaps_with(coords: &Vec<Coord>, c1: &Coord, c2: &Coord) -> bool {
// let head: &Coord = coords.first().unwrap();
// let mut a: &Coord;
// let mut b: &Coord = head;
// let mut d: Direction = Direction::PosY;
// let (x1, x2) = (c1.x.min(c2.x), c1.x.max(c2.x));
// let (y1, y2) = (c1.y.min(c2.y), c1.y.max(c2.y));
// for c in coords.iter().chain(vec![head].into_iter()) {
// // d = match d {
// // Direction::NegX => {
// // // ^
// // // |
// // // b-----c
// // // |
// // // <--|
// // // |
// // // a
// // // a
// // // |
// // // <--|
// // // |
// // // b-----c
// // // |
// // // v
// // // c-----b
// // // | |
// // // v |
// // // <-|
// // // |
// // // a
// // // a
// // // |
// // // <-|
// // // ^ |
// // // | |
// // // c-----b
// // },
// // };
// (a, b) = (b, c);
// if x1 < a.x && a.x < x2 && y1 < a.y && a.y < y2 {
// return true;
// }
// if x1 < b.x && b.x < x2 && y1 < b.y && b.y < y2 {
// return true;
// }
// }
// // Currently couldn't think of any other ways
// // that the square could overlap with the edge
// false
// }

View File

@ -0,0 +1,55 @@
use crate::utils;
use super::test_machine::TestMachine;
use itertools::Itertools;
pub struct Machine<'a> {
exp_result: &'a str,
buttons: Vec<Vec<u8>>,
}
impl Machine<'_> {
pub fn from<'a>(text: &'a str) -> Option<Machine<'a>> {
let mut items = text.split_whitespace();
let ( res, _joltages ) = (items.next()?, items.next_back()?);
// Parse expected result string
let mut c = res.chars();
match ( c.next(), c.next_back() ) {
(Some('['), Some(']')) => {},
_ => { return None; },
}
Some(Machine {
exp_result: c.as_str(),
buttons: items.map(str_to_btn).collect(),
})
}
pub fn find_least_buttons(&self) -> u8 {
let mut pushes: u8 = 1;
loop {
if self.buttons
.iter()
.combinations(usize::from(pushes))
.any(|config| correct_config(config, self.exp_result))
{
break;
}
pushes += 1;
}
pushes
}
}
fn correct_config(config: Vec<&Vec<u8>>, exp_result: &str) -> bool {
let mut t = TestMachine::new();
t.push_buttons(config);
t.verify(exp_result)
}
fn str_to_btn(text: &str) -> Vec<u8> {
text.chars().filter_map(utils::char_to_u8).collect()
}

View File

@ -0,0 +1,20 @@
mod test_machine;
mod machine;
use machine::Machine;
pub fn answer(text: String) -> ( u32, u32 ) {
let machines: Vec<Machine> = text
.trim()
.split("\n")
.filter_map(Machine::from)
.collect();
( machines
.iter()
.map(|m| m.find_least_buttons())
.map(u32::from)
.sum()
, 0
)
}

View File

@ -0,0 +1,54 @@
pub struct TestMachine {
buttons: u16,
}
struct TestMachineIterator {
buttons: u16,
i: u8,
}
impl TestMachine {
fn iter(&self) -> TestMachineIterator {
TestMachineIterator { buttons: self.buttons, i: 0 }
}
pub fn new() -> TestMachine {
TestMachine { buttons: 0 }
}
fn push_button(&mut self, btns: &Vec<u8>) {
self.buttons = btns
.iter()
.fold(
self.buttons,
|tot, &btn| 2u16.pow(u32::from(btn)) ^ tot
);
}
pub fn push_buttons(&mut self, btns: Vec<&Vec<u8>>) {
for btn in btns {
self.push_button(btn);
}
}
pub fn verify(&self, text: &str) -> bool {
text.chars()
.zip(self.iter())
.all(|(c, turned_on)| (c == '#') == turned_on)
}
}
impl Iterator for TestMachineIterator {
type Item = bool;
fn next(&mut self) -> Option<Self::Item> {
let offset = self.i;
if offset >= 16 {
return None;
}
self.i += 1;
Some(((self.buttons >> offset) & 1) == 1)
}
}

View File

@ -0,0 +1,86 @@
use std::collections::HashMap;
enum PathSize { Looping, Fixed(u64) }
pub fn answer(text: String) -> ( u64, u64 ) {
let paths = str_to_hashmap(&text);
// println!("{:?}", count_paths(&paths, "svr", "fft"));
// println!("{:?}", count_paths(&paths, "fft", "dac"));
// println!("{:?}", count_paths(&paths, "dac", "out"));
// println!("{:?}", count_paths(&paths, "svr", "dac"));
// println!("{:?}", count_paths(&paths, "dac", "fft"));
// println!("{:?}", count_paths(&paths, "fft", "out"));
( count_paths(&paths, "you", "out").unwrap_or(0)
// 4294967295 too high
, match count_paths(&paths, "fft", "dac") {
Some(0) =>
count_paths(&paths, "svr", "dac").unwrap_or(0) *
count_paths(&paths, "dac", "fft").unwrap_or(0) *
count_paths(&paths, "fft", "out").unwrap_or(0),
Some(n) =>
count_paths(&paths, "svr", "fft").unwrap_or(0) *
n *
count_paths(&paths, "dac", "out").unwrap_or(0),
None => u64::MAX,
}
)
}
fn count_paths(paths: &HashMap<&str, Vec<&str>>, from: &str, to: &str) -> Option<u64> {
let mut graph = HashMap::new();
graph.insert(to, PathSize::Fixed(1));
match dfs_find_path_size(&mut graph, paths, from) {
PathSize::Fixed(n) => Some(n),
PathSize::Looping => None,
}
}
fn dfs_find_path_size<'a>(
graph: &mut HashMap<&'a str, PathSize>,
input: &HashMap<&'a str, Vec<&'a str>>,
x: &'a str
) -> PathSize {
match graph.get(x) {
Some(PathSize::Fixed(n)) => {
PathSize::Fixed(*n)
},
Some(PathSize::Looping) => {
PathSize::Looping
}
None => {
graph.insert(x, PathSize::Looping);
let mut total: u64 = 0;
for &next_x in input.get(x).unwrap_or(&Vec::new()).iter() {
match dfs_find_path_size(graph, input, next_x) {
PathSize::Fixed(n) => {
total += n;
}
PathSize::Looping => {
return PathSize::Looping;
}
}
}
graph.insert(x, PathSize::Fixed(total));
PathSize::Fixed(total)
}
}
}
fn str_to_hashmap(text: &str) -> HashMap<&str, Vec<&str>> {
text.trim()
.split("\n")
.filter_map(line_to_kv_pair)
.collect()
}
fn line_to_kv_pair(line: &str) -> Option<( &str, Vec<&str> )> {
let (key, value) = line.split_once(": ")?;
Some(( key, value.split_whitespace().collect() ))
}

View File

@ -5,10 +5,10 @@ mod day_04;
mod day_05;
mod day_06;
mod day_07;
// mod day_08;
// mod day_09;
// mod day_10;
// mod day_11;
mod day_08;
mod day_09;
mod day_10;
mod day_11;
// mod day_12;
mod utils;
@ -69,30 +69,30 @@ pub fn day_07() -> DailyOutput {
( p1 as u128, p2 as u128, d )
}
// pub fn day_08() -> DailyOutput {
// let s : String = read_from_file("inputs/08.txt");
// let (p1, p2, d) = diagnostics::benchmark(s, day_08::answer);
pub fn day_08() -> DailyOutput {
let s : String = read_from_file("inputs/08.txt");
let (p1, p2, d) = diagnostics::benchmark(s, day_08::answer);
// ( p1 as u128, p2 as u128, d )
// }
( p1 as u128, p2 as u128, d )
}
// pub fn day_09() -> DailyOutput {
// let s : String = read_from_file("inputs/09.txt");
// let (p1, p2, d) = diagnostics::benchmark(s, day_09::answer);
pub fn day_09() -> DailyOutput {
let s : String = read_from_file("inputs/09.txt");
let (p1, p2, d) = diagnostics::benchmark(s, day_09::answer);
// ( p1 as u128, p2 as u128, d )
// }
( p1 as u128, p2 as u128, d )
}
// pub fn day_10() -> DailyOutput {
// let s : String = read_from_file("inputs/10.txt");
// let (p1, p2, d) = diagnostics::benchmark(s, day_10::answer);
pub fn day_10() -> DailyOutput {
let s : String = read_from_file("inputs/10.txt");
let (p1, p2, d) = diagnostics::benchmark(s, day_10::answer);
// ( p1 as u128, p2 as u128, d )
// }
( p1 as u128, p2 as u128, d )
}
// pub fn day_11() -> DailyOutput {
// let s : String = read_from_file("inputs/11.txt");
// let (p1, p2, d) = diagnostics::benchmark(s, day_11::answer);
pub fn day_11() -> DailyOutput {
let s : String = read_from_file("inputs/11.txt");
let (p1, p2, d) = diagnostics::benchmark(s, day_11::answer);
// ( p1 as u128, p2 as u128, d )
// }
( p1 as u128, p2 as u128, d )
}

View File

@ -12,10 +12,10 @@ fn main() {
Some(5) => run_day(aoc2025::day_05),
Some(6) => run_day(aoc2025::day_06),
Some(7) => run_day(aoc2025::day_07),
// Some(8) => run_day(aoc2025::day_08),
// Some(9) => run_day(aoc2025::day_09),
// Some(10) => run_day(aoc2025::day_10),
// Some(11) => run_day(aoc2025::day_11),
Some(8) => run_day(aoc2025::day_08),
Some(9) => run_day(aoc2025::day_09),
Some(10) => run_day(aoc2025::day_10),
Some(11) => run_day(aoc2025::day_11),
// Some(12) => run_day(aoc2025::day_12),
Some(_) => run_all_days(),
None => run_all_days(),
@ -35,10 +35,10 @@ fn run_all_days() {
aoc.insert(5, aoc2025::day_05());
aoc.insert(6, aoc2025::day_06());
aoc.insert(7, aoc2025::day_07());
// aoc.insert(8, aoc2025::day_08());
// aoc.insert(9, aoc2025::day_09());
// aoc.insert(10, aoc2025::day_10());
// aoc.insert(11, aoc2025::day_11());
aoc.insert(8, aoc2025::day_08());
aoc.insert(9, aoc2025::day_09());
aoc.insert(10, aoc2025::day_10());
aoc.insert(11, aoc2025::day_11());
// aoc.insert(12, aoc2025::day_12());
aoc.show_diagnostics();

View File

@ -28,6 +28,10 @@ pub fn str_to_i16(s : &str) -> Option<i16> {
s.trim().to_string().parse::<i16>().ok()
}
// pub fn str_to_i64(s : &str) -> Option<i64> {
// s.trim().to_string().parse::<i64>().ok()
// }
// pub fn str_to_i32(s : &str) -> Option<i32> {
// s.trim().to_string().parse::<i32>().ok()
// }