From 4fd1aae518076adc8b97735225c678d6a362328d Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 6 Nov 2022 09:58:38 -0800 Subject: Kazinator's Advent of Code stuff. --- 2021/01/input | 2000 +++++++++++++++++++++++++++++++++++++++++++++++ 2021/02/input | 1000 ++++++++++++++++++++++++ 2021/02/part1.tl | 1010 ++++++++++++++++++++++++ 2021/02/part2.tl | 1016 ++++++++++++++++++++++++ 2021/03/code.tl | 26 + 2021/03/input | 1000 ++++++++++++++++++++++++ 2021/04/bingo.tl | 130 +++ 2021/04/input | 601 ++++++++++++++ 2021/05/input | 500 ++++++++++++ 2021/05/scratch | 15 + 2021/05/segs.tl | 201 +++++ 2021/05/testinput | 10 + 2021/06/input | 1 + 2021/06/sim.tl | 31 + 2021/06/testinput | 1 + 2021/07/calc.tl | 22 + 2021/07/input | 1 + 2021/07/testinput | 1 + 2021/08/input | 200 +++++ 2021/08/one.tl | 7 + 2021/08/two.tl | 42 + 2021/09/code.tl | 59 ++ 2021/09/input | 100 +++ 2021/10/code.tl | 35 + 2021/10/input | 102 +++ 2021/10/testinput | 10 + 2021/11/code.tl | 78 ++ 2021/11/input | 10 + 2021/11/testinput | 10 + 2021/11/testinput-small | 5 + 2021/12/input | 23 + 2021/12/one.tl | 49 ++ 2021/12/testinput | 7 + 2021/12/two.tl | 68 ++ 2021/17/code.tl | 46 ++ 2021/17/errors.err | 2 + 2021/17/input | 1 + 2021/17/testinput | 1 + 2021/18/code.tl | 75 ++ 2021/18/code2.tl | 75 ++ 2021/18/input | 100 +++ 2021/18/testinput | 10 + 2021/18/testinput2 | 10 + 2021/19/code.tl | 164 ++++ 2021/19/input | 975 +++++++++++++++++++++++ 2021/19/input.txr | 9 + 2021/19/scratch | 4 + 2021/19/testinput | 136 ++++ 2021/20/code.tl | 73 ++ 2021/20/input | 102 +++ 2021/20/testinput | 7 + 2021/21/code.tl | 52 ++ 2021/21/input | 2 + 2021/21/testinput | 2 + 54 files changed, 10217 insertions(+) create mode 100644 2021/01/input create mode 100644 2021/02/input create mode 100644 2021/02/part1.tl create mode 100644 2021/02/part2.tl create mode 100644 2021/03/code.tl create mode 100644 2021/03/input create mode 100644 2021/04/bingo.tl create mode 100644 2021/04/input create mode 100644 2021/05/input create mode 100644 2021/05/scratch create mode 100644 2021/05/segs.tl create mode 100644 2021/05/testinput create mode 100644 2021/06/input create mode 100644 2021/06/sim.tl create mode 100644 2021/06/testinput create mode 100644 2021/07/calc.tl create mode 100644 2021/07/input create mode 100644 2021/07/testinput create mode 100644 2021/08/input create mode 100644 2021/08/one.tl create mode 100644 2021/08/two.tl create mode 100644 2021/09/code.tl create mode 100644 2021/09/input create mode 100644 2021/10/code.tl create mode 100644 2021/10/input create mode 100644 2021/10/testinput create mode 100644 2021/11/code.tl create mode 100644 2021/11/input create mode 100644 2021/11/testinput create mode 100644 2021/11/testinput-small create mode 100644 2021/12/input create mode 100644 2021/12/one.tl create mode 100644 2021/12/testinput create mode 100644 2021/12/two.tl create mode 100644 2021/17/code.tl create mode 100644 2021/17/errors.err create mode 100644 2021/17/input create mode 100644 2021/17/testinput create mode 100644 2021/18/code.tl create mode 100644 2021/18/code2.tl create mode 100644 2021/18/input create mode 100644 2021/18/testinput create mode 100644 2021/18/testinput2 create mode 100644 2021/19/code.tl create mode 100644 2021/19/input create mode 100644 2021/19/input.txr create mode 100644 2021/19/scratch create mode 100644 2021/19/testinput create mode 100644 2021/20/code.tl create mode 100644 2021/20/input create mode 100644 2021/20/testinput create mode 100644 2021/21/code.tl create mode 100644 2021/21/input create mode 100644 2021/21/testinput diff --git a/2021/01/input b/2021/01/input new file mode 100644 index 0000000..7e216a8 --- /dev/null +++ b/2021/01/input @@ -0,0 +1,2000 @@ +191 +185 +188 +189 +204 +213 +215 +227 +222 +221 +236 +235 +236 +232 +224 +228 +234 +226 +227 +228 +230 +232 +234 +213 +197 +198 +210 +238 +248 +261 +263 +265 +262 +295 +296 +311 +330 +333 +337 +344 +345 +356 +359 +360 +364 +367 +383 +386 +387 +391 +424 +426 +428 +440 +442 +446 +450 +423 +428 +423 +425 +445 +429 +436 +465 +456 +463 +461 +463 +483 +484 +500 +517 +525 +529 +527 +530 +535 +566 +578 +582 +587 +604 +613 +614 +609 +611 +619 +623 +627 +621 +622 +626 +644 +646 +655 +657 +659 +661 +671 +673 +668 +673 +676 +682 +683 +678 +679 +682 +681 +684 +686 +690 +693 +698 +700 +702 +707 +708 +732 +733 +734 +743 +745 +776 +794 +804 +784 +790 +813 +856 +855 +859 +850 +851 +886 +885 +888 +889 +883 +885 +920 +919 +917 +915 +918 +909 +910 +924 +925 +932 +933 +935 +966 +970 +971 +974 +958 +959 +961 +959 +964 +969 +970 +973 +972 +976 +998 +1009 +1010 +1011 +1046 +1047 +1040 +1041 +1056 +1062 +1061 +1062 +1077 +1078 +1080 +1082 +1094 +1096 +1097 +1103 +1128 +1125 +1167 +1176 +1175 +1173 +1183 +1182 +1183 +1188 +1202 +1204 +1205 +1206 +1207 +1212 +1235 +1236 +1256 +1268 +1270 +1276 +1281 +1283 +1276 +1287 +1292 +1295 +1291 +1297 +1298 +1301 +1312 +1316 +1333 +1327 +1340 +1338 +1348 +1364 +1381 +1382 +1383 +1394 +1385 +1388 +1387 +1388 +1394 +1398 +1400 +1397 +1399 +1401 +1408 +1410 +1420 +1421 +1434 +1433 +1436 +1456 +1455 +1479 +1482 +1483 +1522 +1526 +1527 +1542 +1543 +1544 +1548 +1557 +1571 +1574 +1580 +1579 +1602 +1618 +1605 +1608 +1612 +1622 +1625 +1626 +1633 +1648 +1641 +1643 +1650 +1652 +1659 +1678 +1681 +1688 +1692 +1702 +1686 +1688 +1685 +1684 +1674 +1694 +1696 +1695 +1720 +1729 +1736 +1762 +1763 +1767 +1780 +1789 +1796 +1798 +1799 +1800 +1808 +1800 +1805 +1848 +1849 +1867 +1888 +1902 +1903 +1920 +1923 +1926 +1930 +1933 +1925 +1906 +1878 +1898 +1899 +1930 +1936 +1948 +1974 +1983 +1984 +1986 +1983 +1984 +1987 +1985 +1988 +1992 +2005 +2009 +2013 +2025 +2033 +2043 +2046 +2030 +2014 +2009 +2011 +2013 +2043 +2049 +2053 +2065 +2070 +2079 +2080 +2090 +2092 +2102 +2116 +2138 +2140 +2141 +2143 +2149 +2152 +2153 +2154 +2170 +2194 +2192 +2216 +2231 +2246 +2261 +2268 +2269 +2252 +2260 +2264 +2274 +2289 +2293 +2296 +2297 +2300 +2305 +2334 +2329 +2353 +2357 +2359 +2364 +2374 +2377 +2364 +2365 +2366 +2360 +2362 +2360 +2361 +2367 +2357 +2362 +2376 +2379 +2380 +2381 +2401 +2436 +2435 +2439 +2446 +2454 +2456 +2459 +2492 +2493 +2514 +2519 +2524 +2529 +2530 +2535 +2548 +2549 +2551 +2548 +2553 +2552 +2556 +2563 +2570 +2603 +2616 +2617 +2623 +2630 +2631 +2641 +2645 +2660 +2662 +2663 +2664 +2662 +2668 +2673 +2677 +2687 +2688 +2699 +2698 +2691 +2695 +2696 +2710 +2711 +2717 +2722 +2723 +2747 +2746 +2754 +2753 +2752 +2771 +2773 +2774 +2777 +2789 +2790 +2805 +2807 +2818 +2817 +2825 +2818 +2828 +2833 +2834 +2837 +2839 +2854 +2856 +2858 +2859 +2863 +2880 +2882 +2884 +2887 +2888 +2889 +2902 +2911 +2917 +2936 +2938 +2940 +2943 +2944 +2943 +2947 +2954 +2956 +2957 +2959 +2957 +2958 +2959 +2956 +2959 +2960 +2969 +2974 +2979 +2983 +2985 +2986 +2992 +2993 +2995 +3025 +3037 +3036 +3037 +3038 +3040 +3043 +3049 +3058 +3071 +3072 +3080 +3083 +3081 +3090 +3091 +3070 +3076 +3079 +3083 +3084 +3086 +3101 +3114 +3106 +3107 +3137 +3138 +3139 +3137 +3133 +3137 +3102 +3108 +3109 +3124 +3130 +3138 +3149 +3150 +3160 +3171 +3191 +3190 +3200 +3205 +3229 +3235 +3237 +3238 +3239 +3243 +3244 +3245 +3246 +3250 +3265 +3268 +3269 +3271 +3279 +3278 +3279 +3280 +3281 +3290 +3295 +3296 +3300 +3303 +3304 +3305 +3308 +3325 +3313 +3326 +3327 +3335 +3336 +3337 +3335 +3361 +3378 +3374 +3378 +3387 +3406 +3416 +3418 +3438 +3454 +3460 +3475 +3476 +3477 +3471 +3476 +3477 +3486 +3487 +3500 +3502 +3503 +3530 +3531 +3530 +3556 +3563 +3564 +3565 +3566 +3580 +3587 +3591 +3598 +3599 +3612 +3613 +3624 +3623 +3631 +3660 +3661 +3662 +3668 +3671 +3672 +3674 +3683 +3684 +3693 +3694 +3700 +3696 +3699 +3705 +3706 +3710 +3717 +3731 +3734 +3729 +3735 +3736 +3739 +3749 +3734 +3739 +3742 +3753 +3756 +3757 +3775 +3777 +3774 +3780 +3785 +3786 +3790 +3792 +3796 +3798 +3802 +3817 +3818 +3815 +3822 +3824 +3849 +3856 +3871 +3845 +3847 +3849 +3851 +3853 +3884 +3885 +3887 +3889 +3891 +3894 +3895 +3900 +3918 +3935 +3936 +3941 +3945 +3936 +3942 +3945 +3942 +3943 +3965 +3974 +3976 +3979 +3975 +3976 +3980 +3993 +3992 +3991 +3999 +4000 +3996 +4019 +4028 +4029 +4031 +4053 +4054 +4080 +4087 +4089 +4088 +4098 +4100 +4103 +4104 +4112 +4125 +4145 +4148 +4152 +4153 +4158 +4162 +4165 +4177 +4184 +4203 +4205 +4206 +4207 +4211 +4215 +4221 +4240 +4247 +4253 +4261 +4262 +4265 +4269 +4273 +4274 +4258 +4260 +4264 +4282 +4299 +4313 +4284 +4287 +4289 +4290 +4293 +4295 +4297 +4296 +4310 +4314 +4313 +4327 +4329 +4330 +4328 +4338 +4347 +4368 +4371 +4373 +4379 +4388 +4392 +4396 +4393 +4394 +4393 +4397 +4406 +4409 +4410 +4414 +4437 +4436 +4428 +4429 +4434 +4426 +4427 +4428 +4445 +4447 +4467 +4471 +4470 +4472 +4485 +4487 +4493 +4495 +4491 +4497 +4500 +4506 +4507 +4508 +4511 +4518 +4519 +4523 +4520 +4523 +4540 +4541 +4548 +4549 +4550 +4551 +4560 +4570 +4586 +4575 +4581 +4585 +4586 +4591 +4601 +4595 +4597 +4601 +4613 +4615 +4617 +4619 +4604 +4609 +4610 +4616 +4640 +4666 +4676 +4677 +4678 +4709 +4704 +4719 +4727 +4729 +4730 +4747 +4753 +4755 +4768 +4770 +4772 +4777 +4781 +4811 +4814 +4843 +4844 +4846 +4850 +4862 +4863 +4868 +4869 +4870 +4871 +4874 +4881 +4882 +4878 +4887 +4895 +4898 +4910 +4920 +4908 +4910 +4909 +4914 +4916 +4922 +4914 +4918 +4926 +4949 +4952 +4953 +4955 +4956 +4959 +4985 +4986 +4990 +4992 +5028 +5029 +5032 +5030 +5037 +5038 +5047 +5053 +5054 +5059 +5057 +5059 +5062 +5067 +5085 +5086 +5090 +5084 +5077 +5078 +5081 +5091 +5094 +5096 +5095 +5097 +5103 +5118 +5144 +5146 +5153 +5160 +5169 +5173 +5174 +5175 +5184 +5187 +5195 +5196 +5216 +5225 +5238 +5239 +5232 +5235 +5237 +5242 +5244 +5247 +5254 +5262 +5271 +5281 +5287 +5288 +5260 +5264 +5282 +5295 +5301 +5304 +5310 +5295 +5296 +5297 +5298 +5303 +5304 +5305 +5277 +5278 +5289 +5295 +5290 +5297 +5299 +5320 +5328 +5341 +5347 +5356 +5361 +5364 +5365 +5378 +5379 +5377 +5378 +5367 +5380 +5381 +5387 +5385 +5390 +5391 +5392 +5415 +5422 +5423 +5425 +5439 +5441 +5448 +5455 +5470 +5477 +5482 +5488 +5489 +5492 +5501 +5499 +5496 +5499 +5533 +5552 +5562 +5563 +5565 +5566 +5572 +5571 +5581 +5583 +5589 +5594 +5593 +5596 +5602 +5606 +5629 +5643 +5644 +5652 +5673 +5676 +5680 +5676 +5681 +5696 +5703 +5698 +5718 +5720 +5733 +5736 +5741 +5766 +5771 +5786 +5787 +5793 +5790 +5786 +5804 +5805 +5808 +5809 +5816 +5810 +5811 +5818 +5829 +5836 +5839 +5824 +5839 +5843 +5845 +5849 +5853 +5856 +5861 +5873 +5894 +5895 +5896 +5897 +5898 +5899 +5900 +5913 +5917 +5918 +5923 +5924 +5934 +5935 +5952 +5965 +5963 +5958 +5961 +5975 +5988 +5989 +5996 +5997 +6008 +6011 +6023 +6024 +6033 +6048 +6050 +6051 +6049 +6048 +6043 +6048 +6051 +6055 +6081 +6084 +6087 +6093 +6092 +6090 +6078 +6079 +6103 +6092 +6094 +6099 +6100 +6116 +6123 +6129 +6127 +6138 +6139 +6141 +6143 +6146 +6147 +6159 +6162 +6163 +6177 +6179 +6183 +6187 +6188 +6194 +6198 +6213 +6237 +6267 +6282 +6288 +6292 +6297 +6310 +6323 +6325 +6324 +6347 +6349 +6350 +6353 +6363 +6376 +6384 +6394 +6397 +6401 +6402 +6399 +6415 +6416 +6421 +6422 +6423 +6420 +6445 +6446 +6449 +6451 +6457 +6460 +6461 +6467 +6468 +6473 +6474 +6517 +6522 +6519 +6515 +6532 +6533 +6535 +6530 +6532 +6522 +6548 +6549 +6565 +6568 +6579 +6556 +6563 +6565 +6572 +6576 +6578 +6601 +6608 +6611 +6612 +6626 +6619 +6651 +6657 +6658 +6666 +6665 +6660 +6682 +6704 +6705 +6711 +6708 +6716 +6720 +6725 +6727 +6729 +6733 +6734 +6737 +6736 +6741 +6742 +6743 +6750 +6756 +6757 +6758 +6755 +6774 +6773 +6774 +6780 +6781 +6790 +6791 +6800 +6812 +6815 +6817 +6827 +6826 +6832 +6833 +6834 +6833 +6822 +6825 +6829 +6836 +6840 +6846 +6850 +6861 +6868 +6869 +6872 +6879 +6882 +6884 +6907 +6917 +6930 +6924 +6934 +6931 +6918 +6924 +6928 +6934 +6935 +6936 +6953 +6955 +6964 +6987 +6999 +7009 +7042 +7048 +7027 +7054 +7053 +7072 +7073 +7055 +7056 +7057 +7079 +7080 +7084 +7095 +7108 +7107 +7109 +7111 +7134 +7135 +7137 +7138 +7145 +7151 +7161 +7172 +7179 +7183 +7189 +7188 +7189 +7195 +7202 +7236 +7241 +7250 +7277 +7295 +7297 +7294 +7298 +7297 +7301 +7289 +7291 +7276 +7293 +7295 +7311 +7318 +7341 +7378 +7398 +7408 +7409 +7412 +7409 +7413 +7397 +7399 +7423 +7424 +7423 +7426 +7418 +7414 +7409 +7412 +7425 +7426 +7433 +7439 +7448 +7462 +7466 +7467 +7468 +7477 +7480 +7481 +7498 +7499 +7501 +7507 +7527 +7535 +7548 +7551 +7552 +7555 +7561 +7554 +7559 +7560 +7587 +7590 +7596 +7620 +7628 +7645 +7646 +7652 +7653 +7654 +7663 +7670 +7678 +7683 +7686 +7687 +7683 +7692 +7691 +7687 +7688 +7691 +7699 +7698 +7725 +7733 +7734 +7736 +7740 +7751 +7744 +7724 +7719 +7729 +7731 +7746 +7747 +7749 +7722 +7725 +7730 +7735 +7737 +7738 +7739 +7724 +7721 +7724 +7736 +7727 +7730 +7731 +7732 +7736 +7737 +7768 +7787 +7797 +7807 +7815 +7819 +7825 +7852 +7856 +7862 +7869 +7881 +7882 +7885 +7888 +7892 +7889 +7893 +7895 +7896 +7901 +7919 +7921 +7932 +7933 +7964 +7979 +7990 +7991 +7994 +7997 +8011 +8005 +8006 +8014 +8047 +8049 +8064 +8065 +8046 +8047 +8079 +8081 +8082 +8083 +8055 +8052 +8056 +8063 +8064 +8066 +8053 +8067 +8072 +8073 +8077 +8079 +8081 +8076 +8083 +8086 +8098 +8100 +8109 +8107 +8124 +8125 +8126 +8127 +8145 +8146 +8152 +8175 +8176 +8177 +8182 +8193 +8195 +8197 +8199 +8203 +8204 +8213 +8217 +8237 +8240 +8239 +8230 +8237 +8245 +8259 +8264 +8272 +8288 +8285 +8286 +8300 +8301 +8304 +8305 +8327 +8326 +8327 +8341 +8343 +8356 +8357 +8358 +8367 +8374 +8375 +8391 +8392 +8393 +8394 +8399 +8405 +8402 +8404 +8435 +8444 +8484 +8481 +8490 +8492 +8493 +8494 +8503 +8506 +8516 +8515 +8516 +8504 +8508 +8513 +8529 +8542 +8545 +8541 +8546 +8549 +8570 +8552 +8553 +8581 +8578 +8585 +8593 +8596 +8605 +8606 +8608 +8616 +8627 +8628 +8627 +8639 +8644 +8645 +8626 +8633 +8635 +8636 +8640 +8645 +8655 +8673 +8693 +8694 +8695 +8696 +8695 +8714 +8716 +8742 +8739 +8735 +8740 +8763 +8762 +8771 +8772 +8777 +8776 +8787 +8788 +8795 +8796 +8777 +8782 +8783 +8794 +8800 +8810 +8827 +8828 +8833 +8829 +8841 +8862 +8865 +8867 +8869 +8895 +8899 +8901 +8904 +8908 +8909 +8927 +8928 +8930 +8931 +8935 +8945 +8946 +8950 +8954 +8957 +8959 +8949 +8961 +8976 +8980 +8986 +8988 +8992 +9003 +9008 +9009 +9029 +9050 +9051 +9054 +9055 +9068 +9054 +9071 +9082 +9087 +9089 +9112 +9113 +9127 +9126 +9125 +9129 +9138 +9140 +9145 +9149 +9151 +9179 +9185 +9187 +9188 +9189 +9186 +9190 +9207 +9208 +9209 +9221 +9228 +9252 +9254 +9264 +9267 +9276 +9287 +9293 +9292 +9260 +9261 +9260 +9265 +9266 +9285 +9287 +9289 +9290 +9291 +9292 +9293 +9295 +9313 +9314 +9291 +9282 +9304 +9315 +9316 +9317 +9327 +9345 +9350 +9352 +9356 +9366 +9367 +9400 +9407 +9408 +9415 +9418 +9419 +9432 +9441 +9442 +9439 +9440 +9451 +9455 +9464 +9472 +9479 +9481 +9490 +9514 +9527 +9546 +9552 +9556 +9570 +9582 +9584 +9592 +9597 +9602 +9618 +9619 +9622 +9639 +9645 +9648 +9643 +9647 +9648 +9650 +9641 +9665 +9678 +9681 +9682 +9683 +9692 +9703 +9704 +9702 +9704 +9712 +9726 +9731 +9732 +9733 +9744 +9745 +9757 +9755 +9763 +9764 +9766 +9768 +9782 +9780 +9781 +9783 +9786 +9803 +9804 +9821 +9822 +9840 +9841 +9843 +9839 +9840 +9846 +9856 +9859 +9863 +9862 +9864 +9865 +9866 +9870 +9878 +9877 +9894 +9896 +9937 +9938 +9943 +9944 +9943 +9952 +9962 +9983 +9985 +9984 +9992 +10002 +10003 +10041 +10040 +10041 +10040 +10042 +10029 +10034 +10033 +10034 +10052 +10053 +10062 +10055 +10056 +10057 +10069 +10073 +10067 +10070 +10065 +10064 +10069 +10071 +10092 +10069 +10070 +10080 +10095 +10099 +10100 +10101 +10099 +10115 +10116 +10117 +10122 +10124 +10129 +10096 +10101 +10106 +10099 +10102 +10143 +10144 +10145 +10146 +10148 +10149 +10150 +10160 +10132 +10137 +10177 +10181 +10178 +10183 +10189 +10191 +10192 +10194 +10203 +10199 +10207 +10218 +10223 +10224 +10225 +10245 +10239 +10247 +10252 +10250 +10254 +10255 +10256 +10279 +10280 +10292 +10293 +10300 +10310 +10312 +10321 +10324 +10326 +10330 +10329 +10328 +10329 +10333 +10355 +10354 +10349 +10352 +10357 +10369 +10386 +10387 +10402 +10406 +10407 +10404 +10405 +10407 +10408 +10412 +10413 +10417 +10420 +10412 +10426 +10427 +10424 +10433 +10434 +10435 +10456 +10472 +10492 +10494 +10508 +10510 +10511 +10512 +10513 +10514 +10507 +10510 +10511 +10515 +10525 +10526 diff --git a/2021/02/input b/2021/02/input new file mode 100644 index 0000000..d5c08db --- /dev/null +++ b/2021/02/input @@ -0,0 +1,1000 @@ +forward 9 +forward 9 +forward 3 +down 2 +forward 8 +down 8 +forward 1 +down 6 +down 9 +down 9 +forward 1 +up 5 +up 4 +up 8 +down 6 +down 7 +forward 4 +forward 6 +forward 2 +forward 2 +forward 4 +down 2 +down 6 +forward 6 +forward 9 +up 4 +up 6 +down 2 +forward 7 +up 7 +down 8 +down 4 +down 6 +forward 1 +down 2 +up 1 +forward 8 +down 9 +forward 6 +up 9 +down 8 +forward 5 +forward 8 +down 8 +up 3 +up 9 +down 2 +down 2 +forward 5 +up 7 +forward 5 +down 6 +forward 4 +down 2 +up 2 +up 7 +up 1 +down 4 +down 8 +forward 6 +down 2 +forward 7 +down 1 +forward 7 +forward 1 +up 1 +down 4 +down 3 +down 4 +down 4 +up 8 +down 1 +up 7 +forward 8 +down 5 +up 1 +down 4 +down 3 +forward 4 +up 7 +forward 1 +down 4 +down 2 +down 4 +up 8 +up 6 +down 1 +up 3 +down 5 +forward 4 +down 3 +forward 9 +down 9 +forward 2 +down 4 +up 3 +down 4 +forward 1 +forward 7 +forward 9 +forward 7 +forward 3 +forward 6 +down 4 +forward 7 +down 5 +down 1 +forward 7 +up 1 +down 8 +down 7 +down 7 +down 7 +down 3 +forward 4 +forward 6 +forward 6 +forward 1 +down 7 +down 6 +down 8 +up 5 +down 7 +up 6 +forward 9 +down 7 +down 1 +down 9 +forward 8 +up 5 +down 6 +forward 3 +up 2 +down 1 +forward 2 +down 3 +up 6 +forward 8 +forward 1 +forward 3 +down 9 +forward 1 +down 3 +up 7 +forward 8 +up 8 +down 7 +down 2 +forward 3 +up 7 +forward 6 +down 7 +down 6 +up 5 +forward 9 +down 7 +up 5 +forward 6 +up 5 +up 6 +forward 6 +down 8 +down 1 +forward 7 +forward 6 +down 5 +down 6 +forward 9 +down 6 +up 5 +forward 9 +forward 4 +down 1 +forward 5 +down 4 +forward 5 +forward 1 +down 1 +forward 4 +down 5 +forward 4 +up 8 +down 1 +forward 6 +down 5 +forward 8 +forward 8 +forward 5 +down 7 +down 4 +forward 4 +up 1 +up 8 +down 6 +up 5 +forward 6 +forward 5 +forward 9 +down 3 +down 5 +forward 3 +down 6 +forward 6 +up 7 +up 6 +down 6 +down 1 +forward 8 +forward 9 +up 5 +forward 8 +forward 9 +forward 9 +down 2 +down 8 +forward 8 +down 2 +up 8 +down 2 +down 2 +up 1 +down 5 +down 6 +down 1 +down 8 +down 9 +forward 3 +forward 2 +down 6 +up 8 +forward 9 +forward 7 +forward 1 +down 8 +up 8 +forward 8 +down 5 +down 3 +up 3 +forward 6 +forward 5 +down 4 +forward 4 +down 4 +forward 5 +forward 9 +forward 2 +forward 9 +down 1 +down 3 +down 6 +forward 6 +down 7 +forward 3 +forward 4 +forward 1 +down 6 +forward 1 +forward 4 +forward 2 +forward 2 +forward 1 +forward 2 +down 1 +up 2 +forward 1 +down 3 +forward 8 +down 3 +down 9 +forward 5 +down 3 +down 3 +forward 2 +forward 9 +down 9 +forward 4 +down 2 +forward 5 +up 8 +down 4 +forward 5 +down 1 +forward 9 +down 1 +forward 7 +forward 2 +down 2 +down 6 +up 3 +forward 7 +up 4 +forward 7 +forward 6 +down 8 +forward 2 +down 3 +forward 9 +forward 4 +forward 8 +down 6 +forward 8 +down 9 +down 2 +down 3 +forward 1 +down 5 +down 3 +forward 2 +forward 7 +down 4 +down 3 +forward 9 +down 2 +forward 2 +forward 1 +up 6 +up 4 +down 5 +forward 5 +up 8 +down 7 +forward 6 +down 5 +forward 3 +forward 3 +forward 7 +up 9 +up 6 +down 5 +up 7 +forward 2 +forward 5 +down 9 +down 6 +forward 7 +down 9 +up 2 +up 5 +forward 1 +forward 8 +forward 9 +up 8 +forward 9 +forward 5 +up 9 +down 4 +down 7 +forward 2 +forward 1 +down 4 +up 8 +down 5 +down 7 +down 9 +down 3 +down 9 +up 8 +up 7 +up 8 +down 8 +down 2 +down 6 +down 6 +up 5 +up 9 +forward 1 +down 8 +up 4 +up 3 +forward 7 +up 7 +down 3 +up 1 +forward 3 +down 7 +forward 8 +forward 2 +down 6 +down 2 +up 7 +up 5 +forward 7 +forward 1 +forward 6 +up 6 +forward 5 +down 2 +up 4 +forward 2 +down 9 +forward 6 +forward 3 +forward 3 +forward 4 +forward 2 +down 6 +forward 9 +forward 7 +down 4 +up 1 +forward 4 +down 6 +down 6 +up 1 +up 1 +forward 3 +down 5 +up 5 +down 3 +down 6 +up 8 +down 2 +up 6 +up 1 +forward 8 +up 6 +down 8 +forward 9 +forward 4 +forward 9 +down 7 +down 9 +down 6 +down 1 +forward 9 +forward 9 +down 6 +down 5 +up 6 +down 9 +up 4 +up 5 +forward 8 +down 4 +down 5 +forward 8 +forward 7 +down 2 +forward 2 +forward 6 +forward 7 +down 1 +down 7 +down 1 +down 6 +forward 2 +up 2 +down 4 +down 8 +forward 1 +down 1 +down 3 +down 3 +up 9 +down 9 +forward 3 +up 4 +forward 1 +down 9 +down 8 +down 9 +forward 5 +forward 4 +up 3 +down 8 +forward 2 +down 3 +up 5 +forward 4 +down 7 +down 8 +down 9 +forward 8 +down 8 +forward 4 +down 6 +down 3 +forward 5 +down 3 +down 9 +down 4 +up 8 +forward 4 +up 6 +down 3 +forward 6 +down 9 +down 7 +forward 7 +forward 3 +forward 2 +forward 4 +down 4 +down 5 +up 9 +down 2 +down 6 +down 9 +forward 7 +forward 3 +up 3 +forward 3 +down 4 +down 7 +forward 2 +down 2 +forward 3 +down 8 +down 7 +down 7 +forward 2 +forward 2 +up 6 +forward 8 +forward 9 +up 3 +forward 8 +forward 5 +forward 7 +up 3 +forward 3 +forward 6 +down 5 +down 5 +down 4 +forward 1 +forward 8 +forward 4 +forward 3 +down 1 +forward 8 +down 4 +up 5 +forward 4 +down 2 +forward 7 +down 2 +forward 9 +down 1 +forward 6 +forward 8 +forward 6 +forward 7 +forward 1 +forward 6 +down 5 +up 3 +forward 7 +down 6 +forward 2 +down 2 +forward 8 +forward 9 +up 7 +forward 1 +forward 1 +up 1 +forward 1 +down 2 +forward 6 +down 9 +up 1 +up 2 +forward 6 +forward 1 +forward 7 +down 1 +up 8 +forward 7 +up 6 +up 4 +down 1 +forward 2 +down 4 +down 1 +down 7 +down 4 +up 3 +forward 8 +forward 3 +forward 5 +down 7 +down 8 +forward 5 +forward 2 +down 5 +down 2 +forward 2 +up 9 +down 3 +down 5 +up 7 +down 4 +down 2 +down 7 +forward 6 +down 2 +forward 1 +up 4 +forward 2 +forward 2 +down 5 +down 1 +down 1 +forward 7 +forward 6 +down 7 +down 5 +up 1 +up 3 +forward 3 +forward 9 +forward 4 +down 1 +down 5 +forward 3 +forward 7 +down 8 +forward 8 +forward 2 +forward 7 +up 7 +down 7 +down 4 +down 2 +up 6 +up 1 +forward 8 +up 8 +up 6 +down 8 +forward 1 +down 5 +forward 3 +down 3 +down 3 +forward 1 +up 3 +up 3 +forward 8 +forward 8 +down 8 +forward 6 +forward 2 +down 7 +forward 8 +down 7 +up 5 +forward 7 +down 1 +forward 9 +up 6 +down 2 +up 2 +up 5 +forward 6 +forward 9 +forward 3 +down 8 +forward 8 +down 2 +up 5 +down 9 +forward 5 +down 6 +down 3 +down 9 +up 8 +up 3 +down 2 +forward 7 +forward 4 +forward 4 +forward 8 +up 6 +up 4 +forward 9 +down 6 +down 8 +up 3 +up 5 +forward 8 +forward 7 +forward 4 +down 8 +forward 1 +forward 5 +down 9 +forward 8 +up 6 +down 6 +down 8 +down 2 +forward 4 +forward 9 +forward 2 +forward 7 +down 3 +forward 3 +up 6 +down 4 +forward 2 +up 4 +down 4 +forward 4 +forward 3 +forward 1 +up 6 +forward 1 +down 1 +forward 7 +up 4 +forward 3 +down 4 +up 6 +up 2 +up 8 +down 1 +down 6 +down 6 +down 1 +down 7 +forward 8 +down 9 +forward 5 +up 2 +up 7 +up 5 +down 6 +up 1 +up 6 +forward 4 +down 7 +forward 5 +forward 1 +down 6 +forward 2 +down 2 +forward 9 +down 9 +up 6 +forward 1 +up 7 +down 7 +forward 1 +down 6 +up 1 +forward 2 +forward 1 +down 4 +forward 9 +forward 7 +forward 5 +down 1 +forward 2 +down 2 +down 2 +down 5 +forward 1 +up 8 +forward 9 +down 7 +forward 9 +down 2 +up 5 +down 9 +down 8 +down 5 +forward 8 +forward 4 +down 4 +down 6 +forward 1 +down 5 +up 6 +down 3 +down 3 +forward 9 +down 9 +forward 6 +down 5 +up 6 +down 5 +up 7 +forward 9 +down 2 +down 4 +down 8 +forward 4 +up 7 +forward 9 +forward 7 +up 5 +down 7 +down 5 +down 1 +forward 5 +forward 4 +down 2 +up 3 +forward 1 +up 4 +up 9 +down 4 +forward 3 +down 4 +down 9 +forward 4 +up 2 +up 3 +forward 7 +up 6 +down 8 +down 8 +forward 6 +forward 2 +forward 3 +forward 9 +forward 7 +down 6 +down 7 +down 4 +down 2 +forward 8 +down 6 +forward 6 +forward 6 +forward 9 +down 8 +down 1 +up 5 +down 1 +forward 9 +down 1 +up 8 +forward 8 +down 3 +forward 1 +down 9 +forward 6 +forward 4 +forward 8 +down 2 +up 8 +down 2 +up 8 +down 9 +down 4 +up 7 +forward 7 +forward 5 +down 5 +down 4 +up 8 +forward 1 +down 7 +forward 1 +up 9 +forward 9 +forward 7 +forward 9 +down 9 +forward 4 +down 7 +forward 6 +forward 6 +up 3 +forward 2 +down 5 +up 8 +down 1 +up 8 +down 4 +down 1 +up 6 +forward 4 +forward 3 +forward 6 +down 3 +forward 4 +forward 4 +forward 4 +down 8 +forward 3 +up 8 +up 8 +down 8 +forward 6 +forward 8 +up 5 +forward 6 +down 8 +down 7 +up 4 +forward 6 +forward 9 +down 9 +forward 4 +up 2 +forward 1 +up 3 +down 9 +down 8 +forward 8 +forward 8 +forward 7 +down 6 +down 1 +up 6 +up 6 +forward 9 +forward 7 +forward 7 +down 3 +down 6 +down 9 +down 4 +forward 7 +forward 3 +forward 3 +down 7 +up 5 +down 3 +forward 6 +forward 3 +forward 5 +up 3 +down 7 +forward 2 +up 7 +forward 9 +down 3 +down 9 +forward 8 +forward 5 +up 7 +up 2 +up 8 +forward 6 +down 8 +forward 2 +forward 4 +up 2 +forward 2 +forward 8 +forward 4 +down 8 +forward 5 +down 4 +down 7 +forward 3 +down 3 +up 1 +down 9 +forward 9 +down 2 +down 1 +forward 1 +down 6 +down 3 +forward 5 +down 3 +down 8 +up 7 +down 1 +up 9 +down 4 +forward 9 +down 4 +forward 3 +forward 6 +down 3 +forward 3 +down 2 +down 7 +down 1 +up 4 +down 9 +down 1 +down 3 +down 4 +down 8 +down 7 +forward 4 +down 4 +down 9 +forward 2 +forward 7 +forward 2 +down 6 +up 8 +forward 6 +down 2 +forward 6 +up 8 +forward 6 +down 9 +forward 2 +forward 6 diff --git a/2021/02/part1.tl b/2021/02/part1.tl new file mode 100644 index 0000000..983506a --- /dev/null +++ b/2021/02/part1.tl @@ -0,0 +1,1010 @@ +(defvar x 0) +(defvar y 0) +(defvar aim 0) + +(defun forward (n) (inc x n)) +(defun down (n) (inc y n)) +(defun up (n) (dec y n)) + +(forward 9) +(forward 9) +(forward 3) +(down 2) +(forward 8) +(down 8) +(forward 1) +(down 6) +(down 9) +(down 9) +(forward 1) +(up 5) +(up 4) +(up 8) +(down 6) +(down 7) +(forward 4) +(forward 6) +(forward 2) +(forward 2) +(forward 4) +(down 2) +(down 6) +(forward 6) +(forward 9) +(up 4) +(up 6) +(down 2) +(forward 7) +(up 7) +(down 8) +(down 4) +(down 6) +(forward 1) +(down 2) +(up 1) +(forward 8) +(down 9) +(forward 6) +(up 9) +(down 8) +(forward 5) +(forward 8) +(down 8) +(up 3) +(up 9) +(down 2) +(down 2) +(forward 5) +(up 7) +(forward 5) +(down 6) +(forward 4) +(down 2) +(up 2) +(up 7) +(up 1) +(down 4) +(down 8) +(forward 6) +(down 2) +(forward 7) +(down 1) +(forward 7) +(forward 1) +(up 1) +(down 4) +(down 3) +(down 4) +(down 4) +(up 8) +(down 1) +(up 7) +(forward 8) +(down 5) +(up 1) +(down 4) +(down 3) +(forward 4) +(up 7) +(forward 1) +(down 4) +(down 2) +(down 4) +(up 8) +(up 6) +(down 1) +(up 3) +(down 5) +(forward 4) +(down 3) +(forward 9) +(down 9) +(forward 2) +(down 4) +(up 3) +(down 4) +(forward 1) +(forward 7) +(forward 9) +(forward 7) +(forward 3) +(forward 6) +(down 4) +(forward 7) +(down 5) +(down 1) +(forward 7) +(up 1) +(down 8) +(down 7) +(down 7) +(down 7) +(down 3) +(forward 4) +(forward 6) +(forward 6) +(forward 1) +(down 7) +(down 6) +(down 8) +(up 5) +(down 7) +(up 6) +(forward 9) +(down 7) +(down 1) +(down 9) +(forward 8) +(up 5) +(down 6) +(forward 3) +(up 2) +(down 1) +(forward 2) +(down 3) +(up 6) +(forward 8) +(forward 1) +(forward 3) +(down 9) +(forward 1) +(down 3) +(up 7) +(forward 8) +(up 8) +(down 7) +(down 2) +(forward 3) +(up 7) +(forward 6) +(down 7) +(down 6) +(up 5) +(forward 9) +(down 7) +(up 5) +(forward 6) +(up 5) +(up 6) +(forward 6) +(down 8) +(down 1) +(forward 7) +(forward 6) +(down 5) +(down 6) +(forward 9) +(down 6) +(up 5) +(forward 9) +(forward 4) +(down 1) +(forward 5) +(down 4) +(forward 5) +(forward 1) +(down 1) +(forward 4) +(down 5) +(forward 4) +(up 8) +(down 1) +(forward 6) +(down 5) +(forward 8) +(forward 8) +(forward 5) +(down 7) +(down 4) +(forward 4) +(up 1) +(up 8) +(down 6) +(up 5) +(forward 6) +(forward 5) +(forward 9) +(down 3) +(down 5) +(forward 3) +(down 6) +(forward 6) +(up 7) +(up 6) +(down 6) +(down 1) +(forward 8) +(forward 9) +(up 5) +(forward 8) +(forward 9) +(forward 9) +(down 2) +(down 8) +(forward 8) +(down 2) +(up 8) +(down 2) +(down 2) +(up 1) +(down 5) +(down 6) +(down 1) +(down 8) +(down 9) +(forward 3) +(forward 2) +(down 6) +(up 8) +(forward 9) +(forward 7) +(forward 1) +(down 8) +(up 8) +(forward 8) +(down 5) +(down 3) +(up 3) +(forward 6) +(forward 5) +(down 4) +(forward 4) +(down 4) +(forward 5) +(forward 9) +(forward 2) +(forward 9) +(down 1) +(down 3) +(down 6) +(forward 6) +(down 7) +(forward 3) +(forward 4) +(forward 1) +(down 6) +(forward 1) +(forward 4) +(forward 2) +(forward 2) +(forward 1) +(forward 2) +(down 1) +(up 2) +(forward 1) +(down 3) +(forward 8) +(down 3) +(down 9) +(forward 5) +(down 3) +(down 3) +(forward 2) +(forward 9) +(down 9) +(forward 4) +(down 2) +(forward 5) +(up 8) +(down 4) +(forward 5) +(down 1) +(forward 9) +(down 1) +(forward 7) +(forward 2) +(down 2) +(down 6) +(up 3) +(forward 7) +(up 4) +(forward 7) +(forward 6) +(down 8) +(forward 2) +(down 3) +(forward 9) +(forward 4) +(forward 8) +(down 6) +(forward 8) +(down 9) +(down 2) +(down 3) +(forward 1) +(down 5) +(down 3) +(forward 2) +(forward 7) +(down 4) +(down 3) +(forward 9) +(down 2) +(forward 2) +(forward 1) +(up 6) +(up 4) +(down 5) +(forward 5) +(up 8) +(down 7) +(forward 6) +(down 5) +(forward 3) +(forward 3) +(forward 7) +(up 9) +(up 6) +(down 5) +(up 7) +(forward 2) +(forward 5) +(down 9) +(down 6) +(forward 7) +(down 9) +(up 2) +(up 5) +(forward 1) +(forward 8) +(forward 9) +(up 8) +(forward 9) +(forward 5) +(up 9) +(down 4) +(down 7) +(forward 2) +(forward 1) +(down 4) +(up 8) +(down 5) +(down 7) +(down 9) +(down 3) +(down 9) +(up 8) +(up 7) +(up 8) +(down 8) +(down 2) +(down 6) +(down 6) +(up 5) +(up 9) +(forward 1) +(down 8) +(up 4) +(up 3) +(forward 7) +(up 7) +(down 3) +(up 1) +(forward 3) +(down 7) +(forward 8) +(forward 2) +(down 6) +(down 2) +(up 7) +(up 5) +(forward 7) +(forward 1) +(forward 6) +(up 6) +(forward 5) +(down 2) +(up 4) +(forward 2) +(down 9) +(forward 6) +(forward 3) +(forward 3) +(forward 4) +(forward 2) +(down 6) +(forward 9) +(forward 7) +(down 4) +(up 1) +(forward 4) +(down 6) +(down 6) +(up 1) +(up 1) +(forward 3) +(down 5) +(up 5) +(down 3) +(down 6) +(up 8) +(down 2) +(up 6) +(up 1) +(forward 8) +(up 6) +(down 8) +(forward 9) +(forward 4) +(forward 9) +(down 7) +(down 9) +(down 6) +(down 1) +(forward 9) +(forward 9) +(down 6) +(down 5) +(up 6) +(down 9) +(up 4) +(up 5) +(forward 8) +(down 4) +(down 5) +(forward 8) +(forward 7) +(down 2) +(forward 2) +(forward 6) +(forward 7) +(down 1) +(down 7) +(down 1) +(down 6) +(forward 2) +(up 2) +(down 4) +(down 8) +(forward 1) +(down 1) +(down 3) +(down 3) +(up 9) +(down 9) +(forward 3) +(up 4) +(forward 1) +(down 9) +(down 8) +(down 9) +(forward 5) +(forward 4) +(up 3) +(down 8) +(forward 2) +(down 3) +(up 5) +(forward 4) +(down 7) +(down 8) +(down 9) +(forward 8) +(down 8) +(forward 4) +(down 6) +(down 3) +(forward 5) +(down 3) +(down 9) +(down 4) +(up 8) +(forward 4) +(up 6) +(down 3) +(forward 6) +(down 9) +(down 7) +(forward 7) +(forward 3) +(forward 2) +(forward 4) +(down 4) +(down 5) +(up 9) +(down 2) +(down 6) +(down 9) +(forward 7) +(forward 3) +(up 3) +(forward 3) +(down 4) +(down 7) +(forward 2) +(down 2) +(forward 3) +(down 8) +(down 7) +(down 7) +(forward 2) +(forward 2) +(up 6) +(forward 8) +(forward 9) +(up 3) +(forward 8) +(forward 5) +(forward 7) +(up 3) +(forward 3) +(forward 6) +(down 5) +(down 5) +(down 4) +(forward 1) +(forward 8) +(forward 4) +(forward 3) +(down 1) +(forward 8) +(down 4) +(up 5) +(forward 4) +(down 2) +(forward 7) +(down 2) +(forward 9) +(down 1) +(forward 6) +(forward 8) +(forward 6) +(forward 7) +(forward 1) +(forward 6) +(down 5) +(up 3) +(forward 7) +(down 6) +(forward 2) +(down 2) +(forward 8) +(forward 9) +(up 7) +(forward 1) +(forward 1) +(up 1) +(forward 1) +(down 2) +(forward 6) +(down 9) +(up 1) +(up 2) +(forward 6) +(forward 1) +(forward 7) +(down 1) +(up 8) +(forward 7) +(up 6) +(up 4) +(down 1) +(forward 2) +(down 4) +(down 1) +(down 7) +(down 4) +(up 3) +(forward 8) +(forward 3) +(forward 5) +(down 7) +(down 8) +(forward 5) +(forward 2) +(down 5) +(down 2) +(forward 2) +(up 9) +(down 3) +(down 5) +(up 7) +(down 4) +(down 2) +(down 7) +(forward 6) +(down 2) +(forward 1) +(up 4) +(forward 2) +(forward 2) +(down 5) +(down 1) +(down 1) +(forward 7) +(forward 6) +(down 7) +(down 5) +(up 1) +(up 3) +(forward 3) +(forward 9) +(forward 4) +(down 1) +(down 5) +(forward 3) +(forward 7) +(down 8) +(forward 8) +(forward 2) +(forward 7) +(up 7) +(down 7) +(down 4) +(down 2) +(up 6) +(up 1) +(forward 8) +(up 8) +(up 6) +(down 8) +(forward 1) +(down 5) +(forward 3) +(down 3) +(down 3) +(forward 1) +(up 3) +(up 3) +(forward 8) +(forward 8) +(down 8) +(forward 6) +(forward 2) +(down 7) +(forward 8) +(down 7) +(up 5) +(forward 7) +(down 1) +(forward 9) +(up 6) +(down 2) +(up 2) +(up 5) +(forward 6) +(forward 9) +(forward 3) +(down 8) +(forward 8) +(down 2) +(up 5) +(down 9) +(forward 5) +(down 6) +(down 3) +(down 9) +(up 8) +(up 3) +(down 2) +(forward 7) +(forward 4) +(forward 4) +(forward 8) +(up 6) +(up 4) +(forward 9) +(down 6) +(down 8) +(up 3) +(up 5) +(forward 8) +(forward 7) +(forward 4) +(down 8) +(forward 1) +(forward 5) +(down 9) +(forward 8) +(up 6) +(down 6) +(down 8) +(down 2) +(forward 4) +(forward 9) +(forward 2) +(forward 7) +(down 3) +(forward 3) +(up 6) +(down 4) +(forward 2) +(up 4) +(down 4) +(forward 4) +(forward 3) +(forward 1) +(up 6) +(forward 1) +(down 1) +(forward 7) +(up 4) +(forward 3) +(down 4) +(up 6) +(up 2) +(up 8) +(down 1) +(down 6) +(down 6) +(down 1) +(down 7) +(forward 8) +(down 9) +(forward 5) +(up 2) +(up 7) +(up 5) +(down 6) +(up 1) +(up 6) +(forward 4) +(down 7) +(forward 5) +(forward 1) +(down 6) +(forward 2) +(down 2) +(forward 9) +(down 9) +(up 6) +(forward 1) +(up 7) +(down 7) +(forward 1) +(down 6) +(up 1) +(forward 2) +(forward 1) +(down 4) +(forward 9) +(forward 7) +(forward 5) +(down 1) +(forward 2) +(down 2) +(down 2) +(down 5) +(forward 1) +(up 8) +(forward 9) +(down 7) +(forward 9) +(down 2) +(up 5) +(down 9) +(down 8) +(down 5) +(forward 8) +(forward 4) +(down 4) +(down 6) +(forward 1) +(down 5) +(up 6) +(down 3) +(down 3) +(forward 9) +(down 9) +(forward 6) +(down 5) +(up 6) +(down 5) +(up 7) +(forward 9) +(down 2) +(down 4) +(down 8) +(forward 4) +(up 7) +(forward 9) +(forward 7) +(up 5) +(down 7) +(down 5) +(down 1) +(forward 5) +(forward 4) +(down 2) +(up 3) +(forward 1) +(up 4) +(up 9) +(down 4) +(forward 3) +(down 4) +(down 9) +(forward 4) +(up 2) +(up 3) +(forward 7) +(up 6) +(down 8) +(down 8) +(forward 6) +(forward 2) +(forward 3) +(forward 9) +(forward 7) +(down 6) +(down 7) +(down 4) +(down 2) +(forward 8) +(down 6) +(forward 6) +(forward 6) +(forward 9) +(down 8) +(down 1) +(up 5) +(down 1) +(forward 9) +(down 1) +(up 8) +(forward 8) +(down 3) +(forward 1) +(down 9) +(forward 6) +(forward 4) +(forward 8) +(down 2) +(up 8) +(down 2) +(up 8) +(down 9) +(down 4) +(up 7) +(forward 7) +(forward 5) +(down 5) +(down 4) +(up 8) +(forward 1) +(down 7) +(forward 1) +(up 9) +(forward 9) +(forward 7) +(forward 9) +(down 9) +(forward 4) +(down 7) +(forward 6) +(forward 6) +(up 3) +(forward 2) +(down 5) +(up 8) +(down 1) +(up 8) +(down 4) +(down 1) +(up 6) +(forward 4) +(forward 3) +(forward 6) +(down 3) +(forward 4) +(forward 4) +(forward 4) +(down 8) +(forward 3) +(up 8) +(up 8) +(down 8) +(forward 6) +(forward 8) +(up 5) +(forward 6) +(down 8) +(down 7) +(up 4) +(forward 6) +(forward 9) +(down 9) +(forward 4) +(up 2) +(forward 1) +(up 3) +(down 9) +(down 8) +(forward 8) +(forward 8) +(forward 7) +(down 6) +(down 1) +(up 6) +(up 6) +(forward 9) +(forward 7) +(forward 7) +(down 3) +(down 6) +(down 9) +(down 4) +(forward 7) +(forward 3) +(forward 3) +(down 7) +(up 5) +(down 3) +(forward 6) +(forward 3) +(forward 5) +(up 3) +(down 7) +(forward 2) +(up 7) +(forward 9) +(down 3) +(down 9) +(forward 8) +(forward 5) +(up 7) +(up 2) +(up 8) +(forward 6) +(down 8) +(forward 2) +(forward 4) +(up 2) +(forward 2) +(forward 8) +(forward 4) +(down 8) +(forward 5) +(down 4) +(down 7) +(forward 3) +(down 3) +(up 1) +(down 9) +(forward 9) +(down 2) +(down 1) +(forward 1) +(down 6) +(down 3) +(forward 5) +(down 3) +(down 8) +(up 7) +(down 1) +(up 9) +(down 4) +(forward 9) +(down 4) +(forward 3) +(forward 6) +(down 3) +(forward 3) +(down 2) +(down 7) +(down 1) +(up 4) +(down 9) +(down 1) +(down 3) +(down 4) +(down 8) +(down 7) +(forward 4) +(down 4) +(down 9) +(forward 2) +(forward 7) +(forward 2) +(down 6) +(up 8) +(forward 6) +(down 2) +(forward 6) +(up 8) +(forward 6) +(down 9) +(forward 2) +(forward 6) + +(put-line `x = @x, y = @y, aim = @aim, (* x y) = @(* x y)`) diff --git a/2021/02/part2.tl b/2021/02/part2.tl new file mode 100644 index 0000000..8bd775f --- /dev/null +++ b/2021/02/part2.tl @@ -0,0 +1,1016 @@ +(defvar x 0) +(defvar y 0) +(defvar aim 0) + +(defun forward (n) + (inc x n) + (inc y (* n aim))) + +(defun down (n) + (inc aim n)) + +(defun up (n) + (dec aim n)) + +(forward 9) +(forward 9) +(forward 3) +(down 2) +(forward 8) +(down 8) +(forward 1) +(down 6) +(down 9) +(down 9) +(forward 1) +(up 5) +(up 4) +(up 8) +(down 6) +(down 7) +(forward 4) +(forward 6) +(forward 2) +(forward 2) +(forward 4) +(down 2) +(down 6) +(forward 6) +(forward 9) +(up 4) +(up 6) +(down 2) +(forward 7) +(up 7) +(down 8) +(down 4) +(down 6) +(forward 1) +(down 2) +(up 1) +(forward 8) +(down 9) +(forward 6) +(up 9) +(down 8) +(forward 5) +(forward 8) +(down 8) +(up 3) +(up 9) +(down 2) +(down 2) +(forward 5) +(up 7) +(forward 5) +(down 6) +(forward 4) +(down 2) +(up 2) +(up 7) +(up 1) +(down 4) +(down 8) +(forward 6) +(down 2) +(forward 7) +(down 1) +(forward 7) +(forward 1) +(up 1) +(down 4) +(down 3) +(down 4) +(down 4) +(up 8) +(down 1) +(up 7) +(forward 8) +(down 5) +(up 1) +(down 4) +(down 3) +(forward 4) +(up 7) +(forward 1) +(down 4) +(down 2) +(down 4) +(up 8) +(up 6) +(down 1) +(up 3) +(down 5) +(forward 4) +(down 3) +(forward 9) +(down 9) +(forward 2) +(down 4) +(up 3) +(down 4) +(forward 1) +(forward 7) +(forward 9) +(forward 7) +(forward 3) +(forward 6) +(down 4) +(forward 7) +(down 5) +(down 1) +(forward 7) +(up 1) +(down 8) +(down 7) +(down 7) +(down 7) +(down 3) +(forward 4) +(forward 6) +(forward 6) +(forward 1) +(down 7) +(down 6) +(down 8) +(up 5) +(down 7) +(up 6) +(forward 9) +(down 7) +(down 1) +(down 9) +(forward 8) +(up 5) +(down 6) +(forward 3) +(up 2) +(down 1) +(forward 2) +(down 3) +(up 6) +(forward 8) +(forward 1) +(forward 3) +(down 9) +(forward 1) +(down 3) +(up 7) +(forward 8) +(up 8) +(down 7) +(down 2) +(forward 3) +(up 7) +(forward 6) +(down 7) +(down 6) +(up 5) +(forward 9) +(down 7) +(up 5) +(forward 6) +(up 5) +(up 6) +(forward 6) +(down 8) +(down 1) +(forward 7) +(forward 6) +(down 5) +(down 6) +(forward 9) +(down 6) +(up 5) +(forward 9) +(forward 4) +(down 1) +(forward 5) +(down 4) +(forward 5) +(forward 1) +(down 1) +(forward 4) +(down 5) +(forward 4) +(up 8) +(down 1) +(forward 6) +(down 5) +(forward 8) +(forward 8) +(forward 5) +(down 7) +(down 4) +(forward 4) +(up 1) +(up 8) +(down 6) +(up 5) +(forward 6) +(forward 5) +(forward 9) +(down 3) +(down 5) +(forward 3) +(down 6) +(forward 6) +(up 7) +(up 6) +(down 6) +(down 1) +(forward 8) +(forward 9) +(up 5) +(forward 8) +(forward 9) +(forward 9) +(down 2) +(down 8) +(forward 8) +(down 2) +(up 8) +(down 2) +(down 2) +(up 1) +(down 5) +(down 6) +(down 1) +(down 8) +(down 9) +(forward 3) +(forward 2) +(down 6) +(up 8) +(forward 9) +(forward 7) +(forward 1) +(down 8) +(up 8) +(forward 8) +(down 5) +(down 3) +(up 3) +(forward 6) +(forward 5) +(down 4) +(forward 4) +(down 4) +(forward 5) +(forward 9) +(forward 2) +(forward 9) +(down 1) +(down 3) +(down 6) +(forward 6) +(down 7) +(forward 3) +(forward 4) +(forward 1) +(down 6) +(forward 1) +(forward 4) +(forward 2) +(forward 2) +(forward 1) +(forward 2) +(down 1) +(up 2) +(forward 1) +(down 3) +(forward 8) +(down 3) +(down 9) +(forward 5) +(down 3) +(down 3) +(forward 2) +(forward 9) +(down 9) +(forward 4) +(down 2) +(forward 5) +(up 8) +(down 4) +(forward 5) +(down 1) +(forward 9) +(down 1) +(forward 7) +(forward 2) +(down 2) +(down 6) +(up 3) +(forward 7) +(up 4) +(forward 7) +(forward 6) +(down 8) +(forward 2) +(down 3) +(forward 9) +(forward 4) +(forward 8) +(down 6) +(forward 8) +(down 9) +(down 2) +(down 3) +(forward 1) +(down 5) +(down 3) +(forward 2) +(forward 7) +(down 4) +(down 3) +(forward 9) +(down 2) +(forward 2) +(forward 1) +(up 6) +(up 4) +(down 5) +(forward 5) +(up 8) +(down 7) +(forward 6) +(down 5) +(forward 3) +(forward 3) +(forward 7) +(up 9) +(up 6) +(down 5) +(up 7) +(forward 2) +(forward 5) +(down 9) +(down 6) +(forward 7) +(down 9) +(up 2) +(up 5) +(forward 1) +(forward 8) +(forward 9) +(up 8) +(forward 9) +(forward 5) +(up 9) +(down 4) +(down 7) +(forward 2) +(forward 1) +(down 4) +(up 8) +(down 5) +(down 7) +(down 9) +(down 3) +(down 9) +(up 8) +(up 7) +(up 8) +(down 8) +(down 2) +(down 6) +(down 6) +(up 5) +(up 9) +(forward 1) +(down 8) +(up 4) +(up 3) +(forward 7) +(up 7) +(down 3) +(up 1) +(forward 3) +(down 7) +(forward 8) +(forward 2) +(down 6) +(down 2) +(up 7) +(up 5) +(forward 7) +(forward 1) +(forward 6) +(up 6) +(forward 5) +(down 2) +(up 4) +(forward 2) +(down 9) +(forward 6) +(forward 3) +(forward 3) +(forward 4) +(forward 2) +(down 6) +(forward 9) +(forward 7) +(down 4) +(up 1) +(forward 4) +(down 6) +(down 6) +(up 1) +(up 1) +(forward 3) +(down 5) +(up 5) +(down 3) +(down 6) +(up 8) +(down 2) +(up 6) +(up 1) +(forward 8) +(up 6) +(down 8) +(forward 9) +(forward 4) +(forward 9) +(down 7) +(down 9) +(down 6) +(down 1) +(forward 9) +(forward 9) +(down 6) +(down 5) +(up 6) +(down 9) +(up 4) +(up 5) +(forward 8) +(down 4) +(down 5) +(forward 8) +(forward 7) +(down 2) +(forward 2) +(forward 6) +(forward 7) +(down 1) +(down 7) +(down 1) +(down 6) +(forward 2) +(up 2) +(down 4) +(down 8) +(forward 1) +(down 1) +(down 3) +(down 3) +(up 9) +(down 9) +(forward 3) +(up 4) +(forward 1) +(down 9) +(down 8) +(down 9) +(forward 5) +(forward 4) +(up 3) +(down 8) +(forward 2) +(down 3) +(up 5) +(forward 4) +(down 7) +(down 8) +(down 9) +(forward 8) +(down 8) +(forward 4) +(down 6) +(down 3) +(forward 5) +(down 3) +(down 9) +(down 4) +(up 8) +(forward 4) +(up 6) +(down 3) +(forward 6) +(down 9) +(down 7) +(forward 7) +(forward 3) +(forward 2) +(forward 4) +(down 4) +(down 5) +(up 9) +(down 2) +(down 6) +(down 9) +(forward 7) +(forward 3) +(up 3) +(forward 3) +(down 4) +(down 7) +(forward 2) +(down 2) +(forward 3) +(down 8) +(down 7) +(down 7) +(forward 2) +(forward 2) +(up 6) +(forward 8) +(forward 9) +(up 3) +(forward 8) +(forward 5) +(forward 7) +(up 3) +(forward 3) +(forward 6) +(down 5) +(down 5) +(down 4) +(forward 1) +(forward 8) +(forward 4) +(forward 3) +(down 1) +(forward 8) +(down 4) +(up 5) +(forward 4) +(down 2) +(forward 7) +(down 2) +(forward 9) +(down 1) +(forward 6) +(forward 8) +(forward 6) +(forward 7) +(forward 1) +(forward 6) +(down 5) +(up 3) +(forward 7) +(down 6) +(forward 2) +(down 2) +(forward 8) +(forward 9) +(up 7) +(forward 1) +(forward 1) +(up 1) +(forward 1) +(down 2) +(forward 6) +(down 9) +(up 1) +(up 2) +(forward 6) +(forward 1) +(forward 7) +(down 1) +(up 8) +(forward 7) +(up 6) +(up 4) +(down 1) +(forward 2) +(down 4) +(down 1) +(down 7) +(down 4) +(up 3) +(forward 8) +(forward 3) +(forward 5) +(down 7) +(down 8) +(forward 5) +(forward 2) +(down 5) +(down 2) +(forward 2) +(up 9) +(down 3) +(down 5) +(up 7) +(down 4) +(down 2) +(down 7) +(forward 6) +(down 2) +(forward 1) +(up 4) +(forward 2) +(forward 2) +(down 5) +(down 1) +(down 1) +(forward 7) +(forward 6) +(down 7) +(down 5) +(up 1) +(up 3) +(forward 3) +(forward 9) +(forward 4) +(down 1) +(down 5) +(forward 3) +(forward 7) +(down 8) +(forward 8) +(forward 2) +(forward 7) +(up 7) +(down 7) +(down 4) +(down 2) +(up 6) +(up 1) +(forward 8) +(up 8) +(up 6) +(down 8) +(forward 1) +(down 5) +(forward 3) +(down 3) +(down 3) +(forward 1) +(up 3) +(up 3) +(forward 8) +(forward 8) +(down 8) +(forward 6) +(forward 2) +(down 7) +(forward 8) +(down 7) +(up 5) +(forward 7) +(down 1) +(forward 9) +(up 6) +(down 2) +(up 2) +(up 5) +(forward 6) +(forward 9) +(forward 3) +(down 8) +(forward 8) +(down 2) +(up 5) +(down 9) +(forward 5) +(down 6) +(down 3) +(down 9) +(up 8) +(up 3) +(down 2) +(forward 7) +(forward 4) +(forward 4) +(forward 8) +(up 6) +(up 4) +(forward 9) +(down 6) +(down 8) +(up 3) +(up 5) +(forward 8) +(forward 7) +(forward 4) +(down 8) +(forward 1) +(forward 5) +(down 9) +(forward 8) +(up 6) +(down 6) +(down 8) +(down 2) +(forward 4) +(forward 9) +(forward 2) +(forward 7) +(down 3) +(forward 3) +(up 6) +(down 4) +(forward 2) +(up 4) +(down 4) +(forward 4) +(forward 3) +(forward 1) +(up 6) +(forward 1) +(down 1) +(forward 7) +(up 4) +(forward 3) +(down 4) +(up 6) +(up 2) +(up 8) +(down 1) +(down 6) +(down 6) +(down 1) +(down 7) +(forward 8) +(down 9) +(forward 5) +(up 2) +(up 7) +(up 5) +(down 6) +(up 1) +(up 6) +(forward 4) +(down 7) +(forward 5) +(forward 1) +(down 6) +(forward 2) +(down 2) +(forward 9) +(down 9) +(up 6) +(forward 1) +(up 7) +(down 7) +(forward 1) +(down 6) +(up 1) +(forward 2) +(forward 1) +(down 4) +(forward 9) +(forward 7) +(forward 5) +(down 1) +(forward 2) +(down 2) +(down 2) +(down 5) +(forward 1) +(up 8) +(forward 9) +(down 7) +(forward 9) +(down 2) +(up 5) +(down 9) +(down 8) +(down 5) +(forward 8) +(forward 4) +(down 4) +(down 6) +(forward 1) +(down 5) +(up 6) +(down 3) +(down 3) +(forward 9) +(down 9) +(forward 6) +(down 5) +(up 6) +(down 5) +(up 7) +(forward 9) +(down 2) +(down 4) +(down 8) +(forward 4) +(up 7) +(forward 9) +(forward 7) +(up 5) +(down 7) +(down 5) +(down 1) +(forward 5) +(forward 4) +(down 2) +(up 3) +(forward 1) +(up 4) +(up 9) +(down 4) +(forward 3) +(down 4) +(down 9) +(forward 4) +(up 2) +(up 3) +(forward 7) +(up 6) +(down 8) +(down 8) +(forward 6) +(forward 2) +(forward 3) +(forward 9) +(forward 7) +(down 6) +(down 7) +(down 4) +(down 2) +(forward 8) +(down 6) +(forward 6) +(forward 6) +(forward 9) +(down 8) +(down 1) +(up 5) +(down 1) +(forward 9) +(down 1) +(up 8) +(forward 8) +(down 3) +(forward 1) +(down 9) +(forward 6) +(forward 4) +(forward 8) +(down 2) +(up 8) +(down 2) +(up 8) +(down 9) +(down 4) +(up 7) +(forward 7) +(forward 5) +(down 5) +(down 4) +(up 8) +(forward 1) +(down 7) +(forward 1) +(up 9) +(forward 9) +(forward 7) +(forward 9) +(down 9) +(forward 4) +(down 7) +(forward 6) +(forward 6) +(up 3) +(forward 2) +(down 5) +(up 8) +(down 1) +(up 8) +(down 4) +(down 1) +(up 6) +(forward 4) +(forward 3) +(forward 6) +(down 3) +(forward 4) +(forward 4) +(forward 4) +(down 8) +(forward 3) +(up 8) +(up 8) +(down 8) +(forward 6) +(forward 8) +(up 5) +(forward 6) +(down 8) +(down 7) +(up 4) +(forward 6) +(forward 9) +(down 9) +(forward 4) +(up 2) +(forward 1) +(up 3) +(down 9) +(down 8) +(forward 8) +(forward 8) +(forward 7) +(down 6) +(down 1) +(up 6) +(up 6) +(forward 9) +(forward 7) +(forward 7) +(down 3) +(down 6) +(down 9) +(down 4) +(forward 7) +(forward 3) +(forward 3) +(down 7) +(up 5) +(down 3) +(forward 6) +(forward 3) +(forward 5) +(up 3) +(down 7) +(forward 2) +(up 7) +(forward 9) +(down 3) +(down 9) +(forward 8) +(forward 5) +(up 7) +(up 2) +(up 8) +(forward 6) +(down 8) +(forward 2) +(forward 4) +(up 2) +(forward 2) +(forward 8) +(forward 4) +(down 8) +(forward 5) +(down 4) +(down 7) +(forward 3) +(down 3) +(up 1) +(down 9) +(forward 9) +(down 2) +(down 1) +(forward 1) +(down 6) +(down 3) +(forward 5) +(down 3) +(down 8) +(up 7) +(down 1) +(up 9) +(down 4) +(forward 9) +(down 4) +(forward 3) +(forward 6) +(down 3) +(forward 3) +(down 2) +(down 7) +(down 1) +(up 4) +(down 9) +(down 1) +(down 3) +(down 4) +(down 8) +(down 7) +(forward 4) +(down 4) +(down 9) +(forward 2) +(forward 7) +(forward 2) +(down 6) +(up 8) +(forward 6) +(down 2) +(forward 6) +(up 8) +(forward 6) +(down 9) +(forward 2) +(forward 6) + +(put-line `x = @x, y = @y, aim = @aim, (* x y) = @(* x y)`) diff --git a/2021/03/code.tl b/2021/03/code.tl new file mode 100644 index 0000000..4ffd1f4 --- /dev/null +++ b/2021/03/code.tl @@ -0,0 +1,26 @@ +(defun funny-less (left right) + (let ((ll (len left)) + (lr (len right))) + (or (< ll lr) + (if (eql ll lr) + (< (car left) (car right)))))) + +(defun funny-greater (left right) + (let ((ll (len left)) + (lr (len right))) + (or (> ll lr) + (if (eql ll lr) + (> (car left) (car right)))))) + +(defun maj-pare-down (list pos) + (cdr [find-max [group-by (op ref @1 pos) list] funny-greater])) + +(defun min-pare-down (list pos) + (cdr [find-min [group-by (op ref @1 pos) list] funny-less])) + +(let ((list *2)) + (each ((i 0..12)) + (upd list (min-pare-down @1 i))) + list) + +[apply * (mapcar (op toint @1 2) (flatten results))] ;; results contains two numbers in text form diff --git a/2021/03/input b/2021/03/input new file mode 100644 index 0000000..4c5a9e7 --- /dev/null +++ b/2021/03/input @@ -0,0 +1,1000 @@ +010011001001 +110101011110 +111111000101 +100111111001 +000000011111 +111100100111 +011111100000 +001001011100 +101100111011 +010001010100 +111011001010 +010001100011 +110110011011 +011011000001 +001100101100 +001000101100 +100000001010 +001111110000 +100101000000 +010000100000 +010100110000 +110000111101 +000001011010 +000011011001 +011000101110 +100011100101 +110010010100 +001110110101 +100011000000 +110100111100 +100100001111 +010110011001 +000001111101 +100001000010 +110010101110 +000101001100 +100100010010 +111111101000 +001010111001 +100101000001 +001101101110 +101100011010 +100100011100 +111100000111 +101011000100 +110000101010 +101100111010 +101100010101 +001011111101 +011010000110 +001101000011 +110001001110 +011010101111 +001111111011 +001100100001 +111010110001 +011011111100 +001011111001 +111110111110 +011111001011 +110110011101 +111110011011 +101101010010 +110111011110 +111011110100 +111110001011 +110100000010 +000011111001 +100001001111 +101110101010 +000111111011 +011110110001 +000011110110 +011101001011 +010011001110 +101110011110 +110101010011 +111010100011 +010101011001 +011011010101 +000010110100 +010011001000 +110000010010 +101111111001 +000100111011 +011101010101 +100011101111 +001010110100 +101101000110 +011100111011 +000100010111 +010111100000 +100100111110 +110110001111 +010010010111 +001000001110 +001110000101 +001111101100 +101100111110 +111011010111 +110110111000 +000111110001 +111001101001 +011111001000 +001110100011 +111100100010 +010111101000 +111100110101 +111100111010 +010100110110 +100101111100 +101000011000 +011011111111 +010000111100 +101111000000 +100001011000 +110010010110 +111000011011 +010100110111 +100100110011 +000010011101 +010001100111 +011000110011 +100101001101 +110111011011 +000100001000 +011111100101 +110110111100 +100010010100 +110110110111 +111000111011 +101101111000 +000000110110 +101111111010 +000110000001 +011111000110 +110010100111 +111010101111 +101011000010 +011001010111 +010100111110 +110001111000 +110101101111 +011001000110 +111000111111 +010100100111 +100001100001 +110101011010 +000110111000 +101101001010 +010110100110 +111101101010 +110100011111 +101010010000 +001100001001 +001000000101 +111000010001 +100100101100 +001111100011 +110110010000 +011010111010 +011001110110 +000000100111 +011110111100 +011101000101 +011000111010 +110110100011 +101110101000 +111001111001 +010001000001 +111000111100 +001011101011 +110111111111 +010111011101 +110010001010 +011111000100 +011001100110 +011100000010 +000101100010 +000111111010 +000000010101 +010011110110 +000111111101 +101101000010 +101111010001 +011110001101 +100000000111 +110111111110 +000010011110 +111000010010 +110011110011 +101101101011 +011011101110 +101011011000 +000101101001 +010110100011 +011001100111 +011101000011 +001110010110 +001001010010 +111110101001 +001111001001 +010101001111 +100111100001 +011100010101 +100001110011 +010001110001 +101011010101 +000100000110 +100101110001 +100101110010 +111011011001 +100110101101 +101100110001 +101111100101 +001010000000 +011000100011 +010010001111 +011100011101 +001100110010 +000001011111 +101111000011 +111000111110 +011111100100 +100110000000 +011110110100 +001100101011 +110010101010 +010011100100 +011000010100 +001101100101 +101010101000 +011110011010 +010010001100 +010100010001 +010001011011 +110010011001 +010111000101 +111011010110 +111010111100 +011111101000 +100110010100 +010101011011 +010111001011 +011110010011 +011000011110 +100001000111 +000011111101 +111100101001 +000000100011 +110011100100 +101111100001 +010011110111 +101000001011 +001101111001 +100111000011 +000001000100 +100100010000 +000010010100 +000111111001 +000100100010 +011011011111 +010110011110 +001101010011 +110111101001 +111011101111 +100110000100 +001101110111 +010101101110 +011010100011 +010010100101 +101110110110 +111000001011 +010001101000 +111101100110 +100111010001 +100010011010 +101111001000 +011000100000 +111000010101 +100101011001 +011011110011 +110011001010 +000110010111 +101000010011 +100100111100 +001111000001 +001110101101 +100111100011 +011001011101 +111000000000 +101001010011 +000000111101 +000011000000 +001011000100 +011111111011 +000111101111 +101100011000 +111011000001 +101000000111 +111110000100 +101001110100 +010111000001 +010010101001 +110011001111 +100010000010 +001001001010 +100110010110 +101100110010 +111000111010 +101110011111 +110111111001 +011010110011 +111010100010 +110000011000 +011000101011 +001001000001 +000100110010 +111100000000 +001010100101 +101011010110 +110001010100 +101111010000 +000110000000 +111110011000 +110011110111 +011010111001 +001100110110 +111111111101 +001010010001 +101001111000 +000100110101 +000100111111 +100000110111 +001011100001 +001010111000 +100010101100 +110110000111 +100101010010 +101001001010 +110000011101 +111010010101 +001011011000 +101101101001 +010101111011 +101010011100 +000010000011 +001110110110 +111100001111 +011000000001 +000000111010 +000110011110 +010100110010 +000111010000 +110111110111 +110000000101 +011111111111 +010101000011 +110000101000 +000001110001 +010001010010 +100100010110 +000100101110 +100011011000 +000110010001 +100000001001 +011010010001 +010111101011 +101101101100 +001101100001 +010101111101 +001010101110 +001110001001 +100101110110 +001000110011 +010001011110 +100110011001 +010100101110 +101101111011 +001110110011 +000111001111 +100100110110 +101000111101 +100000111100 +111000101100 +000010010011 +001100001101 +111101011011 +001100101010 +001000010001 +011001010010 +111011101011 +010010001101 +000100100011 +111110001111 +110010001111 +010001100010 +101101110001 +101100110011 +110111111011 +011011010100 +011101100101 +111111000100 +101111001001 +010000000100 +011001111110 +110101111100 +111111100001 +111011000100 +100110100001 +101001110000 +001011010010 +011010001000 +110010001110 +000101111001 +010100100110 +011100110100 +000011111000 +100100000111 +110111001000 +111100001110 +001010101100 +010111111011 +111010100100 +101000011101 +110111100110 +111100110100 +000010011010 +000110101111 +001101010001 +010010000111 +011000100001 +110111100100 +010011100101 +011001001011 +101101010100 +010000010001 +001001110001 +100010000110 +111101111011 +011110100101 +000101001000 +111110011100 +000001101110 +111101000001 +100111000100 +011110100011 +110000101011 +000010011111 +000101011001 +101100111001 +011010000111 +000010001011 +010001111110 +000010111110 +101001111110 +000110001101 +001100101001 +000101111011 +110000100110 +110001000011 +000001111100 +010100111010 +011001000001 +110111000010 +110011101010 +001101101000 +100110100011 +000010101010 +101101111010 +111111100111 +010101000000 +011010011110 +011110100100 +100000110000 +011111011100 +011000001110 +000010000010 +101011010010 +010101110000 +110001000000 +011111111100 +101110110010 +111111011001 +100000110110 +111010100111 +000001100101 +101010010111 +010000110110 +001000010111 +101000100000 +100101000011 +111100011011 +010110001101 +101010100110 +101111111101 +100000111001 +011100001000 +110111011000 +100011101101 +101101110011 +000010101100 +000011000001 +011110110110 +001100011110 +010100111111 +011111101011 +000011110100 +001000100111 +010000000101 +111001111000 +111001010001 +001100000001 +110110111010 +101000011010 +010100111001 +000100111100 +110000100011 +100000101011 +001001001110 +101110111101 +110101001110 +101110110100 +001111110101 +100000010101 +110000011010 +111101100011 +101001100100 +100010100001 +011001010000 +111001110000 +101000100111 +100111011110 +000000101111 +101000110000 +110100001111 +001101101010 +010011001101 +000110011101 +101011110000 +100010011110 +101010100011 +000110111011 +000101110110 +001000000011 +011011111010 +101011101111 +000011010101 +010001011101 +001010011100 +011111111000 +111011100111 +010111010001 +010111101001 +101000110100 +000001010000 +010001000101 +000010111101 +010101101111 +010100001010 +100010011101 +011111011001 +111010001001 +000110011011 +000001001000 +100011011111 +110001011000 +001101011000 +000010001101 +100100101111 +110101111011 +000010010110 +001110011010 +100110101000 +100101101100 +110011101101 +000011011011 +110110010110 +001111011110 +100111010100 +011001000000 +011011100001 +101100111000 +010001000011 +010110010110 +101010110100 +101011100100 +110001110101 +110110001100 +000100011011 +110100010000 +101010110001 +110010111000 +110011100101 +010000100100 +101100000011 +111101111101 +000100001100 +000000101011 +101101100000 +000111000110 +010100001000 +011110100001 +101101110010 +110010001101 +011100001001 +001100111111 +000011011010 +001110011110 +000010011000 +111001100010 +110100010001 +100001000100 +000110100000 +111011110111 +001011110000 +000001100010 +001000110001 +110001000010 +010100000011 +010110001111 +100111001001 +011100011011 +011101101111 +110000101100 +101111011111 +101111000110 +111001101011 +011011101111 +010110010101 +100001001100 +011101110011 +000001100001 +001000110111 +011000110001 +111000000111 +000100101001 +101100101101 +000100010110 +110010101001 +100110011100 +000111010011 +110100000100 +101011001110 +010011110001 +010110110100 +111111001000 +010100101111 +101111101000 +011110101000 +001011111000 +111110010111 +101101010000 +111111010100 +100111010011 +011101010011 +100000111110 +100010111111 +011011100010 +111000011101 +010100001101 +010100001011 +001111101001 +011001111100 +111101000111 +000100000000 +110101111001 +111010011111 +010010011101 +001101101011 +110111101111 +001000111001 +100010110000 +000000000101 +101001000001 +001110001101 +110111001101 +111010101110 +101001000110 +000011100011 +010101001101 +000111000001 +001011011101 +111100011101 +111101000110 +101101001011 +101110010101 +110100111000 +000010101101 +000110000110 +100001110001 +011010010000 +110000011111 +101011011110 +000010001111 +100001100101 +111010000001 +010010001011 +011111110100 +000001010010 +110010010111 +011000001000 +011101010100 +111110111101 +111100010100 +001101111000 +011110000001 +111011111001 +111011011011 +001010010011 +011011001110 +101101111111 +001101011001 +010111001000 +101110001011 +111101100111 +001101110010 +100001100110 +010100010100 +110010111011 +110011110110 +010110011101 +101101011001 +001111110011 +100000001100 +110010000000 +001011001100 +001111111100 +110010100101 +100000101100 +011000101101 +000101000010 +100100110001 +010111111110 +101111110100 +100001101011 +111010100001 +100111101010 +100110110000 +000101011000 +100011110011 +110100101101 +010011011011 +011010000001 +010000100001 +001101111110 +110000000010 +011010000000 +100110111001 +101011000011 +100101010101 +001100110111 +001111011001 +110000110100 +111101000000 +110101010100 +011100110111 +001100100000 +111110010110 +101010111010 +110100011010 +110010010010 +101000101101 +111110010010 +100111001000 +110000101110 +100001101110 +100011010110 +000101000001 +000010110111 +000110000100 +011101110101 +111100011010 +000000010100 +111100011000 +110110101011 +001100010101 +000010010010 +010100110001 +001001010110 +100110000011 +110100100001 +000111110010 +011000011011 +111101001000 +001101110101 +001101110110 +010101101010 +110111000011 +011110000010 +011010011011 +111100110001 +010001001000 +000101100110 +010001110111 +010000101000 +000000100000 +100011001011 +100001111110 +100011111101 +101101001110 +101110110011 +100000011111 +001101010111 +111101100000 +011010001111 +101001010010 +100010100000 +011000100111 +101100100000 +011011000011 +001101001011 +001010001011 +110100000001 +111110001000 +101000010101 +100011000010 +010110101000 +011101011111 +000110001000 +101100000111 +110100101001 +101001101001 +010111000011 +011101000001 +101011001000 +110101001101 +010010100110 +111001110011 +010111010010 +010011101100 +001110111100 +010111011110 +000010001100 +111000001001 +001100101110 +111001100011 +010000011001 +111010111111 +010011111111 +011100100110 +001001101111 +001000111110 +010101111000 +011011001011 +101110001100 +010100010010 +000001011011 +000001100100 +000000010011 +000001110011 +010101001000 +110110100001 +001101101101 +011010001110 +101011100110 +110001100101 +110100100110 +101010110000 +110100110101 +011101000100 +101110001010 +001100110101 +000100011110 +101110111001 +011111101010 +010110001010 +110111110010 +001000101110 +100011001100 +010011010101 +100101001001 +111011001110 +101100000100 +000010111100 +111000101111 +010001001100 +010011110100 +010010110000 +001111101110 +111110110111 +101010000010 +010001101101 +111001000000 +100011001010 +100000111111 +110000001101 +000000111110 +010011100111 +010110110010 +010110010000 +011010001001 +101000110101 +111110001010 +100101001010 +011000001001 +011100010111 +111010111000 +011011001100 +001010000100 +011100001110 +001001110010 +110001000110 +100100010111 +101110001101 +000100001001 +001001011111 +100111100100 +100001100011 +000011011110 +101011111110 +111000011000 +000100001010 +011111010111 +011001010100 +011101110111 +001100000110 +100011011101 +011010111111 +010110100111 +011000111001 +000100111010 +011001001110 +111010001000 +110011000101 +110001101010 +001101100111 +101011101010 +000001001010 +110110010100 +100000000001 +000011011101 +010011101110 +101001100110 +111110011001 +110010100000 +100011000100 +111111000001 +010000100011 +000100010010 +010111000010 +011111101001 +101101100100 +011011000101 +111110010000 +001000000000 +011000001011 +111111110110 +011010110110 +000001111110 +011101001000 +110101010000 +110001010000 +101000100001 +111100001001 +000000000110 +100000011101 +101001011011 +000001001100 +110000010110 +110000001011 +000101101101 +001011000111 +100110011111 +011111011101 +110010101111 +000000000001 +000101110001 +100011000001 +100101010011 +100011010111 +001101100000 +001100111110 +100101000111 +100011110111 +100000110011 +111010000101 +010101110110 +101010001011 +011001100100 +111101110011 +110011000001 +111011101100 +110010011010 +111100010011 +001011011001 +000000000000 +001000001101 +001110010001 +000011010100 +100001010101 +101010001000 +110100011011 +011100111000 +111111111001 +100101001110 +100011100011 +101000101000 +010101110101 +011100011100 diff --git a/2021/04/bingo.tl b/2021/04/bingo.tl new file mode 100644 index 0000000..cd82c47 --- /dev/null +++ b/2021/04/bingo.tl @@ -0,0 +1,130 @@ +(defstruct board () + rows) + +(defstruct bingo () + numbers + boards) + +(defun read-bingo (name) + (let* ((lines (remqual "" (file-get-lines name))) + (numbers [mapcar toint (spl "," (pop lines))]) + (boards (mapcar (do new board rows @1) + (tuples 5 (mapcar (opip (tok #/\d+/) (mapcar toint)) + lines))))) + (new bingo numbers numbers boards boards))) + +(defmeth board check (bo) + (when-match @(or @(some (* * * * *)) + ((* . @nil) + (* . @nil) + (* . @nil) + (* . @nil) + (* . @nil)) + ((@nil * . @nil) + (@nil * . @nil) + (@nil * . @nil) + (@nil * . @nil) + (@nil * . @nil)) + ((@nil @nil * . @nil) + (@nil @nil * . @nil) + (@nil @nil * . @nil) + (@nil @nil * . @nil) + (@nil @nil * . @nil)) + ((@nil @nil @nil * . @nil) + (@nil @nil @nil * . @nil) + (@nil @nil @nil * . @nil) + (@nil @nil @nil * . @nil) + (@nil @nil @nil * . @nil)) + ((@nil @nil @nil @nil * . @nil) + (@nil @nil @nil @nil * . @nil) + (@nil @nil @nil @nil * . @nil) + (@nil @nil @nil @nil * . @nil) + (@nil @nil @nil @nil * . @nil))) + bo.rows t)) + +(defmeth board daub (bo num) + (upd bo.rows + (mapcar (op mapcar (iffi (op eql num) (ret '*))))) + bo) + +(defmeth board value (bo) + (sum bo.rows (op sum @1 [iff numberp use (ret 0)]))) + +(defmeth bingo solve (bi) + (each ((x bi.numbers)) + (each ((bo bi.boards)) + (if bo.(daub x).(check) + (return-from solve (* x bo.(value))))))) + +(defmeth bingo solve-last (bi) + (each ((x bi.numbers)) + (each ((bo bi.boards)) + (if (and bo.(daub x).(check) + (empty (upd bi.boards (remq bo)))) + (return-from solve-last (* x bo.(value))))))) + +(defun tests () + (assert (new board rows '((* * * * *))).(check)) + (assert (new board rows '((1 2 3 4 5) (* * * * *))).(check)) + (assert (new board rows '((* 2 3 4 5) + (* 2 3 4 5) + (* 2 3 4 5) + (* 2 3 4 5) + (* 2 3 4 5))).(check)) + (assert (new board rows '((2 * 3 4 5) + (2 * 3 4 5) + (2 * 3 4 5) + (2 * 3 4 5) + (2 * 3 4 5))).(check)) + (assert (new board rows '((2 3 * 4 5) + (2 3 * 4 5) + (2 3 * 4 5) + (2 3 * 4 5) + (2 3 * 4 5))).(check)) + (assert (new board rows '((2 3 4 * 5) + (2 3 4 * 5) + (2 3 4 * 5) + (2 3 4 * 5) + (2 3 4 * 5))).(check)) + (assert (new board rows '((2 3 4 5 *) + (2 3 4 5 *) + (2 3 4 5 *) + (2 3 4 5 *) + (2 3 4 5 *))).(check)) + (assert (not (new board rows '((* * 3 * *))).(check))) + (assert (not (new board rows '((1 2 3 4 5) (* * * * 3))).(check))) + (assert (not (new board rows '((* 2 3 4 5) + (6 2 3 4 5) + (* 2 3 4 5) + (* 2 3 4 5) + (* 2 3 4 5))).(check))) + (assert (not (new board rows '((2 6 3 4 5) + (2 * 3 4 5) + (2 * 3 4 5) + (2 * 3 4 5) + (2 * 3 4 5))).(check))) + (assert (not (new board rows '((2 3 * 4 5) + (2 3 * 4 5) + (2 3 * 4 5) + (2 3 6 4 5) + (2 3 * 4 5))).(check))) + (assert (not (new board rows '((2 3 4 * 5) + (2 3 4 * 5) + (2 3 4 6 5) + (2 3 4 * 5) + (2 3 4 * 5))).(check))) + (assert (not (new board rows '((2 3 4 5 *) + (2 3 4 5 *) + (2 3 4 5 *) + (2 3 4 5 *) + (2 3 4 5 6))).(check))) + (assert (equal (new board rows '((1 2 3 4 5) + (6 7 8 9 10) + (11 12 13 14 15))).(daub 8).rows + '((1 2 3 4 5) + (6 7 * 9 10) + (11 12 13 14 15)))) + (assert (eq (new board rows '((1 * * * *) + (* * * * 2) + (* * 3 * *))).(value) + 6))) diff --git a/2021/04/input b/2021/04/input new file mode 100644 index 0000000..2ad5f8f --- /dev/null +++ b/2021/04/input @@ -0,0 +1,601 @@ +17,58,52,49,72,33,55,73,27,69,88,80,9,7,59,98,63,42,84,37,87,28,97,66,79,77,61,48,83,5,94,26,70,12,51,82,99,45,22,64,10,78,13,18,15,39,8,30,68,65,40,21,6,86,90,29,60,4,38,3,43,93,44,50,41,96,20,62,19,91,23,36,47,92,76,31,67,11,0,56,95,85,35,16,2,14,75,53,1,57,81,46,71,54,24,74,89,32,25,34 + +59 98 84 27 56 +17 35 18 64 34 +62 16 74 26 55 +21 99 1 19 93 +65 68 53 24 73 + + 1 86 98 16 6 +93 69 33 49 71 +54 43 77 29 47 +82 73 99 31 27 +28 48 36 89 20 + +80 92 52 23 67 +47 38 4 25 65 +54 31 77 13 39 +18 70 17 22 24 +14 99 30 96 8 + +88 97 17 48 71 +60 50 15 37 24 +78 6 79 56 91 +70 30 72 46 73 +41 42 32 7 59 + +37 20 34 32 3 +48 40 4 27 42 +94 87 14 24 57 +17 18 90 44 76 +43 28 46 5 19 + + 3 69 88 77 74 + 6 44 12 81 49 +73 23 32 97 53 +83 4 85 38 61 +10 87 50 60 47 + +84 17 58 31 79 +25 97 35 72 16 +11 91 75 67 41 + 6 85 27 44 86 +43 40 54 95 68 + +70 55 88 22 50 +96 98 48 85 75 +95 72 8 26 14 +16 63 46 91 78 +93 3 83 99 21 + +29 7 6 75 36 +37 93 23 63 65 +56 79 87 48 49 +27 24 80 53 33 +86 46 95 99 42 + +33 30 72 99 65 +49 93 76 36 53 +26 35 86 97 12 +47 19 54 25 3 +75 34 50 8 95 + +41 69 49 0 48 +73 9 72 61 85 +56 20 58 57 1 +12 82 38 21 46 +34 83 11 68 53 + +54 79 35 24 33 +89 77 75 76 96 +94 2 38 39 40 +63 51 34 12 30 +20 21 70 26 23 + +82 62 87 42 19 +94 65 18 4 33 + 0 30 27 55 66 +76 46 78 14 48 +57 53 43 15 75 + +94 38 96 44 46 +10 14 75 97 76 + 7 61 56 36 1 +81 67 49 78 86 +31 65 88 24 63 + +22 2 51 36 24 +78 62 67 13 84 +32 91 59 66 33 +73 80 54 3 85 +65 70 98 79 55 + +80 1 23 70 47 +91 88 24 56 11 +98 79 72 31 86 + 7 87 28 25 92 +74 20 62 46 71 + +62 45 91 49 96 +73 3 57 30 95 +74 31 12 17 40 +53 39 63 55 1 +58 82 23 64 84 + +11 71 60 51 63 +90 64 79 88 39 +65 13 76 66 26 +20 34 40 0 95 +21 72 62 83 77 + +24 70 72 60 63 +53 69 94 74 57 +25 41 20 84 45 +76 68 16 15 18 +75 58 0 10 47 + +17 23 90 8 4 +88 24 74 12 18 +62 99 67 49 92 +29 64 16 21 25 + 9 19 30 60 53 + +28 85 61 76 29 +15 33 89 48 1 +68 77 11 93 51 +87 59 8 5 54 +65 34 18 81 43 + +53 9 31 23 35 +17 59 91 43 25 + 7 90 5 33 58 +21 68 29 52 15 +86 3 48 11 26 + +78 77 63 91 24 +40 31 54 17 72 +84 21 69 45 38 +89 12 70 42 65 +27 52 97 64 94 + +36 23 33 20 70 +35 10 52 18 34 +22 19 98 93 5 +67 94 90 51 62 +38 6 53 64 76 + +90 69 16 70 34 +57 94 3 61 36 +60 22 47 97 31 +30 8 4 84 91 +12 65 37 18 72 + +12 93 39 1 96 + 0 13 67 55 72 +84 9 30 40 62 +10 74 79 41 85 +51 52 47 98 75 + +63 82 76 42 50 +40 75 85 10 99 + 6 34 22 43 15 +87 57 79 66 55 +97 24 72 54 68 + +68 39 48 66 81 +26 9 96 5 38 +22 1 57 30 98 + 2 43 14 50 97 +56 37 62 13 29 + + 4 9 98 28 11 +21 20 10 39 69 +85 47 87 94 36 +88 75 35 22 91 +86 44 2 56 12 + +98 65 26 91 86 + 7 25 45 80 22 +39 2 95 69 46 +84 49 68 85 47 +23 90 40 4 44 + +63 2 32 56 52 +30 11 33 10 70 +36 34 88 82 37 +62 57 40 28 96 +58 73 41 69 85 + + 8 27 64 80 19 +87 79 99 53 95 +84 6 31 22 3 +44 91 47 41 82 +16 74 43 29 70 + +32 67 62 81 36 +47 61 74 60 57 +27 35 38 4 26 +34 72 2 21 90 +49 84 42 31 76 + + 3 53 26 35 12 +20 30 0 76 80 +96 46 89 83 48 + 7 13 98 66 75 +97 82 55 5 68 + +22 61 69 36 77 +95 53 4 21 94 + 5 17 18 2 96 + 0 81 56 31 66 +70 75 55 58 42 + +97 10 40 80 43 +57 90 53 34 13 +38 7 47 86 89 +51 65 76 85 0 +48 62 28 42 35 + + 6 21 88 78 22 +30 90 65 53 66 +31 36 3 99 32 +52 13 69 68 72 +57 97 79 73 94 + +77 76 81 94 20 +45 17 52 49 18 +98 56 21 32 80 +63 99 87 24 43 +61 1 16 3 40 + + 3 45 98 84 31 +99 23 90 71 27 +24 60 46 69 37 +83 62 6 36 49 +42 55 11 68 17 + +60 22 98 46 0 +59 9 28 16 26 +56 33 43 93 31 +73 27 29 6 94 +13 12 51 61 45 + +85 22 48 27 58 +86 23 65 19 91 +50 36 97 10 78 +15 9 3 72 96 +31 1 87 8 14 + +79 48 30 50 77 +92 71 90 25 14 +39 45 98 1 84 +47 8 66 60 74 +80 75 55 62 35 + +45 60 77 16 18 +78 21 23 44 56 +36 27 99 80 61 +81 71 75 58 5 +53 49 46 9 38 + +56 6 53 79 33 + 3 62 30 83 96 + 1 34 12 44 47 +58 35 87 91 69 +20 85 0 60 4 + + 9 87 28 94 66 + 3 10 27 13 54 +40 0 43 35 85 +67 34 81 92 58 +21 53 79 6 19 + +23 72 9 1 57 +61 73 33 52 64 + 7 21 92 84 46 +50 56 38 25 76 +75 67 47 81 37 + +50 4 98 48 85 +46 39 45 93 69 +60 5 79 68 21 +31 67 8 74 16 +88 3 15 84 23 + +53 61 99 17 25 +16 86 27 83 46 + 9 75 67 19 10 +84 81 76 88 8 +49 97 79 3 21 + +69 40 56 75 4 +34 16 79 46 77 +19 54 35 74 84 +73 50 20 47 10 +62 99 51 6 92 + +53 79 80 96 45 +28 0 2 35 33 +51 70 34 90 72 +30 54 41 38 15 +91 73 97 23 49 + +20 78 55 10 18 +61 89 14 2 17 +93 96 41 70 76 +19 37 47 80 71 +82 92 90 0 57 + +29 40 64 62 32 +56 58 7 68 67 +16 76 4 50 13 +37 90 66 60 83 +33 97 25 80 54 + +56 91 67 49 98 +85 15 25 1 32 +24 93 86 54 52 +22 73 23 63 94 +65 72 14 26 55 + +74 38 19 20 11 +57 86 87 29 89 +13 21 75 85 44 +33 84 56 76 92 +52 37 64 72 73 + +45 14 60 32 59 +66 49 16 2 94 +19 10 68 90 78 +95 8 93 61 24 +85 48 29 28 84 + + 6 74 4 42 86 +88 79 8 96 66 +63 85 89 9 12 +57 1 67 38 32 +87 26 71 78 46 + +78 49 54 77 56 +18 4 50 14 23 +16 12 25 64 39 +75 2 22 41 37 +88 19 93 85 53 + +79 6 52 48 37 +51 67 66 42 3 +63 43 39 56 91 + 8 18 7 29 89 +55 71 45 36 38 + + 9 8 42 35 79 +11 62 7 93 68 +28 26 61 96 19 +29 88 81 43 98 +84 80 23 77 17 + +90 21 51 43 60 +95 12 34 77 29 +75 82 47 92 15 +56 73 52 64 7 +17 85 94 41 46 + +43 75 58 76 35 +37 41 65 60 14 +90 51 83 32 88 +26 99 16 68 64 +44 97 24 29 20 + +50 32 90 95 27 +34 38 82 39 15 +60 66 68 40 22 +85 98 87 58 7 +30 54 97 11 33 + +77 30 84 12 0 +34 6 5 70 44 +87 67 4 61 75 +31 96 52 57 8 +21 41 13 45 62 + + 6 26 69 27 75 +61 33 88 38 20 + 9 56 70 98 82 +80 76 55 66 29 +97 84 42 77 73 + +83 35 25 47 69 +70 31 93 56 57 +97 14 26 55 27 +51 39 98 77 17 +45 86 6 95 89 + +18 9 29 14 38 +69 64 30 90 57 +75 97 80 94 44 +85 41 11 96 86 +33 81 58 26 49 + +31 11 12 75 96 +68 85 95 2 47 +35 57 87 41 6 +65 50 74 25 59 +26 9 30 17 88 + +54 59 23 46 37 +56 43 91 75 1 +18 96 11 84 14 +30 94 82 2 8 +67 90 99 33 34 + +51 90 80 71 32 +73 18 8 35 58 +53 91 60 74 37 +76 9 25 17 31 +54 84 43 88 34 + +20 8 27 64 40 +11 99 85 72 32 +62 7 55 83 35 +96 48 12 33 30 +73 4 21 16 75 + +14 15 52 30 88 +97 94 59 56 77 +31 12 41 36 20 +62 3 2 38 82 +68 45 33 91 61 + + 4 11 9 89 60 +97 70 18 57 40 +98 75 6 50 88 +56 30 21 80 83 + 7 73 65 23 69 + +70 23 49 90 82 + 1 68 95 33 76 +72 89 39 51 59 + 8 65 88 73 24 +47 26 80 5 34 + +13 50 15 43 51 + 7 58 40 68 91 +62 18 47 79 42 +60 1 74 71 86 +25 53 36 10 70 + +92 96 37 63 61 +49 94 65 13 23 +15 75 52 10 82 +30 59 14 43 48 +53 62 21 35 0 + +79 84 95 93 41 +58 94 6 20 92 +88 0 78 16 21 +40 96 24 2 66 +85 87 13 14 80 + +33 53 54 20 37 +18 88 70 61 85 +90 76 12 44 79 +81 69 9 98 74 +14 13 15 36 93 + +61 46 67 24 98 +80 36 41 86 9 +82 75 40 42 58 +49 51 99 5 90 +91 97 26 20 56 + +90 22 94 41 7 +13 16 51 44 32 + 5 43 60 19 49 +38 96 23 12 79 +57 85 58 3 48 + +52 3 40 90 43 +14 64 59 93 56 +99 94 61 72 46 +84 87 48 22 91 + 2 67 35 76 92 + +48 82 26 38 90 +50 98 30 76 60 + 1 49 92 99 77 +59 97 22 47 93 +81 35 43 23 53 + +41 5 57 29 2 +90 23 55 75 96 +48 60 86 67 8 +34 12 59 6 45 +89 1 44 49 76 + +76 81 4 44 22 +89 84 85 70 11 +51 97 50 25 95 +31 27 21 40 87 +65 91 69 58 23 + +96 42 98 38 52 +39 57 40 94 91 +87 79 23 36 82 + 4 72 95 22 43 +51 73 59 15 44 + +99 29 30 90 33 +60 61 65 8 56 +89 87 25 95 55 + 6 39 69 98 20 +76 81 85 16 93 + +86 35 92 90 19 +26 55 21 12 33 + 3 82 41 47 15 +14 94 63 62 23 +95 65 2 0 72 + +22 8 49 39 36 +63 7 61 92 51 +25 96 43 1 46 +28 64 59 47 27 +87 65 48 88 37 + +58 59 93 23 70 +18 97 83 73 21 +90 14 13 95 45 +44 6 10 80 15 +92 56 26 76 52 + +34 68 7 52 51 +17 25 97 35 78 + 2 40 89 67 24 +73 37 45 0 64 +57 66 47 4 12 + +11 35 14 69 13 +86 90 2 19 27 +70 0 6 31 98 +64 23 54 88 26 +94 43 59 71 36 + +28 9 67 39 20 +16 44 47 69 96 +19 45 30 91 68 +75 56 37 35 52 +27 42 93 43 84 + +24 67 39 70 93 +71 72 12 85 1 +77 59 66 5 76 +54 13 35 40 82 +51 25 64 6 19 + +65 36 92 51 74 +55 90 68 9 97 +28 56 35 34 73 +50 10 61 37 30 +79 49 96 18 1 + +57 8 17 51 19 +86 97 21 84 20 +32 44 33 27 62 + 3 76 70 58 79 +36 74 75 65 71 + +24 65 37 29 66 +26 60 49 45 61 +23 22 83 71 10 +46 59 86 40 12 +64 74 27 8 78 + +63 79 80 54 68 +16 89 60 96 31 + 6 91 32 37 86 +93 20 61 70 21 +58 88 11 15 39 + +36 44 75 3 29 +58 32 84 37 48 +76 99 65 91 24 +22 20 42 57 49 +50 85 52 2 54 + +77 65 38 15 12 +50 53 10 34 40 +87 60 4 68 71 + 5 35 28 63 66 +11 86 9 8 49 + + 3 71 46 10 1 +83 12 52 99 24 +96 87 85 51 33 +11 69 62 34 41 +88 22 89 21 49 + +55 0 82 40 48 +71 32 3 90 92 +39 69 63 86 60 +51 36 66 12 46 +73 57 58 33 94 diff --git a/2021/05/input b/2021/05/input new file mode 100644 index 0000000..04fa5cb --- /dev/null +++ b/2021/05/input @@ -0,0 +1,500 @@ +657,934 -> 657,926 +130,34 -> 570,474 +478,716 -> 226,464 +861,110 -> 861,167 +448,831 -> 370,831 +75,738 -> 390,738 +26,880 -> 864,42 +965,658 -> 527,220 +208,381 -> 80,381 +523,475 -> 807,475 +219,69 -> 219,434 +793,538 -> 534,797 +754,602 -> 754,148 +443,327 -> 443,611 +606,395 -> 546,395 +980,56 -> 51,985 +619,325 -> 354,325 +342,123 -> 819,600 +290,533 -> 374,533 +598,77 -> 598,75 +605,302 -> 605,636 +97,981 -> 692,386 +278,779 -> 278,800 +661,377 -> 661,10 +726,108 -> 518,316 +271,883 -> 271,50 +382,271 -> 606,271 +963,358 -> 891,286 +496,880 -> 496,855 +211,142 -> 211,49 +841,866 -> 260,285 +841,849 -> 173,181 +927,326 -> 391,862 +396,558 -> 459,558 +753,183 -> 953,183 +941,698 -> 941,407 +347,612 -> 347,476 +18,340 -> 18,612 +140,299 -> 797,956 +714,907 -> 714,228 +966,155 -> 194,927 +769,674 -> 712,674 +644,675 -> 948,979 +703,872 -> 812,763 +26,629 -> 120,535 +844,738 -> 844,253 +798,133 -> 798,795 +27,318 -> 288,57 +38,545 -> 872,545 +827,351 -> 195,983 +818,45 -> 21,842 +257,559 -> 626,928 +145,925 -> 886,184 +83,618 -> 590,111 +326,243 -> 53,243 +489,278 -> 526,278 +783,693 -> 783,525 +495,636 -> 495,585 +374,716 -> 215,557 +839,536 -> 839,966 +850,468 -> 955,468 +55,799 -> 55,447 +472,722 -> 296,898 +390,731 -> 120,461 +405,493 -> 208,296 +807,42 -> 56,793 +476,327 -> 655,327 +24,965 -> 967,22 +776,211 -> 776,850 +489,20 -> 822,20 +630,740 -> 871,499 +743,493 -> 283,953 +62,429 -> 62,720 +806,270 -> 806,332 +550,154 -> 107,597 +71,713 -> 533,251 +620,575 -> 620,156 +726,829 -> 143,246 +944,553 -> 468,553 +185,582 -> 185,468 +845,266 -> 212,899 +654,97 -> 265,486 +726,609 -> 726,147 +631,76 -> 860,76 +835,24 -> 928,24 +712,719 -> 74,81 +616,478 -> 616,117 +903,226 -> 903,577 +440,699 -> 136,395 +215,705 -> 890,30 +20,24 -> 981,985 +102,144 -> 850,892 +695,967 -> 582,967 +219,284 -> 219,388 +359,833 -> 665,833 +389,55 -> 305,55 +59,32 -> 957,930 +815,198 -> 64,949 +699,540 -> 717,558 +215,682 -> 182,682 +805,489 -> 328,489 +43,546 -> 578,546 +489,181 -> 489,363 +266,391 -> 266,582 +863,368 -> 448,368 +83,236 -> 83,487 +874,875 -> 874,413 +799,90 -> 799,802 +253,29 -> 253,905 +136,446 -> 435,745 +830,534 -> 550,534 +183,785 -> 107,785 +81,517 -> 159,517 +359,941 -> 359,560 +71,546 -> 948,546 +596,811 -> 596,791 +255,960 -> 255,159 +788,15 -> 788,682 +240,55 -> 240,244 +51,423 -> 137,423 +504,418 -> 809,723 +131,842 -> 914,59 +727,790 -> 82,145 +281,509 -> 841,509 +797,807 -> 834,807 +333,499 -> 790,499 +215,328 -> 215,139 +500,898 -> 500,862 +75,217 -> 777,919 +17,264 -> 17,446 +852,755 -> 150,755 +865,186 -> 385,186 +158,192 -> 158,733 +196,261 -> 196,128 +989,960 -> 131,102 +807,393 -> 807,153 +507,579 -> 507,764 +468,76 -> 535,76 +381,357 -> 659,357 +794,277 -> 749,277 +51,152 -> 546,647 +797,959 -> 458,959 +82,156 -> 967,156 +261,624 -> 460,624 +597,53 -> 197,53 +153,507 -> 411,765 +305,717 -> 768,717 +344,954 -> 344,217 +194,432 -> 545,432 +346,46 -> 557,46 +685,599 -> 685,312 +49,719 -> 49,631 +499,668 -> 304,863 +262,405 -> 554,405 +87,64 -> 295,64 +859,675 -> 74,675 +663,776 -> 99,212 +232,189 -> 232,904 +777,276 -> 703,276 +704,492 -> 86,492 +142,736 -> 514,364 +418,611 -> 224,417 +602,571 -> 602,424 +152,603 -> 248,603 +915,673 -> 143,673 +538,32 -> 128,32 +975,885 -> 975,344 +870,511 -> 870,756 +330,798 -> 46,798 +440,195 -> 587,195 +739,237 -> 568,66 +54,838 -> 196,980 +370,556 -> 47,556 +124,575 -> 748,575 +261,283 -> 880,902 +784,91 -> 426,449 +764,670 -> 148,670 +32,51 -> 967,986 +807,906 -> 10,906 +470,488 -> 579,597 +274,649 -> 285,649 +221,540 -> 221,94 +914,957 -> 914,510 +879,825 -> 145,91 +438,833 -> 438,775 +191,844 -> 911,124 +145,763 -> 595,763 +504,81 -> 622,199 +834,206 -> 834,704 +908,308 -> 815,308 +929,567 -> 929,322 +805,50 -> 620,235 +36,409 -> 133,312 +345,375 -> 19,701 +468,948 -> 468,108 +109,547 -> 446,547 +929,916 -> 69,56 +927,857 -> 318,248 +833,948 -> 833,61 +559,787 -> 559,982 +293,825 -> 293,775 +508,744 -> 545,744 +827,713 -> 753,639 +88,775 -> 555,775 +523,812 -> 684,812 +307,142 -> 307,265 +636,40 -> 355,321 +891,875 -> 891,25 +301,423 -> 712,12 +922,187 -> 219,890 +45,447 -> 230,262 +114,568 -> 233,687 +573,398 -> 677,398 +334,101 -> 324,101 +957,277 -> 957,652 +943,834 -> 610,834 +523,632 -> 523,379 +958,361 -> 90,361 +408,824 -> 380,824 +647,314 -> 647,449 +747,83 -> 59,83 +776,104 -> 937,104 +16,984 -> 989,11 +362,581 -> 362,226 +72,962 -> 940,94 +319,877 -> 319,122 +310,206 -> 986,882 +794,877 -> 267,877 +855,58 -> 976,58 +699,971 -> 598,971 +162,556 -> 162,440 +494,859 -> 494,255 +794,210 -> 142,862 +275,510 -> 548,510 +739,592 -> 739,793 +376,985 -> 376,990 +755,264 -> 280,739 +187,34 -> 187,688 +770,827 -> 770,548 +10,68 -> 913,971 +571,427 -> 571,944 +153,211 -> 153,560 +976,972 -> 55,51 +103,611 -> 674,40 +95,972 -> 924,143 +929,94 -> 38,985 +777,330 -> 60,330 +312,430 -> 312,326 +549,433 -> 269,433 +477,267 -> 477,403 +598,375 -> 19,375 +512,799 -> 512,831 +348,700 -> 348,43 +165,97 -> 63,199 +38,835 -> 38,828 +282,334 -> 282,909 +14,891 -> 390,515 +930,657 -> 334,61 +630,341 -> 630,85 +671,464 -> 319,112 +949,340 -> 894,285 +663,916 -> 245,916 +114,395 -> 286,223 +335,804 -> 529,804 +567,338 -> 14,891 +623,705 -> 379,949 +82,864 -> 545,401 +932,128 -> 932,134 +291,294 -> 291,101 +739,765 -> 739,757 +460,94 -> 892,94 +375,673 -> 367,681 +81,831 -> 90,831 +890,402 -> 890,138 +775,547 -> 790,547 +49,927 -> 966,10 +23,116 -> 257,116 +923,75 -> 18,980 +63,986 -> 687,362 +369,844 -> 357,844 +790,188 -> 644,188 +557,282 -> 557,669 +861,173 -> 390,644 +480,529 -> 893,529 +32,960 -> 830,162 +368,725 -> 368,40 +502,600 -> 701,600 +63,977 -> 873,167 +463,518 -> 788,193 +738,406 -> 324,406 +162,931 -> 822,931 +377,487 -> 707,817 +610,319 -> 901,319 +586,658 -> 690,658 +25,288 -> 53,288 +760,602 -> 760,628 +294,62 -> 951,62 +222,773 -> 661,334 +151,483 -> 646,483 +272,852 -> 317,852 +557,906 -> 503,960 +736,445 -> 736,703 +241,376 -> 241,692 +835,41 -> 835,369 +987,743 -> 987,210 +42,700 -> 42,244 +646,136 -> 646,440 +544,751 -> 404,751 +295,651 -> 295,805 +687,878 -> 113,878 +290,142 -> 604,142 +579,920 -> 579,807 +12,985 -> 987,10 +919,940 -> 919,808 +770,143 -> 770,832 +114,76 -> 962,76 +876,882 -> 428,434 +861,139 -> 861,320 +888,59 -> 888,39 +629,823 -> 707,823 +296,598 -> 296,305 +61,54 -> 578,54 +864,58 -> 253,58 +71,861 -> 306,861 +682,181 -> 326,537 +307,418 -> 307,910 +810,251 -> 810,431 +151,836 -> 602,385 +954,987 -> 243,276 +724,272 -> 350,646 +134,295 -> 434,295 +178,235 -> 802,859 +832,688 -> 832,573 +165,334 -> 165,378 +816,26 -> 114,728 +668,192 -> 540,192 +730,341 -> 969,341 +951,169 -> 286,834 +647,115 -> 886,115 +664,288 -> 507,131 +609,362 -> 609,295 +747,479 -> 287,19 +350,967 -> 350,725 +117,383 -> 311,383 +871,124 -> 292,124 +654,271 -> 547,271 +525,773 -> 345,953 +401,670 -> 610,670 +930,196 -> 301,825 +336,37 -> 961,662 +714,212 -> 714,667 +454,848 -> 454,107 +587,390 -> 587,577 +530,437 -> 542,437 +304,229 -> 517,229 +340,571 -> 766,571 +727,941 -> 138,352 +831,325 -> 11,325 +241,294 -> 403,456 +788,658 -> 788,126 +337,360 -> 337,589 +799,402 -> 342,402 +530,820 -> 530,319 +982,27 -> 20,989 +923,936 -> 923,721 +581,395 -> 64,912 +61,509 -> 61,827 +989,580 -> 610,580 +477,592 -> 219,592 +296,775 -> 296,58 +204,12 -> 204,457 +190,171 -> 190,673 +939,200 -> 939,457 +472,282 -> 472,631 +983,331 -> 734,331 +365,609 -> 365,817 +640,698 -> 145,698 +103,618 -> 549,618 +454,319 -> 454,346 +650,815 -> 381,546 +624,603 -> 507,603 +966,445 -> 723,445 +763,129 -> 763,784 +695,145 -> 695,511 +498,84 -> 435,147 +188,716 -> 967,716 +810,446 -> 810,924 +731,483 -> 731,51 +307,783 -> 307,533 +15,956 -> 956,15 +192,210 -> 882,210 +303,173 -> 38,438 +769,952 -> 769,863 +135,781 -> 405,781 +494,436 -> 494,892 +705,394 -> 714,394 +164,37 -> 164,633 +813,232 -> 813,620 +227,906 -> 222,906 +542,432 -> 414,432 +549,858 -> 88,397 +200,101 -> 958,859 +235,565 -> 469,331 +492,871 -> 503,882 +704,398 -> 869,563 +450,736 -> 746,736 +420,706 -> 420,635 +717,493 -> 686,524 +187,554 -> 717,24 +31,851 -> 315,851 +800,230 -> 466,230 +226,324 -> 226,614 +937,927 -> 937,798 +143,26 -> 534,417 +952,344 -> 12,344 +181,361 -> 782,361 +925,906 -> 415,396 +685,944 -> 470,944 +200,627 -> 290,627 +728,285 -> 728,326 +271,864 -> 271,34 +802,558 -> 207,558 +963,26 -> 84,905 +504,60 -> 529,60 +840,292 -> 180,292 +914,272 -> 914,330 +82,107 -> 925,950 +33,245 -> 33,134 +463,663 -> 463,82 +27,305 -> 27,675 +276,894 -> 891,279 +746,325 -> 746,948 +249,657 -> 341,749 +530,848 -> 28,346 +798,617 -> 798,609 +119,767 -> 312,767 +80,18 -> 674,18 +723,374 -> 583,374 +582,985 -> 239,642 +217,765 -> 217,395 +811,159 -> 609,159 +689,896 -> 501,896 +562,881 -> 562,96 +244,621 -> 629,621 +277,379 -> 277,287 +856,153 -> 20,153 +518,228 -> 518,898 +230,789 -> 243,789 +534,335 -> 534,592 +240,790 -> 413,617 +768,615 -> 768,560 +773,101 -> 912,101 +252,571 -> 767,56 +370,595 -> 681,906 +565,176 -> 565,318 +750,465 -> 750,724 +979,130 -> 120,989 +160,153 -> 160,785 +610,222 -> 610,191 +873,124 -> 130,867 +519,593 -> 519,32 +525,947 -> 525,562 +50,292 -> 291,533 +558,927 -> 960,525 +536,694 -> 249,981 +954,896 -> 277,896 +732,202 -> 732,288 +447,989 -> 541,895 +890,754 -> 367,231 +368,89 -> 564,285 +588,100 -> 588,156 +282,313 -> 943,974 +16,792 -> 495,792 +111,591 -> 111,493 +57,713 -> 685,85 +676,632 -> 676,575 +560,708 -> 560,602 +489,288 -> 489,404 +904,515 -> 443,54 +70,977 -> 985,62 +11,119 -> 11,403 +215,859 -> 937,137 +78,469 -> 110,437 +747,605 -> 747,369 +847,598 -> 847,299 +742,695 -> 159,112 +986,370 -> 986,460 +631,900 -> 771,760 +228,406 -> 683,861 +189,639 -> 61,639 +221,650 -> 820,650 +558,569 -> 834,845 +655,533 -> 558,630 +967,921 -> 967,169 +230,308 -> 429,308 +873,762 -> 873,528 +412,151 -> 412,538 +881,587 -> 881,21 +941,45 -> 26,960 +377,126 -> 700,126 diff --git a/2021/05/scratch b/2021/05/scratch new file mode 100644 index 0000000..d3975a7 --- /dev/null +++ b/2021/05/scratch @@ -0,0 +1,15 @@ +525,947 -> 525,562 + +689,896 -> 501,896 +954,896 -> 277,896 + + + +947 * + | +896 *--->*-----+----------*<--------* + | +562 * + + + 277 501 525 689 954 diff --git a/2021/05/segs.tl b/2021/05/segs.tl new file mode 100644 index 0000000..33f06a6 --- /dev/null +++ b/2021/05/segs.tl @@ -0,0 +1,201 @@ +(defun read-segs (name) + (mapcar (do match `@x0,@y0 -> @x1,@y1` @1 + (list (tofloat x0) (tofloat y0) (tofloat x1) (tofloat y1))) + (file-get-lines name))) + +(defun read-int-segs (name) + (mapcar (do match `@x0,@y0 -> @x1,@y1` @1 + (list (toint x0) (toint y0) (toint x1) (toint y1))) + (file-get-lines name))) + +(defun ccw-from (x0 y0 x1 y1 x2 y2) + (let ((dx1 (- x1 x0)) + (dy1 (- y1 y0)) + (dx2 (- x2 x0)) + (dy2 (- y2 y0))) + (> (* dx1 dy2) (* dx2 dy1)))) + +(defun intersect (ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (and (neq (ccw-from ax0 ay0 ax1 ay1 bx0 by0) + (ccw-from ax0 ay0 ax1 ay1 bx1 by1)) + (neq (ccw-from bx0 by0 bx1 by1 ax0 ay0) + (ccw-from bx0 by0 bx1 by1 ax1 ay1)))) + +(defun b-proj-a (ax0 ay0 ax1 ay1 bx by) + (let* ((adx (- ax1 ax0)) + (ady (- ay1 ay0)) + (bdx (- bx ax0)) + (bdy (- by ay0)) + (a*b (+ (* adx bdx) (* ady bdy))) + (a*a (+ (* adx adx) (* ady ady))) + (b/a (/ a*b a*a))) + (list (+ ax0 (* b/a adx)) + (+ ay0 (* b/a ady))))) + +(defun isecpoint (ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (tree-bind (x0 y0) (b-proj-a ax0 ay0 ax1 ay1 bx0 by0) + (tree-bind (x1 y1) (b-proj-a ax0 ay0 ax1 ay1 bx1 by1) + (list (+ x0 (/ (- x1 x0) 2)) + (+ y0 (/ (- y1 y0) 2)))))) + +(defun collinear (ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (and (not (ccw-from ax0 ay0 ax1 ay1 bx0 by0)) + (not (ccw-from ax0 ay0 ax1 ay1 bx1 by1)) + (not (ccw-from bx0 by0 bx1 by1 ax0 ay0)) + (not (ccw-from bx0 by0 bx1 by1 ax1 ay1)) + (and (or (<= ax0 bx0 ax1) (>= ax0 bx0 ax1) + (<= bx0 ax0 bx1) (>= bx0 ax0 bx1))) + (and (or (<= ay0 by0 ay1) (>= ay0 by0 ay1) + (<= by0 ay0 by1) (>= by0 ay0 by1))))) + +(defun dist (x0 y0 x1 y1) + (sqrt (+ (square (- x1 x0)) (square (- y1 y0))))) + +(defun lap-length (ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (let ((a0-between (or (and (<= bx0 ax0 bx1) (<= by0 ay0 by1)) + (and (>= bx0 ax0 bx1) (>= by0 ay0 by1)))) + (a1-between (or (and (<= bx0 ax1 bx1) (<= by0 ay1 by1)) + (and (>= bx0 ax1 bx1) (>= by0 ay1 by1)))) + (b0-between (or (and (<= ax0 bx0 ax1) (<= ay0 by0 ay1)) + (and (>= ax0 bx0 ax1) (>= ay0 by0 ay1)))) + (b1-between (or (and (<= ax0 bx1 ax1) (<= ay0 by1 ay1)) + (and (>= ax0 bx1 ax1) (>= ay0 by1 ay1))))) + (cond + ((and a0-between a1-between) (dist ax0 ay0 ax1 ay1)) + ((and b0-between b1-between) (dist bx0 by0 bx1 by1)) + (a0-between (if b0-between + (dist bx0 by0 ax0 ay0) + (dist bx1 by1 ax0 ay0))) + (t (if b0-between + (dist bx0 by0 ax1 ay1) + (dist bx0 by0 ax1 ay1)))))) + +(defun clip (ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (let ((a0-between (or (and (<= bx0 ax0 bx1) (<= by0 ay0 by1)) + (and (>= bx0 ax0 bx1) (>= by0 ay0 by1)))) + (a1-between (or (and (<= bx0 ax1 bx1) (<= by0 ay1 by1)) + (and (>= bx0 ax1 bx1) (>= by0 ay1 by1)))) + (b0-between (or (and (<= ax0 bx0 ax1) (<= ay0 by0 ay1)) + (and (>= ax0 bx0 ax1) (>= ay0 by0 ay1)))) + (b1-between (or (and (<= ax0 bx1 ax1) (<= ay0 by1 ay1)) + (and (>= ax0 bx1 ax1) (>= ay0 by1 ay1))))) + (assert (or a0-between a1-between b0-between b1-between) + "clip: problem with ~s" (list ax0 ay0 ax1 ay1 bx0 by0 bx1 by1)) + (cond + ((and a0-between a1-between) (list ax0 ay0 ax1 ay1)) + ((and b0-between b1-between) (list bx0 by0 bx1 by1)) + (a0-between (if b0-between + (list bx0 by0 ax0 ay0) + (list bx1 by1 ax0 ay0))) + (t (if b0-between + (list bx0 by0 ax1 ay1) + (list bx0 by0 ax1 ay1)))))) + +(defun unify (ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (let ((a0-between (or (and (<= bx0 ax0 bx1) (<= by0 ay0 by1)) + (and (>= bx0 ax0 bx1) (>= by0 ay0 by1)))) + (a1-between (or (and (<= bx0 ax1 bx1) (<= by0 ay1 by1)) + (and (>= bx0 ax1 bx1) (>= by0 ay1 by1)))) + (b0-between (or (and (<= ax0 bx0 ax1) (<= ay0 by0 ay1)) + (and (>= ax0 bx0 ax1) (>= ay0 by0 ay1)))) + (b1-between (or (and (<= ax0 bx1 ax1) (<= ay0 by1 ay1)) + (and (>= ax0 bx1 ax1) (>= ay0 by1 ay1))))) + (cond + ((and a0-between a1-between) (list bx0 by0 bx1 by1)) + ((and b0-between b1-between) (list ax0 ay0 ax1 ay1)) + (a0-between (if b0-between + (list bx0 by0 ax1 ay1) + (list bx0 by0 ax1 ay1))) + (t (if b0-between + (list bx1 by1 ax0 ay0) + (list bx0 by0 ax0 ay0)))))) + +(defun rectilinear (x0 y0 x1 y1) + (or (= x0 x1) (= y0 y1))) + +(defun point-on-segment (x0 y0 x1 y1 px py) + (and (or (<= x0 px x1) (<= x1 px x0)) + (or (<= y0 py y1) (<= y1 py y0)) + (not (ccw-from x0 y0 x1 y1 px py)) + (not (ccw-from x1 y1 x0 y0 px py)))) + +(defun solve-1 (segs) + (let (isegs points) + (each-match (((@ax0 @ay0 @ax1 @ay1) + (@bx0 @by0 @bx1 @by1)) + (comb segs 2)) + (when (and (rectilinear ax0 ay0 ax1 ay1) + (rectilinear bx0 by0 bx1 by1)) + (cond + ((collinear ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (push (clip ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) isegs)) + ((intersect ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (push (isecpoint ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) points))))) + (prinl ^(len points 0 ,(len points))) + #;(prinl points) + (upd points uniq) + (prinl ^(len points 1 ,(len points))) + #;(prinl points) + (set points (append-matches (@(as p (@px @py)) points) + (block nil + (each-match ((@x0 @y0 @x1 @y1) isegs) + (if (point-on-segment x0 y0 x1 y1 px py) + (return))) + (list p)))) + (prinl ^(len points 2 ,(len points))) + #;(prinl points) + (prinl isegs) + (let ((nl (len isegs)) + (l 0)) + (while (neq nl l) + (let (nsegs pairs (count 0)) + (set l nl) + (each-match ((@(as l0 (@ax0 @ay0 @ax1 @ay1)) + @(as l1 (@bx0 @by0 @bx1 @by1))) + (comb isegs 2)) + (cond + ((collinear ax0 ay0 ax1 ay1 bx0 by0 bx1 by1) + (push (list l0 l1) pairs)))) + (each-match ((@(as l0 (@ax0 @ay0 @ax1 @ay1)) + @(as l1 (@bx0 @by0 @bx1 @by1))) + pairs) + (if (and (member l0 isegs) + (member l1 isegs)) + (upd isegs (opip (remq l0) + (remq l1) + (push (unify ax0 ay0 ax1 ay1 bx0 by0 bx1 by1)))))) + (set nl (len isegs))))) + (prinl isegs) + (prinl (len isegs)) + (+ (len points) + (len isegs) + [sum isegs (lambda-match + (((@x0 @y0 @x1 @y1)) (dist x0 y0 x1 y1)))]))) + +(defun easy-solve-1 (segs) + (let ((ph (hash))) + (each-match ((@x0 @y0 @x1 @y1) segs) + (cond + ((eql x0 x1) + (each ((y (range y0 y1))) + (inc [ph (list x0 y) 0]))) + ((eql y0 y1) + (each ((x (range x0 x1))) + (inc [ph (list x y0) 0]))))) + [count-if (op < 1) ph cdr])) + +(defun easy-solve-2 (segs) + (let ((ph (hash))) + (each-match ((@x0 @y0 @x1 @y1) segs) + (cond + ((eql x0 x1) + (each ((y (range y0 y1))) + (inc [ph (list x0 y) 0]))) + ((eql y0 y1) + (each ((x (range x0 x1))) + (inc [ph (list x y0) 0]))) + ((eql (abs (- x1 x0)) (abs (- y1 y0))) + (each ((x (range x0 x1)) + (y (range y0 y1))) + (inc [ph (list x y) 0]))))) + [count-if (op < 1) ph cdr])) diff --git a/2021/05/testinput b/2021/05/testinput new file mode 100644 index 0000000..b258f68 --- /dev/null +++ b/2021/05/testinput @@ -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 diff --git a/2021/06/input b/2021/06/input new file mode 100644 index 0000000..66ede3c --- /dev/null +++ b/2021/06/input @@ -0,0 +1 @@ +3,5,2,5,4,3,2,2,3,5,2,3,2,2,2,2,3,5,3,5,5,2,2,3,4,2,3,5,5,3,3,5,2,4,5,4,3,5,3,2,5,4,1,1,1,5,1,4,1,4,3,5,2,3,2,2,2,5,2,1,2,2,2,2,3,4,5,2,5,4,1,3,1,5,5,5,3,5,3,1,5,4,2,5,3,3,5,5,5,3,2,2,1,1,3,2,1,2,2,4,3,4,1,3,4,1,2,2,4,1,3,1,4,3,3,1,2,3,1,3,4,1,1,2,5,1,2,1,2,4,1,3,2,1,1,2,4,3,5,1,3,2,1,3,2,3,4,5,5,4,1,3,4,1,2,3,5,2,3,5,2,1,1,5,5,4,4,4,5,3,3,2,5,4,4,1,5,1,5,5,5,2,2,1,2,4,5,1,2,1,4,5,4,2,4,3,2,5,2,2,1,4,3,5,4,2,1,1,5,1,4,5,1,2,5,5,1,4,1,1,4,5,2,5,3,1,4,5,2,1,3,1,3,3,5,5,1,4,1,3,2,2,3,5,4,3,2,5,1,1,1,2,2,5,3,4,2,1,3,2,5,3,2,2,3,5,2,1,4,5,4,4,5,5,3,3,5,4,5,5,4,3,5,3,5,3,1,3,2,2,1,4,4,5,2,2,4,2,1,4 diff --git a/2021/06/sim.tl b/2021/06/sim.tl new file mode 100644 index 0000000..69d9ac2 --- /dev/null +++ b/2021/06/sim.tl @@ -0,0 +1,31 @@ +(defun read-fish (name) + (flow + (file-get-string name) + (tok #/\d+/) + (mapcar toint))) + +(defun sim-naive (input n) + (while (plusp (pdec n)) + (upd input (mappend [iff zerop (ret '(6 8)) [chain pred list]]))) + (len input)) + +(defun sim (input n) + (let ((phase (vector 9 0))) + (each ((i input)) + (inc [phase i])) + (while (plusp (pdec n)) + (rotate [phase 0] [phase 1] [phase 2] + [phase 3] [phase 4] [phase 5] + [phase 6] [phase 7] [phase 8]) + (inc [phase 6] [phase 8])) + (sum phase))) + +(defun sim2 (input n) + (let ((phase (vector 9 0))) + (each ((i input)) + (inc [phase i])) + (while (plusp (pdec n)) + (pset [phase 8] [phase 0] + [phase 0..8] [phase 1..9]) + (inc [phase 6] [phase 8])) + (sum phase))) diff --git a/2021/06/testinput b/2021/06/testinput new file mode 100644 index 0000000..55129f1 --- /dev/null +++ b/2021/06/testinput @@ -0,0 +1 @@ +3,4,3,1,2 diff --git a/2021/07/calc.tl b/2021/07/calc.tl new file mode 100644 index 0000000..b6dac9c --- /dev/null +++ b/2021/07/calc.tl @@ -0,0 +1,22 @@ +(defun read-crab (name) + (flow + (file-get-string name) + (tok #/\d+/) + (mapcar toint))) + +(defun calc (input) + (let* ((mn (find-min input)) + (mx (find-max input)) + (rg (range mn mx)) + (cost (op sum input (op abs (- @1 @@1))))) + [cost (find-min rg : cost)])) + +(defun calc2 (input) + (let* ((mn (find-min input)) + (mx (find-max input)) + (rg (range mn mx)) + (cost (op sum input (opip (- @@1) abs (* @1 (succ @1)) (trunc @1 2)) + #;(lambda (x) + (let ((n (abs (- x @1)))) + (trunc (* n (succ n)) 2)))))) + [cost (find-min rg : cost)])) diff --git a/2021/07/input b/2021/07/input new file mode 100644 index 0000000..4ac01fd --- /dev/null +++ b/2021/07/input @@ -0,0 +1 @@ +1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,601,578,981,315,530,525,671,1501,616,214,724,1247,543,58,183,282,242,54,90,130,1788,360,1719,710,1165,1476,29,744,164,293,1360,274,47,119,16,387,134,547,72,48,77,416,863,39,65,144,500,678,430,160,1689,550,753,1478,480,56,583,85,206,93,335,990,174,276,1119,52,308,470,563,387,897,21,85,720,983,178,383,134,299,722,57,391,489,768,232,646,1312,1316,31,57,927,176,531,421,1162,369,934,7,172,237,340,169,261,1371,1351,1268,72,58,375,1570,1238,55,513,403,1462,141,263,419,1316,852,251,39,358,209,204,439,150,1667,344,205,1299,1226,992,967,536,1160,1503,1154,1323,486,1079,329,823,506,1252,387,28,69,649,296,233,62,219,344,464,1284,291,234,47,949,1126,935,1367,1450,1431,379,344,478,731,648,77,184,927,211,262,728,1093,381,140,239,332,1436,78,665,1486,601,1444,364,1057,753,488,127,1001,350,1016,357,638,309,40,333,136,655,779,821,414,275,140,149,185,445,1169,476,196,907,1570,193,161,43,204,1489,1125,1024,101,17,592,1378,338,1625,3,269,1568,254,803,25,776,109,52,291,1595,255,739,34,768,378,632,4,181,373,162,562,74,85,160,16,47,38,266,1610,9,7,1398,358,287,450,188,1390,37,98,80,685,1645,50,55,16,542,20,443,848,49,808,76,233,69,110,471,73,408,638,89,861,280,1062,75,314,808,237,96,401,57,48,1306,115,1164,1533,5,1032,1314,66,630,96,496,116,1558,438,13,182,1360,802,101,327,370,444,335,812,430,900,1259,1117,318,118,433,501,401,101,582,27,454,981,776,14,26,163,384,1652,87,788,474,588,155,845,207,33,200,622,840,1360,432,11,525,86,296,481,200,529,95,924,431,40,846,220,285,14,66,755,111,647,643,1201,81,483,555,125,426,1499,29,115,48,39,92,316,434,217,218,116,9,33,496,358,1106,736,1181,1153,117,20,1719,1113,1620,26,581,407,114,1559,6,1918,964,909,340,630,817,473,111,1485,434,262,1702,651,11,182,1043,1904,633,336,252,677,1238,637,1008,82,327,171,185,19,141,395,1209,53,798,836,1378,598,262,298,265,287,85,21,249,848,162,89,1050,108,34,41,25,291,918,28,1234,139,351,867,146,79,995,1173,635,24,31,81,214,1114,155,1256,159,206,586,426,452,650,1653,47,42,264,240,500,864,893,1308,1249,853,286,62,592,102,77,1082,91,120,625,211,978,319,655,200,152,86,396,52,308,1479,38,41,53,179,648,216,41,641,659,1556,226,1421,291,33,1461,1095,529,309,1100,314,1695,505,1200,150,946,53,124,139,1506,52,33,463,613,33,1264,386,678,563,564,318,273,912,60,31,150,1321,133,1333,302,1243,49,421,808,1399,555,195,611,268,39,1302,1154,92,664,117,92,124,332,561,1436,865,198,71,271,909,40,1185,664,251,422,306,122,814,158,1676,122,217,312,952,845,104,572,1796,392,651,176,714,44,757,111,56,489,333,738,369,304,1239,105,297,277,674,213,938,2,681,336,171,1252,166,88,489,273,260,565,231,319,1085,650,211,510,12,511,325,46,107,980,1136,16,95,308,935,514,469,20,44,209,345,467,1310,500,75,594,166,199,741,193,28,52,106,1437,366,575,1200,609,678,534,573,723,325,8,386,268,690,321,186,375,2,104,657,1341,601,175,0,745,146,508,180,426,811,7,215,300,86,25,372,233,900,276,1625,808,1941,510,234,813,131,334,58,783,992,236,244,174,609,1581,1767,204,187,208,1340,347,803,146,299,140,142,339,60,118,300,809,276,413,267,946,77,154,466,425,193,187,852,674,2,17,1006,1007,166,195,137,97,41,407,65,1072,20,789,311,1227,20,132,1536,995,194,506,635,115,1500,529,93,72,950,208,944,1177,476,207,1228,5,974,226,225,290,690,581,218,401,49,361,1408,242,254,24,313,441,635,126,513,994,299,1722,52,1123,44,1332,628,534,789,298,692,45,596,1583,77,15,38,1293,1181,1498,772,148,297,49,692,87,594,49,148,170,54,1079,7,468,847,336,421,34,1108,406,892,689,245,298,85,1187,1142,286,310,207,34,660,549,39,1172,97,1,750,47,0,77,1632,135,54,18,22,1292,230,1031,11,225,820,461,1208,108,1443,274,1134,41,287,166,274,1032,585,1491,75,549,1231,1314,443,212,395,386,698,58,644,395,81,905,366,233,716,656,799,643,1011,173,790,360,269,930,13,606,488,387,1206,51 diff --git a/2021/07/testinput b/2021/07/testinput new file mode 100644 index 0000000..18bd32a --- /dev/null +++ b/2021/07/testinput @@ -0,0 +1 @@ +16,1,2,0,4,2,7,1,2,14 diff --git a/2021/08/input b/2021/08/input new file mode 100644 index 0000000..ce56799 --- /dev/null +++ b/2021/08/input @@ -0,0 +1,200 @@ +fgcae ebafc cabdef eg abecfg abgfed feg gafdc bceg ebgcadf | defagbc faecg cfdag gecb +eagd cad fgadbc aefdcg dcebfg fcegd cbeaf ad dbgfeca defca | cfdeg gdcabf fcgde afgced +gfdeca aeb eb fbdag eafdc adfbe cefdab bdaegcf efbc ecadgb | eb dbafe eab faecd +facbdge efdg gcafd daegc caegb aecfdb ade ed gafbdc dgfeac | de abcdef faedcg dfgca +dcaegbf bc dcgeab cbgad cebg cdfaeb fbadg acdge cefdga cdb | gdcfae gbec gdace cgadfe +ceagfbd fbaeg fadge fbegad abgecf dafcg ed edab ged dfcbeg | gebfa de gbafec ed +acedbf adfbg cgafedb geac cgb befcgd bcgaf bfgace cg bfeac | bcdfeg fecba cafgeb bgdfa +egadc cea ac agbcedf cgab bgcade fbcaed eadfbg fegdc ebdag | fdecabg fcged cdbage efgdab +cbfge gdc cdea efdag dc cdfeg gfbcad gcdeaf cdeagbf egfadb | dfcge egcfd fcdbag dc +gaedb fbced gcdbef cge gc decgb dcbgfea cgfb cgdfea fbcade | fdegbac fecbd ecg degba +geaf bcfedg agbcd bfeagd dgfbe cbdaef beacdfg abe agebd ea | fbecdg geaf gebfad adgbc +bed afgebd adecf bafgedc dbca cfegb becdf fabdce bd gcfdea | gfdaeb ebfgad dbefc cbda +gacfebd ag bedfca agbfde egfcab dfga degab fbade bag bdecg | dgaf abcfed agb bfecag +afebg afdeg gcbe acebdf cfbage cafeb gab decgabf bg gcfdba | gb caebf abgef acfebd +efdab fabdgce gcbfa eg gacbfe beg ecag beafg dfabcg bgecfd | bge fgdcbe gcfdba ebdaf +aecbd bdagef gd bfega aefgcbd gfde gfdcab dbg edgba febagc | dg dagfbc dgfe eabdgf +gdfba egfacbd gdcefa baf gcba fdagcb dgfac ab dcfeba ebgdf | dcfag bfa gafcd cbag +afbe bdagc cedfb defcab ebfdgac gfedbc cbfad af adgcfe adf | dafbc dfbac fdcegb gadcb +fcgedb ca fdcage cagdbef ceab acedfb fdbce cafdb cda afgbd | ac dcafb efgdac ebcfda +fbad gbcda dcefgb cfeadg dgbcaf bcafdeg ad gcabe adc dfbcg | gbcdef bcfdg cgbfd bfadgc +afcgeb bedag bdecafg agb bedfga fdagce bg bgfd dfgea cdabe | badge cagdfe efdag afegbd +gfed dcaef ge bafdce daceg acebfg cefadg egc ecdabfg gacdb | bcgad bcegaf agecd degcafb +deacb adcge ab acb fbdce faedbgc fgadec gabd deabgc ecbfag | dfbec ab cbagfe bcfgae +gcabfde ecf cbdeg bacgf fedg ecfgb gfedcb fcaedb cebdag fe | dbcegf bcgdfe gfde defg +daefb bfg gedafb fabge dbafec cfega bdga cgbdfe gb gbacedf | aecfg bcedaf begdcf dgba +bagce bf bdacfeg efbg fcb cefab gbfadc cafebg ecdfa bacdge | fegb cegba bagce efbg +becag cfeg cefgbad fbace gfeacb acdegb bef ef adbcf fdabge | ef bdfac cbegad gbeac +egb afcbe fbaeg eabgfdc gcab gb gfdea fgbecd bcdafe gafbec | fcdgeb edcgbfa gbe fgeba +dga caebd ecdag cegfd abdfce dafbge ecbgda bcdgefa ga agbc | afdbec ecfdab gdaec gad +fc gbdefc cfe ebdaf fcbeda gbafde edacg bfcdgae dacef cabf | decgfba cdbefg cf ecdabf +febgd dafgbc caed cgd ceadgf fbecga dcgfe aegfc gbedfca cd | dgfeb fgced dcafebg agdfce +ecdafgb bgade bgd fabd gbaef bd egadbf ceadg cfbgea dgbfec | edagc bdage bfda dbgae +cgeba aefgcd dfceagb dc ced facbed cdfb dbaec adfeb fgedba | fbdea bgcae efbda fcdeag +caegbf dcfga afcedgb afgdcb fcedag ab edbcg dbfa gdcab abg | bag cbdag agb ab +gadfecb befc fgdbea cf fedagc fac bcgfa agbfe adgcb feagcb | gbcda cgbad bcgfa cf +dae aefcb dgabec dacfg afebdc ebfd afecgb aedcf fbcagde ed | ecabfgd bedf bcadef egdacfb +abcf fcega fdgce fegbda eafdcgb ac gabecd gbfae beagfc eca | edbgca edbfga cae gface +bgedcf afcdbg ag gcbaef fcedgab afgdb cfgbd befda acdg agf | fdbga ceadbfg egfbac fag +bad edafc bdeg abcgde ecafgbd gfadcb bgaec db edcba geafcb | cdafe fdcabg cdfageb dbge +geb bgcf agfcde gb befag gfbcae defab gabdec eacfg gabecfd | afbedgc gceabf abgef egacf +fdeac acg cfegda cbeadf fegdbca ag acefg adge bfdgca gbcfe | gecdaf efgca cgbafd cfgeb +begdf bdfgc ebcf adfcg cdegbf dgeafb cbg cb bfeagdc gbdcea | acgedb fagdbe bgfde dfgac +afcgdb aedc bedgf egafcd afdge gecaf fcgebda gda da ceabfg | gedbf gacfe adg agdef +bdeafg acgebdf dgcfa fa cafe dgfbc gaf edagfc cgabde agedc | fadbge bdgfcea dgcefa cgeda +gacfbde defag cbgef gbca efadcb afcbeg cgbdfe ba eba gefab | fegab abe ebfcgd fbgae +gfbdec fbcade cabdegf ebdg bfd dcfgb cadgf gebcf db fcabge | eacdgfb bdge ebdg ecafdb +egcfba fdcae fcdaeb gcfdae fabd ba cdeab fcdbaeg eba decbg | cabed facbed cbade dfcea +agdfe acfdeg fcdbeg dgf gdaec df cadf ceagbfd abgfe gbdaec | bgcdef abfge gbefcd df +dgebf afgdb bfa fcbade af dcafgb agcf gcbda dabgecf gadecb | dbcga abcdge fadgbce eagcbd +dbcga bea egacdf dageb be efbd abgfce gadfe fcbegad aebfdg | eba be bdage bedga +gcbd egbdafc fgc fbgedc gc aedbfg cefgb fedbg cfaegd efabc | bface egfbc bgdacfe gc +fdgae dc ced gbcd gbcefd decfba becfg ecfabg cgfde gbcadfe | edbcfg cd cafgbe cdegbf +geadcf efg gadef fg fecad acbgfe dagecbf dcgf gadbe afbdce | edafcg bgcfade gfdc abedg +edcba ecgdb aedbcf aebf dabfc fdacge badgfc ae ead gfcbade | gcebdaf degbc ebfadc efdcba +caedbg dbgec dcbf ecgdbf cgdef dgf bgaedcf egacf afebgd fd | cdfbeg ecfbgda gcbfed cbgedf +bdag acdeb ecgdb egbcfa fcdbega gb dbecag cbdafe ebg gdcef | bedgc abdfcge efagcb cdgef +bfade bfdga dfbgec cagbfd dfgacbe gba gacf ag gdcbf abgedc | cfag abdcge ebafd abefd +agcdef bcfda bdgca aebdfcg eagdc gb dbg gbea cedagb bfgdec | dfabgec eafdgc acdge gdecab +ebacdfg cgbfad egdbc bdgfa daef bae gabed febadg ae gacbef | fagdb daebgf fgdab bea +dcgbf cbedf degc bgc fcgdbea fbadg cfdgbe gc efacgb fdbace | edfcb cfeabg cg edbacf +bcdagfe dfacb cbfdge bgcdf fdgeac acd agbd acbef da dcgfba | cbgdf dgab ad gbdcaf +edgfbca gbe be ceba bdaecg gefcd dbagc egbadf dcegb dfgabc | gcfde gfceabd gfbcad eagfdb +dfcbg fcdga efgb gecbfd gecbda dfbgaec bedfc dgb bfadce bg | dbcgf bfge dacgf dfgcbe +cga ebdgaf bfdag cbgfe bfadgc gbfeadc ac cagfb cdba cgadef | bfdag agedcf aegcbfd gcfab +gcead gfdbec cbdge gabfce eb dfgcba ecfdgab befd dgcbf ebg | cdgae fbdegc bcdge gcdfb +da ebgfda fcdeagb acgbfe gedba dbegc agdecf dae bafeg bfda | gdafec fegba edfbga aed +fbagec gdfba bcg gebcfd cbafg bcdfgea ebac cefag faedcg bc | gfbac baegcfd fabegc dgeacbf +dfbeag fabdg fdbe abdeg eb dcega gcefba cfdbag dgcfbae geb | cgbafd bdef dcage eb +abdcfe gba dagf cagbefd fdbea bfega ag dafbge dcbeag gfceb | afbcde ecgfb dfbega bdgeca +dg dge gdbc cfdae bcgae cbdage abgfde cfedagb cdgae eacgbf | eabgc bgeac bcdg cagbe +bfd dgaeb gcabde fd bfgce dgfa dbefg gadbfce dbafge fabcde | edfcba efbcg df bdf +gcbfd agbecd fedc edcbfg fdb eadfbg bcfag fd gedcb gbacdef | fgbac bdagfec gfbdaec aegbdc +cgbdfe ce acedg adcfeg bcfegad fcea ceg abdeg afbdcg fcgda | ecg aefdcg dacge ec +egbdfca efacb agcdbe cbaed bdafgc dfaecg debg bd bda agced | geadbc efbca gabfdc bd +edcfb bfgecd ecabfd eca abcd fgeab fedcag abfedgc ac bfeca | bgfae eca cdgfeb bfaec +cadef cebdga ebd bacdfe dagfec dbfa fcebg ecbgfad db fdecb | befcd acgdeb abdf dbfa +gbfecda bfd cdagb fbdacg fgdbec gbaf cbadf aefdc eadcgb bf | adcgb dfbca agbf dafcb +abedg acbgf fd gaefcb cagbdef cdaf dcbfeg bdagf dgcbfa bfd | gbadcef df fadgb gabcdf +fbgadc dbcfg dcega cgdfe cfedbg caefgb ef gef gfaebcd fedb | fcedg febd gbcdfa cdgfab +bg adgb fcaedbg cgfda fcbae bcg dfacge fgcdba decgfb bcagf | cgafb dbfcage bdgcfe dbga +ed afbdg acefb aecbfg cfdabeg gedfcb fcdabe ecda def ebdfa | gbafd gedfcb dfegcb dfgba +gcdfae efgdb abdfcg fde gdabf dbcegfa fedgab efab ef ebdcg | eafb gbfda gacedf cbdge +edagfc gfaecbd bgced cbegfd cb gefdc badgfc bdc efbc adegb | dgbec cegafd dcbgef dgecb +gedcab beg eg cafgb fbegc gdfe bdgfec gabcedf bdafce bcdfe | gcefb afcbed ge gdfe +fdbagc cdgefab edacf ceba ea cfbaed ecfdg abfegd adfbc eda | ea beadfc abcgdef ecdgf +fbc gfbacd fecda cbdfa dbgf dceabg gbcdfea efbgac cdabg bf | gbdf agbced gaedbc gfdb +aegcb bfgecd fbegad fcagdbe dfgce fcbd gdeacf fb bgf bgfce | bgafedc gcdaef dgfcbe eadgcf +def dbce agdfeb ed fdgbcea dgcfb aegfc dfgbac gecfd cdfgbe | cdfegb ed cdgfaeb ebdc +ecbfad afdb eagbfc caebgdf edfcb dgfec cgdbae bd bcafe bdc | bfacegd fbdcae dbc bgfdcea +dfgba eg cfbead gde bfedgc dceab cabfdge gdbae aecg aedgcb | egd adebg gde debcfa +cadfb egfb afgbc adbegc ecgadf ecagb fga ecfgab bgacfde fg | afcbg cgfba gf dacbge +cegbf dec efcdg facdge dfae dcbafge ed adgfc fdbagc cgaebd | dce gbcfe afcdgbe dcgabf +cfabe fa eabgfc cgaf fba gfbce dcfbge edbgcfa efbadg acebd | cfebga bfa fedcagb abfce +acdfb dbagf afcebgd beag afgedb gfdea gbd fgdcbe gb cdeagf | dafge gafed gfacde gb +gdfeac dfgce ebfadcg edagc dacf baegdc fd gdf egcfb dabgef | degfbac cfdeg daebgf cdeagb +fcgabe ebcd ecfdg dabcgf gfecabd cfd ebcfg dc bcfegd adefg | agedf cd bcefg dc +cbaeg bcfea fb feb gfaceb gdfbec dagbec gfab deacf bgcaedf | acbfge bf afgb efb +egdba cadgfbe efadbg cg begc bfgdca caegd abcegd dcg acdfe | fbegcad bceg gcd cdgebaf +agbcd dafcgb cfdg ceadb fdgeba eafbcg gfdab gbc bgdcafe cg | gfadcbe fbagd decba gc +gfbec adgc dge egdcfa abgfde abgdfce dg eacfdb fdaec gdfce | fecgd gd fgcbe acdef +fdbceg bfedc af fegcad cbdag daf efab dabcef fbeadgc cbfad | fcabd cbfad gcfdbe gadbc +ebgac fabdeg bedca cg aegdcfb geacbf ceg efgba facg fbedcg | gecdfb aebfg fagc ceg +eagb dcgeb ba abd cbeagd cdgafb fecbdga fgedcb dacfe dacbe | bdfeacg cadgbf bgedfc fcdae +dbac cfgae cbfgde ba bga gcfbad dcfebga gcdbf feagbd cgbaf | cgafb fagbdc dcfbg afgebd +adbgfe fgb egdafc cbafd dfegbc edgafbc egfcd cegb gfcdb gb | bg fdacge efcadg egdfba +agfbe cgaefdb gbdf edagb afg cdgafe gfedab fg egcdba fabec | fcbdega fag agf agf +cae edabfc cdfega ca cfba gadeb fdecb ecagfbd cbgdef acdeb | facdeb fgecad bfadce efcgbad +facb dbfec dceabf efgcd cb aecfbgd dgfbae eafdb ebdagc bcd | bfedc cdegab cbdfe adefb +fecbga badgc dga bfgadec dg geacb cgedba dfebag gcde fcabd | decg gda baceg gd +gecbd gcbdfea cbfg bg bge egbcdf dcbef beafdc cdeag bfgeda | agcde dceag gfabde beg +gefba gacfbe facdeg cg cgab gfc efbdcag cfgeb cefbd afegbd | gfc afbge dafegb aebcgf +egd aebfgd gefc ge gedbfca bdcfe dfcegb gecdb edbacf cdbag | dacbg edcfbg bcdfe ge +df ebdga gcdefa cfbd bgdfa afgcb dfeagbc bfacgd fgd facebg | gaebd gecbaf fdcb dfbag +fag cegfdab cadebg dabcgf abefg eafc ecafgb ebacg fbdge fa | ebfag dbcgfae gbecad fdbgac +gecbd gefa gfc fabdcg bfaecd ecgafbd fg befgc efabc gecbfa | gfae gcf egbdafc edgbc +bfgae fcebag fdbe fd fedag adgfbc fdbgea ecagd agcbfed fad | fgabe dfeb ebfd gefba +ecdgfb afge bdage ebcda eg abdgef fgadb gabcfd dge bcdagef | gdebfa eg agfbdec afeg +dbc acefd cegadbf fbcde afcb fdcaeg bc acdbge febdac debfg | ceafd caefd gfbaced dcb +fecgb fgacd gdcefba de gbafce febd gecfd edc fecdbg ecbgda | becdfg ed becgad gcdeba +agfdbe fbac bcd edacfb bgecfd cb cdeba cfgdeab acged edfab | cb dbc adbce bdfae +dgacef bdfa ecgbf ab fegba dgafe efdbgca abg acebdg afbdge | gefda ecgafd ecfbg begcad +gbfcea bgfa afdebc aegdcb af bgcdfea bgeac gecdf afc fgace | bfgecad fca afc abfg +cfe dgcfe fdagcb gebdc egfa gbcdefa dcebfa fe agdfc fgaedc | dfgac fe fce fcdbega +fecgab gcbdef cbaefgd dfgbe dgcfe eb bfe dbfga edbc acfegd | fbdeg fdgeca agefbc egcfd +aecd bac dfacbe cafdb ac gefcab gfcdbe fcbde gbdaf cbdegaf | gcdbefa fbgcae ecad fagecb +eagbf cagedf geafdbc fdgbce adefb aecfd adcb deb faecbd bd | ebd deabf fadcge cdagfe +gadefcb bfcga eadcgb egdbfc deag ecg edabc acedbf eg abgce | gdea bagce gce gce +agcfe bec gecab gbeda facb dbfgec fcegab gfacde gfdaceb cb | cb cefdgb cadefgb bc +fdgb df egabcf fegda cedga fegab efdbac def cgdefba gafedb | facdbe bafceg agedf fdebga +fdaecg dbcafg abfgec dc caefg cedg aecfd abdgfce eadbf fcd | cgefab gbfacd fbegac fabecg +dfecabg bcfeag gdafce dagbfc cdefb dca gafbc dbag da bcadf | dca bagfce cbfda cdagbf +dabfgec febadg gbcdae gfbe adebf ef cabdf edfgca ebgda eaf | gfacbed abgced egdfca egfb +cfdea dc fdagebc fegcbd agdc gcfade fcabe cfd efdgba gfead | bdfcge agdc dgefa cfd +gbfca febadcg bc bdegcf beca begaf gabedf cgfbae cgfad cbg | bcg dcaefgb dfgceb afebdg +cg cgbf bedcg fcagde adefbcg efdgcb ebacd cgd edbfg egdafb | cfgedb bgcf acegdf cfgb +bfad adcgbe faceg fagbdc df afdgc efcbdag dfbegc gfd badcg | gfd abgcd fgd abfd +bcadgf cgdfb adgcb gf gafc dcfeabg bdagce dgf dfbega cebdf | adcbfg gfca fdcbe gfac +daebf fcabgde bgdcef gab ga edbcga afcg ebfga aefbgc egbcf | ebcfg ebcgfa fcgebd agcf +gedab fg afgecb cfgd feg cfabed befdc fgdcbe gdceafb befgd | ecafbg ecfbd febdc gf +gcbadf ce gfcdb fec feabd gbecdf dbcfage febdc agcdfe egbc | bafed gcbe gefcbd egcb +cbdfg gbcafd feb gaecf gcbfe gfbdae be fcgabde bdgcef becd | abgedf gdfebc aedgfb fbe +edacgbf fbdae edgac bg gab bagdec dagfce fadbgc cebg bgdea | aedgb bg cebg adcge +bda gbfea gedcab gfbceda bgdfa bfcdg febcdg bagcfd cfad da | dbecag bgfdc gdbfa facd +ceabd dabfe acgde bc fbca cgbfde febgda dfecagb ebafdc bdc | cbdae dbfea fgdceb gbfedc +acg fadbgce cfgdeb dbgce efdca ag dbga cagbef egacd cdgbea | gdecabf gcbfea ecbdg gac +dfgacb ged egfdab efcgbda gcefbd debga ebadc ge aegf gfdab | cdfgab cdafgb bfcgda ge +gdbeca bcfde eafg cefbgad dgafcb ge degfb adefbg dgfba bge | bdfeg begdf ebfadg eabdfgc +cfbdgae gbaec bagfcd gfcba dcaeg bacfeg dbeacf bec efgb eb | ceb egcab cagfb dgcae +fdcagb gdaecb fcadg bcdgaef gd dfcea gbcaf aecgfb cgd dgbf | gfadc gfdb badgfc gbfca +bcafed defgcab fgcb cfbae cagde agebfc gbcae gbe gadefb gb | bg gfcaeb bg aedgc +bcfadeg gbfd eacfbd gdafe afebg bafegd geafcd gebca fb bfa | agdefc eafbdg fgead gedaf +fcgeabd dgeaf ebgfad gceafb geadc ac aec ebcdg cafd adgefc | gbfadec egcbd acfd dgabef +eac fbdgec ea eadb cbaeg agfdecb eafdgc dcgbe bcfga adcbeg | aec abde eac ea +cedb gcadbe ed edgfbac fbega abdge gacdb fdacgb dcefag aed | cdagb gbcafd gdefac gedafc +cae agfbec ae begcd feab fadgbc ecfadg ecabg cdgbefa cabfg | ecgba afcgb efba dgeafc +fecgabd badf efadg abedfg fea fdgceb fedgb aebfgc af gdcae | ebfgca fae fea af +bgedac gbfae dcbefg acbf fb gaedf cagedbf aebgc gebfca fgb | aedgf fdgea bgfae bfdgeac +bagcfe eadcb gb facegdb bgc fdcag efbcad beadgc bgadc ebgd | gbc fbcage becad gbfcae +cagde gbca dcgbea gc efcad dbgfea dfgecb caedbfg adgbe cdg | gc egdfbc bcga cg +efgcbd aebgcd dfe eadfb abged abdcefg bacfd ef bdfaeg faeg | fgae cgdaeb adefb afcbd +cgbfea gcbda gefdcb eadf febag bdf fd febgad fadbegc bgadf | gebcfd fgdbea dfb dbf +dg cdgfe gecfad dfbce bgefda fgd eafcg efcbag dgac bcdagfe | afdebg gfd aecgf gfcea +edfga cgefda gcdbe fbae ab egdabf cfgbda deabg bad adefcgb | ebadg agdeb fbae gbdae +gbdcfa gbade ebgac ecbfa adfgbec badecf bgc gcef fbgace gc | gc fcge gacefdb ebgca +acefgd ebgaf egfda egcd bgfaecd dgcfa ed abcefd efd abdgcf | def ebgaf fed befcda +fecag cag cfagbd agfcbde fabec eabg fdcge cgbfea fadebc ag | cfgbda dfgbeca efdcg dfgcaeb +bgecfda ecdag dgfcbe bdgac adbgf afgdbe bfac gdcabf cbd bc | bc acbgefd fagcdb fcba +ba efacg cfbgde cfdbg bacgf bgfdea abf bcad cfbeadg bgcfad | bcdgef fdgaeb ab cagfe +cbdaf bafdgc eacbd fd dcf fcabg bcdfeg bedgcfa dgfa agbecf | dfga bgfac df agdf +edcabf cadbf bgfdcea bgcfad bgcde dfg fg bdfgc cgadfe abfg | adfecg gfbcd acgdfeb cbgdaf +badgfc dg bagcde bceda dbcfea beafg debag adg fcbadeg edgc | gebda dcagbf dceba egfab +edcf dacfbg dbcefag fbd df bdegfc ebdagc bgfea begcd bfedg | dgebc cbgde dgfbac bdf +bdcfg acegfb acebfd fdcag egadcf da daf cgeaf edag bafcegd | gdcaf fgaec bafdec fdaecb +cagefd fde gdfba fcgaedb abefd ef dafbeg ebfg afcbgd ebdca | egdbfa bceda dfabg bdace +fcgb gcdae bg gfadeb cbfegd fcabed bdg gcdbe fdcbe adbefcg | dgb gfbdec befdc gfbc +fabde bgfde bgecda cedgb gf cabfdeg ebfdgc fgbeac fcdg gfb | fgbde efdgb edgbc afedb +ebacf cedfab fde eabfd fd baecgf bagde agdebfc dfcb egfadc | ebfdgac acdegf abdefc ebfad +gdcb cd cfgae cgbedf fbegd efgdc fadcbe gfeacdb dce dfagbe | gbcd cde gacfe gefdbc +geb afedgb bfegca bgade eg dgef gadbc eafdb afebdcg fcbead | cagbd defcba dbafec geafcb +fgbdc gbfade gba gefa dbafg cbadge bfgecda ga edbafc dfabe | afbdeg dgfba bgdfa dcfgb +agef badce ef febad cabfdg gdfab cbgeafd egfbdc defgba fbe | abefd geaf gafdbe ebcad +gd gad bfdg gecba fedabcg fcgeda aedfbc adebf agbdfe dgeab | ebcdaf agd gcfbdae egacb +cedbfa ba cgbfa abf dfegac cafeg gabe befgca ebdfcag cbfdg | fab aegcf faecbd fdcebga +daefg febdga aegfdbc efgdca eafb bge eb agbdec febgd gbdfc | gbcfd edbfg egb bacegd +fbdecg bdafec cfaeb gedac def dceaf abfd fd gfecba gfdaecb | ebfac bdfa gbcdef fd +fcbga cbdfeag bafgce fdacg dc fcd fcgbad fadge efcdgb cdab | gaefcb bafegcd acdb abcgf +ecgabd acgdf abge ae bcfead fgdaceb ead daegc bcdefg gcbed | egba gaecd cgadbe gdbce +aegfbc gf afebdc agebdfc ebcdf feg dcefg bdfg dcgea bgedcf | edbfcg fdgb bdgafce febgcd +dcg bcdefa dbfceg fdeacg acbeg bfeagcd cfdae dg dfag agdec | dfcgea dg egdca edagc +agcfeb fagbed fdbceg bag gebfd afgd agbfcde acbed ag badeg | cbdea fcedgb gfebac abcegf +adbegfc fgdace cadge afcg ebdfca ebgad eac bfgdce cgefd ca | acged fcedg ebagd dgacefb +gfeadb gfeab bcfa agebcfd aebgfc fecgbd efc fc gadec egcfa | fgbace fc debgcf afgceb +bacg ab cfgbd bfadge acfed fgdecb agedcbf fcabgd bfa dbafc | gfdcb cbga abcg afecbdg +ge beagc cfgabd bgaced bgcda fbadgec age ecdagf egbd fcbae | aeg gedbac cadfeg fbgcda +dgbafe abfdgec gdf fd agebcf gadec dfcgba befd edfga aebfg | abcgefd dagec dfg df +edfcga bcegd baeg cbgdae agdbc gce acgdebf eg gfadbc cefbd | dcbeg bgedc cedbg edcbg +adfbe dg cagef dfgb gdbeca aefdg gda edcbaf fdgeba gdecbfa | cdabef eafbd bafcegd dg +cd edcbfg dbage fcaebdg facd bgcfea afbedc afbec dbc adecb | adegb bcefag abegd cbgedf +gdcbf da ecgbfda adc adgb bagcfd dfbcea egfac dfbceg gdacf | gdba cfdbg adbfec fcaeg +bcg bc gdcbae dbca abfgde gdeba ebfacdg egcba faceg dgfbce | geadb badecg ecbfgd baecg diff --git a/2021/08/one.tl b/2021/08/one.tl new file mode 100644 index 0000000..13ed27d --- /dev/null +++ b/2021/08/one.tl @@ -0,0 +1,7 @@ +(defun solve (: (name "input")) + (flow + (file-get-lines name) + (mapcar (do match `@a | @b` @1 b)) + (mapcar (opip (spl " ") (mapcar len))) + (flatten) + (count-if (op meql @1 2 4 3 7)))) diff --git a/2021/08/two.tl b/2021/08/two.tl new file mode 100644 index 0000000..f436779 --- /dev/null +++ b/2021/08/two.tl @@ -0,0 +1,42 @@ +(defstruct entry () + digs + value) + +(defun read-input (: (name "input")) + (flet ((str-to-syms (str) + (flow str + (spl " ") + (mapcar (opip (tuples 1) + (mapcar intern-fb)))))) + (flow + (file-get-lines name) + (mapcar (do match `@a | @b` @1 + (new entry + digs (str-to-syms a) + value (str-to-syms b))))))) + +(defun match-dig (syms) + (match-case syms + ((a b c e f g) 0) + ((c f) 1) + ((a c d e g) 2) + ((a c d f g) 3) + ((b c d f) 4) + ((a b d f g) 5) + ((a b d e f g) 6) + ((a c f) 7) + ((a b c d e f g) 8) + ((a b c d f g) 9))) + +(defmeth entry solve (e) + (each ((p (perm '(a b c d e f g)))) + (let* ((map (relate '(a b c d e f g) p)) + (interp (mapcar (opip (mapcar map) sort) e.digs)) + (digs (remq nil [mapcar match-dig interp]))) + (if (eql 10 (len digs)) + (return (flow e.value + (mapcar (opip (mapcar map) sort match-dig)) + (poly 10))))))) + +(defun solve (input) + (sum input .(solve))) diff --git a/2021/09/code.tl b/2021/09/code.tl new file mode 100644 index 0000000..a0e223e --- /dev/null +++ b/2021/09/code.tl @@ -0,0 +1,59 @@ +(defstruct board () + w h a + + (:method lambda (me x y) + (if (or (minusp x) + (minusp y) + (<= me.w x) + (<= me.h y)) + #\9 + [[me.a y] x])) + + (:method lambda-set (me x y nv) + (set [[me.a y] x] nv))) + +(defun read-input (: (name "input")) + (flow (file-get-lines name) + vec-list + (new board + h (len @1) + w (len (first @1)) + a @1))) + +;;----------------------------------------------------------------------------- + +(defun solve-one (bo) + (sum-each-prod ((y 0..bo.h) + (x 0..bo.w)) + (let ((c [bo x y]) + (u [bo x (pred y)]) + (d [bo x (succ y)]) + (l [bo (pred x) y]) + (r [bo (succ x) y])) + (if (and (< c u) (< c d) (< c l) (< c r)) + (+ 1 (chr-digit c)) + 0)))) + +;;----------------------------------------------------------------------------- + +(defmeth board basin-size (bo x y) + (caseq [bo x y] + ((#\9 #\space) 0) + (t (set [bo x y] #\space) + (+ 1 + bo.(basin-size x (pred y)) + bo.(basin-size x (succ y)) + bo.(basin-size (pred x) y) + bo.(basin-size (succ x) y))))) + +(defun solve-two (bo) + (flow + (build + (each-prod ((y 0..bo.h) + (x 0..bo.w)) + (let* ((bs bo.(basin-size x y))) + (if (plusp bs) + (add bs))))) + sort + (nthlast 3) + prod)) diff --git a/2021/09/input b/2021/09/input new file mode 100644 index 0000000..d304456 --- /dev/null +++ b/2021/09/input @@ -0,0 +1,100 @@ +6543656799989432399987654342234567896545789323988432145689954545656789543434567987757565678995432345 +7432345678978921987896543210145679987326891019876321034567893234345878952129679876543454599989501234 +6543456789567899876789654321234798765434989198765432123458932101234567891098998987432323989878912449 +7854587893458998765678965536545679878545678949898743234567893234569678932987997654321019878767893598 +8967678932347893234589876545656989987656799656987654345698954345998999549876789765432198765456789987 +9878989543456789355999989678789897698967999769898767456789765659896789698765698976745297672347895656 +9989697659567998767899896989898789549879878998769876567899876798785678987664567897856398561238954345 +9894598798979899878998765499989678934998767897654987878999987899654569876573456989878987432367890166 +8743459987898789989999876349878567923987656798543498989989698998743498765432345678989876543456921278 +7652369896987678999898765498765456899832545987659569999976549987656987674321256989094998654567896389 +8993498765879567898789978987654345789721234598798978998765434798767896543210127892123989767879965456 +9889987654568456789678999896543236679654345679987899987654323679878987654321234989239879878989999967 +8778998543212347994599898765432124568965458789876796598795434567989398765432345678998767989998988898 +7659989654301498923989779896545235678976567898765689999886745699999499976843476799989854599987676789 +6745878967499989219876567987656776789987678987654577899987876789898989987654569899878943459876545679 +5434767898988978909765456798789887893498989876543656989998997898787679998765678999765452565989934989 +4321456989976567898954345999899998912349998765432345678999989989656567899876789988674341234598747899 +4210345678965454967895499888999999323456999998321234567898978978943456789987899876543210346987656789 +4321256789654323459999988767778987654567899987432346798987569765732369895498987999694321234598987890 +7652345678964012378998767654667898775678959876543456789876458954321298954329476988989432349679198991 +6543456799743233456789656543456789897899345989664567898985347895630987893214345977678943458989019789 +7654567897654356967898743212349891998921296799875678987897656789732396789101299867567894567894125678 +8765678989865767898987655623458910989890989892986789876798789899849985678912987756456789878943234567 +9876789878976788989198768784767899678789878901297898765689899932998764567923496544367999989654356789 +9987898767987899771019899895878998547679967892998954564567999891239965678994985431256789998765467897 +8598989658998987654123999976989987434567898999879543423456789789349876789989876542345678969879879986 +7439878946779998993234998989399896523456789898765432014567895678959989899879876543467789654989989345 +6598765234568969874349877691289765434567895679876743125778934589998993998765987654578996543499995459 +7989654145989459765698765430178998765678934567987654236799547678987892989654698765678965432989897598 +9978543036789398976798764321467999876789323456798885349899956789876799878543459876789999569878789987 +8765432123678967899899875432349899987893212347899976459999897899765678965432347989899878998765678996 +9878543954589656789949876545498789998954393958999876598798799997654569896547656799989767897654567895 +6999999895694345678932987676987678999995989899996987997678678998543456797656769898765656789423478954 +5439889789789234568991998989976567999989876789987999876543588999654567898767878987654545678912589895 +4329768678990123456789769899865456789878965678999864998654567898785678949878999876543434567893456789 +5498656567943234567895456798954347898767834567894212398765678959897899034999989997432123456789587894 +6987543456794589678999347987643234589656725989992101239876789543998979124989878989543014567897698943 +9876432369895678989998958998754395678943419898989232345987895432129568939878767678952165678999789432 +9987571456996989599997899129876786789532109787678949456798954321012367898965654589643236789999894321 +9898682367987897459876789098987897899676219654567898987899875432123456987654323456954347999989943210 +8789793478999976598765699987698998998754398743234767898987986593245787898645212367896788999878799321 +5679876567898987989854789996549679349765987432101256999656987989356898999432103798987899698765678932 +4345987878987899879765678989698543239879876545212345896543299878967939998543224678998996549876989548 +1239998989766798769876789878987832125989989854345456789951098767898920987654335699889975433987897656 +0198999997654987654987898969876543034799998765456587897892197656789439899876445789779894321098998769 +9987789898769898743298997654987969125678959876568698956789986543678998767986556899669789432999239898 +8766676789898765210129789743499898945789545987678979645678975212567897656597678998455678949890124987 +7655445678987654321335678954598787896995434598789765435889854501456898747498789987324567998789239876 +8943234567898765765456789767679656897894323359899987576798763212367895432329899876212678987678998765 +7632123456789896876569899898796545679932101248999998697899874363678976791012998765423799876567987654 +6543012378899987987678943939987656989653212357898989789901965654567897989134569876534899985459876543 +5432143567899899798989432123498777899654543467997679893212398765679999878965678988945678954349965632 +6743254578998767679996593234989898978965654578986567994343999878789998769896899599656789965498754321 +7654345679899656567897989345978939567896795989985456789959878999895987658789943498787899876569964320 +8765456789789543458999878959865323456789989899872347899898767891964596545678954679898954987699875431 +9876568895678932369898767898754212387899878789765478999765656792943997656789765678999123498789976842 +7987679954569893498787856789543201238998765678976569998654534989899898767899878989891012349997987653 +6598989963456789987696545678964912469899854587897678959432129876789769878999989998789124598756798969 +5439398894569899976543234569899893456798763456789989645944098965678954989998999899678935987645439878 +4321256797678998797432123498788789767987654567897896539895987654789943299987987656567896799732323989 +5410147889789789654321034987674678989998765879976989698789999769897893129996898543458999898721012996 +4321235678997698765453239876543799999989896789895467987678987989956789098989987632569998987632129864 +5452345678996559876574398983412989989876969898789329876569996492345689987678998543678987896543298765 +6543458789589434987865987632109878978965459987698910987678954321456789876567898654567896789654989876 +7655678993478949998978996543298767769896998654567891298799765210127896987878949987689965678969976987 +8768789012367898769989679984987658658789876743456932349898954323456965498989234598798954567898765498 +9989894323456987654399498765698743234678965432348946569977899436767899569993195679897893456789864329 +1099965454597898765458999876987652123489654321237898698765678945698948999854989799976789667898763212 +2149876585989909876567890989876541014569793210126789789854567896789236789769878989765678998987652103 +3234997679878919987888941296985432123678989321235678999843458999892125678998769878954586789698743214 +4349998798767898998999432345796554254689678932548789698756567898943234589989658769892345896549654325 +5498989997656567789998743659987674345679569893656896569869878997654445679876547658789456789439795456 +6987679886545456678999654798798765456893456789867975479878989549876596798765432745678998899598989578 +9832598767431345578999865987659876569932345678998964345989297632987678999874321234789769978997878989 +8763459854320123456789878997543989678921236789999651234599199754998789989985210165678954567976567992 +7654678975431234567898989986432395989433445699876540123498988969879899879876543278789323459876447893 +8765899987632345678987899876521234596554656789998431235987877898767998965987654349893212567987236789 +9896789798785456789876789987760235987675878992987542949876456789656987854398765998989543456798545699 +1997899659876569896545679999854345699876989991998659898765345678949876543239899887678954567987656789 +0129998943987689965634568999875456789989799989899798789894256789434987432123988776567895678998787891 +1998987892199897654323459999876567899995678976789987678989369892129876543459879655456789789899898990 +9897656789012976543212367987987678969876989765679876567678978991019989654598768542345899898785979789 +8765545678923987654393479876598989654987898754598765456567899689198698769987654431236789987654565678 +7654234789434798789989598765459896543298989885987654323456789567987549878996543210345678998743234569 +8985345678995679899978999654345789932129678976798778954767893459876434989898654321456789019859395698 +9876656889789989999867999963234567891012568987899989965678932598765323496789765632567892129998989987 +7998767995695399998758789892123678932343489998923499876889745699893212345779898743678989298987678976 +6779878954789299876545679791014567893654678999895901987899656987932101234567969898789678997876567895 +5665989543998989997732345692123456789765789998789892398998769876543242347698954989894569986765456964 +4734897699867879876521034789234877899878999989656789989769878987654343456789765678943598765654345893 +3123698987656767965432123678945989998989239876545679876758989998965654567899876789432459654321256789 +9234569976545659876543234567896799987690198765434398965347899899998765698945987898521345987210145698 +8945798765432345998754345678987899876541987654323287893256798789879877899436898986410129876541234567 +7899899984321656789765458789098936987632998795410126789143987654567989987547999874323498765432356678 +6798999873210127899876569999129325698549879987323245891012998543456799998958998765454599876543467789 +5487897654321678999987678998939214569698969876564346789199875432345678989869989877665678987654568993 +4376798965434567898798789987898923998797654989675678999987654321234789673979873989876989998777679212 +3235789876565678987659897896567939869986543298786789998999976532345895432399762094989997899888789349 +2123678987676789876543956989457898752597632129897899876543987543456954321987654123499876799999895458 +1014569998788899985432345678998976543498743234998932987612398754567896410198965234598765789212976567 diff --git a/2021/10/code.tl b/2021/10/code.tl new file mode 100644 index 0000000..4e020cb --- /dev/null +++ b/2021/10/code.tl @@ -0,0 +1,35 @@ +(defun corrupt (str) + (if-match (@pos . @len) (search-str-tree str '("(]" "(}" "(>" + "[)" "[}" "[>" + "{)" "{]" "{>" + "<)" "<]" "<}")) + pos)) + +(defun reduxe (str) + (while-match (@pos . @len) (search-str-tree str '("()" "[]" "{}" "<>")) + (del [str pos..(ssucc pos)])) + str) + +(defun solve-part-one (: (name "input")) + (with-stream (s (open-file name)) + (let ((score 0)) + (whilet ((line (get-line s))) + (let ((rline (reduxe line))) + (iflet ((pos (corrupt rline))) + (inc score + (ecaseq [rline (succ pos)] + (#\) 3) + (#\] 57) + (#\} 1197) + (#\> 25137)))))) + score))) + +(defun solve-part-two (: (name "input")) + (flow + (file-get-lines name) + (mapcar reduxe) + (remove-if [orf corrupt empty]) + (mapcar (opip (mapcar (relate "([{<" #(1 2 3 4))) + (rpoly 5))) + (sort) + [callf ref use [chain len (lop trunc 2)]])) diff --git a/2021/10/input b/2021/10/input new file mode 100644 index 0000000..3095eaa --- /dev/null +++ b/2021/10/input @@ -0,0 +1,102 @@ +((((<([<{(<(<[<><>>[{}()]>{{()[]}<[][]>}){{(()<>)(<>())}}>{<(([]())({}<>))[<{}()>{{}{}}]>}){{< +<{<[([{<{{<{[({}())[<>()]]([{}()]{{}[]})}{([[]]<{}[]>){<<>[]><<>[]>}}>}}{[{[{[[]{}]<[][]>>{[< +[([<[(({(<[<[(<><>)([]())][((){})<<>[]>]>{([<>()]<<>[]>)({{}<>})}][{(<()()>{<><>}){[<>[]][< +[<[[[{{<{{((<[[][]][[]<>]><({}[])>){{[<>()]{{}{}}}<(()())[<>[]]}}){[(({}{}))](<(<>)>{(<>())(<>[])})}}<<[<<<>< +{{{[{[[{{{{{<<{}<>>{{}[]}>[{<>()}<<>{}>]}<{<<>{}>{[]<>}}({<>()}<(){}>)>}[[(([]<>)<{}()>)]{{[<>{}](<><>)}{([ +{{<[([<[({(<{([][])[{}{}]>([{}<>](<><>))><[[<>{}]]<{<><>}{{}()}>>)<[[([]{})]([<>[]]({}[]))]({( +({(([[<<([(([([]())<{}<>>](<()[]>[[]{}])){{{()[]}<<><>>}})<{((<><>)[()[]]]}>])><{<(([{()[]}])[{[{}<>]({ +{[<{(([{[([(<[(){}]<()[]>>[<{}<>>[[]<>]>)]{{({[]}({}()))<<{}<>>{<>{}}>}[({<>[]}[[]<>])([{}[]](<>[]))]}) +[({<({([<{<<({()()}<[]{}>)<<<>()>[<>()])>[(<{}<>>[[]()])<(()()){[]<>}>]>}[([<<{}<>>({}{})>[<[]<>><<>() +[([(<[([<[([[((){})<()[]>]([{}[]](<>()))]){<[<<>()>(<>{})][[<><>]]>({([][]){<>[]}}[{{}}<()()>])} +{{[[(([{{((<{[{}[]][{}()]}{((){})<()()>}>(<[{}{}]{()<>}>(<{}()>(()()))))){[[[<{}[]><[]<>>][[{}[]]{ +[{(<{<[<(<{({[()[]]([]<>)}[[<>()]{(){}}])}({{<{}<>><{}()>}{([]())[()<>]}}[(((){})<<>[]>)])><([[<() +[{<[<{<(({<<{{{}<>}}{[[]()]}>>}[((<[<>][[]<>]>))(({[()<>]<<>()>}<{[][]}<[][]>>))>))>}><[<<<([{{([][])({}<>) +<{([({[<{{{<(<[]()>[()<>])({<><>}[{}])}}<[(<[]<>>((){})){({}[])(<><>)}]<[[<>[]]<{}()>]>>}{[<<([ +<[{[[[{<{[<({[[]{}]{<>]}[[[]{}]<[]<>>])>]}{{{({<<>{}>(<><>)}[<{}[]>]){([[][]](<>{}))}}{<[(()())(<>( +(<{(<[({<(<((<(){}>[{}<>])<{(){}}({}[])>)<{<{}[]>{()[]}}([()<>]<<>[]>)>){<<<{}()><{}[]>>{{[][]}} +[((((<[(([[<{{()[]}{<>()}}{<[]{}>{<>[]}}>[[{<>{}}([]{})]]][([<()<>><{}{}>]<<[]()>{{}()}>)]](<{[[ +<(({<{[(([<[{(<>)<<>{}>}[(<>{}){{}<>}]]>(((([][])(<>{}))))](([{{<>()}(()[])}{<<>>}][([{}{}] +[{({[[[[<{(<[{()}<[]<>>]{([])}>[(<()<>>({}<>))[({})]]){<<[[]]{<>{}}>{({}{})[<>()]}><{{()<>}({}[]) +[[([[{(((<{(({(){}}[[]{}])[{{}()}[{}()]])[<<{}[]>((){})>]}>{<<[<(){}>](<[]<>>{{}<>})>>}))[{{(({[<><>][ +{({{[{{<<<<<((<>())<[]<>>)<<()<>>({}[])>>>(<{[[]{}]{<>[]}}(<()<>>{[]<>})>({{[][]}([]())}{({}{})[[] +(((<(([<[[{<{[[]<>][[]<>]}>{<<<>[]>>([[]()][{}()])}}]<{<{(()<>)[<>()>}[[{}[]]]>[<[<>[]]([] +{[<[<[[<[[<([{{}{}}<[]()>](<{}<>>(()())))<[([]<>){[]<>}]<[<>{}]<[]{}>>>>[([([])[[]{}]]{<{}<>><[]< +<({<[<{<[<{[(<{}()>)[[[][]]<<>{}>]]{[[()()]<[]<>>][<[]()>{{}[]}]}}[({<{}<>>})<[{{}()}{()<>}]{<[]<>>( +({<[<<{<[[<{(<{}()><(){}>)<<[][]>{{}{}}>}[<[{}<>][<>[]]>({()()}<[][]>)]>]}({(<(<<>[]>[<>()])>< +[({((({[<{<{{[<>{}]({}{})}}><<({()[]}{(){}})([[][]]<<>[]>)>{<{()}(<>)>}>}><{<(<<{}>(()[])>) +<{<([<{{[(<({<{}[]><[][]>}<{(){}}<[]>>)<<({}{})>[{(){}}<[]()>]>>{<{{[]<>)[[]()]}{(<>[])[()<>]}>[ +[<<{(<[{[{<{<[(){}]><{<>}<[]()>>}{<[<>{}](<>>>}>[[<{()()}[()[]]>{[{}()]<{}[]>}]]}]}]>{{<[<[<<{()[]}[[]()]> +<(<{<[[{<<((<(<>[])(<>{})><[[][]]({}[])>))>(<{<<<>[]>{{}[]}>[({}<>)[()<>]]}>)>}]]>}{{(<<<[ +<[((([<{({({[({}<>}({}{})]<(()())[<>()]>}{{<()[]>}{<<>()>(<>{})}})[<[({}())(<>[])]<{{}()}>> +[{(<[<((<(({<([]())({}[])>([<>()]{[][]})}){<[([]())({}[])]<<<>()>>>})>{<{<([[]{}][[]()])<(()<>)(<>{})>>}{<{{ +<{[[{({[{[<{(([]<>)<(){}>)<<<><>>[[]<>]>}>{({{()[]}(()[])}<[[]()]>){[([]<>)<[]{}>]}}](<<{[(){}]{<>}}{([]<>)( +<{(<<[<[[<[[[{()[]}[<>{}]](<<>{}><[][]>)]{(([]){[][]})<<()<>>>}]>[<[({(){}]){<{}{}>([][])}]>(({[<>[] +<{[<<({[(<({([()][{}()])}([{{}{}}([]<>)]{{{}}<{}()>})){<{{{}}(()[])}([[]<>]{()[]})><<(<>[] +{({[{[(<<[<{[<<>()>[[]<>>](<<>()>[<>()])}<<[()[]]<<>{}>>{{(){}}[[][]]}>>]>>[(({({([]{})<<>{}>}<{()[]}{[]{}} +([(({[{<{{[<{<{}{}>(<>{})}>([<{}[]><<><>>]{(()<>){<><>}})]}[([<[()[]]{<><>}><{[]}{{}[])>]([({}<>)<()<>>])) +{<<<[([(<<<{<{{}[]}{<>()}><<{}()><(){}>>}>[<<[<><>]<()()>><<(){}>{[]<>}>)(<{(){}}({}{})>{[ +(({({[<[(([[(({}[]){<>()})]]<([([]())<{}[]>]){{{{}[]}{<>()}}([[][]](<>{}))}>)[<[{<{}()>{{}<>}}]<< +{{(({{<((<<({[(){}]<[]()>}(<{}()>[<>()]))[{{{}<>}[<>()]}[{[]}{()()}]]>][(<<<[]<>>{{}()}>(<{}{}>{<>{ +({([{<{{{[{({{[]()}<[]{}>})[{<<>()>{[]}}<({}{})({}<>)>]}<{[[[]<>][{}()]][[()<>]([]<>)]}({[<>[]]<{}<>>}< +[[(<[[({<[{({<{}()>[()[]]}{{[]()}{[][]}})[(({}<>)<<><>>)[([]<>)<{}[]>]]}]>>[{<<(<[[]<>](()[])>[<{}><[]()> +(<<<<[{<{({<(<{}<>>)>{({[]{}}<<>{}>)<[{}<>]<[]()>>}}){{{{([]<>){(){}}}[{[]<>}[[]{})]}[({(){} +({[{{[{[[<([[<{}()>[[][]]]{((){}){()<>}}](([{}[]][[][]])[([]())]))>]]{<<<<([{}[]])<([])[{}{} +({(((({{{[[[[{<><>}]<[<><>][(){}]>]{{(<>()){<>[]}}{<()<>>{<>}}}]]}}<[<<((<{}<>><<>[]>){<<><>>{() +{{<<{{[<<[[<[<{}>[{}<>]]<<<><>>([]())>>(<(<>())(<>{})>(({}{})(<><>)))]<{{{[]{}}[<>{}]}(<(){}>[()()] +[<(<<{(([{{(((()()){<>()}){[[]()]})((<{}()>[<><>])[({}[])([]<>)])}{([(<>[])<{}<>>]{[()()][{}()]}){[{<>()}<<> +(<{(<<{[({{([[[]<>][[][]]][<<>()>[[][]]])}[<<([]())<()()>>{[{}()]<[]()>}><({{}[]}{<>()})>]})[{[[([{}]<{ +<<[[(((({<({{([][]){<>()}}}<{(()())<{}()>}{[[][]]<<>()>}>)>})[{{<{[{<><>}[(){}]]((()[])(<><>))}>([< +<([<{<{{[[[{<{{}<>}<{}]>({<>{}}[{}<>])}(((<>())<[]()>)((()<>){{}[]}))]<{[[<>][<>{}]][([]())]}([[()<>]{( +{<((<[[{{([<[[()[]]]<{[]{}}{{}}>>(<(()<>)<[]<>>>[<<>()>[{}<>]])]){([[<[]{}>([]())][{()<>}]]<{< +((([[<(<<(<({{()[]}{[][]}}{<[]()>[{}()]})[(<<>()>([]<>))<[<>{}]>]>)<<[<[[]<>]>{(()[]){()<>}}]{( +(<({<{<{[([{{<<>{}>(()[])}}[(({}())([][]))[{{}{}}([]<>)]]](<([[]{}]([]{}))([<><>](()<>))>{[({}{})[()()]][ +{<{{{{{(<{((({{}}[[][]]){([]{}>})<{{()()}[{}<>]}([(){}])>)<<([<>[]]<<>>)[(()<>)([])]><{<()<>>}(<<>< +{{<[{([{{<{([<[]<>>[<>{}]][({}()><<>()>])[<[()[]](()())><[[]]<[]()>>]}{[([<>[]])[<[]{}>]]{{(<><>){{}<>}}( +[(<({<[{<({[[{[]<>}[[][]]]<{[]()}<[]()>>]<[[[][]]{[]<>}][<[]<>>{[]()}]>}[<<(<>{})[{}{}]>[{{}()}[()()]]><[( +<([[<(({<{[{{<()[]><{}()>}{{{}<>}}}([{{}[]}<{}<>>]{<[]<>>({}[])})]}>((([{<[]<>>{<>[])}(<<>[] +({{<[[([{<{{<[<>{}](()<>)><(()())>}[[<{}[]><<>()}]<{()<>}[()()]>]}>{<<([<>()]([]{}))((<>())[[][]])> +([((([[[{{<((<<><>>{[]})<(<><>)<()<>>>){([[]{}][[][]])<<{}<>>{{}<>}>}>{<<[(){}][()()]>[<[]()>< +[<<[[({<<[[<<<()<>>[()[]]><(()())>>(((()[])[(){}])((<>[]){{}[]>))]<<{[[]()][()]}>{(<{}<>>(<><>))<[<>()][ +{{{[([(({{{(([{}[]](()<>))({{}{}})){[({}())(<>[])]}}{<(([][])[<>()])([(){}][{}[]])>[[[[]()]]({<>()}<<>>)]} +{<(<(([<[<<[[({}[])<<><>>]]({<[]()>}({[]()}<[]()>))><<(((){})(<>[]))>({{<>[]}({}<>)}{<{}()>(()())})>>([<{{ +[<{[[<[({{{<{{[]{}}<[]{}>}{<<><>>}>}[{[([][])<{}()>]({[]<>}[()()])}[([{}[]][[]<>])]]}}<<{[([{}( +{[([(<{{{([{<[<><>]<<>{}>>[<{}[]>[[]<>]]}])<({[<[][]><[]<>>][<<><>><{}()>]})>}(<{<[(()[])<() +{((((<{[[[{([(()[])[<>()]]){[{{}()}]}}{{{({}[]){[][]}}[<[]()>]}}]]{[[<({<><>}(<>[]))[({}{})<()()>]>]{{[ +[(({[[<<{<[[(({}{}){{}{}}>[[[][]]<{}<>>]][{{<>()}{[][]}}]]>[[[<<{}[]>>[[<>[]][<>{}]]]{{{{}( +[([[[[{((<([{[{}{}]([]())}{[()()][{}<>]}])<({{{}{}}<()()>}<([]{})[(){}]>)<({{}{}}<<>[]>)<[<><>][(){}]>>>>[[ +[{{<[{<((([{{<[][]>{<>[]}}({<><>}<<><>>)}<<<{}{}>{[]{}}>{[[]<>]({})}>][<<{{}}(<>())>{{[][]}<[]>}> +[(([({<(<{[{<{<>{}}><[()()]<()[]>>}{((()())<<><>>)[<{}<>>[<>()]]}]}{{{(<{}{}><<>[]>){{{}}[(){}]}}}{[<{[]{}}>{ +{[[{<[(<<[({({{}{}}[{}<>])[(<>{})<<><>>]}(([{}{}](()()))(<[]>[<>[]])))<({<[]()>}[[<><>]<() +<[({({<[((<[<({}<>)({}())>]>[({{[]}<{}()>})((<[][]>((){}))[<(){}><()()>])])([[([{}{}]<(){}>)](<<{}[]>{{}<>}>) +<<<[<{[[<{[<<([]<>}[{}{}]>>{[(()()){()<>}][<<>{}>{{}{}}]}][[<[[]<>]{<>}><{[]<>}{{}{}}>]<[{() +([({{[({{{({<[[]]<{}[]>>}{{<[]()]<<><>>}{[()<>]([]())}}){{[<<><>><<>{}>]<(<><>)([]{})>}}}( +{[[[({{({[((<[[])(<>{})>{[[]<>]<()>})[[<[]<>>[()()]][{[]<>}<<>[]>]])[<{<{}{}>([]())}{[<>{}]}>]]}[((< +[<(<<<{{((<<({[]{}}([]{})><({}{})>><({<>{}}<()[]>)({[]()}[{}()])>>(([[()[]]<<>[]>](<<>()>({}<>)))<<([ +{[[{{<<[[[[[([()()}(<>[]))]((<<><>>[[]{}])(<{}[]>[{}()]))]{<{{{}<>}}({<>()}{()()})>{{<{}()><{}<>>}}}]]<({< +<<<[[{(<{({([{<><>}<[][]>]<([]())[{}]>)})<<[<{[]()}({}{})>](<{{}[]}[()[]]>(<[]<>><<>()>)))>} +([([((([(<({<[[]<>][()()]>})[[<<<>><<>[]>>({()()}([][]))][<({}[])<<>[]>>{{{}()}{[]{}}}]]><<[<{(){ +{[([{{<{{[{{{<<>{}>}}<[(())(<>{})]{({}<>)[{}[]>}>}{<([[]()]([][]))[[<>[]]<()[]>]>}]({{{[[]{}]{{}()}}}}([[ +{[<[(<<<[<{([(<>[])<{}()>]{[[]{}]<[]<>>})}>]{{[(<{<><>}[{}()]>{[[]{}][{}{}]}){[([]<>)({}())]{{(){}}({ +((({<{<[[[({<[[]()]{()()}><[<>()][{}[]]>}<(<{}[]>)((<><>)<{}{}>)>)]]{((<<[{}{}][[]()]>(([]<>)[[]{}])><[{[ +{<[<<([<<<{([{<>[]}[()[]]]([{}<>]<[]<>>))<[{<>[]}[{}]]>}[[<[<><>](<>{})>{[()<>)[{}()]}](<((){})([]<>)>)]> +{[((<[<((<<<{{{}<>}(<>[])}({<><>}(<>{}))>[[<(){}>((){})]((()[]){<>()})]>[<{[[]{}][{}()]}({(){}}<{} +[{[<{<(([[([(<[]()>((){}))[([]{})[<>{}]]]{<{{}()}(<>{})>})<{(<{}{}>((){}))<{<>[]}<<>()>>}>]({<([{}<>]{<>( +<{(<([<<{([<{([]{})<[]()>}<{[][]}({}[])>>{(<<>{}>){[()[]]<()()>}}]<[<(<>())><{()()}[()<>]>]>){<{[<(){}>< +(<([([<{<{[<(({}[])((){}))[[{}()](<>())]>][[{[[]()]<()()>]]<<{[]()}>{[{}<>]<[]()>}>]}<<([{{}<>}<() +[({(({[[[[({{[{}{}]}{(()())[<>[]]}}<{<<>()>(<>[])}(([]){<>{}})>)<<{{[]}[<>()]}{{<>[]}<[]()>})>]]]]})[<[ +<((([[{({(<[<{{}<>>[[]()]><<[][]>[{}()]>][<<{}[]><{}<>>>{[{}()]{<>{}}}]><[{<(){}>{()()}}<(<>{ +[{<{(<{[((<{<{{}[]}({}{})>{({}[])[<>[]]}}{({[]()}){[{}()]<()>}}><<([[]]{<><>}){[[]()](<>{})}>{(<(){}>{[] +<<([{(<<(([{[{<><>}<{}<>>][[()<>]]}([(()[])[[]()]}<<<>{}>{(){}}>)])[(<<{()()}><[()[]]{<>()}>><(([]{}) +[(<([<{<{{((<((){})<[]{}>>({()[]}({}<>))))}([<[(<>())[{}[]]]((<>[])[{}[]])>[[[(){}]{<>{}}]]])}[{({(<()()){{} +{({<(<(<{{(({{<>[]}{<>[]}}[{{}}<<>>]))<<[<()[]><()[]>]<({}{})<<>[]>>>{[[[]())<[]()>]}>}{{{(<[]<>>< +{[{{[(<[[[({[{[]()}[[]]]<<<>[]><()()>>})][[(([<>{}]{{}()}){<{}<>>{[]<>}})[{({}<>)}]]<<{(<><>)<{}()>}<(<>())<< +<{<{{[<[<{<(([[]{}])[[{}{}]{()[]}])<<{()()}{()<>)>>>}<[<[[{}{}][()[]]]<<[]()>(<>[])>>[(([]) +(([{([<<{{((({()()}[()<>])({<><>}))<<{[][]}[{}()]>{([]{})}>)}}(<<{(<[]()>{[]()})((()()){<>< +[[{<{{{{<(<{{{()[]}{{}[]}}}><<<<{}[]>{{}()}><[{}<>](()[])>>{{({}()><(){}>}<{[]()}[{}]>}>)>[[[{[[{}<>]<()()>][ +[(<<{[{([{[[[{(){}}]<[[][]][<>[]]>]<[<()[]>(()<>)]<<[]()>{[]<>}>>]<<{<{}{}>{{}<>}}{<<><>>[{}<>]}>[ +<[{[({[[[[([([[]<>]<<>{}>)(<{}[]>[<><>])]{[[[]<>}{<><>}]{(()())[()[]]}}){<(<()[]><{}{}>)>{((<><>)[<><>]){{<> +{([((<{[<({{(<[]>({}{})]{[<>{}]<{}()>}}{([<>{}]<(){}>)[[<>{}](())]}})>[{{<[<<>[]>({}[])]<<{}{}>{ +[<<{([{{{([(<[<>[]][()<>]>(<[]()><<>[]>))(((()()){{}()})<<<>{}>[()<>]>)][{({[]{}}(<><>))[{(){}]]}{<([]<>) +{[<(([[[{{[{<(<><>)<<>{}>>}]{<{<<><>>}>{[{[]()}[<><>]]([()()][()()])}}}<[{(<()<>>{{}<>})}]{{[<()>{{}[]}]{{{} +[<[{({{{[<[({<<>{}>{{}{}}})<((<>{}))[{(){}}]>]><((<{[]()}>[([][])]))[[(<()()><{}{}>)[[{}<>]<<>{}}]]{[[<><> +([{<(([(((<{({()[]}{[]<>})[{[]{}}]}>(<{<()[]>}(([]{})[[]])>)){{{({{}()})(<<>()><[]<>>)}<[{[]{}}]<(()[]>([]( diff --git a/2021/10/testinput b/2021/10/testinput new file mode 100644 index 0000000..b1518d9 --- /dev/null +++ b/2021/10/testinput @@ -0,0 +1,10 @@ +[({(<(())[]>[[{[]{<()<>> +[(()[<>])]({[<{<<[]>>( +{([(<{}[<>[]}>{[]{[(<()> +(((({<>}<{<{<>}{[]{[]{} +[[<[([]))<([[{}[[()]]] +[{[{({}]{}}([{[{{{}}([] +{<[[]]>}<{[{[{[]{()[[[] +[<(<(<(<{}))><([]([]() +<{([([[(<>()){}]>(<<{{ +<{([{{}}[<[[[<>{}]]]>[]] diff --git a/2021/11/code.tl b/2021/11/code.tl new file mode 100644 index 0000000..9dc724b --- /dev/null +++ b/2021/11/code.tl @@ -0,0 +1,78 @@ +(defstruct board () + w h a s + + (:postinit (bo) + (set bo.s (* bo.w bo.h))) + + (:method count-flashes (bo) + (sum bo.a (op countql #\0))) + + (:method all-flash (bo) + (eql bo.s bo.(count-flashes))) + + (:method lambda (me x y) + (if (or (minusp x) + (minusp y) + (<= me.w x) + (<= me.h y)) + #\0 + [[me.a y] x])) + + (:method lambda-set (me x y nv) + (unless (or (minusp x) + (minusp y) + (<= me.w x) + (<= me.h y)) + (set [[me.a y] x] nv)))) + +(defmacro forxy (x y bo . body) + ^(each-prod ((,y 0..(qref ,bo h)) + (,x 0..(qref ,bo w))) + ,*body)) + +(defmacro incnz (place) + (with-gensyms (p) + ^(placelet ((,p (read-once ,place))) + (if (eql #\0 ,p) #\0 (inc ,p))))) + +(defmacro mincnz (. places) + ^(progn ,*(mapcar (ret ^(incnz ,@1)) places))) + +(defun read-board-file (: (name "input")) + (flow (file-get-lines name) + vec-list + (new board + h (len @1) + w (len (first @1)) + a @1))) + +(defmeth board step (bo) + (forxy x y bo + (inc [bo x y])) + (let ((flashed t)) + (while flashed + (zap flashed) + (forxy x y bo + (when (> [bo x y] #\9) + (set flashed t + [bo x y] #\0) + (let ((x- (pred x)) (x+ (succ x)) + (y- (pred y)) (y+ (succ y))) + ;; "multi increment, from non-zero" + (mincnz [bo x- y-] [bo x y-] [bo x+ y-] + [bo x- y] [bo x+ y] + [bo x- y+] [bo x y+] [bo x+ y+])))))) + bo) + +(defun solve-part-one (: (name "input")) + (let ((bo (read-board-file name)) + (tf 0)) + (dotimes (i 100 tf) + (inc tf bo.(step).(count-flashes))))) + +(defun solve-part-two (: (name "input")) + (for ((bo (read-board-file name)) + (i 0)) + ((not bo.(all-flash)) i) + (bo.(step) + (inc i)))) diff --git a/2021/11/input b/2021/11/input new file mode 100644 index 0000000..497e9f0 --- /dev/null +++ b/2021/11/input @@ -0,0 +1,10 @@ +8258741254 +3335286211 +8468661311 +6164578353 +2138414553 +1785385447 +3441133751 +3586862837 +7568272878 +6833643144 diff --git a/2021/11/testinput b/2021/11/testinput new file mode 100644 index 0000000..03743f6 --- /dev/null +++ b/2021/11/testinput @@ -0,0 +1,10 @@ +5483143223 +2745854711 +5264556173 +6141336146 +6357385478 +4167524645 +2176841721 +6882881134 +4846848554 +5283751526 diff --git a/2021/11/testinput-small b/2021/11/testinput-small new file mode 100644 index 0000000..ae21dd2 --- /dev/null +++ b/2021/11/testinput-small @@ -0,0 +1,5 @@ +11111 +19991 +19191 +19991 +11111 diff --git a/2021/12/input b/2021/12/input new file mode 100644 index 0000000..756681b --- /dev/null +++ b/2021/12/input @@ -0,0 +1,23 @@ +pn-TY +rp-ka +az-aw +al-IV +pn-co +end-rp +aw-TY +rp-pn +al-rp +end-al +IV-co +end-TM +co-TY +TY-ka +aw-pn +aw-IV +pn-IV +IV-ka +TM-rp +aw-PD +start-IV +start-co +start-pn diff --git a/2021/12/one.tl b/2021/12/one.tl new file mode 100644 index 0000000..70e36d5 --- /dev/null +++ b/2021/12/one.tl @@ -0,0 +1,49 @@ +(defvar %cave-hash% (hash)) + +(defstruct cave () + name + neighbors + + (:postinit (cv) + (assert cv.name) + (set [%cave-hash% cv.name] cv))) + +(defstruct small-cave cave + (:method visit (cv path fn) + (unless (member cv path) + (push cv path) + (each ((n cv.neighbors)) + n.(visit path fn))))) + +(defstruct big-cave cave + (:method visit (cv path fn) + (push cv path) + (each ((n cv.neighbors)) + n.(visit path fn)))) + +(defstruct end-cave cave + (:method visit (cv path fn) + (push cv path) + [fn path])) + +(defun ensure-cave (name) + (or [%cave-hash% name] + (set [%cave-hash% name] + (match-case name + ("end" (new end-cave name name)) + (@[all @str chr-islower] (new small-cave name name)) + (@else (new big-cave name name)))))) + +(defun read-caves (: (name "input")) + (with-stream (s (open-file name)) + (whilet ((line (get-line s))) + (match `@a-@b` line + (let ((ca (ensure-cave a)) + (cb (ensure-cave b))) + (pushnew cb ca.neighbors) + (pushnew ca cb.neighbors)))))) + +(defun find-paths (fn) + (let ((start [%cave-hash% "start"])) + (assert start) + start.(visit nil fn))) diff --git a/2021/12/testinput b/2021/12/testinput new file mode 100644 index 0000000..6fd8c41 --- /dev/null +++ b/2021/12/testinput @@ -0,0 +1,7 @@ +start-A +start-b +A-c +A-b +b-d +A-end +b-end diff --git a/2021/12/two.tl b/2021/12/two.tl new file mode 100644 index 0000000..69f179a --- /dev/null +++ b/2021/12/two.tl @@ -0,0 +1,68 @@ +(defvar %cave-hash% (hash)) + +(defstruct cave () + name + neighbors + + (:postinit (cv) + (assert cv.name) + (set [%cave-hash% cv.name] cv))) + +(defstruct end-cave cave + (:method visit (cv path fn) + (push cv path) + [fn (remq t path)])) + +(defstruct start-cave cave + (:method visit (cv path fn) + (unless (member cv path) + (push cv path) + (each ((n cv.neighbors)) + n.(visit path fn))))) + +(defstruct small-cave cave + (:method visit (cv path fn) + (let ((in-path (member cv path))) + (when (or (not in-path) + (not (member t path))) + (push cv path) + (if in-path + (push t path)) + (each ((n cv.neighbors)) + n.(visit path fn)))))) + +(defstruct big-cave cave + (:method visit (cv path fn) + (push cv path) + (each ((n cv.neighbors)) + n.(visit path fn)))) + +(defun ensure-cave (name) + (or [%cave-hash% name] + (set [%cave-hash% name] + (match-case name + ("end" (new end-cave name name)) + ("start" (new start-cave name name)) + (@[all @str chr-islower] (new small-cave name name)) + (@else (new big-cave name name)))))) + +(defun read-caves (: (name "input")) + (with-stream (s (open-file name)) + (whilet ((line (get-line s))) + (match `@a-@b` line + (let ((ca (ensure-cave a)) + (cb (ensure-cave b))) + (pushnew cb ca.neighbors) + (pushnew ca cb.neighbors)))))) + +(defun find-paths (fn) + (let ((start [%cave-hash% "start"])) + (assert start) + start.(visit nil fn))) + +(defun solve (: (name "input")) + (let (paths) + (read-caves name) + (find-paths (opip reverse (mapcar .name) (push @1 paths))) + (mapdo [chain (ap join-with ",") pprinl] paths) + (len paths))) diff --git a/2021/17/code.tl b/2021/17/code.tl new file mode 100644 index 0000000..af76de0 --- /dev/null +++ b/2021/17/code.tl @@ -0,0 +1,46 @@ +(defstruct spec () + x0 x1 + y0 y1) + +(defun read-input (: (name "input")) + (flow name + file-get-string + (match `target area: x=@x0..@x1, y=@y0..@y1\n@nil` @1 + (new spec x0 (toint x0) x1 (toint x1) y0 (toint y0) y1 (toint y1))))) + +(defun simulate-shot (sp xv yv) + (let ((x0 sp.x0) (x1 sp.x1) + (y0 sp.y0) (y1 sp.y1)) + (for ((x 0) (y 0) (maxy -1000)) () () + (cond + ((or (< y y0) (> x x1)) + (return)) + ((and (<= x0 x x1) (<= y0 y y1)) + (return maxy))) + (inc x xv) + (inc y yv) + (upd maxy (max y maxy)) + (dec xv (signum xv)) + (dec yv 1)))) + +(defun solve-one (: (name :)) + (let ((sp (read-input name))) + (flow + (build + (each-prod ((xv 1..40) + (yv 1..700)) + (iflet ((maxy (simulate-shot sp xv yv))) + (add (list xv yv maxy))))) + (find-max @1 : caddr)))) + +(defun solve-two (: (name :)) + (let ((sp (read-input name))) + (flow + (build + (each-prod ((xv 1..300) + (yv -100..400)) + (iflet ((maxy (simulate-shot sp xv yv))) + (add (list xv yv maxy))))) + (mapcar (ap list @1 @2)) + uniq + len))) diff --git a/2021/17/errors.err b/2021/17/errors.err new file mode 100644 index 0000000..6bff0b0 --- /dev/null +++ b/2021/17/errors.err @@ -0,0 +1,2 @@ +defmicro: error: expansion is larger than original form: switch to defmacro. +1> diff --git a/2021/17/input b/2021/17/input new file mode 100644 index 0000000..d9179a5 --- /dev/null +++ b/2021/17/input @@ -0,0 +1 @@ +target area: x=240..292, y=-90..-57 diff --git a/2021/17/testinput b/2021/17/testinput new file mode 100644 index 0000000..a07e02d --- /dev/null +++ b/2021/17/testinput @@ -0,0 +1 @@ +target area: x=20..30, y=-10..-5 diff --git a/2021/18/code.tl b/2021/18/code.tl new file mode 100644 index 0000000..92b17e3 --- /dev/null +++ b/2021/18/code.tl @@ -0,0 +1,75 @@ +(defun read-string (str) + (flow str (mapcar (relate '(#\[ #\] #\,) '(#\( #\) #\space))) read)) + +(defun read-input (: (name "input")) + (flow name file-get-lines (mapcar read-string))) + +(defun ladd (n sn) + (tree-case sn + ((a b) ^(,(ladd n a) ,b)) + (m (+ n m)))) + +(defun radd (sn n) + (tree-case sn + ((a b) ^(,a ,(radd b n))) + (m (+ m n)))) + +(defun explode (sn) + (match-case sn + (^(((((,a ,b) ,x) ,y) ,z) ,w) ^((((0 ,(ladd b x)) ,y) ,z) ,w)) + (^((((,x (,a ,b)) ,y) ,z) ,w) ^((((,(radd x a) 0) ,(ladd b y)) ,z) ,w)) + (^(((,y ((,a ,b) ,x)) ,z) ,w) ^(((,(radd y a) (0 ,(ladd b x))) ,z) ,w)) + (^(((,y (,x (,a ,b))) ,z) ,w) ^(((,y (,(radd x a) 0)) ,(ladd b z)) ,w)) + (^((,z (((,a ,b) ,x) ,y)) ,w) ^((,(radd z a) ((0 ,(ladd b x)) ,y)) ,w)) + (^((,z ((,x (,a ,b)) ,y)) ,w) ^((,z ((,(radd x a) 0) ,(ladd b y))) ,w)) + (^((,z (,y ((,a ,b) ,x))) ,w) ^((,z (,(radd y a) (0 ,(ladd b x)))) ,w)) + (^((,z (,y (,x (,a ,b)))) ,w) ^((,z (,y (,(radd x a) 0))) ,(ladd b w))) + (^(,w ((((,a ,b) ,x) ,y) ,z)) ^(,(radd w a) (((0 ,(ladd b x)) ,y) ,z))) + (^(,w (((,x (,a ,b)) ,y) ,z)) ^(,w (((,(radd x a) 0) ,(ladd b y)) ,z))) + (^(,w ((,y ((,a ,b) ,x)) ,z)) ^(,w ((,(radd y a) (0 ,(ladd b x))) ,z))) + (^(,w ((,y (,x (,a ,b))) ,z)) ^(,w ((,y (,(radd x a) 0)) ,(ladd b z)))) + (^(,w (,z (((,a ,b) ,x) ,y))) ^(,w (,(radd z a) ((0 ,(ladd b x)) ,y)))) + (^(,w (,z ((,x (,a ,b)) ,y))) ^(,w (,z ((,(radd x a) 0) ,(ladd b y))))) + (^(,w (,z (,y ((,a ,b) ,x)))) ^(,w (,z (,(radd y a) (0 ,(ladd b x)))))) + (^(,w (,z (,y (,x (,a ,b))))) ^(,w (,z (,y (,(radd x a) 0))))) + (@else else))) + +(defun splt (sn) + (tree-case sn + ((a b) + (let ((as (splt a)) + (bs (splt b))) + (cond + ((neq a as) ^(,as ,b)) + ((neq b bs) ^(,a ,bs)) + (t sn)))) + (m (if (< m 10) + m + (let* ((x (trunc m 2)) + (y (- m x))) + ^(,x ,y)))))) + +(defun reduce (sn) + (let (sn*) + (while* (neq sn* sn) + (while* (neq sn* sn) + (shift sn* sn (explode sn))) + (shift sn* sn (splt sn))) + sn)) + +(defun add (sn0 sn1) + (reduce (list sn0 sn1))) + +(defun mag (sn) + (tree-case sn + ((a b) (+ (* 3 (mag a)) (* 2 (mag b)))) + (m m))) + +(defun solve-one (: (name :)) + (flow name read-input (reduce-left add) mag)) + +(defun solve-two (: (name :)) + (flow name read-input (comb @1 2) + (mappend [juxt [chain [apf add] mag] + [chain [apf [flipargs add]] mag]]) + find-max)) diff --git a/2021/18/code2.tl b/2021/18/code2.tl new file mode 100644 index 0000000..58e2e32 --- /dev/null +++ b/2021/18/code2.tl @@ -0,0 +1,75 @@ +(defun read-string (str) + (flow str (mapcar (relate '(#\[ #\] #\,) '(#\( #\) #\space))) read)) + +(defun read-input (: (name "input")) + (flow name file-get-lines (mapcar read-string))) + +(defun ladd (n sn) + (tree-case sn + ((a b) ^(,(ladd n a) ,b)) + (m (+ n m)))) + +(defun radd (sn n) + (tree-case sn + ((a b) ^(,a ,(radd b n))) + (m (+ m n)))) + +(defun explode (sn) + (tree-case sn + ((((((a b) x) y) z) w) ^((((0 ,(ladd b x)) ,y) ,z) ,w)) + (((((x (a b)) y) z) w) ^((((,(radd x a) 0) ,(ladd b y)) ,z) ,w)) + ((((y ((a b) x)) z) w) ^(((,(radd y a) (0 ,(ladd b x))) ,z) ,w)) + ((((y (x (a b))) z) w) ^(((,y (,(radd x a) 0)) ,(ladd b z)) ,w)) + (((z (((a b) x) y)) w) ^((,(radd z a) ((0 ,(ladd b x)) ,y)) ,w)) + (((z ((x (a b)) y)) w) ^((,z ((,(radd x a) 0) ,(ladd b y))) ,w)) + (((z (y ((a b) x))) w) ^((,z (,(radd y a) (0 ,(ladd b x)))) ,w)) + (((z (y (x (a b)))) w) ^((,z (,y (,(radd x a) 0))) ,(ladd b w))) + ((w ((((a b) x) y) z)) ^(,(radd w a) (((0 ,(ladd b x)) ,y) ,z))) + ((w (((x (a b)) y) z)) ^(,w (((,(radd x a) 0) ,(ladd b y)) ,z))) + ((w ((y ((a b) x)) z)) ^(,w ((,(radd y a) (0 ,(ladd b x))) ,z))) + ((w ((y (x (a b))) z)) ^(,w ((,y (,(radd x a) 0)) ,(ladd b z)))) + ((w (z (((a b) x) y))) ^(,w (,(radd z a) ((0 ,(ladd b x)) ,y)))) + ((w (z ((x (a b)) y))) ^(,w (,z ((,(radd x a) 0) ,(ladd b y))))) + ((w (z (y ((a b) x)))) ^(,w (,z (,(radd y a) (0 ,(ladd b x)))))) + ((w (z (y (x (a b))))) ^(,w (,z (,y (,(radd x a) 0))))) + (else else))) + +(defun splt (sn) + (tree-case sn + ((a b) + (let ((as (splt a)) + (bs (splt b))) + (cond + ((neq a as) ^(,as ,b)) + ((neq b bs) ^(,a ,bs)) + (t sn)))) + (m (if (< m 10) + m + (let* ((x (trunc m 2)) + (y (- m x))) + ^(,x ,y)))))) + +(defun reduce (sn) + (let (sn*) + (while* (neq sn* sn) + (while* (neq sn* sn) + (shift sn* sn (explode sn))) + (shift sn* sn (splt sn))) + sn)) + +(defun add (sn0 sn1) + (reduce (list sn0 sn1))) + +(defun mag (sn) + (tree-case sn + ((a b) (+ (* 3 (mag a)) (* 2 (mag b)))) + (m m))) + +(defun solve-one (: (name :)) + (flow name read-input (reduce-left add) mag)) + +(defun solve-two (: (name :)) + (flow name read-input (comb @1 2) + (mappend [juxt [chain [apf add] mag] + [chain [apf [flipargs add]] mag]]) + find-max)) diff --git a/2021/18/input b/2021/18/input new file mode 100644 index 0000000..5116955 --- /dev/null +++ b/2021/18/input @@ -0,0 +1,100 @@ +[[2,[2,[4,0]]],[6,1]] +[[3,[4,[2,4]]],[[6,9],[6,1]]] +[7,[8,[8,[0,8]]]] +[[[[2,9],5],5],[[[0,1],8],[[7,9],5]]] +[[[[3,0],[7,0]],[[9,6],[1,9]]],4] +[[[0,[4,8]],8],[[[2,1],9],6]] +[[[5,[7,7]],[[9,6],2]],[[[5,8],8],0]] +[[0,3],[[8,2],[6,[2,2]]]] +[[[9,0],[4,[4,7]]],[7,[[9,1],9]]] +[0,[7,[1,1]]] +[[[4,[0,1]],[[1,0],8]],[[[3,9],[0,1]],[[9,1],[8,8]]]] +[[[6,0],3],2] +[[[[4,1],[2,7]],[9,[8,9]]],[[3,0],0]] +[[[[2,4],[8,7]],[9,[9,7]]],[[[2,5],6],9]] +[[7,6],[[4,[2,4]],[3,8]]] +[[7,2],[[8,8],7]] +[[[[6,0],4],[[4,7],4]],[[6,[2,7]],[[6,5],3]]] +[[[[8,8],[7,6]],4],5] +[[0,[[6,9],[7,9]]],[9,5]] +[9,[[[0,4],6],[[7,0],0]]] +[[[[4,4],0],[3,[3,9]]],[[7,5],[5,[7,2]]]] +[[[8,3],[[8,5],[4,4]]],[0,[0,3]]] +[[9,[3,[6,7]]],[[7,0],[[9,2],7]]] +[[[3,7],[[3,6],9]],7] +[[2,[2,[5,7]]],[[[6,4],5],[4,7]]] +[[[[9,0],2],[[4,4],6]],[[[3,2],[5,5]],[[5,9],7]]] +[[[[2,5],4],[8,5]],6] +[[[3,2],[[1,7],5]],[[8,1],[1,[1,2]]]] +[8,[[3,[5,4]],5]] +[[[2,[5,9]],[1,3]],[[[2,3],[8,3]],[[5,1],[8,9]]]] +[[[2,0],[[3,3],[4,7]]],[[[8,7],[7,4]],1]] +[[[[7,4],9],[3,[4,1]]],[[[8,4],5],7]] +[[[[0,2],9],3],[9,[5,3]]] +[3,4] +[[[1,[0,2]],[[9,9],[8,2]]],6] +[[[[2,9],[3,5]],9],[[9,3],[3,[6,7]]]] +[[0,[[4,6],4]],[2,[5,2]]] +[9,[[9,[6,8]],8]] +[3,[[[1,2],[0,9]],[[4,9],1]]] +[[[[8,7],[1,7]],[[2,6],[8,5]]],[3,[[8,0],[6,9]]]] +[[8,[[4,9],7]],[3,[9,4]]] +[[0,[[3,2],[2,2]]],0] +[[[2,7],[[5,7],4]],[[[6,0],[2,1]],[[4,1],[1,6]]]] +[[[[9,6],[0,3]],[[0,6],[0,4]]],[[[3,7],[6,7]],7]] +[[[[1,1],6],[[5,6],4]],[[5,[0,7]],1]] +[[[3,9],[[7,3],[1,5]]],[[[1,2],3],[0,[5,6]]]] +[[[[4,4],[0,5]],6],[[7,[2,0]],6]] +[[[[2,2],6],9],[[[9,1],2],[[8,6],8]]] +[[[[5,0],8],[[5,7],7]],[6,[5,3]]] +[[[[8,2],[8,4]],1],[[1,[7,3]],8]] +[[[[3,2],2],[[4,9],[5,4]]],[[[9,2],4],[5,[6,0]]]] +[[1,[[0,6],0]],[[[1,5],2],[[6,0],[3,7]]]] +[4,[7,[6,[3,3]]]] +[[[0,[2,5]],2],5] +[[[0,[5,7]],9],[[[2,3],[3,4]],[[0,4],9]]] +[[3,1],[[[4,1],9],[[0,5],[8,6]]]] +[[9,[2,0]],[[0,[1,7]],[9,[6,4]]]] +[[[[6,5],5],5],[5,8]] +[[[[2,8],[1,3]],[[5,4],2]],[[[0,8],[5,1]],[9,[5,6]]]] +[[[[6,9],7],[9,7]],2] +[[[[1,7],8],[8,7]],[[[3,5],4],8]] +[[[[1,8],[1,0]],0],[[7,1],5]] +[[[9,[6,8]],3],[[5,1],[4,[8,2]]]] +[[[0,[2,1]],1],[3,[9,[5,5]]]] +[[2,5],[2,5]] +[[[[1,1],[8,3]],[[1,9],[4,9]]],[[5,[4,8]],[[5,0],0]]] +[[[0,7],[[3,4],1]],[[[1,2],[2,9]],[[2,0],9]]] +[3,2] +[[[9,[8,2]],[7,3]],7] +[[[[6,9],9],[3,2]],0] +[[3,[[6,1],8]],6] +[[[[5,9],9],[[4,4],7]],[7,5]] +[1,[[2,8],0]] +[[2,[0,6]],[[[3,3],[0,4]],8]] +[[[[4,8],9],[0,[3,0]]],[[0,[3,1]],[8,[7,4]]]] +[[[6,[8,0]],[0,[8,9]]],[3,8]] +[[[[0,8],[9,4]],[1,[2,0]]],1] +[[7,6],[[[0,2],9],3]] +[[[[1,0],3],2],1] +[[[[1,2],8],5],7] +[0,[[3,0],7]] +[[7,[[0,9],[8,4]]],[[2,0],[[2,8],1]]] +[[[1,8],[[8,1],1]],[3,[8,9]]] +[4,[[3,7],[[5,2],9]]] +[[[[3,8],[2,9]],[3,9]],[[[3,7],[6,9]],[[1,7],2]]] +[9,[[[3,7],9],[[4,9],[8,6]]]] +[[7,[3,9]],[0,7]] +[[[1,6],0],[[7,[8,1]],[6,3]]] +[[[[3,9],3],[[2,6],[8,0]]],[[3,3],9]] +[[[1,2],[1,6]],[[1,[4,2]],0]] +[[[0,[3,0]],2],[[7,[9,4]],[6,8]]] +[6,[[[3,1],1],5]] +[[[3,4],[[5,9],[1,1]]],[[2,[0,1]],3]] +[[2,[[1,5],7]],[0,2]] +[[1,[[6,7],7]],4] +[6,[5,[[3,2],[6,8]]]] +[[[3,9],[[4,0],6]],[8,[3,[5,2]]]] +[[5,[[7,3],[2,2]]],[[7,7],7]] +[[[1,2],[[2,4],[6,1]]],[[0,[4,2]],[[5,7],[2,3]]]] +[[[8,7],8],[[7,[3,6]],[[1,0],4]]] diff --git a/2021/18/testinput b/2021/18/testinput new file mode 100644 index 0000000..70e9071 --- /dev/null +++ b/2021/18/testinput @@ -0,0 +1,10 @@ +[[[0,[4,5]],[0,0]],[[[4,5],[2,6]],[9,5]]] +[7,[[[3,7],[4,3]],[[6,3],[8,8]]]] +[[2,[[0,8],[3,4]]],[[[6,7],1],[7,[1,6]]]] +[[[[2,4],7],[6,[0,5]]],[[[6,8],[2,8]],[[2,1],[4,5]]]] +[7,[5,[[3,8],[1,4]]]] +[[2,[2,2]],[8,[8,1]]] +[2,9] +[1,[[[9,3],9],[[9,0],[0,7]]]] +[[[5,[7,4]],7],1] +[[[[4,2],2],6],[8,7]] diff --git a/2021/18/testinput2 b/2021/18/testinput2 new file mode 100644 index 0000000..1368dc4 --- /dev/null +++ b/2021/18/testinput2 @@ -0,0 +1,10 @@ +[[[0,[5,8]],[[1,7],[9,6]]],[[4,[1,2]],[[1,4],2]]] +[[[5,[2,8]],4],[5,[[9,9],0]]] +[6,[[[6,2],[5,6]],[[7,6],[4,7]]]] +[[[6,[0,7]],[0,9]],[4,[9,[9,0]]]] +[[[7,[6,4]],[3,[1,3]]],[[[5,5],1],9]] +[[6,[[7,3],[3,2]]],[[[3,8],[5,7]],4]] +[[[[5,4],[7,7]],8],[[8,3],8]] +[[9,3],[[9,9],[6,[4,9]]]] +[[2,[[7,7],7]],[[5,8],[[9,3],[0,2]]]] +[[[[5,2],5],[8,[3,7]]],[[5,[7,5]],[4,4]]] diff --git a/2021/19/code.tl b/2021/19/code.tl new file mode 100644 index 0000000..97dd3f3 --- /dev/null +++ b/2021/19/code.tl @@ -0,0 +1,164 @@ +(defstruct scanner () + id + data + rot + pref + delta + nei) + +(defun read-input (: (name "input")) + (with-stream (s (open-file name)) + (build + (let (scnr) + (while-match-case (get-line s) + ("") + (`@x,@y,@z` (push (vec (toint x) (toint y) (toint z)) scnr.data)) + (`--- scanner @n ---` (set scnr (new scanner id (toint n))) (add scnr))))))) + +(defmacro x (p) ^[,p 0]) +(defmacro y (p) ^[,p 1]) +(defmacro z (p) ^[,p 2]) + +(defmacro rot-z (p) + (with-gensyms (tp) + ^(let ((,tp ,p)) + (vec (- (y ,tp)) (x ,tp) (z ,tp))))) + +(defmacro rot-y (p) + (with-gensyms (tp) + ^(let ((,tp ,p)) + (vec (z ,tp) (y ,tp) (- (x ,tp)))))) + +(defmacro rot-x (p) + (with-gensyms (tp) + ^(let ((,tp ,p)) + (vec (x ,tp) (- (z ,tp)) (y ,tp))))) + +(defmacro psub (p0 p1) + (with-gensyms (tp0 tp1) + ^(let ((,tp0 ,p0) (,tp1 ,p1)) + (vec (- (x ,tp0) (x ,tp1)) + (- (y ,tp0) (y ,tp1)) + (- (z ,tp0) (z ,tp1)))))) + +(defmacro padd (p0 p1) + (with-gensyms (tp0 tp1) + ^(let ((,tp0 ,p0) (,tp1 ,p1)) + (vec (+ (x ,tp0) (x ,tp1)) + (+ (y ,tp0) (y ,tp1)) + (+ (z ,tp0) (z ,tp1)))))) + +(defmeth scanner gen-rot (sc) + (set sc.rot (vec)) + (dotimes (i 24) + (vec-push sc.rot (vec))) + + (each ((rA sc.data)) + (let* ( (rB (rot-x rA)) (rC (rot-x rB)) (rD (rot-x rC)) + (rE (rot-z rA)) (rF (rot-y rE)) (rG (rot-y rF)) (rH (rot-y rG)) + (rI (rot-z rE)) (rJ (rot-x rI)) (rK (rot-x rJ)) (rL (rot-x rK)) + (rM (rot-z rI)) (rN (rot-y rM)) (rO (rot-y rN)) (rP (rot-y rO)) + (rQ (rot-y rA)) (rR (rot-z rQ)) (rS (rot-z rR)) (rT (rot-z rS)) + (rU (rot-y (rot-y rQ))) (rV (rot-z rU)) (rW (rot-z rV)) (rX (rot-z rW))) + (vec-push [sc.rot 0] rA) (vec-push [sc.rot 1] rB) + (vec-push [sc.rot 2] rC) (vec-push [sc.rot 3] rD) + (vec-push [sc.rot 4] rE) (vec-push [sc.rot 5] rF) + (vec-push [sc.rot 6] rG) (vec-push [sc.rot 7] rH) + (vec-push [sc.rot 8] rI) (vec-push [sc.rot 9] rJ) + (vec-push [sc.rot 10] rK) (vec-push [sc.rot 11] rL) + (vec-push [sc.rot 12] rM) (vec-push [sc.rot 13] rN) + (vec-push [sc.rot 14] rO) (vec-push [sc.rot 15] rP) + (vec-push [sc.rot 16] rQ) (vec-push [sc.rot 17] rR) + (vec-push [sc.rot 18] rS) (vec-push [sc.rot 19] rT) + (vec-push [sc.rot 20] rU) (vec-push [sc.rot 21] rV) + (vec-push [sc.rot 22] rW) (vec-push [sc.rot 23] rX)))) + +(defun overlap-delta (pvec0 pvec1 amt) + (each-prod ((p0 pvec0) + (p1 pvec1)) + (let* ((delta (psub p1 p0)) + (novl (len (isec pvec0 + (mapcar (do psub @1 delta) pvec1))))) + (when (>= novl amt) + (return delta))))) + +(defun overlaps-with (s0 s1 : (amt 12)) + (for* ((r 0) (r0 [s0.rot (or s0.pref 0)]) (rot1 s1.rot) (n (len rot1))) + ((< r n)) + ((inc r)) + (whenlet ((delta (overlap-delta r0 [rot1 r] amt))) + (return (cons delta r))))) + +(defun link-graph (slist) + (let ((sf (car slist)) + (backref) + (count 0)) + (flet ((lnk (s0 s1) + (tree-case (overlaps-with s0 s1) + ((delta . r) + (prinl ^(:lap ,s0.id ,s1.id ,r ,delta)) + (cond + ((and (neq s0 sf) (null s0.pref)) + (push (cons s0 s1) backref)) + (t + (set s1.pref r) + (push (list* s1 r delta) s0.nei))))))) + (each-match ((@s0 @s1) (comb slist 2)) + (prinl ^(,(inc count) ,s0.id ,s1.id)) + (cond + ((null s1.pref) (lnk s0 s1)) + ((null s0.pref) (lnk s1 s0)))) + (while backref + (set count 0) + (put-line "backref") + (each-match ((@s0 . @s1) (zap backref)) + (prinl ^(,(inc count) ,s0.id ,s1.id)) + (cond + ((null s1.pref) (lnk s0 s1)) + ((null s0.pref) (lnk s1 s0)))))) + (keep-if .nei slist))) + +(defun assemble-map (slist) + (let ((out (vec))) + (labels ((visit (sn r delta) + (prinl ^(:visit ,sn.id ,r)) + (set sn.delta delta) + (each ((p [sn.rot r])) + (vec-push out (psub p delta))) + (each-match ((@n @nr . @ndelta) sn.nei) + (visit n nr (padd delta ndelta))))) + (visit (car slist) 0 #(0 0 0))) + (prinl ^(:len out ,(len out))) + (uniq out))) + +;; answer is 438 +(defun solve-one (: (name :)) + (flow name + read-input + (progn (mapdo .(gen-rot) @1) @1) + link-graph + assemble-map)) + +(defun manhattan (p) + [sum p abs]) + +(defun max-manhattan-delta (slist) + (let ((maxhattan 0)) + (each-match ((@s0 @s1) (comb slist 2)) + (prinl ^(:delta ,s0.id ,s0.delta ,s1.id ,s1.delta)) + (let ((mhdelta (manhattan (psub s0.delta s1.delta)))) + (upd maxhattan (max mhdelta)))) + maxhattan)) + +;; answer is 11985 +(defun solve-two (: (name :)) + (flow name + read-input + (let ((orig @1)) + (flow orig + (progn (mapdo .(gen-rot) @1) @1) + link-graph + assemble-map) + (flow orig + (keep-if .delta) + max-manhattan-delta)))) diff --git a/2021/19/input b/2021/19/input new file mode 100644 index 0000000..f98aaec --- /dev/null +++ b/2021/19/input @@ -0,0 +1,975 @@ +--- scanner 0 --- +592,476,409 +451,462,-479 +840,-352,632 +619,398,366 +584,458,-482 +794,-340,778 +462,524,-410 +-26,36,-166 +-518,712,-554 +-524,544,-667 +-364,758,518 +542,430,440 +87,115,17 +-380,-427,-609 +863,-333,586 +-422,566,-511 +-756,-510,685 +-806,-704,722 +-408,800,678 +-450,839,466 +-514,-291,-633 +-485,-380,-513 +557,-392,-606 +-788,-610,775 +481,-347,-441 +578,-334,-581 + +--- scanner 1 --- +-583,-765,-719 +632,295,485 +636,327,350 +-657,380,343 +599,-732,-645 +-621,253,313 +678,357,398 +-736,626,-578 +-503,-949,296 +-740,733,-663 +-719,286,402 +554,772,-816 +590,-602,633 +692,727,-916 +-601,-833,-688 +538,-677,-732 +-622,-850,299 +-13,-191,-155 +580,-630,724 +-562,-977,-745 +566,-781,-633 +538,732,-855 +-499,-953,313 +-72,-48,-13 +686,-608,696 +-800,649,-736 + +--- scanner 2 --- +-516,-454,605 +408,-415,759 +-693,-252,-394 +809,-355,-358 +594,799,-361 +539,788,-397 +-538,-352,761 +-430,654,790 +362,648,691 +420,627,666 +-496,532,862 +-34,99,76 +767,-316,-493 +-684,-448,718 +-752,-304,-381 +615,807,-538 +-649,805,-656 +375,551,831 +-646,815,-771 +-489,744,-720 +-434,521,793 +455,-310,663 +-694,-298,-575 +824,-304,-343 +319,-444,639 + +--- scanner 3 --- +515,800,717 +476,790,601 +463,-650,526 +-140,-121,-18 +-406,578,666 +-886,-536,558 +-725,355,-610 +-512,-509,-627 +516,383,-474 +-745,-517,634 +398,785,695 +-563,-580,-470 +-884,343,-589 +473,-634,436 +-627,-519,-630 +-417,508,572 +376,-469,-446 +678,337,-535 +473,-689,409 +-821,358,-537 +-922,-525,613 +372,-374,-564 +-420,562,489 +-19,59,-29 +663,476,-423 +426,-365,-376 + +--- scanner 4 --- +-946,524,517 +439,453,813 +-634,505,-587 +-503,-517,-469 +-780,-589,508 +381,521,728 +-797,-767,569 +593,-977,-487 +483,-865,-448 +-420,-477,-415 +-490,572,-567 +595,425,-582 +254,498,748 +-820,-706,431 +-805,477,427 +-887,597,486 +314,-917,364 +-36,-47,-34 +-481,-604,-352 +463,425,-692 +344,-786,331 +686,-924,-419 +326,-647,357 +-566,700,-552 +418,420,-649 + +--- scanner 5 --- +574,-507,745 +-493,482,-596 +449,416,545 +413,561,535 +512,747,-503 +-777,-627,794 +449,-632,765 +450,437,649 +-503,-655,-745 +177,20,135 +-677,527,-582 +562,-591,810 +-725,487,-566 +-676,-729,744 +695,664,-510 +-599,-663,-763 +551,-622,-262 +-707,549,456 +631,756,-530 +-706,-601,686 +-638,567,415 +-480,-591,-682 +564,-803,-306 +-561,510,377 +530,-760,-396 +170,-156,-5 + +--- scanner 6 --- +70,-153,-116 +823,-780,467 +-428,-886,547 +-784,264,367 +-746,384,336 +917,352,819 +-362,-779,548 +-437,-518,-418 +850,474,816 +489,421,-516 +706,-590,-600 +670,-523,-575 +769,-585,-563 +-787,248,448 +769,-792,536 +-426,-867,418 +-763,498,-449 +505,470,-357 +-635,-520,-504 +60,8,77 +879,-854,614 +489,583,-406 +-543,-530,-503 +-744,491,-470 +-571,495,-377 +856,368,801 + +--- scanner 7 --- +-816,-494,765 +551,-688,-507 +664,410,435 +-531,464,-659 +-91,59,74 +-940,-528,-685 +484,-511,-502 +-113,-91,-60 +-972,-605,-759 +581,473,-782 +-800,755,444 +646,-686,895 +441,-556,-507 +714,-779,842 +-894,-578,-716 +-707,-614,769 +566,397,-654 +546,541,-587 +-801,-574,674 +-700,797,517 +781,388,522 +-612,378,-607 +718,327,395 +-641,795,445 +-570,422,-447 +685,-576,783 + +--- scanner 8 --- +683,432,-620 +648,388,326 +428,-449,737 +760,479,420 +-726,438,680 +428,411,-643 +-690,-771,-767 +735,-428,-659 +-761,-788,-777 +762,412,440 +635,480,-635 +794,-362,-603 +783,-437,-546 +-559,-547,411 +-710,356,690 +-615,-756,-760 +-761,439,-479 +366,-495,650 +-121,87,50 +-531,-537,502 +38,-53,47 +-838,386,559 +398,-491,785 +-537,-441,439 +-781,519,-567 +-756,402,-414 + +--- scanner 9 --- +16,20,38 +-613,-770,-662 +708,849,522 +799,-809,823 +-617,-793,-713 +-498,-465,324 +-527,-614,325 +-557,767,-441 +-535,610,807 +-570,740,-455 +-432,555,805 +349,843,-447 +567,-815,-695 +761,-809,-753 +649,-797,766 +570,861,594 +784,-758,808 +326,893,-504 +426,832,-403 +-437,-493,409 +587,820,497 +-483,712,806 +-109,77,-106 +748,-861,-694 +-458,691,-434 +-534,-877,-758 + +--- scanner 10 --- +-639,700,813 +733,-498,-443 +-864,487,-594 +-796,678,855 +-574,-478,-653 +549,-858,511 +452,-899,528 +-802,407,-710 +728,631,-683 +280,759,449 +-645,-785,574 +-494,-498,-741 +238,720,314 +-100,58,-138 +-173,-132,-72 +-773,627,813 +-885,333,-648 +-457,-503,-806 +592,765,-707 +223,771,299 +524,-887,390 +639,660,-803 +-653,-855,507 +716,-569,-453 +4,-129,49 +701,-644,-460 +-576,-665,484 + +--- scanner 11 --- +731,717,-760 +668,-387,-578 +-380,926,-955 +1,118,-6 +-380,-650,-917 +739,-544,-527 +-312,-655,378 +729,-547,-642 +-392,869,-805 +-374,-592,-723 +779,-363,361 +-431,911,-940 +-724,427,342 +-419,-559,457 +559,492,458 +27,-15,-183 +874,-481,357 +-575,428,371 +723,696,-937 +-396,-610,461 +598,609,448 +614,519,458 +-328,-591,-904 +883,-293,411 +-696,512,281 +712,641,-901 + +--- scanner 12 --- +-128,119,58 +818,-391,610 +-735,-368,-468 +-737,629,862 +650,486,-431 +377,-491,-459 +-595,-643,561 +740,-434,583 +672,642,-533 +754,454,442 +-693,834,-723 +758,457,575 +-638,-648,516 +-720,-496,-392 +-781,570,861 +-785,644,-718 +416,-703,-417 +-761,818,-651 +-855,750,871 +-18,-14,-89 +458,-543,-373 +692,385,453 +504,529,-527 +-700,-563,-536 +786,-465,533 +-705,-643,693 + +--- scanner 13 --- +799,-448,728 +-781,-606,-858 +-598,-623,566 +-603,-446,633 +-855,-529,-890 +-603,-578,523 +578,-560,-719 +746,-355,796 +401,551,543 +406,614,580 +-812,-556,-812 +687,-558,767 +608,551,-556 +596,497,-487 +-552,464,-821 +-605,831,496 +339,650,555 +-536,403,-839 +-767,831,386 +673,-520,-625 +-166,56,-81 +-658,470,-836 +-654,815,337 +670,441,-634 +669,-640,-734 +-107,152,79 + +--- scanner 14 --- +572,547,-573 +-659,601,-306 +-55,-17,-88 +855,-838,-532 +662,-712,809 +64,-82,103 +642,-645,665 +814,337,879 +795,-763,-468 +-604,459,409 +760,377,796 +-722,-457,-330 +-599,-443,-433 +-516,-665,828 +584,524,-534 +-545,387,411 +804,-849,-560 +677,-840,733 +-620,544,-450 +-704,386,451 +-718,-440,-334 +-435,-717,742 +877,464,818 +-474,-505,784 +570,565,-740 +-638,575,-518 + +--- scanner 15 --- +25,3,138 +668,345,-425 +566,-777,422 +800,546,390 +751,513,371 +-528,311,-610 +413,-799,449 +-826,-657,-821 +826,405,-436 +-510,382,590 +-876,-642,-818 +-550,269,-453 +-601,311,-476 +547,-339,-463 +552,-385,-517 +698,296,-450 +-740,-664,-755 +549,-846,550 +697,664,367 +-941,-796,935 +-110,-62,24 +-884,-817,715 +550,-500,-487 +-863,-710,801 +-580,368,636 +-590,296,676 + +--- scanner 16 --- +-439,-831,824 +-779,377,-635 +-555,704,405 +406,-895,656 +725,-844,-276 +-594,-569,-449 +709,-826,-337 +494,381,-704 +656,491,-704 +-735,778,395 +-613,-556,-328 +449,-817,683 +-25,68,-10 +-370,-769,813 +663,561,750 +658,628,573 +-614,660,404 +-853,470,-705 +480,-863,733 +607,332,-688 +-565,-609,-299 +-862,411,-632 +603,-841,-343 +658,518,705 +-442,-835,691 +-129,-31,97 + +--- scanner 17 --- +701,-567,-678 +-856,-402,-936 +-819,733,344 +733,453,-744 +-771,775,374 +-856,-524,270 +-684,729,312 +569,862,740 +-445,677,-613 +573,-570,-760 +319,-421,720 +625,796,681 +-473,783,-591 +-826,-560,397 +275,-321,716 +707,-712,-747 +726,468,-669 +-870,-525,-833 +-767,-622,303 +480,-348,692 +-536,687,-585 +-873,-406,-932 +-86,62,-41 +743,436,-815 +512,787,729 + +--- scanner 18 --- +824,596,800 +-375,-387,825 +742,692,-620 +-595,-828,-727 +-317,-417,904 +-444,436,525 +593,-719,531 +83,56,92 +-667,690,-647 +-417,-496,866 +787,697,-577 +-598,-745,-761 +441,-580,-478 +442,-521,-434 +-668,-819,-668 +610,692,-510 +432,-701,-360 +-504,367,620 +-444,529,688 +-667,528,-757 +24,-92,-26 +508,-656,667 +-651,641,-806 +468,-795,599 +951,619,820 +766,664,885 + +--- scanner 19 --- +572,-510,-553 +-15,68,35 +-141,1,151 +-776,814,752 +-443,645,-424 +-420,-729,496 +641,-658,875 +468,-538,-454 +-485,545,-351 +-600,-460,-306 +399,650,478 +-862,733,700 +517,-571,-466 +296,527,492 +-639,-576,-224 +300,531,475 +-818,775,540 +416,629,-509 +619,-552,903 +-445,704,-352 +272,590,-566 +647,-562,812 +-656,-400,-219 +-470,-535,533 +-438,-635,443 +484,611,-540 + +--- scanner 20 --- +-770,599,586 +683,836,701 +-556,-879,621 +-662,582,636 +612,796,-777 +799,-663,-898 +-652,-884,499 +542,826,-745 +569,778,813 +673,-742,-862 +537,-779,665 +-725,406,578 +576,-868,615 +-410,-392,-888 +761,-730,-884 +-679,674,-590 +562,-943,717 +436,830,-772 +-534,-403,-830 +72,-129,67 +108,1,-113 +-455,-920,548 +-632,731,-469 +-688,645,-337 +-550,-386,-896 +673,785,779 + +--- scanner 21 --- +-661,-356,-544 +912,680,752 +-722,-409,263 +-662,-480,-390 +-473,648,-554 +731,750,711 +648,-303,-658 +-652,-531,-491 +830,-518,773 +645,-375,-466 +879,441,-445 +-559,823,338 +759,410,-483 +862,-729,816 +-374,507,-530 +-599,845,329 +-726,-462,310 +880,-602,809 +-722,834,307 +895,522,-442 +910,674,720 +-668,-345,354 +-20,-25,-124 +-413,613,-578 +75,88,4 +652,-396,-485 + +--- scanner 22 --- +747,-397,-696 +-259,-670,-571 +-603,633,778 +-274,-732,715 +442,867,939 +-580,823,701 +-534,852,-485 +679,-384,923 +-513,753,709 +-232,-710,558 +854,-376,-610 +-331,-680,-531 +-274,-659,581 +694,-434,926 +833,-319,-830 +701,-520,860 +727,479,-630 +907,558,-616 +-546,799,-681 +395,889,769 +845,474,-523 +20,-79,57 +101,89,5 +559,852,799 +-345,-750,-485 +-492,867,-609 + +--- scanner 23 --- +530,607,-919 +-568,473,664 +55,-137,-99 +-457,319,-779 +492,-777,409 +-608,444,814 +-472,-950,-867 +425,-700,-843 +471,732,408 +-843,-846,837 +-360,-814,-826 +-555,492,785 +581,597,-818 +406,606,-765 +378,658,478 +412,741,481 +446,-707,-824 +-391,-934,-864 +382,-615,409 +-840,-724,770 +-598,418,-755 +-825,-830,776 +353,-703,-651 +-563,358,-731 +333,-728,425 + +--- scanner 24 --- +-37,35,-48 +836,582,-476 +822,520,676 +597,-887,463 +-280,-388,443 +742,483,-504 +760,636,756 +-474,-568,-719 +754,-929,485 +-714,801,-463 +711,516,-559 +731,-887,536 +782,-853,-733 +-265,-373,392 +-634,633,398 +-681,729,503 +757,-902,-763 +-770,609,532 +843,574,830 +94,-88,14 +771,-793,-891 +-550,-427,-700 +-322,-523,404 +-495,-391,-711 +-669,636,-539 +-727,661,-560 + +--- scanner 25 --- +-562,-274,-592 +-169,152,-4 +-575,520,-828 +-459,-276,-537 +560,-584,-802 +-525,-757,483 +216,761,734 +587,541,-609 +622,-315,815 +497,610,-729 +-717,459,544 +772,-258,827 +258,738,683 +258,604,756 +-510,-275,-694 +-458,380,-843 +-710,393,458 +-695,396,408 +-34,8,98 +681,-559,-831 +543,-487,-843 +-464,-672,511 +-554,-756,632 +564,618,-799 +757,-273,776 +-411,550,-865 + +--- scanner 26 --- +594,573,-519 +-440,825,-580 +682,-603,463 +540,-658,-252 +-546,-834,-618 +-536,327,553 +57,-24,115 +-505,787,-628 +-558,-769,-421 +804,815,933 +677,878,872 +755,-703,505 +566,-637,-464 +-661,-587,447 +576,571,-686 +-573,-585,481 +764,761,850 +754,-544,465 +-422,-805,-494 +597,-619,-396 +617,585,-480 +-43,68,-5 +-522,847,-506 +-736,364,530 +-733,-581,430 +-632,377,621 + +--- scanner 27 --- +710,798,653 +-745,352,513 +-927,692,-562 +-942,-757,-894 +481,-661,637 +-838,-386,810 +-168,-76,-145 +-716,-389,743 +-124,46,-8 +-963,547,-552 +569,662,-427 +355,673,-369 +-806,-869,-853 +-926,671,-666 +500,-674,758 +452,-621,787 +751,841,731 +-926,-838,-891 +-681,444,493 +-822,-404,749 +-864,361,486 +327,-772,-806 +426,-631,-782 +360,688,-386 +366,-666,-758 +772,705,659 + +--- scanner 28 --- +-648,648,-709 +-542,-550,535 +771,449,693 +672,456,769 +702,-310,-612 +-117,25,-97 +659,470,742 +-522,-413,-805 +731,-309,-463 +-574,-556,727 +616,677,-768 +-609,730,-617 +797,-790,557 +612,728,-791 +-597,861,419 +695,773,-875 +694,-792,612 +-637,794,504 +792,-394,-491 +-32,148,17 +-720,663,-565 +-410,-281,-789 +-689,894,537 +-506,-331,-640 +-489,-424,651 +746,-791,714 + +--- scanner 29 --- +295,-675,611 +-385,714,686 +781,901,-278 +-712,-652,496 +-467,738,727 +629,795,754 +429,-696,749 +-336,510,-431 +17,-19,12 +65,131,149 +645,919,668 +709,922,-414 +-613,742,692 +-512,-777,-427 +-732,-777,621 +572,922,732 +543,-531,-675 +-502,-813,-572 +-319,505,-446 +536,-714,-758 +339,-662,792 +563,-595,-767 +703,860,-321 +-777,-664,580 +-616,-776,-448 +-377,719,-457 + +--- scanner 30 --- +250,687,-614 +-588,536,800 +-175,148,-171 +379,660,-585 +-157,-10,-10 +-585,-712,773 +629,-588,-789 +-506,-425,-711 +-571,-840,664 +236,-765,556 +-611,587,758 +-21,15,-188 +455,496,687 +288,741,-662 +541,576,773 +232,-711,405 +-560,-682,724 +-499,881,-703 +255,-814,523 +-520,727,-649 +501,566,701 +-582,807,-765 +-631,-508,-645 +694,-557,-754 +-745,514,758 +596,-588,-632 +-600,-453,-612 + +--- scanner 31 --- +625,-736,-620 +-599,-557,877 +-827,629,-456 +-682,563,543 +894,-512,638 +504,-661,-646 +-677,-757,890 +-692,566,428 +466,551,-556 +84,22,78 +-677,-895,-740 +900,-585,659 +-621,723,479 +427,460,818 +927,-573,750 +375,519,805 +421,518,624 +-666,-896,-531 +-836,817,-510 +-589,-889,-689 +10,-134,-93 +-606,-643,785 +443,500,-560 +482,-784,-562 +359,455,-477 +-732,747,-460 + +--- scanner 32 --- +-747,-436,-842 +729,-654,591 +-514,-782,535 +-849,537,719 +654,-393,-375 +-586,-821,688 +-911,438,-549 +-786,-558,-874 +304,373,491 +-890,356,649 +347,616,-427 +663,-761,590 +-954,406,-760 +-947,388,-633 +345,509,379 +-447,-786,617 +665,-742,461 +328,623,-406 +456,-395,-461 +548,-405,-460 +307,389,410 +-858,358,643 +-773,-302,-847 +-54,-4,19 +520,620,-334 + +--- scanner 33 --- +666,261,-636 +623,-361,427 +-931,538,-515 +-942,524,660 +-126,-99,-69 +-408,-920,565 +-414,-912,705 +-901,597,559 +687,395,-498 +-425,-854,581 +577,562,345 +-747,-501,-520 +384,554,390 +-723,-419,-561 +709,-493,483 +655,-811,-667 +653,305,-455 +768,-766,-626 +652,-614,436 +-928,611,-579 +-906,475,463 +560,612,453 +1,-55,105 +-751,-647,-555 +643,-746,-751 +-804,595,-493 + +--- scanner 34 --- +-553,-629,693 +844,-693,-278 +-579,-390,-633 +569,260,-620 +425,774,376 +794,-708,-275 +476,759,391 +518,218,-643 +-700,294,-671 +-858,354,-660 +-18,-135,69 +708,-715,-341 +-730,245,-646 +-514,-639,810 +-582,-551,-609 +-584,-436,-579 +-678,756,606 +769,-523,875 +437,624,433 +-667,720,661 +620,-552,874 +496,260,-486 +-686,579,585 +-569,-639,783 +741,-462,790 diff --git a/2021/19/input.txr b/2021/19/input.txr new file mode 100644 index 0000000..adbc19f --- /dev/null +++ b/2021/19/input.txr @@ -0,0 +1,9 @@ +@(collect) +--- scanner @s --- +@ (collect :vars (p)) +@x,@y,@z +@ (bind p @(vec (toint x) (toint y) (toint z))) +@ (until) + +@ (end) +@(end) diff --git a/2021/19/scratch b/2021/19/scratch new file mode 100644 index 0000000..af3a476 --- /dev/null +++ b/2021/19/scratch @@ -0,0 +1,4 @@ +for each point p0 in vec0 + for point in p1 in vec1 + translate vec1 by (p1 - p0) + intersect and count diff --git a/2021/19/testinput b/2021/19/testinput new file mode 100644 index 0000000..4e496e9 --- /dev/null +++ b/2021/19/testinput @@ -0,0 +1,136 @@ +--- scanner 0 --- +404,-588,-901 +528,-643,409 +-838,591,734 +390,-675,-793 +-537,-823,-458 +-485,-357,347 +-345,-311,381 +-661,-816,-575 +-876,649,763 +-618,-824,-621 +553,345,-567 +474,580,667 +-447,-329,318 +-584,868,-557 +544,-627,-890 +564,392,-477 +455,729,728 +-892,524,684 +-689,845,-530 +423,-701,434 +7,-33,-71 +630,319,-379 +443,580,662 +-789,900,-551 +459,-707,401 + +--- scanner 1 --- +686,422,578 +605,423,415 +515,917,-361 +-336,658,858 +95,138,22 +-476,619,847 +-340,-569,-846 +567,-361,727 +-460,603,-452 +669,-402,600 +729,430,532 +-500,-761,534 +-322,571,750 +-466,-666,-811 +-429,-592,574 +-355,545,-477 +703,-491,-529 +-328,-685,520 +413,935,-424 +-391,539,-444 +586,-435,557 +-364,-763,-893 +807,-499,-711 +755,-354,-619 +553,889,-390 + +--- scanner 2 --- +649,640,665 +682,-795,504 +-784,533,-524 +-644,584,-595 +-588,-843,648 +-30,6,44 +-674,560,763 +500,723,-460 +609,671,-379 +-555,-800,653 +-675,-892,-343 +697,-426,-610 +578,704,681 +493,664,-388 +-671,-858,530 +-667,343,800 +571,-461,-707 +-138,-166,112 +-889,563,-600 +646,-828,498 +640,759,510 +-630,509,768 +-681,-892,-333 +673,-379,-804 +-742,-814,-386 +577,-820,562 + +--- scanner 3 --- +-589,542,597 +605,-692,669 +-500,565,-823 +-660,373,557 +-458,-679,-417 +-488,449,543 +-626,468,-788 +338,-750,-386 +528,-832,-391 +562,-778,733 +-938,-730,414 +543,643,-506 +-524,371,-870 +407,773,750 +-104,29,83 +378,-903,-323 +-778,-728,485 +426,699,580 +-438,-605,-362 +-469,-447,-387 +509,732,623 +647,635,-688 +-868,-804,481 +614,-800,639 +595,780,-596 + +--- scanner 4 --- +727,592,562 +-293,-554,779 +441,611,-461 +-714,465,-776 +-743,427,-804 +-660,-479,-426 +832,-632,460 +927,-485,-438 +408,393,-506 +466,436,-512 +110,16,151 +-258,-428,682 +-393,719,612 +-211,-452,876 +808,-476,-593 +-575,615,604 +-485,667,467 +-680,325,-822 +-627,-443,-432 +872,-547,-609 +833,512,582 +807,604,487 +839,-516,451 +891,-625,532 +-652,-548,-490 +30,-46,-14 diff --git a/2021/20/code.tl b/2021/20/code.tl new file mode 100644 index 0000000..dcc4933 --- /dev/null +++ b/2021/20/code.tl @@ -0,0 +1,73 @@ +(defvarl h2b (relate ".#" #(0 1))) + +(defvarl b2h ".#") + +(defstruct ctx () + alg + (hash (hash)) + grid + (min-x 0) (min-y 0) + (max-x 0) (max-y 0) + toggle + + (:postinit (me) + (if (nzerop [me.alg 0]) + (set me.toggle 0)) + (each ((line me.grid) + (y 0)) + (each ((bit line) + (x 0)) + (set [me.hash x..y] [h2b bit]) + (upd me.max-x (max x)) + (upd me.max-y (max y))))) + + (:method lambda (me x y) + (or [me.hash x..y] + me.toggle + 0)) + + (:method lambda-set (me x y nv) + (set [me.hash x..y] nv) + (upd me.max-x (max x)) + (upd me.min-x (min x)) + (upd me.max-y (max y)) + (upd me.min-y (min y))) + + (:method print (me stream pretty-p) + (each ((y me.min-y..(succ me.max-y))) + (each ((x me.min-x..(succ me.max-x))) + (put-char [b2h [me x y]] stream)) + (put-line : stream)))) + +(defmeth ctx step (me) + (let ((nme (copy me))) + (set nme.hash (hash)) + (each-prod ((y (pred me.min-y)..(ssucc me.max-y)) + (x (pred me.min-x)..(ssucc me.max-x))) + (let* ((x- (pred x)) (x+ (succ x)) + (y- (pred y)) (y+ (succ y)) + (bits (flow (vec [me x- y-] [me x y-] [me x+ y-] + [me x- y] [me x y] [me x+ y] + [me x- y+] [me x y+] [me x+ y+]) + (poly 2)))) + (set [nme x y] [me.alg bits]))) + (replace-struct me nme) + (upd me.toggle [iff true (op - 1)]) + me)) + +(defun read-input (: (name "input")) + (flow (file-get-lines name) + (match (@alg "" . @grid) @1 + (new ctx + alg [mapcar h2b alg] + grid grid)))) + +;; answers; 5291, 16665. +(defun solve (steps : (name :)) + (flow name + (read-input) + (dotimes (i steps @1) + (put-line `step @i`) + @1.(step)) + .hash + (count-if plusp @1 cdr))) diff --git a/2021/20/input b/2021/20/input new file mode 100644 index 0000000..5ae298c --- /dev/null +++ b/2021/20/input @@ -0,0 +1,102 @@ +#.#.###........##....#.......#..##.#.##...#..##...#..##.......##..##.#..####.#.#..#..#...#.##...##.####..###.#.###.#####...##.#.###..#..#.##...##..####...#..#.#.###....####.####.##.####.#..##.##...#####.##.#.##.#..##.##.##.###.#..##.#.##...###.###..###....#.########..##..#...#....###.####.#######..#.##.##...####.#.#.###.#..#.......#..##..##.##....####.##.#.#.##.#.#.#.##.#..##..##.#..####.#....##.#...#.##.#....#......#...##.##.#.#...#.#.#.#..#.##.#..##...##.#.#.##..###.##.#.###..#####.#...###..#.....#....#.. + +..#.#...##.......#.####...##....##.###.####.##..###..#####......##.###.##.##.#...#....#####.#####.## +.###.#####...##....#.##...#.###.#.#.####.......#.##.#.#.#.###..####.####.#...###.#.#.#.....###...... +#..##..#.##.#...#.##..#.##.#####.###.###....##.#...#...#.##.#..#..###.####..#..####.....#####.#.#..# +.######........####.##.....####.###..###.####..#....##.###.#..#..####.#..##.###.#.#..#.#.###.##.##.# +.#.##.#.#...#..#.#.###.###.###.###.########..#..#...######....###.#..##.#.##...###..#..#..#.#.##.... +#.#..##.#....#.#.#...#.....#..##.#.####.#.###.##.###.####.#.#.##.#..#.#.......#....#.#####...#..##.# +.##....##.########.#####....##.#..##.#######.##.##.#...#..##.#.#####.....#...##..#.#.#.##.##....##.. +#.##.#.##..##..##.#......##.#.##..#.##..#.#..#.........#..#.#.##.##.#....##.##..#.##.##.#.##..##..#. +.....#####.#........###.#.##.######....###..##.#..#.###..#..####.##..###.###.#.###..#..####.##...... +.#.#.######..##.#..##..##.#.......#....#..#.#####.#....#....####..##...##.#.....#.###...##.#.#....## +..#####...#.##.#.##..#..#....#.###.#####.#.##..#...#....#...#.###...##....#####.#....#..#......##.#. +.#.#.#..#..#.#.#.....#.###..#..##.#.......#...#..#..###.....#...#......#.#.####....#...#.#.....##.## +.#.##.#..######..#...#######.###.#...#.#.##.....##.####...##.##.##.#...##.#.#....#.#.....#.#..#....# +###.########..##.#.#...#.##..#.#.....#.##..###.#..#...#.#.####....#..##..#.#..##.#..#..#.....#.###.. +...######...#...##.#.#...###..##.###.####.....#.#.#...##..#.####.#.####...########..#.#......###..## +##..####.####....##....#..#.##.###...#.####....##.....##......#.....#..#.##.###.##..##.....##..#...# +#..##.######.#.#.#..#.#.###....###.#.#...#..###...##..###....###....#.###.#.#...#.###.#...##.##.#.#. +.######.##.#.####.#..#...##.....##.##..#.#.#..##....#.####.#..#..##.#.#.#.......#...##...###.###.##. +#.#.######.#.####.....#.#.##.#.####..#####.#.##.#..#.#..#####.####.##..##.#....#..#...#.##..###.###. +###.###....####...#.###.#.####..###.#..###..#.##.#.##..##..#.####...#########.##.####.####...#.###.. +#.##..##..#.##.#.##.##..#.##..#####.#.###.#...##.#.##.###..##.#.##.#..####.####...###.#.#.#...####.# +..####..########..#.#.#.#.###.#..#...###..###.#..#####.##.#....##.#..##.##......#..###.##..##...#..# +.#..#...#..##..#..####.#.#.#.#...#.##...##...#########.##..#.###..##.###.....#.#...###...###.####..# +.#.......#.##.#..###.#......#..###..#...##.###...#.#.#.###....####..##.##...##.####..#..#.#..#####.# +#.#.#####..#.#.#######...###.###.##..#.#.#.#....#.###....#.#.#####.###..#..#........##.#.#.....#..## +#.##...##...#..#########.###.....######.....##.#.#.##.###..#..#...####..##..#..#.#..#.#.####.#..#... +..#.#..#..####.#.##.#...###.###.#.#..##..##.##.##.###.....#..##.###..##..#..#.......###...#.##...### +.##.##.##.......#........#.##..#.###...##....###.##..#..#....##.##..####.##.#.####..#.#.#.#.#.#.#.## +.#..#.#..####....##.##.#...###..##.#.#####.###.#.##..###.##...######.#.#...#...#..#.#.#.#..#..###### +.###.##..#..#..###...#.#.#...##..#...##...##.#.#####.##.#.######.##..#.#####.####.#.....#.##.###.#.# +.###.######...#.####...#.#..#...##...###.###########.#.##.#######.##.##.###..###...#####...#.#..#### +.####...#.#...#..####.#.##...#.##..#..#..###.#.##..#.##..#...##.#...#########.#..#....##..#...##.... +.##.##.####.###...#####.#.##.#...###.###.#.#.#####.#..###.##.#..##.####.....#.....#.####.##.#.##.### +###.....#.##...#.##....#...#.#.#.#..#..##.....###..##.###..#....#.....#####..########.#.###.##.##### +..#.......#.#..#..#..##.#...#####..#..###.#..#.#.#...####.#.....####.#..###.#...##.####.##.#.#..#.#. +#.###..###..#.####.#.####.####..#.##.#.....#...######..##..###..##..#.#####...##....#.##.#.##.##.### +###..#...#########...####..#.###...####.#..#.###.....#.#....####....###.###...#.###.#..#...#.###..#. +...####.#..#.##.###.#.#..#.##.#.####....##.##.#.#.#..#.##..#.#...#.##.###..###...#..#..#.#.#.##....# +##.#.#...##...##.##.#.##..#......###..#..#....##.#.##.##.#####..##....###..###.#....##..##....#..### +.#.#.##..##.#.........#..#..#.#.##..#.##...#.#.###.###.#####...#.###.##..###.#.##.#.#.......##....#. +#..#.###.##.###.##...#.#...##..#.#.##..##..#..##..###....##..#...#####.....#.#.#####.#.#.##..##.##.# +#..#.##..##......##.#.##.####...#..#..#..##..#.##.#######.##.#....##..##.##.##..###.#...####.#.##..# +#.....###.####..#.#####.#.###.##....####..#.##..#....#####..###.#.#.#.###...#.#.#.#.##...##.####.##. +#..#.#..#..#.#...#.#.#...#.#.##......#..###.##.#.###..###...#.#..##..#....#.####..#.#####.######.... +#...#.#..#####.##..####..#.#####.....##...#..####.##..........#.#.....##.##.#.#.####.###...#......#. +###.######.####.##.###.#....#####.....###.##..##..##.######.#.#...##.##.##.###...##..####..##..#.#.# +##...####..##...#..#.#.##..###.##..#.####...#..##.#.#.....######..##..#..#.##...##.##.#....######### +..#...###..#.##.#...###.##.#.########.....#..#...#.#.#....#..######.##.#####.#.##....###.#......##.# +#.###.#..#.....######.#..#..###.#...####.##...####.#...#...####.##..###..#.##.#######....##.#..##### +##..##...#..##.#.#.....#.#.#.###.####.##.###..#..####...#########.#.#.##...#.#..###.##.#.###.#.##..# +.#...#....###.#.###..####..#.##..#..##..##......#.#..##....#...##.#...#.#.....###.#...#.##....##.... +.#.............#####.....#.###.###.#.######.......#.#.#...####......#...#..####...##.##.###....#.### +....##########.#.#..####.......#.#......#####.##.##....#..#.#.###..#...#..#..##..#..##.#..#..#.....# +......#####..####.#..##.#.#.##..#.###......#...##..####....#...##..#..#.####.##.#...##.###.#..###... +##......#..#.###.#....#...#..#..##.###..#.##..####.#.##..##..##..##.#....#.##.##.#..........####.#.# +###....##.#.##.##.#####.##.#.##..##.##.#..###...#..#..##.....##..#.#....##...####.##....#.########## +#.########..####...##.#...#..###....#...####..##.##.#..###.....#.#.#.#.#.##.##..#....#..##.###..#.## +.....##.###...##...###.##.#####.##..####..####........#...###.####...#..####......#.....###...###.#. +#.#.##.#.....#...###..##..#....##.########.#..#####.##.####..#####.##..###.#.##..##.###.#.#..##...## +####.##.##.##.##..#.##.#.##..###....#.######..#.##.##.....#..#.#.##.##.#...#####.#.#.###..##.#.#.#.# +#...##..#.#####.#..###...#..#.######.##..######...#.#.#...#...#.....#..#.##.###...###.######.##.#..# +.........#...#.#.#.##..##......##.##.#.####.#....##..#.#.#.#..##..#.#....##...##.#####.#..#.#.#..### +####..##.#.##.#..#..###..####.####.#.#..#.#....##.....##.#.#.#####..#...##.#.##.#.#...##.#.###...### +.#..###.#.##.#####.....##.#..#..#.#####.#.#.#.####...#....#.......##..#.###.##..#.##.##..#..##.##### +.##.......##.#.#.#.####....##..###.#..###..#.....#.##.#....##.#......#..##.##.##..##.###.####.#..... +#######...#####...#...#.#.#####..##.###..#.#.#..###.#.....#####.#....##.#...####.###..#....##.#..### +..#....#.#.#..#...#...###..#.######.##...###.##....##.#..#.#.#...####.#....####.#.###....######.#... +.##...#....###..#.##..###...#.####.#.#####..#.....##.#....#.####.#..######.##..#.##.##...##..##.##.. +###.#..##.##.###.#.......#.#......###.#.##.###....##..####..#.#.#.##..###...##..##.##..#.#######...# +...##.##..##.###...#..##.##.#..#..#.#..####.#.....###..####.#.##.###...##.##.####.#.#..#####.##..... +..##.##.##..##......#..##.#.####.##.#.##.....##.##.####..#..###.###...#.#....#.#.###.##......###.##. +##..##.#...#.#.##.....#.#..###..#.#..........#.#####......#...##..#..#..#.#....##...########.####... +####...##.##.#.#.#.#.#..#######..#..#####..##..##.#.#.##...###...#..####.###.###.#....###.#...#.#.#. +##..#.#.#####.###.###.###...##..#..#.#..##.#..#.#..##....#....###.####.#..#.#.##.##...###.###..###.# +#.##..#...#....###...#.##.##..###..##............##....#.##...#.##.#.#..#####...#...#..#.#....##.#.. +####.#..#.##.......###.##.....#.#.##.#......##.#.#.###.#..####.#.......####..##..##.##.####....#.### +.##.#.###.##.#####..##.#.#...#.####.##.##.#..#..#....#..####.#.###...#....##...#.##.#.###.....##...# +.#...#.##.######.#.###.#....#.#..#.#.#.#.#...#.#.....#....##...#...##..###.#..#...#.#..####.#.#..#.. +..##...##....#..#...#.#.####.####....###...#.#...#####...#..##..##..#.#####...##..##..##......#..... +.#.#.....####....#####.#.######.#..#####.#..#..####...#.#.###..#..##....#....##...#.######.#.#.....# +###..###.#.##..#.####.#.##########.#.####..#...#.#.#...#.##...#.##..#..#..#...#.....#....#..####..## +.#..#.#.##...##.###.##.#####....####...##.##.#..#.#.#..##.###.#...###.#.####.###########.#...#...##. +##.#...#..###..#.#...#.##.##....#.#.##.#####..#....#.###..#.####.###..##..##..#...#.#..#.........### +.......#...#.##.###..#.#.#...#........#.#.##.##.####..#.#..#..##..#....####.###........#...##.###... +..#####...#.###...##.#.#.##...#...#####.##.###.#.#.####.#....##...#..####..#.#.####.....#.####...### +#.###.#.......###..##.#..#.###.###.####.#....#..#..#.##.####..##..#.#..#...##.##.#..###....#####.... +......##..##.#.###.###.....#.##.#.#.##.######..#..######..#..#...#..#....#..#.##.####..#.#..#....#.# +.#..####..####.#..##.###.####....#..#.....##.##.#..##..###..####.##.##.#...###...#.#.####..##.#....# +.#....#.###.###.....##....#...#..#....##....#...#.######..##.........######.####..#.#..#..##....##.# +.#####.##....###....###...#.##...#...#...##..##.#.#.###.##..###.#.#.#.###.#######..#....#.###..##... +..##...#.###.#.#..#.#.......#..##.###.##..#..####..#...#...###....#.#...#...#.#...###.##...##.##.#.. +..#....#####..###.##.##.##...##..#.#.#.....##..##..##..###..#...###.###.#.#.####.##.###..#..####.##. +.#.#...##.##..#...#.#....##.##.##.###..#.#.##.##......########....##.#.#.#....##....##.......#.#.#.. +#.#.##.#.####.#...##.#..##.....#####...##.#.##.#.##.##.####..##.#...#.#######.##..#....##..#........ +###.....#........##......##..###.##.#...###..#.#..#.###..#..##.##.#..#.#...#.#.##.#.###.####.##....# +###.#..#..#..##.......##.###.###.......####....#..##..#...#..#####.....####.###..#.#..####...#.#...# +.#...##.###.#######..#.#.####.#.....#.###.#....#.....#...######.#.#.#.#.....###..##..##..#####....## +#.####.#..#...#.######.#.#.#....####.#######.#..###.#...####..#..#.....###.#....#.#.#.#..#.####..### +.##..#..#..###..#..#.###....#....#.....##...#..#.#########..###########..#.#####..##.#.####......### +##.###....##....##.#.##.##.##.......######.#.#.###.###.#####.#..##.##...####..##.######.####.#.....# diff --git a/2021/20/testinput b/2021/20/testinput new file mode 100644 index 0000000..8fa4bd4 --- /dev/null +++ b/2021/20/testinput @@ -0,0 +1,7 @@ +..#.#..#####.#.#.#.###.##.....###.##.#..###.####..#####..#....#..#..##..###..######.###...####..#..#####..##..#.#####...##.#.#..#.##..#.#......#.###.######.###.####...#.##.##..#..#..#####.....#.#....###..#.##......#.....#..#..#..##..#...##.######.####.####.#.#...#.......#..#.#.#...####.##.#......#..#...##.#.##..#...##.#.##..###.#......#.#.......#.#.#.####.###.##...#.....####.#..#..#.##.#....##..#.####....##...##..#...#......#.#.......#.......##..####..#...#.#.#...##..#.#..###..#####........#..####......#..# + +#..#. +#.... +##..# +..#.. +..### diff --git a/2021/21/code.tl b/2021/21/code.tl new file mode 100644 index 0000000..3622b02 --- /dev/null +++ b/2021/21/code.tl @@ -0,0 +1,52 @@ +(defstruct player () + num + pos + (val 0)) + +(defun read-input (: (name "input")) + (flow (file-get-lines name) + (keep-matches (`Player @num starting position: @pos` @1) + (new player num (toint num) pos (pred (toint pos)))))) + +(defun counter (start) + (lambda () (pinc start))) + +(defun solve-one (: (name :)) + (let ((count 0) + (die (counter 1))) + (buildn + (pend (read-input name)) + (whilet ((p (del))) + (inc count) + (upd p.pos (+ [die] [die] [die]) (mod @1 10)) + (if (>= (inc p.val (succ p.pos)) 1000) + (return (* count 3 (del).val))) + (add p))))) + +(defstruct game + players) + +(defun quantum-turn (ga) + +(defun solve-two (: (name :)) + (let ((ga (new game players (read-input name)))) + ( + + + (die (counter 1)) + (player-stream (repeat (read-input name)))) + (each ((p player-stream)) + (let ((npos (mod (+ p.pos [die die die] 10))) + (nval ( + (if (>= npos 21)) + (( + + + (buildn + (pend (read-input name)) + (whilet ((p (del))) + (inc count) + (upd p.pos (+ [die] [die] [die]) (mod @1 10)) + (if (>= (inc p.val (succ p.pos)) 21) + (return p)) + (add p))))) diff --git a/2021/21/input b/2021/21/input new file mode 100644 index 0000000..9e88c73 --- /dev/null +++ b/2021/21/input @@ -0,0 +1,2 @@ +Player 1 starting position: 8 +Player 2 starting position: 7 diff --git a/2021/21/testinput b/2021/21/testinput new file mode 100644 index 0000000..3f69194 --- /dev/null +++ b/2021/21/testinput @@ -0,0 +1,2 @@ +Player 1 starting position: 4 +Player 2 starting position: 8 -- cgit v1.2.3