Browse Source

day 5

master
Hazel Levine 1 year ago
parent
commit
2441a376b5
Signed by: hazel
GPG Key ID: 1884029A28789A62
  1. 10
      data/day5.test.txt
  2. 500
      data/day5.txt
  3. 8
      day4.rkt
  4. 68
      day5.rkt
  5. 29
      lib/common.rkt

10
data/day5.test.txt

@ -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
data/day5.txt

@ -0,0 +1,500 @@
284,294 -> 733,743
625,347 -> 653,375
561,848 -> 561,181
836,102 -> 836,339
946,941 -> 22,17
18,954 -> 956,16
370,142 -> 370,700
990,966 -> 677,966
366,603 -> 366,465
728,942 -> 57,271
615,493 -> 847,493
584,281 -> 301,281
125,356 -> 301,180
941,569 -> 555,183
151,116 -> 509,116
41,18 -> 841,818
627,670 -> 627,630
965,472 -> 965,100
93,404 -> 330,641
475,963 -> 475,514
389,389 -> 389,326
842,565 -> 842,576
454,700 -> 650,700
73,810 -> 73,319
450,212 -> 450,284
316,392 -> 316,697
915,592 -> 578,592
622,485 -> 434,485
109,853 -> 952,10
305,73 -> 305,222
27,489 -> 157,489
191,979 -> 867,979
527,329 -> 527,292
301,645 -> 301,162
639,730 -> 176,730
46,964 -> 46,458
727,422 -> 435,714
28,552 -> 404,552
33,108 -> 33,21
227,249 -> 327,249
414,903 -> 784,903
69,422 -> 888,422
422,924 -> 103,605
793,353 -> 450,10
714,682 -> 714,972
201,745 -> 410,745
408,713 -> 408,847
174,842 -> 818,198
863,353 -> 775,353
199,780 -> 670,780
877,947 -> 340,410
163,202 -> 163,91
955,919 -> 955,585
836,271 -> 533,271
258,366 -> 728,836
582,749 -> 582,12
80,40 -> 80,704
287,213 -> 287,635
390,546 -> 390,194
837,511 -> 538,810
473,281 -> 902,281
851,865 -> 731,745
918,59 -> 445,532
796,215 -> 796,248
875,111 -> 604,111
660,805 -> 538,805
507,850 -> 145,850
585,861 -> 585,52
426,74 -> 700,348
206,405 -> 529,405
418,333 -> 418,17
368,457 -> 33,792
186,81 -> 957,852
505,283 -> 113,283
20,878 -> 462,878
750,237 -> 69,918
15,280 -> 358,623
798,981 -> 500,683
965,970 -> 22,970
950,970 -> 148,970
660,392 -> 660,884
862,405 -> 862,527
801,283 -> 801,361
71,837 -> 136,837
651,438 -> 945,144
524,607 -> 614,517
348,955 -> 138,955
957,164 -> 404,717
531,581 -> 454,504
710,185 -> 710,271
822,86 -> 822,966
745,233 -> 490,488
350,823 -> 663,823
824,67 -> 447,444
846,667 -> 796,617
666,24 -> 666,906
640,39 -> 640,145
654,481 -> 985,481
581,894 -> 416,729
443,11 -> 697,11
318,627 -> 799,146
113,78 -> 891,856
181,149 -> 179,151
451,74 -> 451,262
458,726 -> 314,726
218,662 -> 533,662
965,108 -> 527,108
782,481 -> 896,367
557,927 -> 557,938
506,242 -> 941,677
948,778 -> 948,629
567,816 -> 567,956
323,773 -> 323,364
864,980 -> 864,12
611,699 -> 611,886
613,392 -> 901,104
528,905 -> 156,905
632,206 -> 798,40
338,237 -> 919,818
256,889 -> 11,644
835,52 -> 55,832
464,144 -> 322,144
254,747 -> 254,509
866,892 -> 866,916
827,946 -> 30,149
899,84 -> 177,806
134,634 -> 357,634
781,492 -> 244,492
817,762 -> 817,976
818,749 -> 818,860
262,480 -> 263,480
409,576 -> 409,698
242,151 -> 981,890
149,519 -> 149,557
42,990 -> 42,930
687,974 -> 50,337
758,382 -> 465,382
760,861 -> 760,934
17,835 -> 17,915
645,923 -> 645,648
702,116 -> 72,746
153,162 -> 955,964
185,101 -> 918,834
554,179 -> 554,353
879,673 -> 879,949
368,13 -> 368,512
582,105 -> 591,114
146,291 -> 600,745
609,538 -> 930,538
320,604 -> 320,146
566,698 -> 443,575
167,708 -> 844,31
712,630 -> 712,421
912,930 -> 64,82
980,931 -> 87,38
23,893 -> 888,28
640,435 -> 676,435
701,516 -> 190,516
684,145 -> 62,767
127,471 -> 91,435
685,197 -> 78,197
103,493 -> 103,522
309,986 -> 309,850
938,270 -> 938,300
295,72 -> 354,72
948,889 -> 948,455
254,733 -> 254,175
95,329 -> 942,329
19,672 -> 19,445
206,807 -> 206,934
886,961 -> 886,690
117,386 -> 117,292
199,59 -> 668,528
299,263 -> 299,878
28,295 -> 638,905
10,140 -> 276,406
279,526 -> 921,526
485,128 -> 856,499
418,398 -> 186,398
296,577 -> 296,521
514,261 -> 10,765
691,673 -> 776,758
131,430 -> 152,430
858,85 -> 62,85
394,846 -> 270,970
827,913 -> 827,376
634,669 -> 910,669
12,53 -> 945,986
782,467 -> 782,421
159,832 -> 109,832
793,807 -> 79,93
120,584 -> 356,584
645,16 -> 645,355
526,685 -> 217,376
296,305 -> 296,929
954,144 -> 954,839
748,88 -> 103,733
523,804 -> 473,754
524,316 -> 524,756
696,183 -> 912,183
288,564 -> 55,797
568,103 -> 568,348
468,626 -> 682,412
163,163 -> 961,961
762,824 -> 27,89
623,625 -> 32,34
865,343 -> 490,718
259,458 -> 259,33
944,660 -> 944,176
781,804 -> 826,759
15,702 -> 15,553
403,310 -> 918,825
438,734 -> 835,734
825,13 -> 825,245
129,611 -> 370,611
49,939 -> 172,939
687,906 -> 687,532
629,482 -> 273,126
727,218 -> 424,218
447,451 -> 233,451
142,779 -> 813,779
527,27 -> 527,804
482,55 -> 482,200
39,264 -> 806,264
884,636 -> 458,636
467,121 -> 199,389
856,925 -> 856,666
666,359 -> 378,359
11,946 -> 705,946
491,281 -> 940,730
86,112 -> 918,944
974,807 -> 974,707
445,67 -> 914,536
953,394 -> 953,822
468,398 -> 157,87
231,620 -> 231,646
979,869 -> 979,911
450,330 -> 450,79
675,659 -> 617,659
66,181 -> 66,723
181,406 -> 181,192
908,334 -> 908,526
254,891 -> 282,891
777,791 -> 127,141
469,58 -> 694,58
954,957 -> 566,569
957,957 -> 123,123
741,359 -> 741,986
763,526 -> 763,101
857,427 -> 600,170
527,756 -> 490,719
625,249 -> 397,249
798,702 -> 712,702
868,75 -> 868,853
332,296 -> 332,629
211,829 -> 100,940
12,139 -> 12,218
655,978 -> 655,242
99,852 -> 855,96
486,267 -> 486,855
474,90 -> 474,244
948,491 -> 186,491
896,59 -> 278,677
295,732 -> 629,732
860,936 -> 860,556
143,790 -> 143,26
371,847 -> 395,847
739,301 -> 739,44
384,716 -> 748,716
848,423 -> 848,923
855,23 -> 218,660
381,805 -> 381,438
451,610 -> 91,610
906,957 -> 191,957
118,675 -> 169,675
836,818 -> 95,818
368,945 -> 825,488
165,299 -> 899,299
392,327 -> 926,861
663,16 -> 131,548
630,302 -> 888,302
206,869 -> 206,331
979,413 -> 979,204
894,860 -> 62,28
444,897 -> 962,379
550,158 -> 550,885
845,736 -> 811,736
846,857 -> 12,857
981,730 -> 981,154
694,835 -> 88,835
21,101 -> 21,385
19,960 -> 964,15
283,721 -> 450,721
59,136 -> 758,835
287,313 -> 719,313
471,252 -> 849,630
682,189 -> 168,189
10,921 -> 774,157
884,598 -> 884,540
207,615 -> 207,443
627,408 -> 67,408
285,36 -> 285,792
116,585 -> 254,585
183,86 -> 183,702
220,138 -> 868,138
833,68 -> 286,615
367,534 -> 766,534
907,514 -> 621,228
133,593 -> 133,581
164,727 -> 768,123
566,227 -> 566,555
983,988 -> 105,110
620,177 -> 620,821
612,413 -> 612,176
168,889 -> 168,210
871,487 -> 559,175
399,870 -> 761,870
236,976 -> 582,630
699,216 -> 699,887
153,745 -> 790,745
444,749 -> 444,257
808,165 -> 939,165
546,525 -> 95,976
583,179 -> 373,389
235,816 -> 840,816
744,89 -> 832,89
425,317 -> 465,357
267,235 -> 114,82
887,59 -> 572,374
808,237 -> 808,626
431,352 -> 400,383
815,376 -> 815,905
249,218 -> 989,958
120,435 -> 357,198
807,551 -> 490,234
910,524 -> 910,725
802,304 -> 447,659
789,228 -> 678,339
229,322 -> 52,322
658,393 -> 506,393
378,438 -> 378,569
163,981 -> 473,671
537,984 -> 935,586
58,945 -> 966,37
132,696 -> 565,263
136,813 -> 136,284
606,656 -> 298,348
533,572 -> 673,712
872,912 -> 301,341
16,287 -> 16,613
571,541 -> 980,950
117,495 -> 35,495
85,79 -> 682,676
425,431 -> 117,739
982,984 -> 10,12
28,75 -> 431,478
259,529 -> 259,436
762,267 -> 170,859
323,135 -> 929,741
81,238 -> 561,718
128,213 -> 876,961
649,466 -> 649,540
715,863 -> 119,863
830,624 -> 794,660
123,968 -> 977,114
489,466 -> 489,811
27,10 -> 980,963
255,732 -> 255,484
574,829 -> 431,829
548,743 -> 22,217
903,297 -> 903,763
684,774 -> 64,154
260,823 -> 683,823
422,211 -> 422,826
10,196 -> 988,196
108,802 -> 15,802
104,70 -> 104,452
885,59 -> 885,36
68,854 -> 68,774
731,935 -> 731,718
657,986 -> 617,986
732,292 -> 732,32
841,56 -> 841,83
74,108 -> 862,896
654,895 -> 323,895
374,952 -> 374,217
90,723 -> 750,63
246,89 -> 911,754
453,301 -> 755,301
983,988 -> 23,28
81,705 -> 133,757
752,743 -> 752,397
53,243 -> 449,639
451,811 -> 451,187
26,672 -> 26,699
254,861 -> 943,861
643,740 -> 643,966
486,655 -> 149,318
375,146 -> 375,973
76,293 -> 103,293
246,398 -> 246,248
324,392 -> 595,121
130,577 -> 131,577
380,623 -> 549,454
224,181 -> 985,942
310,223 -> 310,594
23,982 -> 23,738
19,858 -> 832,858
726,531 -> 726,578
730,433 -> 196,433
606,599 -> 242,599
444,832 -> 444,238
198,870 -> 47,870
944,473 -> 795,473
737,386 -> 178,945
328,902 -> 328,644
422,851 -> 567,851
674,781 -> 215,781
920,757 -> 302,757
225,932 -> 640,517
359,337 -> 791,337
935,430 -> 935,262
772,850 -> 280,358
175,829 -> 175,451
938,204 -> 234,908
253,749 -> 308,749
704,458 -> 468,458
222,95 -> 743,616
968,840 -> 123,840
491,619 -> 491,889
979,580 -> 979,459
901,193 -> 171,923
246,155 -> 246,680
711,755 -> 247,755
671,734 -> 475,734
803,783 -> 129,109
145,890 -> 920,115
463,521 -> 463,700
782,99 -> 782,311
547,467 -> 630,467
14,88 -> 795,869
653,899 -> 653,90
488,874 -> 488,570
93,879 -> 645,327
320,658 -> 40,938
611,246 -> 611,22
258,935 -> 258,829
931,436 -> 931,263
252,460 -> 252,461
490,382 -> 965,382
242,89 -> 242,617
271,111 -> 595,435
462,706 -> 242,486
557,328 -> 747,328
486,99 -> 486,333
156,40 -> 488,372
323,482 -> 138,297
595,539 -> 812,756
923,861 -> 377,315
934,952 -> 256,274
314,777 -> 314,12
508,47 -> 508,144
888,807 -> 701,807
745,774 -> 878,907
740,716 -> 740,215
62,43 -> 62,12
571,196 -> 454,196
568,107 -> 408,107
549,676 -> 404,676
595,573 -> 595,970
148,168 -> 193,123
763,71 -> 759,71
797,64 -> 307,64
959,984 -> 32,57
457,562 -> 634,562
127,521 -> 601,47
112,296 -> 112,120
148,755 -> 451,755
636,494 -> 870,494
910,242 -> 945,277
912,911 -> 912,892
759,815 -> 759,314
391,285 -> 391,959
455,460 -> 182,460
112,78 -> 112,385
842,179 -> 842,592
236,424 -> 421,424
508,907 -> 30,907
637,219 -> 34,822
503,375 -> 503,205
570,533 -> 626,533
658,11 -> 658,94
179,286 -> 326,433
918,214 -> 200,932
339,887 -> 81,887
794,91 -> 50,835
225,356 -> 225,261
80,160 -> 80,335
148,64 -> 847,763
595,393 -> 941,393

8
day4.rkt

@ -9,7 +9,7 @@
(define (board-ref vec i j)
(vector-ref vec (+ j (* 5 i))))
;; Input -> [Listof Integer] [Listof [Vectorof Integer]]
;; Input -> [Listof Integer] [Listof Bingo]
(define (parse lines)
(define draws (first lines))
(define boards (rest lines))
@ -79,8 +79,14 @@
winners)
(filter (λ (x) (not (is-winner? x))) remaining))))
(print-board (car last-winner))
(displayln (cdr last-winner))
(calculate-score (car last-winner) (cdr last-winner)))
(define (print-board in)
(for ([e (in-slice 5 (in-vector (bingo-board in)))])
(displayln e)))
(module+ main
(call-with-input-file "data/day4.txt"
(lambda (prt)

68
day5.rkt

@ -0,0 +1,68 @@
#lang racket
(require "lib/common.rkt"
fancy-app)
(struct segment (p1 p2) #:transparent)
(struct posn (x y) #:transparent)
(define (parse lines)
(for/vector ([line (in-list lines)])
(match line
[(pregexp #px"([0-9]*),([0-9]*) -> ([0-9]*),([0-9]*)"
(list _
(app string->number x1) (app string->number y1)
(app string->number x2) (app string->number y2)))
(segment (posn x1 y1) (posn x2 y2))])))
(define (is-cardinal? seg)
(match seg
[(segment (posn x _) (posn x _)) #t]
[(segment (posn _ y) (posn _ y)) #t]
[_ #f]))
(define (segment->point-set seg)
(match seg
[(segment (posn x y1) (posn x y2))
(define y-init (min y1 y2))
(for/vector ([i (in-inclusive-range 0 (abs (- y1 y2)))])
(posn x (+ i y-init)))]
[(segment (posn x1 y) (posn x2 y))
(define x-init (min x1 x2))
(for/vector ([i (in-inclusive-range 0 (abs (- x1 x2)))])
(posn (+ i x-init) y))]
[(segment (posn x1 y1) (posn x2 y2))
(define (direction a b)
(if (<= a b) 1 -1))
(define x-direction (direction x1 x2))
(define y-direction (direction y1 y2))
(for/vector ([x (in-range x1 (+ x2 x-direction) x-direction)]
[y (in-range y1 (+ y2 y-direction) y-direction)])
(posn x y))]))
(define (day5a segments)
(day5b (vector-filter is-cardinal? segments)))
(define (day5b segments)
(define covered (vector-map segment->point-set segments))
(define counts (make-hash))
(for* ([point-set (in-vector covered)]
[point (in-vector point-set)])
(hash-update! counts point add1 0))
(length (filter (<= 2 _) (hash-values counts))))
(module+ main
(call-with-input-file "data/day5.txt"
(λ (prt)
(define lines (parse (port->lines prt)))
(answer 5 1 (day5a lines))
(answer 5 2 (day5b lines)))))
(module+ test
(require rackunit)
(call-with-input-file "data/day5.test.txt"
(λ (prt)
(define lines (parse (port->lines prt)))
(check-equal? (day5a lines) 5)
(check-equal? (day5b lines) 12))))

29
lib/common.rkt

@ -87,17 +87,18 @@
[else (cons v (loop (lexer in)))])))
(define (answer day part answer)
(printf "answer ~a.~a: ~s\n" day part answer)
(unless (aoc-complete? day part)
(printf "submit? [Y/n]: ")
(match (string-downcase (string-trim (read-line)))
[(or "" "y" "yes")
(printf "glhf\n")
(define resp
(aoc-submit-answer (getenv "AOC_YEAR")
(~a day)
(getenv "AOC_SESSION")
(~a part)
(~a answer)))
(printf "server responded: ~a\n" resp)]
[_ (printf "coward\n")])))
(when (not (void? answer))
(printf "answer ~a.~a: ~s\n" day part answer)
(unless (aoc-complete? day part)
(printf "submit? [Y/n]: ")
(match (string-downcase (string-trim (read-line)))
[(or "" "y" "yes")
(printf "glhf\n")
(define resp
(aoc-submit-answer (getenv "AOC_YEAR")
(~a day)
(getenv "AOC_SESSION")
(~a part)
(~a answer)))
(printf "server responded: ~a\n" resp)]
[_ (printf "coward\n")]))))

Loading…
Cancel
Save