master
Jonathan Hodgson 2 years ago
parent 89a87bf95b
commit d8448356ef
  1. 10
      day5/Makefile
  2. 10
      day5/example.txt
  3. 500
      day5/realinput.txt
  4. 77
      day5/solution-part1.c
  5. 90
      day5/solution-part2.c

@ -0,0 +1,10 @@
solution-part%: solution-part%.c
gcc $< -o $@
test-%: solution-% example.txt
$< example.txt
run-%: solution-% realinput.txt
$< realinput.txt
.PHONY: $(patsubst %,run-%, 1 2) $(patsubst %,test-%, 1 2)

@ -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

@ -0,0 +1,500 @@
682,519 -> 682,729
852,131 -> 25,958
303,481 -> 206,481
199,682 -> 183,666
363,190 -> 571,190
930,290 -> 221,290
364,627 -> 952,39
234,309 -> 234,821
130,864 -> 130,886
462,347 -> 699,110
375,969 -> 481,969
989,859 -> 275,145
221,748 -> 212,748
870,173 -> 106,937
604,33 -> 604,142
780,35 -> 780,206
636,808 -> 721,808
944,989 -> 334,989
477,113 -> 192,113
879,265 -> 879,358
754,974 -> 17,974
10,989 -> 989,10
337,320 -> 674,657
225,96 -> 557,428
129,354 -> 299,354
717,695 -> 695,695
94,255 -> 317,478
90,87 -> 90,187
77,942 -> 952,67
804,315 -> 989,315
619,470 -> 491,342
466,90 -> 466,755
840,121 -> 840,469
638,127 -> 638,77
844,40 -> 151,40
653,987 -> 653,631
195,583 -> 195,623
88,985 -> 570,503
921,897 -> 165,141
230,27 -> 171,27
737,771 -> 832,771
563,365 -> 665,467
942,940 -> 776,774
12,903 -> 644,903
308,390 -> 308,971
572,943 -> 572,15
104,389 -> 104,73
346,721 -> 974,93
30,53 -> 562,53
804,682 -> 804,120
952,45 -> 15,982
475,456 -> 475,348
409,247 -> 664,247
345,18 -> 816,489
571,158 -> 505,158
59,195 -> 27,195
230,681 -> 23,681
258,711 -> 921,711
658,112 -> 366,404
842,220 -> 842,825
815,744 -> 540,744
192,314 -> 703,825
869,573 -> 869,888
603,268 -> 603,301
816,668 -> 816,189
148,606 -> 948,606
117,461 -> 506,461
986,955 -> 986,315
131,250 -> 192,189
988,148 -> 518,618
682,900 -> 31,900
652,839 -> 652,236
466,812 -> 466,611
881,346 -> 401,346
229,639 -> 731,639
104,476 -> 840,476
10,988 -> 988,10
29,15 -> 987,973
825,348 -> 825,240
989,989 -> 10,10
430,796 -> 926,796
49,293 -> 610,854
325,288 -> 918,288
625,309 -> 439,495
536,150 -> 356,150
834,558 -> 822,558
315,408 -> 315,635
257,973 -> 813,973
713,52 -> 122,52
323,970 -> 578,970
447,49 -> 829,49
941,709 -> 941,390
148,323 -> 391,80
23,171 -> 23,49
475,265 -> 322,112
506,407 -> 69,844
567,284 -> 483,368
114,745 -> 114,765
392,252 -> 109,535
65,188 -> 455,188
732,779 -> 732,52
233,214 -> 759,214
232,969 -> 957,244
20,669 -> 20,308
49,972 -> 285,972
501,383 -> 433,383
918,15 -> 32,901
255,268 -> 935,948
757,588 -> 757,919
530,803 -> 284,557
688,926 -> 48,286
331,245 -> 331,777
448,544 -> 209,544
10,970 -> 951,29
233,11 -> 897,11
145,392 -> 628,392
935,971 -> 935,280
169,632 -> 54,632
155,244 -> 155,334
56,284 -> 205,284
553,428 -> 553,520
977,176 -> 497,656
323,339 -> 971,987
616,355 -> 616,248
72,660 -> 72,334
644,822 -> 510,956
356,841 -> 587,841
413,468 -> 605,468
85,22 -> 645,582
924,850 -> 522,850
448,45 -> 345,148
102,566 -> 551,566
80,39 -> 847,806
936,436 -> 934,436
53,24 -> 495,466
234,173 -> 282,173
145,680 -> 456,680
960,759 -> 960,282
984,814 -> 308,138
398,808 -> 716,808
509,536 -> 25,52
289,777 -> 803,263
766,892 -> 257,892
301,733 -> 688,733
24,109 -> 887,972
180,32 -> 577,429
985,801 -> 687,503
901,582 -> 586,582
50,56 -> 50,267
344,373 -> 437,373
542,133 -> 905,496
420,624 -> 420,716
645,106 -> 645,574
356,37 -> 114,37
324,919 -> 357,919
126,797 -> 120,797
288,689 -> 435,836
93,915 -> 639,369
106,391 -> 478,19
277,501 -> 714,64
253,277 -> 643,277
568,972 -> 350,972
213,235 -> 213,406
595,888 -> 595,233
577,63 -> 37,603
649,732 -> 931,732
469,892 -> 549,892
953,895 -> 953,457
222,213 -> 290,213
841,800 -> 841,336
685,143 -> 25,143
441,127 -> 441,146
646,586 -> 56,586
698,122 -> 465,122
641,502 -> 641,240
111,91 -> 185,91
927,755 -> 874,808
108,151 -> 108,567
309,453 -> 309,210
890,657 -> 491,657
404,244 -> 404,123
939,28 -> 26,941
596,970 -> 596,870
489,556 -> 489,589
607,621 -> 903,325
912,284 -> 571,284
921,702 -> 743,524
719,36 -> 719,394
100,905 -> 798,207
316,260 -> 316,887
799,940 -> 885,940
835,287 -> 199,923
422,760 -> 64,760
727,113 -> 727,679
733,56 -> 59,730
141,399 -> 485,743
769,629 -> 769,797
62,486 -> 62,205
192,332 -> 800,332
15,931 -> 727,931
854,915 -> 988,915
349,610 -> 886,610
72,110 -> 72,903
955,110 -> 78,987
591,553 -> 591,428
708,467 -> 516,467
397,589 -> 353,589
930,336 -> 930,532
639,50 -> 228,50
472,17 -> 472,244
420,825 -> 420,562
203,197 -> 203,35
984,964 -> 223,203
944,269 -> 935,260
933,119 -> 87,965
696,290 -> 696,580
925,960 -> 52,87
451,470 -> 235,254
562,71 -> 562,149
405,126 -> 405,67
356,424 -> 356,673
859,649 -> 859,291
210,651 -> 210,544
403,783 -> 403,122
672,87 -> 586,87
409,668 -> 984,668
917,352 -> 511,758
395,953 -> 141,953
152,795 -> 152,313
839,344 -> 811,372
114,649 -> 650,649
60,517 -> 60,27
448,392 -> 845,392
33,849 -> 719,163
151,988 -> 876,988
805,556 -> 124,556
361,538 -> 706,193
974,941 -> 141,108
271,813 -> 968,116
500,697 -> 80,277
586,731 -> 586,480
128,147 -> 174,101
882,681 -> 882,745
531,730 -> 677,730
989,11 -> 11,989
74,332 -> 234,492
360,326 -> 932,898
136,288 -> 113,311
666,645 -> 916,895
977,478 -> 561,62
20,83 -> 566,83
331,942 -> 331,646
180,291 -> 405,291
637,763 -> 637,941
120,138 -> 120,820
951,24 -> 14,961
204,304 -> 204,51
84,168 -> 880,168
955,145 -> 955,903
437,427 -> 437,354
875,67 -> 189,753
46,767 -> 802,11
52,59 -> 889,896
926,56 -> 102,880
500,30 -> 964,30
329,488 -> 329,972
63,11 -> 889,837
707,168 -> 707,584
580,10 -> 735,10
105,620 -> 105,110
187,531 -> 323,531
82,947 -> 82,941
737,199 -> 737,851
612,650 -> 217,650
971,15 -> 82,904
16,590 -> 506,100
950,877 -> 832,759
570,470 -> 570,276
213,411 -> 213,195
670,755 -> 89,755
906,963 -> 906,984
458,463 -> 442,463
956,969 -> 10,23
87,215 -> 195,107
819,454 -> 819,467
594,793 -> 686,793
395,724 -> 787,332
315,461 -> 644,461
448,247 -> 249,48
620,302 -> 247,675
607,134 -> 932,134
312,776 -> 312,289
850,942 -> 54,146
31,538 -> 851,538
729,126 -> 640,126
702,199 -> 702,706
402,783 -> 254,783
110,59 -> 203,59
27,10 -> 965,948
747,261 -> 47,261
628,742 -> 972,742
712,742 -> 657,797
877,871 -> 877,758
665,313 -> 449,529
498,157 -> 498,68
870,922 -> 27,79
856,697 -> 856,429
447,271 -> 963,787
495,302 -> 495,520
526,47 -> 721,47
826,179 -> 826,741
565,461 -> 893,461
512,328 -> 127,328
487,920 -> 522,920
614,452 -> 614,146
331,574 -> 331,840
985,79 -> 285,779
812,320 -> 985,320
118,69 -> 429,69
644,525 -> 644,878
271,132 -> 156,132
955,782 -> 565,392
630,939 -> 630,372
51,203 -> 840,203
202,490 -> 202,479
579,868 -> 579,92
979,336 -> 979,623
843,865 -> 260,282
685,872 -> 685,503
721,193 -> 721,510
908,661 -> 908,955
19,950 -> 715,254
233,730 -> 233,101
922,954 -> 27,954
399,444 -> 399,403
380,712 -> 380,718
238,264 -> 849,875
458,577 -> 458,139
418,244 -> 469,295
460,375 -> 964,879
276,445 -> 815,445
463,910 -> 648,725
26,384 -> 968,384
955,385 -> 955,143
942,775 -> 733,566
425,326 -> 531,326
364,545 -> 364,873
182,759 -> 182,819
390,757 -> 390,475
217,417 -> 217,157
669,286 -> 65,890
257,11 -> 257,858
557,397 -> 557,20
888,946 -> 32,90
971,938 -> 971,578
874,248 -> 874,485
87,268 -> 87,135
756,679 -> 103,26
771,250 -> 771,107
320,711 -> 967,711
293,219 -> 293,706
103,565 -> 103,538
388,256 -> 388,261
468,953 -> 503,953
424,142 -> 287,142
24,930 -> 850,930
316,167 -> 316,161
481,421 -> 208,148
938,926 -> 938,933
701,653 -> 701,780
536,390 -> 536,559
40,954 -> 829,165
404,985 -> 247,985
94,628 -> 94,500
441,637 -> 441,271
766,946 -> 97,277
428,363 -> 428,37
542,694 -> 542,347
11,16 -> 979,984
938,651 -> 632,957
779,127 -> 243,663
636,294 -> 636,787
533,744 -> 636,641
521,950 -> 458,950
988,12 -> 18,982
954,621 -> 954,271
638,951 -> 813,951
822,911 -> 632,911
714,849 -> 512,849
696,88 -> 385,88
65,451 -> 65,687
976,973 -> 976,907
368,489 -> 368,571
358,831 -> 690,499
436,704 -> 178,704
690,619 -> 606,535
96,701 -> 358,701
885,562 -> 420,562
581,480 -> 613,512
44,970 -> 970,44
216,796 -> 892,120
72,623 -> 72,72
896,283 -> 896,326
794,195 -> 22,967
134,326 -> 134,889
420,141 -> 944,665
941,194 -> 941,421
940,525 -> 298,525
653,300 -> 769,300
227,424 -> 406,603
275,850 -> 113,850
648,850 -> 92,850
638,389 -> 638,10
379,404 -> 584,609
833,931 -> 833,520
772,286 -> 500,558
372,262 -> 333,262
689,18 -> 131,576
687,499 -> 687,188
344,499 -> 37,806
778,496 -> 134,496
938,87 -> 344,681
788,401 -> 479,401
828,903 -> 756,903
423,625 -> 285,763
218,489 -> 218,819
488,384 -> 891,787
817,532 -> 788,532
512,27 -> 512,149
369,794 -> 54,794
534,590 -> 827,883
84,310 -> 39,265
357,545 -> 665,545
539,807 -> 539,781
378,683 -> 22,327
71,909 -> 943,37
740,552 -> 348,552
698,315 -> 45,968
516,835 -> 360,835
629,141 -> 629,385
695,908 -> 303,908
795,707 -> 386,707
211,397 -> 291,397
64,620 -> 236,620
97,638 -> 97,445
46,103 -> 893,950
468,122 -> 979,122
810,486 -> 433,486
532,899 -> 461,970
232,60 -> 235,60
549,708 -> 549,90
294,978 -> 294,124
865,406 -> 640,406
755,305 -> 664,305
12,989 -> 987,14
275,249 -> 260,234
502,783 -> 67,783
863,938 -> 297,372
516,961 -> 516,272
67,510 -> 611,510
980,951 -> 312,283
325,512 -> 325,169
142,429 -> 542,29
273,964 -> 822,964
370,217 -> 508,217
131,131 -> 331,331
734,824 -> 734,817
75,89 -> 687,701
155,255 -> 702,802
577,395 -> 130,395
684,94 -> 555,94
393,881 -> 173,881
894,750 -> 773,750
380,269 -> 380,338
427,36 -> 427,77
637,107 -> 637,846
53,437 -> 53,221
128,979 -> 960,147
838,211 -> 838,645
898,39 -> 849,39
862,495 -> 951,495
754,406 -> 76,406
951,960 -> 113,122
830,125 -> 15,940
190,117 -> 190,973
192,956 -> 718,430
895,162 -> 88,969
135,196 -> 70,131
578,642 -> 578,789
713,268 -> 625,268
938,719 -> 938,604
30,863 -> 99,863
844,309 -> 287,309
131,837 -> 459,509
61,206 -> 722,867
95,974 -> 283,974
746,672 -> 558,672
552,32 -> 352,32
21,637 -> 21,781
945,847 -> 945,303

@ -0,0 +1,77 @@
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAX(a, b) ((a) < (b) ? (b) : (a))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
void printGrid(unsigned int maxx, unsigned int maxy, unsigned int grid[maxx+1][maxy+1]){
for( unsigned int y = 0; y <= maxy; y++ ){
for( unsigned int x = 0; x <= maxx; x++ ){
printf("%3i", grid[x][y]);
}
printf("\n");
}
}
int main( int argc, char *argv[] ){
if( argc == 2 ) {
FILE *fp=fopen(argv[1], "r");
unsigned int maxx=0, maxy=0;
while (!feof (fp)){
unsigned int x1=0,x2=0,y1=0,y2=0;
fscanf(fp, "%i,%i -> %i,%i\n", &x1,&y1,&x2,&y2);
maxx= MAX( maxx, MAX( x1, x2 ) );
maxy= MAX( maxy, MAX( y1, y2 ) );
}
unsigned int grid[maxx+1][maxy+1];
memset( &grid, 0, (maxx+1)*(maxy+1)*sizeof(int) );
rewind(fp);
unsigned int cellsWithOverlap=0;
while (!feof (fp)){
unsigned int x1=0,x2=0,y1=0,y2=0;
fscanf(fp, "%i,%i -> %i,%i\n", &x1,&y1,&x2,&y2);
if ( x1 == x2 ){
for( unsigned int y = MIN(y1,y2); y<=MAX(y1,y2); y++ )
if ( 1 == grid[x1][y]++) cellsWithOverlap++;
}
if ( y1 == y2 ){
for( unsigned int x = MIN(x1,x2); x<=MAX(x1,x2); x++ )
if ( 1 == grid[x][y1]++) cellsWithOverlap++;
}
}
printf("%i cells with overlap\n", cellsWithOverlap);
fclose(fp);
return 0;
} else {
printf("You need to provide a file\n");
return 1;
}
}

@ -0,0 +1,90 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX(a, b) ((a) < (b) ? (b) : (a))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
void printGrid(unsigned int maxx, unsigned int maxy, unsigned int grid[maxx+1][maxy+1]){
for( unsigned int y = 0; y <= maxy; y++ ){
for( unsigned int x = 0; x <= maxx; x++ ){
printf("%3i", grid[x][y]);
}
printf("\n");
}
}
int main( int argc, char *argv[] ){
if( argc == 2 ) {
FILE *fp=fopen(argv[1], "r");
unsigned int maxx=0, maxy=0;
while (!feof (fp)){
int x1=0,x2=0,y1=0,y2=0;
fscanf(fp, "%i,%i -> %i,%i\n", &x1,&y1,&x2,&y2);
maxx= MAX( maxx, MAX( x1, x2 ) );
maxy= MAX( maxy, MAX( y1, y2 ) );
}
unsigned int grid[maxx+1][maxy+1];
memset( &grid, 0, (maxx+1)*(maxy+1)*sizeof(int) );
rewind(fp);
unsigned int cellsWithOverlap=0;
unsigned int iteration = 0;
while (!feof (fp)){
int x1=0,x2=0,y1=0,y2=0;
fscanf(fp, "%i,%i -> %i,%i\n", &x1,&y1,&x2,&y2);
//printf("Iteration: %i\n", iteration);
if ( x1 == x2 ){ // Virtical lines
for( unsigned int y = MIN(y1,y2); y<=MAX(y1,y2); y++ )
if ( 1 == grid[x1][y]++) cellsWithOverlap++;
} else if ( y1 == y2 ){ // Horisontal lines
for( unsigned int x = MIN(x1,x2); x<=MAX(x1,x2); x++ )
if ( 1 == grid[x][y1]++) cellsWithOverlap++;
} else { // Diaganal lines
// Since we know all diagonals are 45 deg we only need to worry about if this is 1 or -1
int dx = (x2 - x1) / abs(x2 - x1);
int dy = (y2 - y1) / abs(y2 - y1);
for (unsigned int i = 0; i <= MAX(x1,x2) - MIN(x1,x2); i++){
unsigned int x = x1 + ( dx * i );
unsigned int y = y1 + ( dy * i );
if ( 1 == grid[x][y]++) cellsWithOverlap++;
}
}
iteration++;
}
printf("%i cells with overlap\n", cellsWithOverlap);
//printGrid(maxx, maxy, grid);
fclose(fp);
return 0;
} else {
printf("You need to provide a file\n");
return 1;
}
}
Loading…
Cancel
Save