2021: day13: part 1 & 2
This commit is contained in:
parent
d515ced9a0
commit
b8e2bbf2f3
916
aoc2021/input/day13.txt
Normal file
916
aoc2021/input/day13.txt
Normal file
|
@ -0,0 +1,916 @@
|
|||
1213,736
|
||||
1158,890
|
||||
626,303
|
||||
98,10
|
||||
878,268
|
||||
1208,143
|
||||
112,400
|
||||
865,894
|
||||
1218,179
|
||||
1089,418
|
||||
535,886
|
||||
726,515
|
||||
1263,786
|
||||
589,270
|
||||
80,518
|
||||
288,322
|
||||
1101,483
|
||||
989,308
|
||||
1002,707
|
||||
467,18
|
||||
1036,364
|
||||
552,591
|
||||
445,280
|
||||
912,40
|
||||
1268,761
|
||||
984,47
|
||||
883,574
|
||||
815,784
|
||||
719,236
|
||||
865,166
|
||||
836,581
|
||||
656,735
|
||||
228,264
|
||||
23,466
|
||||
1099,515
|
||||
1284,665
|
||||
432,268
|
||||
195,493
|
||||
1001,308
|
||||
430,222
|
||||
1294,537
|
||||
427,646
|
||||
574,381
|
||||
1116,829
|
||||
1143,808
|
||||
950,578
|
||||
293,579
|
||||
28,751
|
||||
169,341
|
||||
326,159
|
||||
257,721
|
||||
773,670
|
||||
1231,556
|
||||
306,436
|
||||
454,520
|
||||
1267,522
|
||||
85,309
|
||||
1273,358
|
||||
1019,208
|
||||
870,504
|
||||
647,175
|
||||
408,544
|
||||
1310,386
|
||||
912,854
|
||||
512,10
|
||||
674,770
|
||||
273,742
|
||||
626,584
|
||||
112,10
|
||||
736,420
|
||||
1198,884
|
||||
214,620
|
||||
139,751
|
||||
448,782
|
||||
771,646
|
||||
709,796
|
||||
755,460
|
||||
179,838
|
||||
360,578
|
||||
274,364
|
||||
656,401
|
||||
810,61
|
||||
194,310
|
||||
584,515
|
||||
773,238
|
||||
184,241
|
||||
932,661
|
||||
105,333
|
||||
1096,838
|
||||
959,838
|
||||
252,341
|
||||
1237,338
|
||||
112,884
|
||||
746,812
|
||||
735,556
|
||||
45,75
|
||||
815,838
|
||||
654,719
|
||||
1225,309
|
||||
1226,892
|
||||
453,465
|
||||
783,520
|
||||
987,446
|
||||
348,458
|
||||
976,175
|
||||
487,392
|
||||
1307,558
|
||||
1279,882
|
||||
145,509
|
||||
909,444
|
||||
1310,389
|
||||
626,527
|
||||
356,527
|
||||
363,774
|
||||
142,130
|
||||
246,581
|
||||
1064,581
|
||||
925,837
|
||||
166,842
|
||||
529,877
|
||||
124,341
|
||||
709,546
|
||||
651,490
|
||||
372,16
|
||||
537,614
|
||||
1004,213
|
||||
1198,661
|
||||
1240,40
|
||||
701,504
|
||||
1103,120
|
||||
638,462
|
||||
857,351
|
||||
269,794
|
||||
1099,122
|
||||
624,360
|
||||
1284,217
|
||||
902,26
|
||||
102,672
|
||||
691,208
|
||||
850,287
|
||||
1083,698
|
||||
636,770
|
||||
475,539
|
||||
1280,735
|
||||
495,712
|
||||
1273,655
|
||||
217,854
|
||||
1109,687
|
||||
345,565
|
||||
939,43
|
||||
902,203
|
||||
803,241
|
||||
35,838
|
||||
169,624
|
||||
206,236
|
||||
413,718
|
||||
617,599
|
||||
729,786
|
||||
372,430
|
||||
467,242
|
||||
771,324
|
||||
924,268
|
||||
574,854
|
||||
167,502
|
||||
141,738
|
||||
166,52
|
||||
659,336
|
||||
1240,123
|
||||
672,462
|
||||
902,581
|
||||
883,320
|
||||
37,655
|
||||
209,0
|
||||
897,875
|
||||
823,630
|
||||
1074,264
|
||||
385,794
|
||||
1131,838
|
||||
1151,504
|
||||
1294,357
|
||||
1260,396
|
||||
1228,768
|
||||
209,57
|
||||
1225,360
|
||||
1111,710
|
||||
333,586
|
||||
996,371
|
||||
954,140
|
||||
790,367
|
||||
843,348
|
||||
1058,877
|
||||
252,509
|
||||
181,385
|
||||
1218,267
|
||||
1123,428
|
||||
191,98
|
||||
1039,372
|
||||
214,504
|
||||
274,260
|
||||
359,751
|
||||
1109,753
|
||||
659,359
|
||||
10,674
|
||||
835,56
|
||||
730,490
|
||||
378,1
|
||||
0,539
|
||||
35,182
|
||||
276,661
|
||||
469,626
|
||||
1061,533
|
||||
783,432
|
||||
656,847
|
||||
281,707
|
||||
187,428
|
||||
1275,568
|
||||
716,143
|
||||
938,878
|
||||
663,117
|
||||
738,254
|
||||
954,86
|
||||
467,796
|
||||
966,761
|
||||
405,311
|
||||
209,651
|
||||
38,98
|
||||
1233,824
|
||||
430,837
|
||||
1290,841
|
||||
865,280
|
||||
1123,18
|
||||
985,170
|
||||
182,859
|
||||
1164,245
|
||||
656,607
|
||||
979,784
|
||||
634,10
|
||||
460,829
|
||||
768,172
|
||||
1126,317
|
||||
1000,805
|
||||
1198,830
|
||||
629,536
|
||||
208,542
|
||||
1193,747
|
||||
328,60
|
||||
1123,751
|
||||
1004,10
|
||||
1056,571
|
||||
254,571
|
||||
1086,57
|
||||
192,815
|
||||
1287,204
|
||||
1012,754
|
||||
838,411
|
||||
1225,361
|
||||
380,310
|
||||
616,117
|
||||
621,243
|
||||
1165,509
|
||||
706,781
|
||||
564,530
|
||||
905,311
|
||||
162,763
|
||||
354,889
|
||||
975,103
|
||||
10,226
|
||||
326,847
|
||||
184,317
|
||||
1261,143
|
||||
1310,65
|
||||
310,462
|
||||
1208,672
|
||||
402,17
|
||||
85,361
|
||||
129,847
|
||||
1020,486
|
||||
16,462
|
||||
618,856
|
||||
440,102
|
||||
686,381
|
||||
925,794
|
||||
453,65
|
||||
1287,639
|
||||
180,656
|
||||
507,91
|
||||
460,65
|
||||
893,271
|
||||
344,581
|
||||
609,208
|
||||
246,432
|
||||
781,246
|
||||
185,268
|
||||
311,696
|
||||
736,488
|
||||
346,707
|
||||
875,708
|
||||
38,565
|
||||
420,267
|
||||
433,18
|
||||
1101,651
|
||||
159,222
|
||||
420,627
|
||||
1245,446
|
||||
905,361
|
||||
954,527
|
||||
909,450
|
||||
495,392
|
||||
755,434
|
||||
179,429
|
||||
1230,868
|
||||
1129,621
|
||||
932,681
|
||||
211,122
|
||||
344,313
|
||||
52,530
|
||||
602,288
|
||||
947,326
|
||||
433,113
|
||||
634,557
|
||||
529,17
|
||||
647,117
|
||||
1253,324
|
||||
331,502
|
||||
580,205
|
||||
1111,184
|
||||
359,143
|
||||
52,36
|
||||
32,409
|
||||
1280,584
|
||||
112,661
|
||||
1143,392
|
||||
1228,126
|
||||
32,485
|
||||
28,310
|
||||
768,436
|
||||
1000,761
|
||||
281,502
|
||||
753,214
|
||||
443,646
|
||||
1213,680
|
||||
97,515
|
||||
939,820
|
||||
112,172
|
||||
1068,674
|
||||
371,43
|
||||
1089,642
|
||||
1064,82
|
||||
1131,429
|
||||
947,840
|
||||
684,751
|
||||
420,264
|
||||
1082,660
|
||||
965,553
|
||||
52,82
|
||||
795,751
|
||||
351,98
|
||||
1143,726
|
||||
815,224
|
||||
80,656
|
||||
900,605
|
||||
897,360
|
||||
706,333
|
||||
880,57
|
||||
676,841
|
||||
119,877
|
||||
938,16
|
||||
393,176
|
||||
1001,586
|
||||
507,388
|
||||
31,194
|
||||
405,182
|
||||
35,470
|
||||
185,716
|
||||
1310,57
|
||||
733,70
|
||||
391,658
|
||||
815,182
|
||||
31,65
|
||||
868,866
|
||||
356,140
|
||||
628,229
|
||||
841,492
|
||||
691,712
|
||||
1195,696
|
||||
634,287
|
||||
523,65
|
||||
345,138
|
||||
310,49
|
||||
663,623
|
||||
474,581
|
||||
520,639
|
||||
224,57
|
||||
1287,428
|
||||
328,579
|
||||
323,392
|
||||
351,504
|
||||
1287,255
|
||||
815,360
|
||||
194,136
|
||||
207,269
|
||||
542,436
|
||||
432,178
|
||||
110,634
|
||||
878,716
|
||||
201,829
|
||||
897,718
|
||||
52,726
|
||||
328,159
|
||||
1258,502
|
||||
1307,87
|
||||
1129,733
|
||||
979,315
|
||||
323,427
|
||||
1002,187
|
||||
351,639
|
||||
938,430
|
||||
527,520
|
||||
870,176
|
||||
1069,639
|
||||
1307,467
|
||||
36,856
|
||||
23,31
|
||||
413,534
|
||||
402,341
|
||||
687,65
|
||||
619,120
|
||||
634,884
|
||||
1258,858
|
||||
18,203
|
||||
542,885
|
||||
604,781
|
||||
1282,758
|
||||
5,553
|
||||
1294,385
|
||||
378,437
|
||||
1096,56
|
||||
835,838
|
||||
23,876
|
||||
1111,278
|
||||
1011,33
|
||||
308,707
|
||||
117,798
|
||||
331,763
|
||||
470,241
|
||||
830,732
|
||||
1265,691
|
||||
982,287
|
||||
950,709
|
||||
755,196
|
||||
691,694
|
||||
776,12
|
||||
1290,765
|
||||
619,40
|
||||
738,640
|
||||
1121,88
|
||||
938,464
|
||||
951,143
|
||||
537,208
|
||||
736,518
|
||||
405,126
|
||||
453,543
|
||||
365,694
|
||||
157,329
|
||||
385,57
|
||||
37,358
|
||||
482,341
|
||||
442,28
|
||||
870,457
|
||||
984,336
|
||||
693,239
|
||||
917,176
|
||||
45,158
|
||||
892,264
|
||||
1258,812
|
||||
1113,534
|
||||
303,7
|
||||
1004,661
|
||||
569,869
|
||||
281,158
|
||||
378,681
|
||||
569,534
|
||||
16,509
|
||||
435,708
|
||||
373,840
|
||||
1192,542
|
||||
721,606
|
||||
1041,794
|
||||
1151,392
|
||||
343,646
|
||||
684,143
|
||||
1064,740
|
||||
552,751
|
||||
1151,182
|
||||
1143,616
|
||||
698,313
|
||||
1064,812
|
||||
446,800
|
||||
564,812
|
||||
1191,717
|
||||
452,105
|
||||
85,360
|
||||
947,504
|
||||
380,82
|
||||
937,483
|
||||
319,551
|
||||
922,815
|
||||
1213,515
|
||||
984,607
|
||||
73,556
|
||||
309,852
|
||||
50,661
|
||||
1181,847
|
||||
1300,535
|
||||
448,560
|
||||
291,854
|
||||
447,8
|
||||
0,91
|
||||
1191,625
|
||||
932,233
|
||||
371,689
|
||||
361,131
|
||||
865,798
|
||||
1169,738
|
||||
446,94
|
||||
966,581
|
||||
110,309
|
||||
74,404
|
||||
1000,49
|
||||
1,842
|
||||
798,354
|
||||
20,884
|
||||
1233,406
|
||||
1230,243
|
||||
492,267
|
||||
867,248
|
||||
346,187
|
||||
1245,472
|
||||
736,406
|
||||
656,287
|
||||
962,590
|
||||
572,640
|
||||
544,260
|
||||
927,522
|
||||
841,786
|
||||
1029,392
|
||||
169,278
|
||||
378,445
|
||||
420,630
|
||||
488,52
|
||||
626,751
|
||||
927,372
|
||||
691,854
|
||||
803,355
|
||||
3,87
|
||||
1230,26
|
||||
154,341
|
||||
612,313
|
||||
823,560
|
||||
802,245
|
||||
216,137
|
||||
987,427
|
||||
207,120
|
||||
775,877
|
||||
897,176
|
||||
1266,654
|
||||
541,191
|
||||
159,110
|
||||
1275,182
|
||||
678,268
|
||||
1153,565
|
||||
1274,856
|
||||
991,656
|
||||
15,696
|
||||
172,341
|
||||
691,504
|
||||
310,705
|
||||
1275,470
|
||||
574,243
|
||||
448,637
|
||||
1111,262
|
||||
951,751
|
||||
619,390
|
||||
539,324
|
||||
626,143
|
||||
733,809
|
||||
656,281
|
||||
0,837
|
||||
529,429
|
||||
862,180
|
||||
1279,194
|
||||
947,568
|
||||
227,574
|
||||
378,400
|
||||
418,364
|
||||
556,182
|
||||
969,481
|
||||
500,61
|
||||
947,774
|
||||
761,333
|
||||
1012,136
|
||||
1258,530
|
||||
574,518
|
||||
666,311
|
||||
326,558
|
||||
512,130
|
||||
870,718
|
||||
689,682
|
||||
1104,658
|
||||
1101,614
|
||||
187,876
|
||||
1237,556
|
||||
313,861
|
||||
222,716
|
||||
676,884
|
||||
201,375
|
||||
336,28
|
||||
1058,509
|
||||
469,492
|
||||
1081,232
|
||||
361,763
|
||||
42,761
|
||||
1183,462
|
||||
1148,110
|
||||
1273,239
|
||||
905,712
|
||||
863,438
|
||||
905,518
|
||||
736,474
|
||||
1034,445
|
||||
1088,716
|
||||
1022,677
|
||||
117,224
|
||||
1265,686
|
||||
1171,751
|
||||
862,112
|
||||
0,165
|
||||
1123,546
|
||||
1310,508
|
||||
49,143
|
||||
880,837
|
||||
976,719
|
||||
684,361
|
||||
1233,70
|
||||
28,478
|
||||
82,126
|
||||
1053,721
|
||||
131,625
|
||||
900,289
|
||||
1193,278
|
||||
373,65
|
||||
1272,796
|
||||
490,617
|
||||
1016,633
|
||||
413,176
|
||||
82,96
|
||||
1116,584
|
||||
469,786
|
||||
867,646
|
||||
843,652
|
||||
1118,815
|
||||
775,886
|
||||
624,829
|
||||
166,500
|
||||
555,574
|
||||
385,837
|
||||
455,278
|
||||
487,840
|
||||
65,446
|
||||
1139,819
|
||||
1211,460
|
||||
1169,114
|
||||
1101,894
|
||||
624,381
|
||||
227,250
|
||||
119,269
|
||||
1029,56
|
||||
616,98
|
||||
905,126
|
||||
937,449
|
||||
1096,504
|
||||
1141,624
|
||||
1099,772
|
||||
201,687
|
||||
1116,65
|
||||
217,40
|
||||
708,136
|
||||
787,65
|
||||
1273,648
|
||||
1155,338
|
||||
659,87
|
||||
201,207
|
||||
402,161
|
||||
1091,708
|
||||
440,722
|
||||
447,269
|
||||
1022,572
|
||||
939,205
|
||||
497,329
|
||||
1058,553
|
||||
542,661
|
||||
863,886
|
||||
155,338
|
||||
622,857
|
||||
92,715
|
||||
612,133
|
||||
962,458
|
||||
634,159
|
||||
28,30
|
||||
288,677
|
||||
1028,878
|
||||
1183,520
|
||||
169,176
|
||||
23,428
|
||||
1292,203
|
||||
754,182
|
||||
555,320
|
||||
35,208
|
||||
701,75
|
||||
1022,322
|
||||
684,533
|
||||
320,623
|
||||
857,95
|
||||
18,770
|
||||
214,50
|
||||
7,777
|
||||
398,406
|
||||
261,176
|
||||
783,462
|
||||
709,98
|
||||
1123,815
|
||||
440,457
|
||||
708,168
|
||||
447,625
|
||||
359,418
|
||||
1278,485
|
||||
1012,143
|
||||
159,504
|
||||
38,796
|
||||
1230,332
|
||||
418,530
|
||||
877,255
|
||||
654,505
|
||||
28,136
|
||||
912,406
|
||||
1193,320
|
||||
485,46
|
||||
351,838
|
||||
1265,75
|
||||
758,143
|
||||
1300,226
|
||||
1282,527
|
||||
612,761
|
||||
575,556
|
||||
979,763
|
||||
77,70
|
||||
654,607
|
||||
688,261
|
||||
766,585
|
||||
145,385
|
||||
363,504
|
||||
676,287
|
||||
788,607
|
||||
857,465
|
||||
1128,35
|
||||
574,513
|
||||
1200,309
|
||||
10,668
|
||||
169,553
|
||||
654,57
|
||||
1064,868
|
||||
191,796
|
||||
45,686
|
||||
982,159
|
||||
795,79
|
||||
413,361
|
||||
761,863
|
||||
473,273
|
||||
0,401
|
||||
1017,579
|
||||
840,808
|
||||
99,434
|
||||
79,556
|
||||
162,784
|
||||
459,418
|
||||
798,10
|
||||
195,418
|
||||
651,404
|
||||
520,527
|
||||
959,887
|
||||
965,565
|
||||
288,217
|
||||
730,404
|
||||
1282,478
|
||||
602,364
|
||||
803,315
|
||||
962,304
|
||||
820,617
|
||||
741,534
|
||||
549,333
|
||||
862,714
|
||||
363,326
|
||||
102,222
|
||||
348,436
|
||||
1156,553
|
||||
1064,463
|
||||
97,214
|
||||
609,691
|
||||
214,722
|
||||
827,208
|
||||
372,688
|
||||
453,519
|
||||
385,401
|
||||
622,633
|
||||
70,40
|
||||
455,616
|
||||
949,763
|
||||
693,599
|
||||
194,758
|
||||
512,541
|
||||
1169,786
|
||||
617,536
|
||||
1086,837
|
||||
112,494
|
||||
910,161
|
||||
984,495
|
||||
959,56
|
||||
977,586
|
||||
454,262
|
||||
1141,341
|
||||
609,203
|
||||
748,19
|
||||
1143,560
|
||||
656,508
|
||||
541,703
|
||||
1181,495
|
||||
1183,246
|
||||
542,102
|
||||
736,189
|
||||
433,866
|
||||
661,756
|
||||
659,490
|
||||
331,446
|
||||
236,630
|
||||
610,688
|
||||
3,467
|
||||
446,268
|
||||
694,117
|
||||
308,35
|
||||
537,350
|
||||
1101,243
|
||||
951,418
|
||||
127,432
|
||||
979,110
|
||||
802,705
|
||||
741,86
|
||||
787,829
|
||||
1198,233
|
||||
808,890
|
||||
1279,12
|
||||
50,396
|
||||
1183,14
|
||||
23,255
|
||||
636,124
|
||||
448,714
|
||||
1236,205
|
||||
1193,798
|
||||
1103,625
|
||||
945,694
|
||||
1139,108
|
||||
522,287
|
||||
624,513
|
||||
997,33
|
||||
1190,658
|
||||
35,56
|
||||
1275,406
|
||||
773,208
|
||||
1125,716
|
||||
69,621
|
||||
1093,518
|
||||
1310,837
|
||||
1125,268
|
||||
865,448
|
||||
1102,94
|
||||
306,10
|
||||
373,483
|
||||
442,866
|
||||
858,105
|
||||
602,168
|
||||
624,159
|
||||
334,719
|
||||
480,162
|
||||
870,172
|
||||
602,736
|
||||
0,508
|
||||
1064,154
|
||||
1056,712
|
||||
582,161
|
||||
1261,591
|
||||
661,308
|
||||
35,200
|
||||
92,19
|
||||
214,390
|
||||
|
||||
fold along x=655
|
||||
fold along y=447
|
||||
fold along x=327
|
||||
fold along y=223
|
||||
fold along x=163
|
||||
fold along y=111
|
||||
fold along x=81
|
||||
fold along y=55
|
||||
fold along x=40
|
||||
fold along y=27
|
||||
fold along y=13
|
||||
fold along y=6
|
21
aoc2021/input/day13_provided.txt
Normal file
21
aoc2021/input/day13_provided.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
6,10
|
||||
0,14
|
||||
9,10
|
||||
0,3
|
||||
10,4
|
||||
4,11
|
||||
6,0
|
||||
6,12
|
||||
4,1
|
||||
0,13
|
||||
10,12
|
||||
3,4
|
||||
3,0
|
||||
8,4
|
||||
1,10
|
||||
2,14
|
||||
8,10
|
||||
9,0
|
||||
|
||||
fold along y=7
|
||||
fold along x=5
|
210
aoc2021/src/day13.rs
Normal file
210
aoc2021/src/day13.rs
Normal file
|
@ -0,0 +1,210 @@
|
|||
use std::collections::HashSet;
|
||||
use std::fmt::Write;
|
||||
|
||||
use anyhow::{anyhow, Context, Result};
|
||||
|
||||
const INPUT: &str = include_str!("../input/day13.txt");
|
||||
|
||||
pub fn run() -> Result<String> {
|
||||
let mut res = String::with_capacity(128);
|
||||
|
||||
writeln!(res, "part 1: {}", part1(INPUT)?)?;
|
||||
writeln!(res, "part 2: {}", part2(INPUT)?)?;
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
fn part1(input: &str) -> Result<usize> {
|
||||
let (sheet, fold_instructions) = input.split_once("\n\n").context("couldn't split input")?;
|
||||
let mut sheet: PaperSheet = sheet.parse()?;
|
||||
let fold_instructions: Vec<FoldInstruction> = fold_instructions
|
||||
.lines()
|
||||
.map(|l| l.trim().parse())
|
||||
.collect::<Result<_>>()?;
|
||||
|
||||
sheet.apply(
|
||||
*fold_instructions
|
||||
.first()
|
||||
.context("had 0 fold instructions")?,
|
||||
);
|
||||
|
||||
Ok(sheet.num_points())
|
||||
}
|
||||
|
||||
fn part2(input: &str) -> Result<String> {
|
||||
let (sheet, fold_instructions) = input.split_once("\n\n").context("couldn't split input")?;
|
||||
let mut sheet: PaperSheet = sheet.parse()?;
|
||||
let fold_instructions: Vec<FoldInstruction> = fold_instructions
|
||||
.lines()
|
||||
.map(|l| l.trim().parse())
|
||||
.collect::<Result<_>>()?;
|
||||
|
||||
for instr in fold_instructions {
|
||||
sheet.apply(instr);
|
||||
}
|
||||
|
||||
Ok(format!("{}", sheet))
|
||||
}
|
||||
|
||||
struct PaperSheet {
|
||||
points: HashSet<(usize, usize)>,
|
||||
}
|
||||
|
||||
impl PaperSheet {
|
||||
fn apply(&mut self, instr: FoldInstruction) {
|
||||
let mut to_insert = Vec::new();
|
||||
let mut to_remove = Vec::new();
|
||||
|
||||
for point in &self.points {
|
||||
match instr {
|
||||
FoldInstruction::AlongX(x) => {
|
||||
if point.0 <= x {
|
||||
continue;
|
||||
}
|
||||
|
||||
let new_point = (x - (point.0 - x), point.1);
|
||||
to_insert.push(new_point);
|
||||
to_remove.push(*point);
|
||||
}
|
||||
FoldInstruction::AlongY(y) => {
|
||||
if point.1 <= y {
|
||||
continue;
|
||||
}
|
||||
|
||||
let new_point = (point.0, y - (point.1 - y));
|
||||
to_insert.push(new_point);
|
||||
to_remove.push(*point);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
to_remove.iter().for_each(|point| {
|
||||
self.points.remove(point);
|
||||
});
|
||||
|
||||
to_insert.into_iter().for_each(|point| {
|
||||
self.points.insert(point);
|
||||
});
|
||||
}
|
||||
|
||||
fn num_points(&self) -> usize {
|
||||
self.points.len()
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for PaperSheet {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
// make sure first row appears on its own line
|
||||
writeln!(f)?;
|
||||
|
||||
if self.points.is_empty() {
|
||||
return writeln!(f, "`empty paper sheet`");
|
||||
}
|
||||
|
||||
let (width, _) = self.points.iter().max_by_key(|point| point.0).unwrap();
|
||||
let (_, height) = self.points.iter().max_by_key(|point| point.1).unwrap();
|
||||
|
||||
for y in 0..=*height {
|
||||
for x in 0..=*width {
|
||||
let chr = if self.points.contains(&(x, y)) {
|
||||
'#'
|
||||
} else {
|
||||
'.'
|
||||
};
|
||||
f.write_char(chr)?;
|
||||
}
|
||||
writeln!(f)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl std::str::FromStr for PaperSheet {
|
||||
type Err = anyhow::Error;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self> {
|
||||
let mut points = HashSet::new();
|
||||
|
||||
for l in s.lines() {
|
||||
let (x, y) = l
|
||||
.trim()
|
||||
.split_once(',')
|
||||
.context("couldn't parse paper sheet point coordinate")?;
|
||||
let (x, y) = (x.parse()?, y.parse()?);
|
||||
|
||||
points.insert((x, y));
|
||||
}
|
||||
|
||||
Ok(PaperSheet { points })
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
enum FoldInstruction {
|
||||
AlongX(usize),
|
||||
AlongY(usize),
|
||||
}
|
||||
|
||||
impl std::str::FromStr for FoldInstruction {
|
||||
type Err = anyhow::Error;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self> {
|
||||
let (axis, coord) = s
|
||||
.split_once('=')
|
||||
.context("couldn't parse folding instruction")?;
|
||||
let coord = coord.parse()?;
|
||||
|
||||
match axis {
|
||||
"fold along x" => Ok(FoldInstruction::AlongX(coord)),
|
||||
"fold along y" => Ok(FoldInstruction::AlongY(coord)),
|
||||
_ => Err(anyhow!("couldn't parse folding instruction")),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const PROVIDED: &str = include_str!("../input/day13_provided.txt");
|
||||
|
||||
#[test]
|
||||
fn part1_provided() {
|
||||
assert_eq!(part1(PROVIDED).unwrap(), 17);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_real() {
|
||||
assert_eq!(part1(INPUT).unwrap(), 753);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part2_provided() {
|
||||
assert_eq!(
|
||||
part2(PROVIDED).unwrap(),
|
||||
"
|
||||
#####
|
||||
#...#
|
||||
#...#
|
||||
#...#
|
||||
#####
|
||||
"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part2_real() {
|
||||
assert_eq!(
|
||||
part2(INPUT).unwrap(),
|
||||
"
|
||||
#..#.####.#....####.#..#...##.###..#..#
|
||||
#..#....#.#....#....#..#....#.#..#.#.#.
|
||||
####...#..#....###..####....#.#..#.##..
|
||||
#..#..#...#....#....#..#....#.###..#.#.
|
||||
#..#.#....#....#....#..#.#..#.#.#..#.#.
|
||||
#..#.####.####.####.#..#..##..#..#.#..#
|
||||
"
|
||||
);
|
||||
}
|
||||
}
|
|
@ -11,3 +11,4 @@ pub mod day08;
|
|||
pub mod day09;
|
||||
pub mod day10;
|
||||
pub mod day11;
|
||||
pub mod day13;
|
||||
|
|
|
@ -13,6 +13,7 @@ use aoc2021::day08;
|
|||
use aoc2021::day09;
|
||||
use aoc2021::day10;
|
||||
use aoc2021::day11;
|
||||
use aoc2021::day13;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let days: &[DayFunc] = &[
|
||||
|
@ -27,6 +28,7 @@ fn main() -> Result<()> {
|
|||
day09::run,
|
||||
day10::run,
|
||||
day11::run,
|
||||
day13::run,
|
||||
];
|
||||
|
||||
aoc::run(days)
|
||||
|
|
Loading…
Reference in a new issue