Added day 13!
This commit is contained in:
parent
5cbd3f0a0a
commit
572ecbc94d
|
@ -1,7 +1,7 @@
|
|||
import std.stdio;
|
||||
|
||||
import day12.part1;
|
||||
import day13.part1;
|
||||
|
||||
void main() {
|
||||
passagePathing();
|
||||
transparentOrigami();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,833 @@
|
|||
296,446
|
||||
559,232
|
||||
754,329
|
||||
1238,577
|
||||
1155,754
|
||||
378,674
|
||||
1064,567
|
||||
1310,206
|
||||
171,82
|
||||
1228,892
|
||||
890,114
|
||||
806,565
|
||||
408,558
|
||||
1210,347
|
||||
53,845
|
||||
636,836
|
||||
907,133
|
||||
1299,852
|
||||
967,333
|
||||
956,815
|
||||
1238,471
|
||||
1136,577
|
||||
853,849
|
||||
15,9
|
||||
522,392
|
||||
176,887
|
||||
877,67
|
||||
228,565
|
||||
952,861
|
||||
595,712
|
||||
715,264
|
||||
1043,854
|
||||
1014,476
|
||||
952,555
|
||||
94,199
|
||||
1019,297
|
||||
915,259
|
||||
242,338
|
||||
1014,787
|
||||
1236,770
|
||||
654,16
|
||||
453,562
|
||||
964,892
|
||||
1037,341
|
||||
964,129
|
||||
15,602
|
||||
546,367
|
||||
1089,422
|
||||
1099,477
|
||||
905,490
|
||||
279,477
|
||||
1078,404
|
||||
1298,439
|
||||
493,100
|
||||
566,12
|
||||
616,476
|
||||
1110,668
|
||||
1203,698
|
||||
1022,810
|
||||
1128,648
|
||||
1128,849
|
||||
967,490
|
||||
70,114
|
||||
1078,247
|
||||
624,28
|
||||
867,318
|
||||
529,546
|
||||
756,500
|
||||
1046,690
|
||||
1084,824
|
||||
642,96
|
||||
585,719
|
||||
209,88
|
||||
119,140
|
||||
771,29
|
||||
296,418
|
||||
1146,520
|
||||
1049,246
|
||||
1141,861
|
||||
1119,285
|
||||
554,652
|
||||
15,210
|
||||
478,7
|
||||
164,101
|
||||
788,616
|
||||
554,294
|
||||
954,77
|
||||
716,161
|
||||
703,831
|
||||
223,376
|
||||
1139,812
|
||||
771,128
|
||||
131,478
|
||||
895,649
|
||||
300,79
|
||||
1031,252
|
||||
1014,642
|
||||
668,439
|
||||
550,228
|
||||
904,450
|
||||
937,277
|
||||
867,352
|
||||
1266,780
|
||||
80,0
|
||||
1208,325
|
||||
1064,0
|
||||
406,682
|
||||
430,556
|
||||
1195,29
|
||||
1076,452
|
||||
1178,616
|
||||
527,570
|
||||
320,31
|
||||
373,165
|
||||
358,339
|
||||
453,105
|
||||
668,217
|
||||
788,866
|
||||
232,404
|
||||
862,502
|
||||
929,553
|
||||
813,47
|
||||
982,838
|
||||
1242,740
|
||||
952,221
|
||||
766,39
|
||||
100,500
|
||||
907,593
|
||||
223,294
|
||||
464,91
|
||||
981,336
|
||||
997,155
|
||||
326,56
|
||||
131,864
|
||||
100,347
|
||||
283,194
|
||||
1067,548
|
||||
1210,276
|
||||
544,631
|
||||
624,413
|
||||
744,124
|
||||
1222,124
|
||||
1002,577
|
||||
935,418
|
||||
1248,690
|
||||
964,450
|
||||
808,505
|
||||
1201,733
|
||||
107,644
|
||||
296,476
|
||||
131,416
|
||||
1002,836
|
||||
222,196
|
||||
1175,654
|
||||
567,369
|
||||
661,163
|
||||
1293,61
|
||||
1146,374
|
||||
576,58
|
||||
493,794
|
||||
699,656
|
||||
530,840
|
||||
662,863
|
||||
624,448
|
||||
309,509
|
||||
1109,777
|
||||
420,666
|
||||
482,414
|
||||
992,136
|
||||
296,787
|
||||
87,21
|
||||
1153,470
|
||||
1283,357
|
||||
354,367
|
||||
276,680
|
||||
1145,346
|
||||
510,648
|
||||
12,679
|
||||
552,674
|
||||
381,341
|
||||
300,815
|
||||
452,320
|
||||
54,712
|
||||
817,100
|
||||
271,298
|
||||
989,800
|
||||
857,49
|
||||
303,831
|
||||
688,108
|
||||
1149,234
|
||||
604,892
|
||||
274,71
|
||||
753,826
|
||||
258,359
|
||||
382,406
|
||||
87,873
|
||||
350,442
|
||||
68,154
|
||||
445,88
|
||||
750,266
|
||||
328,654
|
||||
185,740
|
||||
247,604
|
||||
554,515
|
||||
691,673
|
||||
782,338
|
||||
453,497
|
||||
1133,484
|
||||
264,690
|
||||
1218,218
|
||||
177,410
|
||||
365,343
|
||||
239,873
|
||||
431,600
|
||||
85,180
|
||||
371,327
|
||||
507,716
|
||||
962,214
|
||||
1092,367
|
||||
244,782
|
||||
801,509
|
||||
601,845
|
||||
1022,252
|
||||
882,376
|
||||
266,791
|
||||
164,569
|
||||
1243,187
|
||||
1027,700
|
||||
1148,392
|
||||
1216,880
|
||||
1056,541
|
||||
1195,542
|
||||
408,448
|
||||
977,94
|
||||
358,787
|
||||
554,276
|
||||
475,82
|
||||
12,889
|
||||
554,379
|
||||
1029,725
|
||||
264,196
|
||||
1101,88
|
||||
83,492
|
||||
202,616
|
||||
758,674
|
||||
299,509
|
||||
788,115
|
||||
1044,103
|
||||
234,4
|
||||
443,418
|
||||
858,320
|
||||
864,607
|
||||
756,518
|
||||
95,35
|
||||
648,863
|
||||
952,107
|
||||
267,854
|
||||
200,714
|
||||
80,205
|
||||
828,256
|
||||
366,252
|
||||
42,782
|
||||
1159,495
|
||||
1218,795
|
||||
600,264
|
||||
172,256
|
||||
969,199
|
||||
314,663
|
||||
857,789
|
||||
217,117
|
||||
1280,555
|
||||
1082,565
|
||||
1297,199
|
||||
634,2
|
||||
249,490
|
||||
132,616
|
||||
1228,444
|
||||
999,358
|
||||
765,733
|
||||
1156,190
|
||||
813,847
|
||||
311,358
|
||||
907,73
|
||||
1155,364
|
||||
1173,329
|
||||
289,343
|
||||
944,642
|
||||
922,469
|
||||
256,53
|
||||
251,593
|
||||
306,662
|
||||
666,375
|
||||
488,894
|
||||
1265,165
|
||||
642,217
|
||||
820,464
|
||||
393,745
|
||||
674,892
|
||||
761,248
|
||||
1210,547
|
||||
343,378
|
||||
294,562
|
||||
853,368
|
||||
74,770
|
||||
371,460
|
||||
105,24
|
||||
1113,849
|
||||
1039,746
|
||||
264,756
|
||||
507,194
|
||||
656,166
|
||||
289,551
|
||||
984,464
|
||||
1275,53
|
||||
381,553
|
||||
1,234
|
||||
209,806
|
||||
453,332
|
||||
624,866
|
||||
358,861
|
||||
567,525
|
||||
492,297
|
||||
619,225
|
||||
781,777
|
||||
1160,777
|
||||
174,374
|
||||
234,562
|
||||
557,182
|
||||
760,442
|
||||
30,866
|
||||
1205,472
|
||||
850,115
|
||||
544,756
|
||||
375,476
|
||||
97,826
|
||||
1139,292
|
||||
654,81
|
||||
296,225
|
||||
796,452
|
||||
880,338
|
||||
407,290
|
||||
68,311
|
||||
329,558
|
||||
42,334
|
||||
562,228
|
||||
1088,521
|
||||
999,404
|
||||
10,744
|
||||
654,688
|
||||
1071,873
|
||||
231,707
|
||||
264,652
|
||||
0,793
|
||||
1131,781
|
||||
1053,810
|
||||
959,831
|
||||
1200,301
|
||||
1185,49
|
||||
296,252
|
||||
308,836
|
||||
967,516
|
||||
1029,729
|
||||
320,353
|
||||
308,220
|
||||
154,190
|
||||
1081,516
|
||||
780,840
|
||||
1136,317
|
||||
1138,480
|
||||
443,318
|
||||
587,74
|
||||
475,44
|
||||
482,256
|
||||
639,716
|
||||
581,308
|
||||
1027,154
|
||||
1,660
|
||||
776,252
|
||||
35,112
|
||||
135,240
|
||||
403,73
|
||||
1231,458
|
||||
1006,890
|
||||
157,731
|
||||
271,746
|
||||
67,187
|
||||
1134,455
|
||||
927,596
|
||||
36,271
|
||||
343,113
|
||||
408,446
|
||||
890,452
|
||||
425,760
|
||||
765,777
|
||||
709,397
|
||||
642,455
|
||||
939,327
|
||||
446,607
|
||||
1223,817
|
||||
244,821
|
||||
1223,425
|
||||
1081,378
|
||||
229,378
|
||||
803,700
|
||||
877,198
|
||||
1231,436
|
||||
745,460
|
||||
550,754
|
||||
1149,112
|
||||
1066,112
|
||||
320,703
|
||||
1108,581
|
||||
165,560
|
||||
781,497
|
||||
1266,114
|
||||
249,154
|
||||
5,267
|
||||
1021,562
|
||||
35,745
|
||||
577,180
|
||||
1019,149
|
||||
87,369
|
||||
454,108
|
||||
428,376
|
||||
1139,28
|
||||
800,269
|
||||
715,182
|
||||
715,630
|
||||
750,647
|
||||
62,204
|
||||
632,676
|
||||
962,680
|
||||
758,220
|
||||
453,786
|
||||
582,245
|
||||
272,859
|
||||
38,476
|
||||
489,346
|
||||
488,450
|
||||
766,756
|
||||
161,212
|
||||
94,714
|
||||
465,117
|
||||
1056,247
|
||||
944,252
|
||||
222,890
|
||||
1287,511
|
||||
492,597
|
||||
283,740
|
||||
1250,14
|
||||
211,495
|
||||
686,339
|
||||
1241,308
|
||||
694,476
|
||||
1031,417
|
||||
490,430
|
||||
216,183
|
||||
157,175
|
||||
1146,430
|
||||
410,334
|
||||
1250,873
|
||||
313,259
|
||||
807,511
|
||||
686,28
|
||||
781,546
|
||||
556,329
|
||||
1022,84
|
||||
970,215
|
||||
251,749
|
||||
320,191
|
||||
1300,519
|
||||
1125,154
|
||||
529,777
|
||||
218,866
|
||||
595,630
|
||||
222,756
|
||||
341,199
|
||||
1108,313
|
||||
1288,442
|
||||
1228,17
|
||||
1230,894
|
||||
751,232
|
||||
643,607
|
||||
785,393
|
||||
884,693
|
||||
18,836
|
||||
1184,556
|
||||
311,404
|
||||
452,726
|
||||
1225,852
|
||||
750,247
|
||||
807,383
|
||||
477,483
|
||||
1014,252
|
||||
346,129
|
||||
433,67
|
||||
967,113
|
||||
37,252
|
||||
1251,182
|
||||
1054,332
|
||||
596,330
|
||||
867,399
|
||||
375,253
|
||||
443,399
|
||||
382,187
|
||||
594,161
|
||||
1116,115
|
||||
1248,204
|
||||
1218,556
|
||||
892,151
|
||||
1128,829
|
||||
387,712
|
||||
510,269
|
||||
594,385
|
||||
283,567
|
||||
366,642
|
||||
155,754
|
||||
88,770
|
||||
882,294
|
||||
639,516
|
||||
592,810
|
||||
373,185
|
||||
562,666
|
||||
69,623
|
||||
594,598
|
||||
199,169
|
||||
477,35
|
||||
482,480
|
||||
1049,872
|
||||
151,399
|
||||
1029,281
|
||||
211,477
|
||||
341,186
|
||||
1257,49
|
||||
502,505
|
||||
893,460
|
||||
967,714
|
||||
1238,201
|
||||
1222,322
|
||||
100,52
|
||||
1019,0
|
||||
944,532
|
||||
15,885
|
||||
1131,113
|
||||
309,385
|
||||
1002,220
|
||||
1213,68
|
||||
920,885
|
||||
281,725
|
||||
311,561
|
||||
398,562
|
||||
1191,551
|
||||
437,833
|
||||
62,662
|
||||
1149,794
|
||||
497,175
|
||||
428,204
|
||||
72,423
|
||||
1084,518
|
||||
653,212
|
||||
607,253
|
||||
1066,821
|
||||
89,460
|
||||
530,574
|
||||
1225,42
|
||||
952,787
|
||||
643,287
|
||||
488,24
|
||||
200,180
|
||||
699,208
|
||||
1185,565
|
||||
967,358
|
||||
1218,99
|
||||
497,399
|
||||
82,450
|
||||
1223,873
|
||||
1022,686
|
||||
1064,327
|
||||
976,353
|
||||
15,233
|
||||
601,117
|
||||
509,509
|
||||
405,852
|
||||
405,404
|
||||
1061,154
|
||||
489,782
|
||||
642,663
|
||||
611,602
|
||||
291,297
|
||||
1046,756
|
||||
733,180
|
||||
110,711
|
||||
291,8
|
||||
1029,169
|
||||
92,218
|
||||
821,782
|
||||
1205,291
|
||||
283,292
|
||||
882,204
|
||||
656,365
|
||||
822,0
|
||||
243,548
|
||||
443,417
|
||||
22,442
|
||||
288,686
|
||||
1086,14
|
||||
999,561
|
||||
974,758
|
||||
534,642
|
||||
407,436
|
||||
418,151
|
||||
1029,633
|
||||
351,831
|
||||
669,247
|
||||
1156,704
|
||||
60,780
|
||||
197,45
|
||||
759,331
|
||||
1295,806
|
||||
490,414
|
||||
997,259
|
||||
22,676
|
||||
989,94
|
||||
246,121
|
||||
161,334
|
||||
279,417
|
||||
668,5
|
||||
1179,416
|
||||
281,729
|
||||
15,806
|
||||
361,32
|
||||
126,338
|
||||
365,114
|
||||
365,623
|
||||
1099,417
|
||||
44,114
|
||||
756,276
|
||||
724,154
|
||||
373,281
|
||||
1257,845
|
||||
796,442
|
||||
1226,450
|
||||
592,612
|
||||
162,840
|
||||
530,54
|
||||
1287,383
|
||||
1242,647
|
||||
827,82
|
||||
221,422
|
||||
426,201
|
||||
756,618
|
||||
723,74
|
||||
234,452
|
||||
211,417
|
||||
857,105
|
||||
1027,140
|
||||
383,596
|
||||
283,700
|
||||
929,341
|
||||
306,641
|
||||
1310,345
|
||||
94,266
|
||||
1206,698
|
||||
667,287
|
||||
1029,261
|
||||
835,44
|
||||
631,63
|
||||
488,870
|
||||
433,696
|
||||
728,649
|
||||
454,786
|
||||
709,845
|
||||
366,810
|
||||
316,317
|
||||
1006,4
|
||||
246,327
|
||||
363,893
|
||||
676,450
|
||||
346,892
|
||||
457,401
|
||||
654,878
|
||||
313,35
|
||||
412,444
|
||||
1002,317
|
||||
104,666
|
||||
1029,617
|
||||
42,560
|
||||
1146,101
|
||||
355,206
|
||||
1295,602
|
||||
549,248
|
||||
676,2
|
||||
1111,469
|
||||
1093,565
|
||||
390,84
|
||||
161,660
|
||||
0,345
|
||||
1149,346
|
||||
723,820
|
||||
1036,599
|
||||
544,855
|
||||
1088,4
|
||||
530,392
|
||||
1275,112
|
||||
1019,393
|
||||
1166,625
|
||||
283,754
|
||||
542,81
|
||||
821,112
|
||||
862,392
|
||||
333,94
|
||||
420,452
|
||||
554,824
|
||||
699,292
|
||||
1298,889
|
||||
436,866
|
||||
788,278
|
||||
12,96
|
||||
1275,73
|
||||
912,562
|
||||
599,698
|
||||
586,602
|
||||
1238,319
|
||||
560,647
|
||||
1046,652
|
||||
902,448
|
||||
80,689
|
||||
242,444
|
||||
554,376
|
||||
281,261
|
||||
436,815
|
||||
1297,291
|
||||
201,49
|
||||
234,332
|
||||
796,890
|
||||
232,490
|
||||
679,319
|
||||
624,481
|
||||
288,84
|
||||
232,647
|
||||
11,287
|
||||
231,187
|
||||
244,429
|
||||
125,329
|
||||
0,206
|
||||
298,817
|
||||
1299,735
|
||||
1216,714
|
||||
994,317
|
||||
291,0
|
||||
221,472
|
||||
72,649
|
||||
171,866
|
||||
619,669
|
||||
248,506
|
||||
1149,334
|
||||
499,364
|
||||
490,325
|
||||
272,411
|
||||
607,831
|
||||
313,739
|
||||
318,136
|
||||
453,796
|
||||
1111,357
|
||||
609,729
|
||||
1064,110
|
||||
739,492
|
||||
817,794
|
||||
217,565
|
||||
218,367
|
||||
830,72
|
||||
1280,866
|
||||
418,743
|
||||
329,784
|
||||
60,598
|
||||
161,682
|
||||
932,276
|
||||
161,234
|
||||
600,859
|
||||
656,878
|
||||
82,892
|
||||
663,317
|
||||
904,444
|
||||
1228,450
|
||||
917,297
|
||||
503,383
|
||||
472,648
|
||||
88,124
|
||||
37,642
|
||||
1210,742
|
||||
248,836
|
||||
879,742
|
||||
1044,791
|
||||
1081,488
|
||||
768,81
|
||||
363,448
|
||||
872,711
|
||||
562,676
|
||||
1004,641
|
||||
144,625
|
||||
653,682
|
||||
756,416
|
||||
1010,815
|
||||
390,242
|
||||
191,14
|
||||
194,563
|
||||
1082,329
|
||||
229,516
|
||||
485,771
|
||||
162,480
|
||||
1191,343
|
||||
171,812
|
||||
10,822
|
||||
1138,256
|
||||
710,182
|
||||
1297,647
|
||||
182,648
|
||||
1014,446
|
||||
165,346
|
||||
748,228
|
||||
|
||||
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
|
|
@ -0,0 +1,91 @@
|
|||
module day13.part1;
|
||||
|
||||
import std.file;
|
||||
import std.stdio;
|
||||
import std.string;
|
||||
import std.conv;
|
||||
import std.algorithm;
|
||||
import std.array;
|
||||
|
||||
struct Point {
|
||||
int x;
|
||||
int y;
|
||||
}
|
||||
|
||||
enum LineType {
|
||||
HORIZONTAL,
|
||||
VERTICAL
|
||||
}
|
||||
|
||||
struct Line {
|
||||
LineType type;
|
||||
int value;
|
||||
}
|
||||
|
||||
Point[] foldOver(ref Point[] points, Line line) {
|
||||
Point[] newPoints = [];
|
||||
void add(ref Point[] pts, Point p) {
|
||||
if (!canFind(pts, p)) pts ~= p;
|
||||
}
|
||||
foreach (i, point; points) {
|
||||
if (line.type == LineType.HORIZONTAL) {
|
||||
if (point.y < line.value) {
|
||||
add(newPoints, point);
|
||||
} else {
|
||||
int reflectedY = line.value - (point.y - line.value);
|
||||
if (reflectedY < line.value && reflectedY >= 0) {
|
||||
add(newPoints, Point(point.x, reflectedY));
|
||||
}
|
||||
}
|
||||
} else if (line.type == LineType.VERTICAL) {
|
||||
if (point.x < line.value) {
|
||||
add(newPoints, point);
|
||||
} else {
|
||||
int reflectedX = line.value - (point.x - line.value);
|
||||
if (reflectedX < line.value && reflectedX >= 0) {
|
||||
add(newPoints, Point(reflectedX, point.y));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return newPoints;
|
||||
}
|
||||
|
||||
void print(Point[] points) {
|
||||
int maxX = points.map!(p => p.x).maxElement;
|
||||
int maxY = points.map!(p => p.y).maxElement;
|
||||
foreach (y; 0..maxY + 1) {
|
||||
foreach (x; 0..maxX + 1) {
|
||||
bool pointExists = points.any!(p => p.x == x && p.y == y);
|
||||
writef("%c", pointExists ? '#' : '.');
|
||||
}
|
||||
writeln;
|
||||
}
|
||||
}
|
||||
|
||||
void transparentOrigami() {
|
||||
string[] textBlocks = readText("source/day13/input.txt").strip.split("\r\n\r\n");
|
||||
writeln(textBlocks);
|
||||
Point[] points = textBlocks[0].split("\n")
|
||||
.filter!(line => line.strip.length > 0)
|
||||
.map!((line) {
|
||||
string[] parts = line.strip.split(",");
|
||||
return Point(parts[0].to!int, parts[1].to!int);
|
||||
}).array;
|
||||
Line[] lines = textBlocks[1].split("\n")
|
||||
.map!((line) {
|
||||
string[] parts = line.strip.split("=");
|
||||
LineType type = parts[0][$ - 1] == 'x' ? LineType.VERTICAL : LineType.HORIZONTAL;
|
||||
int value = parts[1].to!int;
|
||||
return Line(type, value);
|
||||
}).array;
|
||||
|
||||
points.writeln;
|
||||
lines.writeln;
|
||||
|
||||
foreach (i, line; lines) {
|
||||
points = foldOver(points, line);
|
||||
writefln("After fold %d, %d dots are visible.", i + 1, points.length);
|
||||
}
|
||||
print(points);
|
||||
}
|
|
@ -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
|
Loading…
Reference in New Issue