From 956f7839a4af85f91df4cce0f42b4c8d334692af Mon Sep 17 00:00:00 2001 From: Dustin Swan Date: Mon, 13 Dec 2021 13:17:09 -0500 Subject: [PATCH] day13 --- day13.rkt | 52 +++ day13.test.txt | 21 ++ day13.txt | 840 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 913 insertions(+) create mode 100644 day13.rkt create mode 100644 day13.test.txt create mode 100644 day13.txt diff --git a/day13.rkt b/day13.rkt new file mode 100644 index 0000000..6e915bf --- /dev/null +++ b/day13.rkt @@ -0,0 +1,52 @@ +#lang racket + +(define (map-map f lst) ; map . map + (map (λ (x) (map (λ (y) (f y)) x)) lst)) + +(define data + (let* ([input (file->lines "day13.txt")] + [point-lines (filter (λ (l) (string-contains? l ",")) input)] + [points (map-map string->number (map (λ (p) (string-split p ",")) point-lines))] ; e.g. '(6 10) + [fold-lines (filter (λ (l) (string-contains? l "fold")) input)] + [folds (map (λ (l) (let* ([matches (regexp-match #rx"(.)=(.+)" l)]) ; e.g. '("y" 7) + (list (second matches) (string->number (third matches))))) fold-lines)]) + (list points folds))) + +(define points (first data)) +(define folds (second data)) + +(define (draw points) + (let* ([width (apply max (map first points))] [height (apply max (map second points))]) + (for-each (λ (row) (begin + (for-each (λ (col) (printf "~a" (if (member (list col row) points) "#" "."))) (range 0 (+ 1 width))) + (printf "~n"))) (range 0 (+ 1 height))))) + +(define (move-point point dir loc) + (let* ([which (if (equal? "x" dir) first second)] ; which coordinate to change. x -> fold left -> change the first digit, etc. + [diff (* 2 (- (which point) loc))] ; calculate the amount the point should move left/up + [diffX (if (equal? "x" dir) (λ (x) (- x diff)) identity)] + [diffY (if (equal? "y" dir) (λ (x) (- x diff)) identity)]) + (if (< (which point) loc) ; if it is below the fold + point ; just return it + (list (diffX (first point)) (diffY (second point)))))) ; otherwise, move the point + +(define (fold points f) ; should have picked a different name.. + (let* ([direction (first f)] + [location (second f)] + [new-points (map (λ (point) (move-point point direction location)) points)]) + (remove-duplicates new-points))) + +(define part1 + (let* ([first-fold (first folds)] + [next (fold points first-fold)]) + (length next))) + +part1 + +; PART 2 + +(define part2 + (draw + (foldl (λ (f sheet) (fold sheet f)) points folds))) + +part2 \ No newline at end of file diff --git a/day13.test.txt b/day13.test.txt new file mode 100644 index 0000000..282114c --- /dev/null +++ b/day13.test.txt @@ -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 diff --git a/day13.txt b/day13.txt new file mode 100644 index 0000000..63d24c5 --- /dev/null +++ b/day13.txt @@ -0,0 +1,840 @@ +602,683 +1297,593 +1118,603 +534,850 +221,383 +524,835 +735,194 +117,872 +1233,648 +1160,509 +278,558 +20,697 +622,675 +60,217 +120,460 +296,505 +206,29 +20,131 +73,791 +1014,535 +708,473 +1042,371 +1243,672 +1197,798 +1218,586 +62,885 +48,843 +880,170 +788,729 +816,401 +969,47 +1119,567 +335,721 +160,45 +718,120 +666,427 +295,815 +850,109 +1208,618 +388,427 +177,481 +149,481 +676,197 +216,708 +646,696 +206,546 +641,749 +242,353 +1250,421 +520,568 +234,614 +1218,308 +817,579 +934,586 +84,737 +244,676 +1208,564 +1220,409 +473,665 +426,740 +1118,792 +928,201 +1061,213 +577,200 +862,641 +892,492 +150,201 +898,322 +641,847 +848,703 +392,329 +1266,341 +228,712 +494,493 +838,271 +1148,778 +1146,86 +493,91 +1126,105 +576,551 +234,651 +838,267 +561,502 +606,801 +1062,521 +1074,402 +166,45 +460,480 +1308,103 +1067,476 +1250,116 +15,592 +865,358 +979,121 +1014,743 +848,102 +1198,311 +120,253 +358,599 +316,299 +520,326 +1116,148 +1160,201 +880,778 +736,295 +335,173 +438,809 +1178,544 +74,565 +902,659 +831,859 +564,185 +776,44 +376,275 +125,812 +922,330 +130,205 +671,317 +92,308 +295,303 +771,744 +492,534 +380,840 +902,683 +65,86 +887,448 +1032,765 +120,641 +488,339 +1293,23 +733,470 +952,595 +909,831 +99,642 +166,555 +922,841 +1118,352 +191,719 +401,735 +652,791 +131,255 +18,827 +1000,488 +1178,527 +850,480 +474,712 +232,562 +294,185 +539,744 +395,105 +776,64 +231,253 +1292,382 +954,408 +488,401 +382,649 +842,427 +634,131 +150,649 +1302,827 +462,792 +1148,116 +262,742 +716,217 +729,159 +425,366 +463,175 +1044,427 +1228,703 +668,61 +1294,854 +1062,373 +79,194 +296,702 +659,243 +773,872 +806,833 +671,302 +686,299 +480,722 +88,75 +92,243 +882,607 +850,253 +1012,856 +1032,250 +410,71 +142,789 +1262,597 +647,397 +622,877 +160,712 +646,205 +1108,885 +582,575 +771,150 +624,299 +411,726 +132,445 +505,861 +376,558 +974,56 +132,320 +877,635 +624,254 +629,689 +746,402 +1114,129 +815,848 +298,67 +1056,716 +356,255 +356,827 +624,147 +216,123 +142,341 +900,218 +910,709 +1168,789 +954,827 +818,330 +492,360 +629,17 +664,319 +602,435 +196,241 +974,491 +970,285 +350,75 +1299,894 +1285,205 +884,488 +72,166 +1168,322 +370,178 +1280,819 +1220,485 +321,844 +95,357 +90,485 +77,470 +8,67 +298,603 +934,308 +644,369 +192,191 +248,359 +575,334 +298,291 +62,120 +100,288 +903,642 +147,543 +898,775 +1178,599 +719,476 +1062,7 +1118,827 +1118,219 +708,883 +401,831 +1295,78 +917,178 +472,715 +885,528 +102,134 +1116,752 +3,46 +1118,675 +1081,156 +22,371 +184,789 +1015,591 +644,427 +417,343 +1307,46 +755,866 +954,255 +325,159 +151,213 +32,877 +1210,288 +1119,623 +82,683 +60,778 +989,50 +348,322 +708,683 +278,765 +336,295 +733,694 +560,292 +564,402 +1049,758 +1094,771 +412,322 +1044,521 +900,659 +1245,30 +1290,770 +509,247 +576,103 +686,75 +705,574 +110,339 +934,619 +676,763 +294,644 +192,827 +124,457 +231,701 +1076,243 +102,842 +192,281 +1193,134 +788,165 +736,31 +1084,607 +1114,241 +1009,205 +1094,533 +336,765 +102,564 +458,241 +838,715 +214,815 +684,774 +175,859 +676,131 +838,579 +406,821 +249,213 +855,806 +848,227 +1222,75 +1116,253 +214,729 +32,628 +1168,372 +295,79 +393,30 +1114,404 +1033,320 +1245,86 +734,343 +1216,292 +602,473 +807,651 +520,165 +1140,397 +151,651 +504,649 +1213,366 +918,565 +263,777 +600,693 +326,723 +336,129 +571,642 +1232,723 +130,59 +783,582 +107,757 +1057,894 +1218,651 +1250,217 +167,885 +1033,126 +562,19 +191,175 +848,542 +181,199 +1280,864 +769,684 +1193,872 +1098,653 +1198,79 +1159,651 +562,586 +458,404 +1168,329 +248,439 +624,523 +1200,339 +406,535 +544,85 +584,301 +435,842 +571,54 +512,372 +651,243 +1034,600 +132,747 +756,158 +771,879 +537,648 +922,229 +227,700 +676,770 +1180,689 +769,798 +1068,289 +310,488 +130,891 +1047,441 +401,63 +1089,383 +952,702 +749,392 +134,326 +410,676 +1101,694 +18,830 +594,105 +440,815 +82,703 +460,871 +1176,326 +758,564 +818,116 +160,849 +807,203 +102,276 +221,831 +1145,222 +8,632 +965,871 +1175,175 +577,718 +60,116 +1036,449 +790,568 +52,446 +1012,603 +1089,259 +766,533 +1048,742 +602,11 +880,676 +716,116 +569,437 +94,12 +975,173 +102,341 +509,329 +360,560 +718,774 +142,249 +329,735 +12,61 +316,859 +84,775 +838,495 +43,117 +492,116 +592,774 +787,527 +488,567 +534,460 +932,294 +606,93 +227,553 +602,448 +458,852 +248,887 +1250,373 +602,813 +1233,669 +524,675 +1232,171 +1096,135 +328,310 +917,30 +1278,266 +20,763 +644,817 +1278,877 +1036,445 +462,227 +1226,775 +594,169 +1036,813 +472,271 +433,259 +918,329 +962,315 +840,789 +595,35 +1280,613 +194,253 +962,572 +733,1 +1175,551 +726,301 +52,11 +1295,592 +885,156 +214,135 +1144,45 +676,579 +552,217 +639,86 +716,677 +458,42 +294,485 +425,290 +594,725 +1068,353 +728,575 +719,418 +1302,487 +974,151 +527,582 +987,121 +333,498 +212,138 +1064,843 +1226,723 +900,823 +209,200 +969,369 +1116,673 +175,707 +32,516 +1268,121 +880,249 +1133,145 +875,894 +1150,45 +1077,726 +1091,757 +1238,268 +221,187 +571,28 +77,225 +219,620 +1086,329 +102,330 +984,275 +156,721 +95,607 +1232,383 +728,709 +271,506 +160,182 +97,696 +296,432 +167,9 +224,106 +1128,579 +740,801 +974,743 +1101,200 +196,490 +705,350 +818,267 +209,694 +1292,399 +837,665 +1303,845 +107,836 +428,793 +733,893 +440,576 +323,773 +162,778 +734,882 +296,417 +1150,182 +1280,371 +268,523 +1211,252 +472,267 +1213,528 +786,891 +629,205 +985,159 +428,607 +852,490 +82,647 +231,0 +25,689 +459,703 +1208,330 +28,588 +1057,103 +199,88 +430,170 +395,789 +805,861 +62,437 +788,126 +130,577 +338,747 +904,551 +733,718 +816,600 +195,703 +974,407 +356,603 +1193,806 +602,367 +674,67 +1262,51 +1203,757 +773,22 +887,446 +1044,467 +2,551 +591,453 +102,106 +581,287 +723,131 +651,651 +716,105 +242,373 +308,719 +1208,665 +1036,459 +710,649 +664,696 +1076,84 +1216,602 +1178,449 +828,408 +54,245 +554,549 +10,525 +728,319 +734,103 +30,96 +1228,683 +960,75 +768,583 +1144,339 +331,121 +298,186 +1160,833 +472,623 +341,47 +624,371 +433,635 +1066,683 +1042,523 +1298,61 +90,492 +1039,670 +626,120 +1278,516 +112,79 +54,201 +410,659 +996,285 +524,219 +60,617 +1086,149 +830,620 +534,512 +805,33 +1290,197 +410,218 +1196,821 +129,15 +430,676 +986,847 +1303,49 +1210,345 +1154,397 +1067,418 +321,50 +740,871 +1268,684 +816,787 +534,64 +750,292 +412,775 +376,308 +301,205 +482,486 +1079,253 +1104,796 +534,253 +1159,691 +151,233 +740,775 +1126,789 +535,588 +296,295 +1258,473 +192,352 +410,255 +336,39 +1220,709 +1079,894 +1111,88 +473,199 +1056,166 +166,742 +494,271 +1248,550 +1089,187 +1054,476 +1208,553 +1215,565 +1044,564 +160,555 +132,893 +681,877 +831,187 +577,1 +8,262 +398,749 +892,402 +1082,182 +1156,498 +984,723 +318,151 +423,448 +391,441 +806,385 +1133,481 +298,197 +594,217 +1292,64 +418,492 +1238,136 +1226,23 +1215,537 +147,95 +1237,791 +1036,670 +684,421 +1280,23 +266,521 +1091,274 +589,86 +1208,394 +1119,719 +78,723 +135,343 +1261,126 +80,683 +940,268 +65,850 +234,691 +400,716 +1048,210 +32,334 +927,388 +821,222 +758,106 +196,129 +1135,651 +890,467 +93,392 +1158,620 +8,39 +715,35 +806,201 +97,366 +997,847 +438,634 +246,683 +102,394 +60,169 +10,77 +1082,712 +488,493 +370,268 +156,397 +1218,728 +30,595 +77,246 +107,137 +904,535 +987,773 +344,406 +1308,551 +324,847 +348,315 +1118,281 +1278,334 +658,103 +426,236 +462,165 +426,658 +659,46 +1168,645 +972,77 +406,73 +42,684 +1014,505 +226,607 +8,407 +728,185 +313,847 +1178,893 +1166,399 +848,729 +452,9 +542,352 +1280,595 +524,689 +105,259 +1068,745 +1081,80 +639,368 +756,233 +639,317 +92,586 +1116,221 +112,718 +624,747 +1233,1 +1215,607 +1039,388 +382,245 +1295,86 +582,185 +952,599 +440,191 +458,689 +62,550 +186,467 +1084,287 +1245,416 +790,820 + +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