05
This commit is contained in:
parent
e8db71e56c
commit
b097b1887f
22
05/CMakeLists.txt
Normal file
22
05/CMakeLists.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
enable_language(CXX)
|
||||||
|
|
||||||
|
project(AoC05)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
include_directories(/usr/local/include)
|
||||||
|
link_directories(/usr/local/lib)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
add_executable(${CMAKE_PROJECT_NAME} WIN32)
|
||||||
|
else()
|
||||||
|
add_executable(${CMAKE_PROJECT_NAME})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_sources(${CMAKE_PROJECT_NAME}
|
||||||
|
PRIVATE main.cpp
|
||||||
|
)
|
500
05/input
Normal file
500
05/input
Normal file
@ -0,0 +1,500 @@
|
|||||||
|
510,771 -> 510,322
|
||||||
|
753,99 -> 753,280
|
||||||
|
160,330 -> 33,330
|
||||||
|
700,793 -> 700,892
|
||||||
|
327,168 -> 327,690
|
||||||
|
264,203 -> 264,839
|
||||||
|
135,134 -> 314,134
|
||||||
|
209,759 -> 41,759
|
||||||
|
474,514 -> 491,531
|
||||||
|
977,988 -> 42,53
|
||||||
|
924,245 -> 278,891
|
||||||
|
466,952 -> 466,135
|
||||||
|
381,560 -> 822,119
|
||||||
|
339,828 -> 339,730
|
||||||
|
114,775 -> 114,508
|
||||||
|
472,44 -> 472,32
|
||||||
|
815,512 -> 188,512
|
||||||
|
516,579 -> 987,108
|
||||||
|
219,386 -> 219,838
|
||||||
|
456,592 -> 456,496
|
||||||
|
778,300 -> 355,300
|
||||||
|
277,27 -> 69,27
|
||||||
|
889,217 -> 307,799
|
||||||
|
470,471 -> 249,471
|
||||||
|
655,867 -> 20,232
|
||||||
|
845,623 -> 675,623
|
||||||
|
278,281 -> 278,47
|
||||||
|
121,396 -> 541,816
|
||||||
|
61,965 -> 978,48
|
||||||
|
32,689 -> 115,689
|
||||||
|
654,162 -> 654,947
|
||||||
|
355,244 -> 355,796
|
||||||
|
272,805 -> 705,372
|
||||||
|
377,589 -> 500,589
|
||||||
|
505,625 -> 163,625
|
||||||
|
845,851 -> 63,69
|
||||||
|
411,734 -> 411,942
|
||||||
|
545,143 -> 126,562
|
||||||
|
265,799 -> 734,330
|
||||||
|
750,618 -> 750,559
|
||||||
|
987,25 -> 628,25
|
||||||
|
73,931 -> 906,98
|
||||||
|
652,433 -> 652,954
|
||||||
|
612,747 -> 612,621
|
||||||
|
448,915 -> 195,915
|
||||||
|
565,174 -> 565,138
|
||||||
|
218,235 -> 576,593
|
||||||
|
955,732 -> 287,64
|
||||||
|
225,112 -> 969,112
|
||||||
|
773,795 -> 773,718
|
||||||
|
446,150 -> 446,490
|
||||||
|
14,914 -> 437,491
|
||||||
|
950,987 -> 46,83
|
||||||
|
312,818 -> 312,108
|
||||||
|
42,791 -> 165,791
|
||||||
|
448,592 -> 16,592
|
||||||
|
225,389 -> 245,389
|
||||||
|
351,772 -> 651,772
|
||||||
|
531,685 -> 485,731
|
||||||
|
797,773 -> 168,144
|
||||||
|
247,196 -> 28,196
|
||||||
|
273,961 -> 158,961
|
||||||
|
961,877 -> 961,691
|
||||||
|
267,397 -> 267,214
|
||||||
|
553,140 -> 26,667
|
||||||
|
963,71 -> 245,789
|
||||||
|
878,128 -> 749,128
|
||||||
|
33,973 -> 971,35
|
||||||
|
950,152 -> 733,152
|
||||||
|
33,71 -> 811,71
|
||||||
|
757,556 -> 792,556
|
||||||
|
863,617 -> 335,617
|
||||||
|
763,781 -> 11,29
|
||||||
|
592,572 -> 504,660
|
||||||
|
498,899 -> 498,867
|
||||||
|
73,39 -> 569,535
|
||||||
|
179,242 -> 179,734
|
||||||
|
951,128 -> 108,971
|
||||||
|
86,535 -> 758,535
|
||||||
|
886,230 -> 801,230
|
||||||
|
28,39 -> 749,760
|
||||||
|
521,797 -> 551,797
|
||||||
|
870,641 -> 329,100
|
||||||
|
479,650 -> 479,406
|
||||||
|
373,791 -> 923,791
|
||||||
|
294,390 -> 294,623
|
||||||
|
905,759 -> 905,622
|
||||||
|
82,88 -> 928,934
|
||||||
|
171,15 -> 171,560
|
||||||
|
342,61 -> 453,61
|
||||||
|
30,103 -> 777,850
|
||||||
|
899,316 -> 899,818
|
||||||
|
746,493 -> 417,164
|
||||||
|
547,279 -> 557,279
|
||||||
|
330,663 -> 330,882
|
||||||
|
75,696 -> 740,31
|
||||||
|
368,828 -> 912,284
|
||||||
|
816,758 -> 744,758
|
||||||
|
484,753 -> 922,753
|
||||||
|
216,382 -> 216,189
|
||||||
|
835,563 -> 835,827
|
||||||
|
37,955 -> 980,12
|
||||||
|
730,704 -> 836,704
|
||||||
|
647,325 -> 529,325
|
||||||
|
627,647 -> 978,296
|
||||||
|
950,628 -> 455,133
|
||||||
|
349,382 -> 915,382
|
||||||
|
144,530 -> 144,721
|
||||||
|
675,736 -> 675,646
|
||||||
|
55,784 -> 55,829
|
||||||
|
63,724 -> 309,970
|
||||||
|
957,863 -> 51,863
|
||||||
|
86,732 -> 86,959
|
||||||
|
331,223 -> 415,223
|
||||||
|
65,906 -> 65,362
|
||||||
|
877,296 -> 805,224
|
||||||
|
360,85 -> 93,85
|
||||||
|
697,479 -> 697,117
|
||||||
|
965,55 -> 49,971
|
||||||
|
825,188 -> 36,977
|
||||||
|
107,522 -> 129,522
|
||||||
|
171,55 -> 879,763
|
||||||
|
23,615 -> 748,615
|
||||||
|
45,34 -> 972,961
|
||||||
|
241,750 -> 241,251
|
||||||
|
980,184 -> 429,735
|
||||||
|
859,419 -> 859,695
|
||||||
|
474,283 -> 474,204
|
||||||
|
135,100 -> 616,100
|
||||||
|
338,653 -> 450,653
|
||||||
|
304,294 -> 304,285
|
||||||
|
416,602 -> 308,602
|
||||||
|
517,172 -> 978,633
|
||||||
|
872,878 -> 143,149
|
||||||
|
487,314 -> 394,314
|
||||||
|
954,807 -> 453,306
|
||||||
|
701,933 -> 701,655
|
||||||
|
614,70 -> 614,356
|
||||||
|
246,744 -> 61,559
|
||||||
|
444,858 -> 108,858
|
||||||
|
981,954 -> 110,83
|
||||||
|
428,622 -> 56,250
|
||||||
|
813,747 -> 383,317
|
||||||
|
344,295 -> 344,476
|
||||||
|
870,36 -> 870,638
|
||||||
|
76,584 -> 76,934
|
||||||
|
931,802 -> 931,486
|
||||||
|
496,83 -> 521,83
|
||||||
|
341,319 -> 700,678
|
||||||
|
231,722 -> 312,722
|
||||||
|
967,966 -> 103,102
|
||||||
|
78,948 -> 975,51
|
||||||
|
167,146 -> 817,796
|
||||||
|
16,579 -> 189,579
|
||||||
|
68,242 -> 686,860
|
||||||
|
965,182 -> 206,182
|
||||||
|
226,565 -> 226,30
|
||||||
|
128,242 -> 128,136
|
||||||
|
75,395 -> 75,644
|
||||||
|
208,687 -> 24,687
|
||||||
|
46,867 -> 46,765
|
||||||
|
366,802 -> 366,439
|
||||||
|
410,657 -> 698,945
|
||||||
|
158,719 -> 158,11
|
||||||
|
357,462 -> 647,462
|
||||||
|
587,909 -> 305,909
|
||||||
|
927,694 -> 235,694
|
||||||
|
846,243 -> 942,243
|
||||||
|
781,169 -> 30,169
|
||||||
|
329,497 -> 97,497
|
||||||
|
139,120 -> 963,944
|
||||||
|
237,373 -> 95,515
|
||||||
|
512,316 -> 890,316
|
||||||
|
450,975 -> 450,231
|
||||||
|
906,326 -> 554,326
|
||||||
|
21,706 -> 12,706
|
||||||
|
698,384 -> 448,634
|
||||||
|
49,917 -> 676,917
|
||||||
|
790,752 -> 790,36
|
||||||
|
167,610 -> 72,610
|
||||||
|
571,347 -> 313,347
|
||||||
|
830,203 -> 64,969
|
||||||
|
842,731 -> 490,731
|
||||||
|
948,412 -> 841,305
|
||||||
|
259,110 -> 319,110
|
||||||
|
970,277 -> 911,277
|
||||||
|
619,424 -> 326,424
|
||||||
|
877,400 -> 877,303
|
||||||
|
437,612 -> 854,195
|
||||||
|
217,121 -> 217,574
|
||||||
|
734,109 -> 734,235
|
||||||
|
207,406 -> 230,383
|
||||||
|
111,914 -> 981,44
|
||||||
|
673,239 -> 343,239
|
||||||
|
567,258 -> 522,258
|
||||||
|
183,541 -> 562,541
|
||||||
|
834,143 -> 834,545
|
||||||
|
142,220 -> 142,434
|
||||||
|
739,942 -> 312,515
|
||||||
|
155,358 -> 857,358
|
||||||
|
610,709 -> 466,709
|
||||||
|
640,544 -> 65,544
|
||||||
|
211,14 -> 88,14
|
||||||
|
441,524 -> 524,524
|
||||||
|
278,322 -> 259,322
|
||||||
|
365,167 -> 886,688
|
||||||
|
706,971 -> 706,60
|
||||||
|
773,791 -> 773,529
|
||||||
|
833,752 -> 532,451
|
||||||
|
250,913 -> 250,696
|
||||||
|
660,50 -> 360,350
|
||||||
|
235,443 -> 380,443
|
||||||
|
853,56 -> 369,540
|
||||||
|
939,595 -> 377,33
|
||||||
|
935,957 -> 740,957
|
||||||
|
547,87 -> 184,450
|
||||||
|
53,955 -> 974,34
|
||||||
|
957,165 -> 957,524
|
||||||
|
392,956 -> 392,166
|
||||||
|
552,666 -> 171,666
|
||||||
|
949,728 -> 103,728
|
||||||
|
816,85 -> 792,61
|
||||||
|
968,108 -> 103,973
|
||||||
|
88,183 -> 888,983
|
||||||
|
804,788 -> 66,788
|
||||||
|
526,506 -> 417,615
|
||||||
|
822,670 -> 634,482
|
||||||
|
949,143 -> 949,867
|
||||||
|
302,820 -> 302,877
|
||||||
|
107,512 -> 551,68
|
||||||
|
23,123 -> 23,101
|
||||||
|
882,886 -> 16,20
|
||||||
|
216,977 -> 216,522
|
||||||
|
581,420 -> 424,577
|
||||||
|
84,41 -> 113,41
|
||||||
|
157,717 -> 679,195
|
||||||
|
907,270 -> 907,259
|
||||||
|
275,769 -> 275,701
|
||||||
|
389,88 -> 44,433
|
||||||
|
246,190 -> 643,190
|
||||||
|
212,730 -> 235,707
|
||||||
|
976,122 -> 934,122
|
||||||
|
860,179 -> 860,797
|
||||||
|
953,672 -> 592,672
|
||||||
|
680,101 -> 680,714
|
||||||
|
293,424 -> 576,424
|
||||||
|
139,107 -> 55,23
|
||||||
|
885,56 -> 34,907
|
||||||
|
87,74 -> 911,898
|
||||||
|
79,686 -> 79,883
|
||||||
|
936,139 -> 936,937
|
||||||
|
238,585 -> 31,378
|
||||||
|
742,120 -> 883,120
|
||||||
|
203,129 -> 203,338
|
||||||
|
571,665 -> 421,515
|
||||||
|
654,642 -> 51,642
|
||||||
|
797,313 -> 797,850
|
||||||
|
472,25 -> 806,25
|
||||||
|
956,21 -> 13,964
|
||||||
|
334,856 -> 334,932
|
||||||
|
199,904 -> 165,870
|
||||||
|
179,439 -> 179,397
|
||||||
|
657,805 -> 319,467
|
||||||
|
903,38 -> 168,773
|
||||||
|
672,487 -> 326,833
|
||||||
|
727,868 -> 747,868
|
||||||
|
467,637 -> 984,637
|
||||||
|
933,81 -> 293,81
|
||||||
|
786,211 -> 690,115
|
||||||
|
120,276 -> 120,455
|
||||||
|
101,86 -> 975,960
|
||||||
|
579,124 -> 685,124
|
||||||
|
679,346 -> 679,986
|
||||||
|
911,206 -> 911,846
|
||||||
|
401,497 -> 401,375
|
||||||
|
417,101 -> 234,284
|
||||||
|
61,885 -> 315,885
|
||||||
|
744,175 -> 744,814
|
||||||
|
97,496 -> 539,938
|
||||||
|
98,325 -> 98,887
|
||||||
|
14,277 -> 709,972
|
||||||
|
648,456 -> 648,287
|
||||||
|
16,13 -> 988,985
|
||||||
|
69,794 -> 69,343
|
||||||
|
753,148 -> 272,629
|
||||||
|
178,251 -> 366,439
|
||||||
|
431,241 -> 431,32
|
||||||
|
54,235 -> 684,865
|
||||||
|
964,68 -> 91,941
|
||||||
|
406,142 -> 20,142
|
||||||
|
373,490 -> 373,88
|
||||||
|
468,987 -> 612,843
|
||||||
|
981,31 -> 127,885
|
||||||
|
934,382 -> 934,415
|
||||||
|
936,881 -> 936,56
|
||||||
|
891,74 -> 891,886
|
||||||
|
490,346 -> 490,769
|
||||||
|
458,89 -> 110,89
|
||||||
|
754,171 -> 236,689
|
||||||
|
856,539 -> 856,782
|
||||||
|
312,498 -> 312,370
|
||||||
|
986,56 -> 148,894
|
||||||
|
591,777 -> 591,613
|
||||||
|
265,107 -> 493,335
|
||||||
|
916,775 -> 916,193
|
||||||
|
809,535 -> 809,523
|
||||||
|
584,231 -> 61,754
|
||||||
|
926,818 -> 248,140
|
||||||
|
764,443 -> 324,443
|
||||||
|
925,956 -> 90,121
|
||||||
|
536,378 -> 715,557
|
||||||
|
590,125 -> 61,654
|
||||||
|
108,630 -> 535,203
|
||||||
|
585,260 -> 748,260
|
||||||
|
243,86 -> 672,86
|
||||||
|
869,864 -> 245,864
|
||||||
|
332,188 -> 332,709
|
||||||
|
932,457 -> 897,457
|
||||||
|
713,247 -> 460,500
|
||||||
|
741,865 -> 412,865
|
||||||
|
927,742 -> 927,96
|
||||||
|
42,586 -> 662,586
|
||||||
|
577,431 -> 577,273
|
||||||
|
878,415 -> 878,22
|
||||||
|
433,913 -> 742,604
|
||||||
|
710,619 -> 240,619
|
||||||
|
761,317 -> 133,317
|
||||||
|
483,747 -> 929,747
|
||||||
|
83,513 -> 700,513
|
||||||
|
954,818 -> 954,848
|
||||||
|
22,12 -> 620,610
|
||||||
|
514,978 -> 520,978
|
||||||
|
638,582 -> 133,582
|
||||||
|
264,306 -> 515,557
|
||||||
|
416,662 -> 971,662
|
||||||
|
341,540 -> 610,540
|
||||||
|
847,837 -> 294,284
|
||||||
|
555,322 -> 555,893
|
||||||
|
965,981 -> 12,28
|
||||||
|
23,56 -> 797,830
|
||||||
|
712,285 -> 712,856
|
||||||
|
618,137 -> 221,534
|
||||||
|
268,286 -> 268,732
|
||||||
|
732,238 -> 732,121
|
||||||
|
125,452 -> 987,452
|
||||||
|
662,390 -> 390,390
|
||||||
|
485,651 -> 485,922
|
||||||
|
578,433 -> 122,433
|
||||||
|
471,904 -> 471,176
|
||||||
|
285,622 -> 138,769
|
||||||
|
270,889 -> 270,912
|
||||||
|
593,847 -> 593,21
|
||||||
|
749,350 -> 857,350
|
||||||
|
125,532 -> 403,532
|
||||||
|
357,73 -> 807,73
|
||||||
|
671,485 -> 671,933
|
||||||
|
216,501 -> 624,501
|
||||||
|
64,915 -> 969,10
|
||||||
|
801,246 -> 801,870
|
||||||
|
445,904 -> 445,40
|
||||||
|
300,525 -> 540,525
|
||||||
|
142,772 -> 142,810
|
||||||
|
914,711 -> 217,711
|
||||||
|
786,163 -> 102,847
|
||||||
|
715,615 -> 715,169
|
||||||
|
261,474 -> 450,474
|
||||||
|
726,434 -> 726,559
|
||||||
|
783,40 -> 414,409
|
||||||
|
673,171 -> 393,171
|
||||||
|
268,584 -> 186,584
|
||||||
|
189,562 -> 480,562
|
||||||
|
816,34 -> 165,34
|
||||||
|
645,443 -> 645,118
|
||||||
|
508,313 -> 253,58
|
||||||
|
550,164 -> 206,508
|
||||||
|
606,502 -> 209,502
|
||||||
|
345,696 -> 232,809
|
||||||
|
325,936 -> 325,715
|
||||||
|
505,479 -> 537,479
|
||||||
|
362,13 -> 943,13
|
||||||
|
169,507 -> 375,507
|
||||||
|
27,12 -> 985,970
|
||||||
|
980,768 -> 98,768
|
||||||
|
738,793 -> 76,793
|
||||||
|
877,935 -> 886,935
|
||||||
|
321,157 -> 805,157
|
||||||
|
800,595 -> 171,595
|
||||||
|
606,981 -> 716,981
|
||||||
|
57,31 -> 57,158
|
||||||
|
800,97 -> 11,886
|
||||||
|
455,164 -> 455,476
|
||||||
|
137,259 -> 30,259
|
||||||
|
111,495 -> 482,124
|
||||||
|
47,248 -> 747,248
|
||||||
|
299,268 -> 225,268
|
||||||
|
973,52 -> 124,901
|
||||||
|
498,821 -> 498,653
|
||||||
|
272,419 -> 121,570
|
||||||
|
394,48 -> 703,48
|
||||||
|
574,466 -> 574,421
|
||||||
|
918,256 -> 361,256
|
||||||
|
360,583 -> 279,583
|
||||||
|
164,611 -> 406,611
|
||||||
|
453,890 -> 453,838
|
||||||
|
433,562 -> 25,154
|
||||||
|
89,177 -> 89,729
|
||||||
|
138,910 -> 138,674
|
||||||
|
966,711 -> 636,711
|
||||||
|
139,830 -> 139,760
|
||||||
|
76,493 -> 973,493
|
||||||
|
228,910 -> 878,260
|
||||||
|
349,939 -> 141,939
|
||||||
|
742,624 -> 742,472
|
||||||
|
70,714 -> 950,714
|
||||||
|
377,935 -> 621,691
|
||||||
|
363,584 -> 556,584
|
||||||
|
452,517 -> 452,544
|
||||||
|
43,400 -> 496,400
|
||||||
|
608,926 -> 740,794
|
||||||
|
443,787 -> 261,969
|
||||||
|
670,703 -> 326,703
|
||||||
|
59,39 -> 975,955
|
||||||
|
748,96 -> 721,96
|
||||||
|
984,182 -> 243,923
|
||||||
|
780,342 -> 780,801
|
||||||
|
124,134 -> 950,960
|
||||||
|
555,979 -> 777,979
|
||||||
|
68,570 -> 287,570
|
||||||
|
399,977 -> 613,977
|
||||||
|
755,793 -> 380,793
|
||||||
|
88,167 -> 88,132
|
||||||
|
698,571 -> 138,11
|
||||||
|
631,227 -> 842,227
|
||||||
|
254,541 -> 378,541
|
||||||
|
636,238 -> 594,238
|
||||||
|
734,249 -> 899,249
|
||||||
|
524,520 -> 680,520
|
||||||
|
943,98 -> 117,924
|
||||||
|
53,37 -> 121,37
|
||||||
|
67,940 -> 974,33
|
||||||
|
962,157 -> 139,980
|
||||||
|
650,349 -> 650,926
|
||||||
|
77,111 -> 569,111
|
||||||
|
306,812 -> 924,812
|
||||||
|
362,579 -> 756,579
|
||||||
|
462,368 -> 462,618
|
||||||
|
267,803 -> 80,803
|
||||||
|
276,682 -> 276,123
|
||||||
|
599,96 -> 42,96
|
||||||
|
306,818 -> 306,523
|
||||||
|
729,254 -> 82,901
|
||||||
|
65,235 -> 65,927
|
||||||
|
573,774 -> 237,774
|
||||||
|
413,376 -> 522,376
|
||||||
|
103,52 -> 81,52
|
||||||
|
24,722 -> 530,216
|
||||||
|
341,395 -> 467,395
|
||||||
|
937,510 -> 937,435
|
||||||
|
292,385 -> 518,385
|
||||||
|
394,588 -> 572,588
|
||||||
|
561,20 -> 275,20
|
||||||
|
710,862 -> 355,507
|
||||||
|
104,530 -> 916,530
|
||||||
|
160,116 -> 687,116
|
||||||
|
22,952 -> 940,34
|
||||||
|
222,752 -> 45,752
|
||||||
|
873,784 -> 873,475
|
||||||
|
90,235 -> 503,235
|
||||||
|
655,543 -> 580,543
|
||||||
|
169,900 -> 169,326
|
||||||
|
969,724 -> 634,389
|
||||||
|
317,826 -> 920,223
|
||||||
|
705,71 -> 705,970
|
||||||
|
777,239 -> 777,118
|
||||||
|
614,746 -> 614,635
|
||||||
|
910,861 -> 910,733
|
||||||
|
12,23 -> 972,983
|
||||||
|
960,128 -> 347,128
|
||||||
|
821,612 -> 503,294
|
||||||
|
770,705 -> 770,985
|
||||||
|
382,977 -> 726,977
|
||||||
|
730,639 -> 491,639
|
||||||
|
706,333 -> 492,547
|
||||||
|
344,596 -> 344,762
|
||||||
|
729,599 -> 729,630
|
||||||
|
218,469 -> 204,483
|
||||||
|
630,586 -> 630,686
|
||||||
|
98,148 -> 138,148
|
||||||
|
939,110 -> 433,616
|
||||||
|
54,42 -> 988,976
|
||||||
|
987,948 -> 83,44
|
||||||
|
62,625 -> 671,625
|
||||||
|
165,64 -> 950,849
|
||||||
|
245,62 -> 453,270
|
||||||
|
695,244 -> 60,244
|
||||||
|
296,505 -> 117,505
|
||||||
|
522,692 -> 741,692
|
||||||
|
335,407 -> 335,123
|
||||||
|
717,37 -> 600,37
|
||||||
|
772,178 -> 772,889
|
193
05/main.cpp
Normal file
193
05/main.cpp
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
#include <array>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Point {
|
||||||
|
public:
|
||||||
|
Point(int x, int y) {
|
||||||
|
_x = x;
|
||||||
|
_y = y;
|
||||||
|
}
|
||||||
|
~Point() = default;
|
||||||
|
int getX() const {
|
||||||
|
return _x;
|
||||||
|
}
|
||||||
|
int getY() const {
|
||||||
|
return _y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void addPoint(const Point &other) {
|
||||||
|
_x += other.getX();
|
||||||
|
_y += other.getY();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const Point &other) {
|
||||||
|
return _x == other.getX() && _y == other.getY();
|
||||||
|
}
|
||||||
|
bool operator!=(const Point &other) {
|
||||||
|
return !(*this == other);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int _x;
|
||||||
|
int _y;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Line {
|
||||||
|
public:
|
||||||
|
Line(Point a, Point b) : _a(a), _b(b) {}
|
||||||
|
const Point &getStart() const {
|
||||||
|
return _a;
|
||||||
|
}
|
||||||
|
const Point &getEnd() const {
|
||||||
|
return _b;
|
||||||
|
}
|
||||||
|
bool isHorizontalOrVertical() const {
|
||||||
|
return _a.getX() == _b.getX() || _a.getY() == _b.getY();
|
||||||
|
}
|
||||||
|
Point getDirection() const {
|
||||||
|
auto x = _b.getX() - _a.getX();
|
||||||
|
auto y = _b.getY() - _a.getY();
|
||||||
|
if (abs(x) > abs(y)) {
|
||||||
|
x /= abs(x);
|
||||||
|
y /= abs(x);
|
||||||
|
} else {
|
||||||
|
x /= abs(y);
|
||||||
|
y /= abs(y);
|
||||||
|
}
|
||||||
|
return Point(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int abs(int x) const {
|
||||||
|
if (x < 0) {
|
||||||
|
return -x;
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
Point _a;
|
||||||
|
Point _b;
|
||||||
|
};
|
||||||
|
|
||||||
|
class OceanFloor {
|
||||||
|
public:
|
||||||
|
OceanFloor(int maxX, int maxY, const std::vector<Line> &lines)
|
||||||
|
: _x(maxX), _y(maxY), _lines(lines) {
|
||||||
|
floor.resize(_y + 1);
|
||||||
|
for (int i = 0; i <= _y; i++) {
|
||||||
|
floor[i].resize(_x + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
~OceanFloor() = default;
|
||||||
|
|
||||||
|
void findLines(bool horizontal_or_vertical_only) {
|
||||||
|
clearFloor();
|
||||||
|
for (auto &line : _lines) {
|
||||||
|
if (horizontal_or_vertical_only && !line.isHorizontalOrVertical()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto direction = line.getDirection();
|
||||||
|
Point start(line.getStart());
|
||||||
|
while (start != line.getEnd()) {
|
||||||
|
floor[start.getY()][start.getX()] += 1;
|
||||||
|
start.addPoint(direction);
|
||||||
|
}
|
||||||
|
floor[start.getY()][start.getX()] += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int findCrossings(int minimum_crossing) {
|
||||||
|
int result = 0;
|
||||||
|
for (int i = 0; i <= _y; i++) {
|
||||||
|
for (int j = 0; j <= _x; j++) {
|
||||||
|
if (floor[i][j] >= minimum_crossing) {
|
||||||
|
result++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void clearFloor() {
|
||||||
|
for (int i = 0; i <= _y; i++) {
|
||||||
|
for (int j = 0; j <= _x; j++) {
|
||||||
|
floor[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int _x;
|
||||||
|
int _y;
|
||||||
|
const std::vector<Line> &_lines;
|
||||||
|
std::vector<std::vector<int>> floor;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::pair<std::pair<int, int>, std::vector<Line>>
|
||||||
|
getLines(const std::string &file_name) {
|
||||||
|
int maxY = 0;
|
||||||
|
int maxX = 0;
|
||||||
|
std::vector<Line> lines{};
|
||||||
|
|
||||||
|
std::ifstream file(file_name);
|
||||||
|
int tmp_x{};
|
||||||
|
int tmp_y{};
|
||||||
|
char tmp_char{};
|
||||||
|
std::string str;
|
||||||
|
while (std::getline(file, str)) {
|
||||||
|
std::stringstream ss(str);
|
||||||
|
ss >> tmp_x;
|
||||||
|
ss >> tmp_char;
|
||||||
|
ss >> tmp_y;
|
||||||
|
Point a(tmp_x, tmp_y);
|
||||||
|
if (tmp_x > maxX) {
|
||||||
|
maxX = tmp_x;
|
||||||
|
}
|
||||||
|
if (tmp_y > maxY) {
|
||||||
|
maxY = tmp_y;
|
||||||
|
}
|
||||||
|
|
||||||
|
ss >> tmp_char;
|
||||||
|
ss >> tmp_char;
|
||||||
|
|
||||||
|
ss >> tmp_x;
|
||||||
|
ss >> tmp_char;
|
||||||
|
ss >> tmp_y;
|
||||||
|
Point b(tmp_x, tmp_y);
|
||||||
|
if (tmp_x > maxX) {
|
||||||
|
maxX = tmp_x;
|
||||||
|
}
|
||||||
|
if (tmp_y > maxY) {
|
||||||
|
maxY = tmp_y;
|
||||||
|
}
|
||||||
|
|
||||||
|
lines.emplace_back(a, b);
|
||||||
|
}
|
||||||
|
return { { maxX, maxY }, lines };
|
||||||
|
}
|
||||||
|
|
||||||
|
int part1(OceanFloor &floor) {
|
||||||
|
floor.findLines(true);
|
||||||
|
return floor.findCrossings(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int part2(OceanFloor &floor) {
|
||||||
|
floor.findLines(false);
|
||||||
|
return floor.findCrossings(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
if (argc < 2) {
|
||||||
|
std::cerr << "You must provide input file!" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
auto input = getLines(argv[1]);
|
||||||
|
OceanFloor floor(input.first.first, input.first.second, input.second);
|
||||||
|
std::cout
|
||||||
|
<< "The number of overlapping points without diagonals is \033[91;1m"
|
||||||
|
<< part1(floor) << "\033[0m." << std::endl;
|
||||||
|
std::cout << "The number of overlapping points with diagonals is \033[91;1m"
|
||||||
|
<< part2(floor) << "\033[0m." << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user