Day 5
This commit is contained in:
parent
88c62932bc
commit
b26a3830d2
3 changed files with 626 additions and 0 deletions
10
input/05-test.txt
Normal file
10
input/05-test.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
0,9 -> 5,9
|
||||||
|
8,0 -> 0,8
|
||||||
|
9,4 -> 3,4
|
||||||
|
2,2 -> 2,1
|
||||||
|
7,0 -> 7,4
|
||||||
|
6,4 -> 2,0
|
||||||
|
0,9 -> 2,9
|
||||||
|
3,4 -> 1,4
|
||||||
|
0,0 -> 8,8
|
||||||
|
5,5 -> 8,2
|
500
input/05.txt
Normal file
500
input/05.txt
Normal file
|
@ -0,0 +1,500 @@
|
||||||
|
242,601 -> 242,18
|
||||||
|
938,357 -> 938,128
|
||||||
|
920,574 -> 750,574
|
||||||
|
804,978 -> 804,813
|
||||||
|
955,932 -> 68,45
|
||||||
|
232,604 -> 232,843
|
||||||
|
69,570 -> 467,968
|
||||||
|
355,432 -> 611,688
|
||||||
|
945,19 -> 700,19
|
||||||
|
904,932 -> 904,918
|
||||||
|
455,65 -> 516,65
|
||||||
|
571,485 -> 588,485
|
||||||
|
717,142 -> 217,142
|
||||||
|
377,344 -> 66,344
|
||||||
|
510,818 -> 132,818
|
||||||
|
848,709 -> 848,950
|
||||||
|
785,50 -> 785,857
|
||||||
|
23,981 -> 971,33
|
||||||
|
938,45 -> 938,327
|
||||||
|
212,402 -> 601,13
|
||||||
|
749,142 -> 651,240
|
||||||
|
94,930 -> 22,930
|
||||||
|
436,467 -> 820,851
|
||||||
|
544,265 -> 458,265
|
||||||
|
517,708 -> 517,785
|
||||||
|
957,893 -> 957,22
|
||||||
|
684,610 -> 526,452
|
||||||
|
713,687 -> 526,687
|
||||||
|
220,781 -> 988,13
|
||||||
|
12,45 -> 912,945
|
||||||
|
854,677 -> 646,677
|
||||||
|
382,498 -> 382,64
|
||||||
|
676,879 -> 148,351
|
||||||
|
809,52 -> 336,525
|
||||||
|
959,951 -> 41,33
|
||||||
|
943,162 -> 132,973
|
||||||
|
897,732 -> 897,308
|
||||||
|
21,196 -> 702,877
|
||||||
|
938,972 -> 656,972
|
||||||
|
798,139 -> 90,847
|
||||||
|
213,597 -> 582,966
|
||||||
|
248,955 -> 973,230
|
||||||
|
985,606 -> 985,885
|
||||||
|
166,693 -> 804,693
|
||||||
|
807,897 -> 28,118
|
||||||
|
433,306 -> 433,447
|
||||||
|
899,61 -> 60,900
|
||||||
|
984,582 -> 691,582
|
||||||
|
803,583 -> 910,583
|
||||||
|
348,142 -> 348,244
|
||||||
|
352,775 -> 352,430
|
||||||
|
240,285 -> 240,406
|
||||||
|
394,541 -> 394,655
|
||||||
|
887,622 -> 298,33
|
||||||
|
62,37 -> 861,836
|
||||||
|
819,136 -> 29,926
|
||||||
|
717,332 -> 717,408
|
||||||
|
709,63 -> 276,496
|
||||||
|
384,441 -> 150,441
|
||||||
|
292,251 -> 557,516
|
||||||
|
518,311 -> 52,777
|
||||||
|
50,735 -> 479,306
|
||||||
|
932,865 -> 139,72
|
||||||
|
43,21 -> 982,960
|
||||||
|
63,927 -> 796,194
|
||||||
|
958,351 -> 958,623
|
||||||
|
643,451 -> 35,451
|
||||||
|
534,14 -> 459,14
|
||||||
|
20,649 -> 924,649
|
||||||
|
983,18 -> 35,966
|
||||||
|
84,668 -> 203,668
|
||||||
|
40,654 -> 748,654
|
||||||
|
474,760 -> 85,371
|
||||||
|
512,431 -> 272,431
|
||||||
|
588,93 -> 112,569
|
||||||
|
648,687 -> 832,687
|
||||||
|
988,867 -> 116,867
|
||||||
|
979,46 -> 94,931
|
||||||
|
242,307 -> 800,865
|
||||||
|
100,204 -> 807,911
|
||||||
|
890,962 -> 88,962
|
||||||
|
273,510 -> 273,201
|
||||||
|
184,748 -> 813,119
|
||||||
|
214,915 -> 950,179
|
||||||
|
960,975 -> 89,104
|
||||||
|
853,347 -> 853,79
|
||||||
|
853,308 -> 884,308
|
||||||
|
245,394 -> 245,640
|
||||||
|
850,554 -> 604,800
|
||||||
|
141,159 -> 141,378
|
||||||
|
635,632 -> 897,894
|
||||||
|
352,182 -> 550,182
|
||||||
|
748,613 -> 748,887
|
||||||
|
531,664 -> 255,388
|
||||||
|
785,414 -> 432,767
|
||||||
|
374,457 -> 653,736
|
||||||
|
451,535 -> 444,535
|
||||||
|
600,179 -> 434,13
|
||||||
|
489,605 -> 845,961
|
||||||
|
658,786 -> 658,196
|
||||||
|
305,556 -> 305,914
|
||||||
|
820,368 -> 204,984
|
||||||
|
903,70 -> 548,425
|
||||||
|
840,450 -> 796,494
|
||||||
|
289,183 -> 768,662
|
||||||
|
21,54 -> 950,983
|
||||||
|
765,294 -> 209,850
|
||||||
|
467,511 -> 703,747
|
||||||
|
354,645 -> 730,645
|
||||||
|
176,30 -> 964,818
|
||||||
|
290,259 -> 345,259
|
||||||
|
868,945 -> 96,173
|
||||||
|
536,884 -> 536,94
|
||||||
|
415,177 -> 415,99
|
||||||
|
250,140 -> 466,140
|
||||||
|
900,107 -> 900,249
|
||||||
|
74,394 -> 137,394
|
||||||
|
364,957 -> 364,81
|
||||||
|
718,477 -> 718,227
|
||||||
|
27,14 -> 988,975
|
||||||
|
491,956 -> 154,956
|
||||||
|
289,283 -> 289,225
|
||||||
|
479,583 -> 604,583
|
||||||
|
581,406 -> 23,964
|
||||||
|
837,526 -> 732,526
|
||||||
|
417,435 -> 417,206
|
||||||
|
502,184 -> 20,666
|
||||||
|
903,754 -> 817,668
|
||||||
|
381,284 -> 967,870
|
||||||
|
31,17 -> 176,17
|
||||||
|
225,377 -> 179,377
|
||||||
|
316,932 -> 358,890
|
||||||
|
605,841 -> 559,841
|
||||||
|
865,193 -> 865,827
|
||||||
|
836,834 -> 142,140
|
||||||
|
229,610 -> 232,610
|
||||||
|
26,13 -> 872,859
|
||||||
|
26,444 -> 26,79
|
||||||
|
272,690 -> 531,949
|
||||||
|
964,954 -> 331,954
|
||||||
|
545,91 -> 335,91
|
||||||
|
906,942 -> 906,301
|
||||||
|
608,778 -> 608,364
|
||||||
|
475,723 -> 475,710
|
||||||
|
454,207 -> 614,207
|
||||||
|
200,180 -> 917,897
|
||||||
|
966,44 -> 71,939
|
||||||
|
288,252 -> 288,413
|
||||||
|
795,791 -> 66,62
|
||||||
|
81,39 -> 588,546
|
||||||
|
249,244 -> 892,244
|
||||||
|
483,579 -> 853,579
|
||||||
|
220,921 -> 220,286
|
||||||
|
917,834 -> 675,834
|
||||||
|
569,692 -> 569,521
|
||||||
|
344,586 -> 835,95
|
||||||
|
116,153 -> 888,925
|
||||||
|
681,52 -> 871,242
|
||||||
|
980,976 -> 27,23
|
||||||
|
828,567 -> 482,567
|
||||||
|
660,432 -> 660,441
|
||||||
|
826,379 -> 280,379
|
||||||
|
42,839 -> 259,622
|
||||||
|
743,23 -> 91,23
|
||||||
|
318,400 -> 318,528
|
||||||
|
539,745 -> 734,940
|
||||||
|
831,194 -> 831,210
|
||||||
|
582,630 -> 361,851
|
||||||
|
284,900 -> 213,829
|
||||||
|
52,855 -> 763,855
|
||||||
|
215,753 -> 452,753
|
||||||
|
290,187 -> 417,187
|
||||||
|
69,48 -> 69,126
|
||||||
|
76,628 -> 76,365
|
||||||
|
257,694 -> 54,694
|
||||||
|
755,713 -> 556,912
|
||||||
|
519,265 -> 342,265
|
||||||
|
193,319 -> 193,651
|
||||||
|
496,231 -> 900,231
|
||||||
|
83,942 -> 83,524
|
||||||
|
524,59 -> 989,524
|
||||||
|
288,800 -> 907,181
|
||||||
|
458,138 -> 586,138
|
||||||
|
338,244 -> 934,840
|
||||||
|
843,728 -> 843,476
|
||||||
|
42,634 -> 657,19
|
||||||
|
827,634 -> 369,176
|
||||||
|
779,900 -> 779,503
|
||||||
|
20,20 -> 870,870
|
||||||
|
467,241 -> 467,142
|
||||||
|
677,483 -> 501,483
|
||||||
|
10,989 -> 989,10
|
||||||
|
11,989 -> 989,11
|
||||||
|
244,750 -> 244,607
|
||||||
|
479,497 -> 48,928
|
||||||
|
372,341 -> 615,341
|
||||||
|
817,941 -> 339,941
|
||||||
|
352,67 -> 352,581
|
||||||
|
590,747 -> 590,405
|
||||||
|
524,26 -> 524,37
|
||||||
|
501,300 -> 117,300
|
||||||
|
265,194 -> 491,420
|
||||||
|
397,891 -> 983,305
|
||||||
|
423,717 -> 423,922
|
||||||
|
197,863 -> 197,217
|
||||||
|
12,91 -> 379,91
|
||||||
|
364,426 -> 364,185
|
||||||
|
649,835 -> 649,309
|
||||||
|
517,380 -> 485,380
|
||||||
|
328,469 -> 568,469
|
||||||
|
781,298 -> 781,264
|
||||||
|
25,794 -> 25,197
|
||||||
|
570,744 -> 570,544
|
||||||
|
664,352 -> 632,320
|
||||||
|
528,944 -> 528,696
|
||||||
|
242,44 -> 900,702
|
||||||
|
486,775 -> 486,556
|
||||||
|
608,245 -> 788,245
|
||||||
|
114,11 -> 114,508
|
||||||
|
751,560 -> 751,884
|
||||||
|
211,513 -> 448,513
|
||||||
|
389,219 -> 308,300
|
||||||
|
638,200 -> 105,200
|
||||||
|
258,243 -> 365,243
|
||||||
|
120,558 -> 556,122
|
||||||
|
787,166 -> 274,166
|
||||||
|
617,666 -> 185,234
|
||||||
|
537,172 -> 808,172
|
||||||
|
633,980 -> 282,980
|
||||||
|
270,150 -> 270,225
|
||||||
|
925,32 -> 48,909
|
||||||
|
979,14 -> 891,102
|
||||||
|
98,278 -> 98,485
|
||||||
|
333,771 -> 119,771
|
||||||
|
132,673 -> 132,189
|
||||||
|
416,470 -> 482,404
|
||||||
|
762,151 -> 925,151
|
||||||
|
148,721 -> 378,491
|
||||||
|
255,576 -> 255,474
|
||||||
|
21,48 -> 938,965
|
||||||
|
876,615 -> 777,615
|
||||||
|
713,209 -> 209,209
|
||||||
|
250,474 -> 271,453
|
||||||
|
684,71 -> 451,71
|
||||||
|
406,614 -> 519,501
|
||||||
|
479,252 -> 112,252
|
||||||
|
721,768 -> 284,331
|
||||||
|
290,344 -> 290,111
|
||||||
|
359,934 -> 544,934
|
||||||
|
754,976 -> 726,976
|
||||||
|
358,544 -> 358,904
|
||||||
|
597,344 -> 597,581
|
||||||
|
915,222 -> 915,255
|
||||||
|
931,160 -> 135,956
|
||||||
|
160,657 -> 348,657
|
||||||
|
35,942 -> 949,28
|
||||||
|
298,837 -> 298,356
|
||||||
|
540,195 -> 540,119
|
||||||
|
29,140 -> 29,955
|
||||||
|
118,117 -> 980,979
|
||||||
|
240,384 -> 464,608
|
||||||
|
677,667 -> 361,351
|
||||||
|
982,987 -> 11,16
|
||||||
|
638,770 -> 95,227
|
||||||
|
135,285 -> 135,349
|
||||||
|
843,313 -> 843,529
|
||||||
|
208,220 -> 945,957
|
||||||
|
450,889 -> 977,362
|
||||||
|
876,69 -> 283,69
|
||||||
|
57,586 -> 57,231
|
||||||
|
602,78 -> 602,564
|
||||||
|
708,704 -> 267,704
|
||||||
|
697,336 -> 697,264
|
||||||
|
564,522 -> 519,567
|
||||||
|
195,217 -> 274,138
|
||||||
|
35,885 -> 116,804
|
||||||
|
680,28 -> 148,28
|
||||||
|
736,34 -> 736,616
|
||||||
|
918,454 -> 52,454
|
||||||
|
143,40 -> 415,40
|
||||||
|
985,469 -> 985,282
|
||||||
|
804,703 -> 107,703
|
||||||
|
707,59 -> 296,470
|
||||||
|
37,935 -> 931,41
|
||||||
|
45,723 -> 45,531
|
||||||
|
897,959 -> 165,227
|
||||||
|
691,948 -> 523,948
|
||||||
|
545,560 -> 545,45
|
||||||
|
251,24 -> 748,521
|
||||||
|
625,506 -> 625,626
|
||||||
|
302,702 -> 989,15
|
||||||
|
489,926 -> 489,507
|
||||||
|
405,830 -> 405,871
|
||||||
|
736,851 -> 19,134
|
||||||
|
712,848 -> 48,184
|
||||||
|
925,914 -> 33,22
|
||||||
|
593,254 -> 369,478
|
||||||
|
965,691 -> 155,691
|
||||||
|
758,931 -> 349,522
|
||||||
|
64,135 -> 820,891
|
||||||
|
79,933 -> 79,683
|
||||||
|
609,454 -> 233,454
|
||||||
|
617,853 -> 309,545
|
||||||
|
695,130 -> 695,578
|
||||||
|
508,198 -> 363,198
|
||||||
|
184,414 -> 275,505
|
||||||
|
627,901 -> 519,901
|
||||||
|
765,715 -> 213,715
|
||||||
|
445,134 -> 669,134
|
||||||
|
785,33 -> 302,516
|
||||||
|
563,218 -> 470,125
|
||||||
|
136,461 -> 264,461
|
||||||
|
523,643 -> 674,643
|
||||||
|
473,695 -> 473,235
|
||||||
|
616,835 -> 757,976
|
||||||
|
406,763 -> 406,224
|
||||||
|
483,111 -> 203,111
|
||||||
|
70,863 -> 922,11
|
||||||
|
738,141 -> 738,54
|
||||||
|
146,697 -> 332,883
|
||||||
|
939,16 -> 23,932
|
||||||
|
836,15 -> 317,534
|
||||||
|
853,586 -> 853,596
|
||||||
|
733,377 -> 733,461
|
||||||
|
378,597 -> 378,640
|
||||||
|
522,225 -> 522,78
|
||||||
|
875,886 -> 875,130
|
||||||
|
302,83 -> 771,83
|
||||||
|
969,588 -> 419,38
|
||||||
|
268,159 -> 585,476
|
||||||
|
658,955 -> 33,330
|
||||||
|
940,149 -> 492,149
|
||||||
|
157,254 -> 962,254
|
||||||
|
265,778 -> 265,365
|
||||||
|
414,494 -> 608,494
|
||||||
|
27,959 -> 948,38
|
||||||
|
220,160 -> 220,891
|
||||||
|
836,316 -> 836,179
|
||||||
|
843,727 -> 163,47
|
||||||
|
225,695 -> 598,695
|
||||||
|
678,249 -> 892,249
|
||||||
|
938,36 -> 938,170
|
||||||
|
190,486 -> 40,336
|
||||||
|
815,256 -> 815,866
|
||||||
|
961,200 -> 961,89
|
||||||
|
67,895 -> 67,853
|
||||||
|
480,727 -> 852,727
|
||||||
|
334,94 -> 334,452
|
||||||
|
67,622 -> 987,622
|
||||||
|
48,29 -> 982,963
|
||||||
|
90,29 -> 963,902
|
||||||
|
859,739 -> 338,739
|
||||||
|
869,254 -> 474,649
|
||||||
|
196,43 -> 69,43
|
||||||
|
336,439 -> 336,837
|
||||||
|
248,387 -> 587,48
|
||||||
|
378,729 -> 162,513
|
||||||
|
699,658 -> 513,844
|
||||||
|
447,410 -> 670,410
|
||||||
|
739,593 -> 889,443
|
||||||
|
83,970 -> 964,89
|
||||||
|
276,406 -> 276,191
|
||||||
|
860,75 -> 247,688
|
||||||
|
435,858 -> 435,905
|
||||||
|
691,893 -> 691,757
|
||||||
|
136,896 -> 611,421
|
||||||
|
693,211 -> 477,427
|
||||||
|
181,793 -> 181,717
|
||||||
|
674,326 -> 664,336
|
||||||
|
938,826 -> 164,52
|
||||||
|
833,380 -> 833,753
|
||||||
|
833,349 -> 230,952
|
||||||
|
662,870 -> 662,23
|
||||||
|
974,511 -> 145,511
|
||||||
|
38,579 -> 57,579
|
||||||
|
966,965 -> 966,498
|
||||||
|
641,217 -> 240,618
|
||||||
|
418,986 -> 834,986
|
||||||
|
971,716 -> 971,263
|
||||||
|
254,313 -> 254,823
|
||||||
|
61,790 -> 61,834
|
||||||
|
262,439 -> 262,864
|
||||||
|
345,856 -> 894,307
|
||||||
|
736,862 -> 281,862
|
||||||
|
814,636 -> 814,240
|
||||||
|
853,865 -> 853,22
|
||||||
|
792,106 -> 207,106
|
||||||
|
647,303 -> 531,303
|
||||||
|
506,706 -> 337,706
|
||||||
|
402,140 -> 402,958
|
||||||
|
899,796 -> 669,796
|
||||||
|
806,619 -> 463,276
|
||||||
|
340,347 -> 340,363
|
||||||
|
18,21 -> 979,982
|
||||||
|
395,214 -> 395,862
|
||||||
|
228,330 -> 333,330
|
||||||
|
723,950 -> 723,150
|
||||||
|
392,298 -> 36,298
|
||||||
|
916,118 -> 114,920
|
||||||
|
210,854 -> 80,724
|
||||||
|
212,206 -> 513,507
|
||||||
|
44,659 -> 161,659
|
||||||
|
771,44 -> 198,617
|
||||||
|
485,706 -> 169,706
|
||||||
|
385,455 -> 308,455
|
||||||
|
390,317 -> 390,385
|
||||||
|
492,532 -> 56,968
|
||||||
|
237,674 -> 712,674
|
||||||
|
988,909 -> 254,175
|
||||||
|
86,276 -> 448,276
|
||||||
|
688,418 -> 927,179
|
||||||
|
667,773 -> 504,610
|
||||||
|
968,974 -> 109,115
|
||||||
|
843,54 -> 843,265
|
||||||
|
19,249 -> 19,437
|
||||||
|
307,326 -> 341,360
|
||||||
|
531,891 -> 531,202
|
||||||
|
281,535 -> 270,546
|
||||||
|
503,305 -> 164,644
|
||||||
|
170,971 -> 30,971
|
||||||
|
763,247 -> 946,247
|
||||||
|
795,920 -> 623,920
|
||||||
|
673,16 -> 899,16
|
||||||
|
785,845 -> 290,845
|
||||||
|
68,614 -> 68,711
|
||||||
|
284,984 -> 67,984
|
||||||
|
787,942 -> 120,942
|
||||||
|
953,369 -> 773,549
|
||||||
|
927,727 -> 315,115
|
||||||
|
884,686 -> 254,56
|
||||||
|
432,276 -> 432,287
|
||||||
|
658,99 -> 81,676
|
||||||
|
622,917 -> 679,917
|
||||||
|
938,978 -> 938,793
|
||||||
|
945,15 -> 369,15
|
||||||
|
603,709 -> 603,74
|
||||||
|
670,422 -> 222,870
|
||||||
|
190,702 -> 190,362
|
||||||
|
354,349 -> 369,334
|
||||||
|
26,880 -> 876,30
|
||||||
|
636,31 -> 636,731
|
||||||
|
778,628 -> 778,25
|
||||||
|
23,483 -> 170,483
|
||||||
|
23,972 -> 963,32
|
||||||
|
725,308 -> 384,308
|
||||||
|
97,962 -> 620,962
|
||||||
|
136,929 -> 136,768
|
||||||
|
656,295 -> 851,295
|
||||||
|
125,801 -> 755,171
|
||||||
|
120,32 -> 553,32
|
||||||
|
698,196 -> 286,608
|
||||||
|
66,721 -> 66,836
|
||||||
|
931,680 -> 931,499
|
||||||
|
862,449 -> 862,743
|
||||||
|
71,143 -> 180,252
|
||||||
|
510,327 -> 612,225
|
||||||
|
932,874 -> 352,874
|
||||||
|
599,372 -> 583,372
|
||||||
|
821,770 -> 126,75
|
||||||
|
317,186 -> 495,186
|
||||||
|
557,710 -> 56,209
|
||||||
|
895,866 -> 306,277
|
||||||
|
571,948 -> 571,738
|
||||||
|
287,864 -> 243,864
|
||||||
|
802,728 -> 802,198
|
||||||
|
711,642 -> 983,642
|
||||||
|
969,922 -> 969,645
|
||||||
|
89,417 -> 57,385
|
||||||
|
567,967 -> 567,781
|
||||||
|
350,498 -> 142,498
|
||||||
|
92,931 -> 988,35
|
||||||
|
980,940 -> 152,112
|
||||||
|
55,944 -> 679,320
|
||||||
|
669,410 -> 669,679
|
||||||
|
151,431 -> 241,431
|
||||||
|
984,882 -> 80,882
|
||||||
|
431,374 -> 431,39
|
||||||
|
30,91 -> 765,826
|
||||||
|
730,228 -> 80,878
|
||||||
|
379,570 -> 705,570
|
||||||
|
67,398 -> 67,136
|
||||||
|
491,515 -> 491,344
|
||||||
|
396,453 -> 749,453
|
||||||
|
203,660 -> 203,579
|
||||||
|
912,900 -> 912,280
|
||||||
|
909,88 -> 367,88
|
||||||
|
41,942 -> 825,158
|
||||||
|
724,417 -> 17,417
|
||||||
|
463,536 -> 170,536
|
||||||
|
715,737 -> 715,134
|
||||||
|
627,453 -> 805,453
|
||||||
|
934,795 -> 695,556
|
||||||
|
404,729 -> 738,729
|
||||||
|
973,685 -> 973,310
|
||||||
|
563,348 -> 771,556
|
||||||
|
716,232 -> 983,232
|
||||||
|
975,183 -> 975,759
|
||||||
|
934,958 -> 117,958
|
||||||
|
538,806 -> 538,84
|
||||||
|
695,677 -> 629,677
|
116
src/bin/05.rs
Normal file
116
src/bin/05.rs
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
use std::{cmp::Ordering, fmt::Display, iter};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut f = Field::new(1000);
|
||||||
|
for line in input().filter(|line| line.col1 == line.col2 || line.row1 == line.row2) {
|
||||||
|
f.apply(line);
|
||||||
|
}
|
||||||
|
println!("First solution: {}", f.overlaps());
|
||||||
|
|
||||||
|
let mut f = Field::new(1000);
|
||||||
|
for line in input() {
|
||||||
|
f.apply(line);
|
||||||
|
}
|
||||||
|
println!("Second solution: {}", f.overlaps());
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Field {
|
||||||
|
/// row-major encoding of the field
|
||||||
|
count: Vec<Vec<u32>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Field {
|
||||||
|
fn new(size: usize) -> Self {
|
||||||
|
Self {
|
||||||
|
count: vec![vec![0; size]; size],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn apply(&mut self, line: Line) {
|
||||||
|
for (row, col) in line.points() {
|
||||||
|
self.count[row][col] += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn overlaps(&self) -> usize {
|
||||||
|
self.count
|
||||||
|
.iter()
|
||||||
|
.flat_map(|row| row.iter())
|
||||||
|
.filter(|&&n| n >= 2)
|
||||||
|
.count()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for Field {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
for row in 0..self.count.len() {
|
||||||
|
for col in 0..self.count.len() {
|
||||||
|
let c = match self.count[row][col] {
|
||||||
|
0 => ".".to_string(),
|
||||||
|
n if n <= 9 => n.to_string(),
|
||||||
|
_ => "#".to_string(),
|
||||||
|
};
|
||||||
|
write!(f, "{}", c)?;
|
||||||
|
}
|
||||||
|
writeln!(f)?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Line {
|
||||||
|
col1: usize,
|
||||||
|
row1: usize,
|
||||||
|
col2: usize,
|
||||||
|
row2: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Line {
|
||||||
|
fn points(&self) -> impl Iterator<Item = (usize, usize)> {
|
||||||
|
self.row().zip(self.col()).take(self.len())
|
||||||
|
}
|
||||||
|
fn col(&self) -> Box<dyn Iterator<Item = usize>> {
|
||||||
|
match self.col1.cmp(&self.col2) {
|
||||||
|
Ordering::Less => Box::new(self.col1..=self.col2),
|
||||||
|
Ordering::Equal => Box::new(iter::repeat(self.col1)),
|
||||||
|
Ordering::Greater => Box::new((self.col2..=self.col1).rev()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn row(&self) -> Box<dyn Iterator<Item = usize>> {
|
||||||
|
match self.row1.cmp(&self.row2) {
|
||||||
|
Ordering::Less => Box::new(self.row1..=self.row2),
|
||||||
|
Ordering::Equal => Box::new(iter::repeat(self.row1)),
|
||||||
|
Ordering::Greater => Box::new((self.row2..=self.row1).rev()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn len(&self) -> usize {
|
||||||
|
let row = if self.row1 < self.row2 {
|
||||||
|
self.row2 - self.row1
|
||||||
|
} else {
|
||||||
|
self.row1 - self.row2
|
||||||
|
};
|
||||||
|
let col = if self.col1 < self.col2 {
|
||||||
|
self.col2 - self.col1
|
||||||
|
} else {
|
||||||
|
self.col1 - self.col2
|
||||||
|
};
|
||||||
|
col.max(row) + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn input() -> impl Iterator<Item = Line> {
|
||||||
|
include_str!("../../input/05.txt")
|
||||||
|
.lines()
|
||||||
|
.map(|l| l.split_once(" -> ").unwrap())
|
||||||
|
.map(|(start, end)| {
|
||||||
|
let (x1, y1) = start.split_once(",").unwrap();
|
||||||
|
let (x2, y2) = end.split_once(",").unwrap();
|
||||||
|
Line {
|
||||||
|
col1: x1.parse().unwrap(),
|
||||||
|
row1: y1.parse().unwrap(),
|
||||||
|
col2: x2.parse().unwrap(),
|
||||||
|
row2: y2.parse().unwrap(),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue