From 9d945796591d2bf42ea3e78e84f927d93b3bffbc Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Mon, 13 Dec 2021 21:12:04 +0000 Subject: Adding initial files --- inputs/01.txt | 2000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ inputs/02.txt | 1000 +++++++++++++++++++++++++++++ inputs/03.txt | 1000 +++++++++++++++++++++++++++++ src/01.lisp | 24 + src/02.lisp | 33 + src/03.lisp | 45 ++ 6 files changed, 4102 insertions(+) create mode 100644 inputs/01.txt create mode 100644 inputs/02.txt create mode 100644 inputs/03.txt create mode 100644 src/01.lisp create mode 100644 src/02.lisp create mode 100644 src/03.lisp diff --git a/inputs/01.txt b/inputs/01.txt new file mode 100644 index 0000000..56f4f8b --- /dev/null +++ b/inputs/01.txt @@ -0,0 +1,2000 @@ +159 +170 +171 +170 +168 +167 +166 +164 +163 +154 +155 +158 +146 +153 +167 +166 +182 +188 +189 +201 +205 +212 +220 +228 +229 +230 +214 +221 +224 +226 +227 +237 +233 +236 +242 +214 +226 +233 +237 +233 +244 +246 +255 +256 +246 +247 +252 +265 +266 +267 +269 +270 +264 +269 +285 +298 +307 +308 +313 +318 +319 +312 +306 +314 +340 +341 +349 +364 +363 +362 +350 +352 +356 +358 +359 +350 +382 +384 +385 +373 +364 +366 +370 +373 +400 +402 +442 +459 +434 +435 +454 +470 +474 +479 +484 +485 +487 +497 +538 +541 +544 +512 +520 +530 +529 +532 +538 +556 +557 +560 +557 +525 +533 +525 +528 +533 +540 +546 +539 +536 +539 +545 +542 +567 +595 +604 +616 +608 +609 +612 +613 +621 +622 +624 +625 +633 +632 +634 +627 +631 +632 +640 +646 +648 +649 +646 +647 +655 +657 +658 +654 +655 +656 +655 +659 +658 +662 +664 +665 +667 +668 +667 +670 +675 +686 +687 +691 +694 +687 +701 +690 +693 +703 +702 +703 +702 +709 +710 +719 +743 +754 +752 +753 +769 +775 +772 +771 +768 +765 +766 +767 +769 +783 +777 +782 +793 +809 +808 +815 +817 +792 +798 +800 +802 +780 +781 +776 +778 +779 +771 +762 +760 +761 +770 +768 +773 +776 +784 +793 +807 +823 +825 +831 +832 +834 +844 +845 +852 +844 +835 +837 +838 +834 +839 +840 +848 +842 +873 +883 +904 +903 +905 +911 +929 +928 +957 +960 +961 +960 +965 +964 +950 +952 +943 +937 +941 +936 +937 +938 +945 +967 +954 +953 +950 +951 +960 +961 +962 +964 +970 +971 +972 +946 +952 +956 +953 +966 +967 +964 +982 +997 +998 +995 +994 +1003 +992 +994 +988 +1005 +1009 +1015 +1016 +1017 +1021 +1019 +1036 +1037 +1038 +1031 +1034 +1035 +1024 +1027 +1049 +1045 +1052 +1012 +1009 +1020 +1031 +1033 +1036 +1032 +1022 +1023 +1024 +1016 +1017 +1021 +1034 +1031 +1011 +1013 +1015 +1016 +1030 +1043 +1044 +1048 +1053 +1054 +1077 +1078 +1080 +1083 +1084 +1083 +1112 +1124 +1125 +1126 +1118 +1117 +1116 +1122 +1125 +1130 +1136 +1140 +1137 +1128 +1157 +1158 +1144 +1146 +1144 +1127 +1145 +1147 +1146 +1125 +1133 +1134 +1133 +1156 +1143 +1160 +1156 +1158 +1160 +1159 +1185 +1201 +1184 +1196 +1198 +1193 +1195 +1204 +1205 +1224 +1235 +1230 +1231 +1229 +1214 +1221 +1225 +1227 +1228 +1223 +1226 +1227 +1239 +1261 +1264 +1265 +1279 +1278 +1271 +1288 +1290 +1288 +1293 +1297 +1300 +1307 +1327 +1332 +1330 +1327 +1304 +1324 +1327 +1328 +1330 +1344 +1330 +1328 +1330 +1331 +1328 +1317 +1320 +1310 +1311 +1322 +1326 +1314 +1313 +1317 +1306 +1312 +1322 +1315 +1318 +1310 +1313 +1314 +1319 +1306 +1302 +1305 +1303 +1305 +1303 +1306 +1303 +1271 +1277 +1283 +1299 +1310 +1328 +1313 +1328 +1332 +1338 +1353 +1346 +1355 +1356 +1353 +1370 +1365 +1367 +1370 +1377 +1374 +1376 +1378 +1386 +1384 +1386 +1387 +1403 +1404 +1405 +1411 +1420 +1421 +1423 +1413 +1411 +1404 +1402 +1413 +1432 +1431 +1446 +1436 +1435 +1432 +1444 +1459 +1482 +1481 +1482 +1481 +1505 +1507 +1511 +1517 +1530 +1531 +1522 +1532 +1538 +1540 +1544 +1546 +1548 +1554 +1555 +1558 +1527 +1529 +1530 +1523 +1508 +1510 +1512 +1509 +1514 +1526 +1527 +1531 +1539 +1570 +1584 +1608 +1637 +1643 +1651 +1660 +1671 +1672 +1674 +1679 +1687 +1685 +1678 +1681 +1692 +1698 +1728 +1734 +1725 +1724 +1751 +1756 +1765 +1775 +1778 +1791 +1793 +1788 +1819 +1824 +1830 +1831 +1830 +1852 +1854 +1844 +1848 +1879 +1898 +1914 +1922 +1927 +1930 +1929 +1943 +1947 +1948 +1965 +1934 +1937 +1939 +1947 +1948 +1944 +1949 +1956 +1954 +1984 +2004 +2008 +2019 +2021 +2022 +2031 +2036 +2054 +2057 +2060 +2061 +2063 +2062 +2063 +2064 +2054 +2058 +2055 +2052 +2057 +2060 +2061 +2060 +2064 +2061 +2063 +2064 +2060 +2061 +2044 +2036 +2040 +2041 +2033 +2020 +2003 +2018 +2017 +2020 +2021 +2013 +2015 +2024 +2041 +2052 +2050 +2075 +2082 +2083 +2084 +2083 +2085 +2091 +2094 +2104 +2107 +2108 +2101 +2103 +2114 +2103 +2107 +2108 +2110 +2104 +2110 +2114 +2123 +2137 +2149 +2155 +2152 +2149 +2150 +2141 +2159 +2162 +2168 +2181 +2182 +2195 +2196 +2202 +2206 +2211 +2221 +2220 +2231 +2238 +2242 +2221 +2211 +2186 +2191 +2168 +2169 +2177 +2178 +2181 +2188 +2214 +2228 +2227 +2228 +2263 +2269 +2268 +2269 +2278 +2279 +2255 +2256 +2257 +2260 +2267 +2260 +2250 +2251 +2250 +2254 +2252 +2248 +2245 +2248 +2250 +2251 +2255 +2257 +2270 +2282 +2286 +2287 +2288 +2313 +2314 +2343 +2338 +2369 +2367 +2369 +2411 +2408 +2389 +2390 +2392 +2378 +2379 +2380 +2382 +2342 +2345 +2343 +2339 +2340 +2341 +2370 +2378 +2395 +2398 +2394 +2382 +2384 +2377 +2384 +2385 +2386 +2387 +2401 +2408 +2409 +2386 +2390 +2405 +2414 +2416 +2420 +2431 +2430 +2446 +2458 +2459 +2467 +2475 +2477 +2481 +2482 +2484 +2485 +2490 +2498 +2502 +2503 +2492 +2487 +2485 +2487 +2474 +2475 +2469 +2472 +2486 +2502 +2504 +2505 +2506 +2504 +2502 +2504 +2503 +2518 +2520 +2535 +2520 +2518 +2521 +2531 +2540 +2545 +2548 +2550 +2551 +2556 +2554 +2558 +2559 +2574 +2571 +2573 +2574 +2582 +2583 +2596 +2602 +2603 +2610 +2618 +2616 +2617 +2629 +2628 +2626 +2641 +2638 +2637 +2643 +2645 +2646 +2652 +2666 +2668 +2671 +2673 +2672 +2675 +2678 +2671 +2670 +2682 +2684 +2667 +2668 +2670 +2667 +2671 +2666 +2664 +2663 +2666 +2663 +2673 +2674 +2675 +2681 +2671 +2675 +2677 +2670 +2669 +2674 +2673 +2682 +2689 +2671 +2647 +2651 +2650 +2669 +2695 +2704 +2706 +2702 +2701 +2700 +2703 +2708 +2711 +2717 +2719 +2720 +2715 +2712 +2680 +2683 +2684 +2685 +2702 +2703 +2686 +2694 +2691 +2695 +2698 +2710 +2716 +2729 +2732 +2742 +2759 +2760 +2742 +2751 +2750 +2780 +2782 +2779 +2778 +2779 +2767 +2770 +2795 +2804 +2806 +2807 +2808 +2809 +2823 +2824 +2825 +2828 +2819 +2823 +2824 +2833 +2807 +2784 +2781 +2793 +2795 +2774 +2737 +2736 +2737 +2742 +2745 +2746 +2749 +2750 +2769 +2774 +2775 +2793 +2796 +2810 +2814 +2808 +2802 +2803 +2806 +2807 +2799 +2798 +2792 +2795 +2798 +2824 +2844 +2831 +2851 +2848 +2852 +2849 +2875 +2871 +2880 +2878 +2882 +2889 +2878 +2883 +2886 +2885 +2886 +2887 +2893 +2894 +2901 +2905 +2907 +2888 +2890 +2895 +2896 +2897 +2874 +2881 +2873 +2874 +2878 +2881 +2893 +2892 +2889 +2890 +2893 +2888 +2883 +2884 +2873 +2871 +2875 +2866 +2839 +2841 +2848 +2845 +2857 +2880 +2881 +2882 +2883 +2888 +2899 +2902 +2905 +2899 +2927 +2953 +2952 +2956 +2963 +2964 +2962 +2968 +2967 +2964 +2966 +2967 +2961 +2960 +2979 +2987 +3007 +3030 +3035 +3042 +3065 +3053 +3054 +3055 +3056 +3059 +3060 +3058 +3069 +3074 +3073 +3065 +3071 +3074 +3087 +3088 +3079 +3086 +3121 +3151 +3147 +3145 +3149 +3150 +3149 +3151 +3152 +3157 +3146 +3153 +3154 +3148 +3146 +3151 +3152 +3157 +3158 +3162 +3167 +3153 +3163 +3169 +3179 +3177 +3181 +3183 +3188 +3187 +3191 +3207 +3214 +3223 +3224 +3225 +3231 +3239 +3241 +3246 +3252 +3253 +3255 +3254 +3251 +3250 +3252 +3251 +3209 +3228 +3233 +3232 +3231 +3239 +3236 +3233 +3236 +3241 +3248 +3247 +3250 +3252 +3284 +3298 +3300 +3301 +3286 +3284 +3290 +3289 +3290 +3291 +3286 +3288 +3295 +3296 +3284 +3283 +3285 +3289 +3251 +3249 +3250 +3251 +3262 +3269 +3270 +3269 +3255 +3258 +3253 +3266 +3270 +3251 +3245 +3247 +3249 +3243 +3244 +3250 +3258 +3287 +3288 +3312 +3320 +3352 +3351 +3369 +3360 +3362 +3364 +3374 +3383 +3364 +3381 +3390 +3391 +3394 +3397 +3407 +3412 +3424 +3432 +3448 +3446 +3447 +3456 +3457 +3467 +3468 +3469 +3476 +3477 +3479 +3514 +3523 +3517 +3518 +3519 +3525 +3528 +3529 +3531 +3532 +3540 +3541 +3544 +3540 +3541 +3542 +3556 +3562 +3553 +3555 +3556 +3558 +3560 +3564 +3551 +3561 +3562 +3561 +3562 +3523 +3516 +3505 +3508 +3511 +3492 +3494 +3512 +3494 +3493 +3487 +3488 +3504 +3522 +3528 +3537 +3550 +3567 +3569 +3582 +3583 +3593 +3613 +3641 +3636 +3647 +3651 +3668 +3679 +3676 +3685 +3665 +3667 +3669 +3674 +3673 +3675 +3689 +3700 +3692 +3698 +3691 +3699 +3685 +3686 +3687 +3696 +3697 +3699 +3700 +3701 +3695 +3696 +3698 +3696 +3699 +3688 +3690 +3699 +3688 +3692 +3693 +3698 +3685 +3680 +3684 +3685 +3686 +3693 +3698 +3705 +3702 +3684 +3686 +3680 +3681 +3683 +3670 +3671 +3676 +3681 +3690 +3681 +3694 +3695 +3708 +3710 +3691 +3687 +3693 +3682 +3678 +3666 +3671 +3675 +3674 +3675 +3672 +3674 +3675 +3674 +3673 +3644 +3646 +3638 +3639 +3637 +3638 +3646 +3652 +3687 +3688 +3693 +3669 +3676 +3683 +3684 +3699 +3690 +3674 +3678 +3677 +3683 +3680 +3703 +3699 +3706 +3707 +3699 +3695 +3705 +3704 +3705 +3719 +3739 +3742 +3743 +3728 +3729 +3730 +3743 +3742 +3752 +3753 +3754 +3760 +3771 +3773 +3782 +3784 +3794 +3814 +3823 +3837 +3840 +3855 +3848 +3861 +3864 +3841 +3844 +3846 +3852 +3853 +3865 +3868 +3877 +3879 +3907 +3932 +3933 +3902 +3914 +3920 +3922 +3908 +3922 +3927 +3926 +3928 +3908 +3912 +3881 +3907 +3890 +3891 +3885 +3900 +3902 +3904 +3901 +3907 +3912 +3914 +3925 +3937 +3938 +3946 +3948 +3947 +3962 +3969 +3974 +3977 +3978 +3985 +3982 +3980 +4004 +4014 +4009 +4010 +4009 +4010 +4029 +4026 +4031 +4032 +4034 +4013 +4016 +4017 +4019 +4020 +4028 +4031 +4032 +4033 +4040 +4041 +4046 +4059 +4065 +4077 +4078 +4079 +4094 +4086 +4089 +4090 +4092 +4091 +4070 +4110 +4111 +4099 +4108 +4112 +4092 +4097 +4099 +4100 +4140 +4141 +4138 +4143 +4142 +4132 +4134 +4143 +4157 +4161 +4185 +4180 +4192 +4193 +4199 +4201 +4203 +4187 +4190 +4187 +4188 +4190 +4200 +4201 +4193 +4192 +4193 +4191 +4194 +4197 +4193 +4200 +4201 +4210 +4216 +4234 +4239 +4225 +4226 +4228 +4232 +4226 +4227 +4235 +4238 +4239 +4244 +4256 +4255 +4254 +4229 +4227 +4233 +4254 +4255 +4251 +4252 +4251 +4247 +4250 +4247 +4249 +4250 +4235 +4236 +4232 +4245 +4247 +4243 +4244 +4246 +4252 +4266 +4271 +4273 +4277 +4279 +4280 +4278 +4279 +4269 +4299 +4300 +4301 +4305 +4290 +4294 +4303 +4304 +4307 +4325 +4326 +4327 +4312 +4313 +4316 +4315 +4319 +4332 +4333 +4356 +4354 +4358 +4366 +4369 +4370 +4381 +4382 +4381 +4402 +4403 +4410 +4409 +4421 +4424 +4448 +4450 +4447 +4475 +4472 +4486 +4464 +4463 +4466 +4465 +4468 +4477 +4478 +4490 +4527 +4528 +4532 +4533 +4525 +4527 +4534 +4556 +4558 +4559 +4555 +4562 +4565 +4566 +4565 +4596 +4604 +4621 +4648 +4649 +4650 +4655 +4656 +4661 +4668 +4682 +4675 +4693 +4686 +4680 +4681 +4685 +4686 +4693 +4694 +4698 +4694 +4706 +4716 +4717 +4718 +4720 +4724 +4730 +4731 +4738 +4740 +4738 +4741 +4740 +4743 +4750 +4751 +4752 +4759 +4796 +4807 +4800 +4815 +4817 +4825 +4853 +4831 +4836 +4839 +4847 +4844 +4851 +4855 +4860 +4858 +4859 +4865 +4874 +4875 +4902 +4910 +4909 +4908 +4922 +4924 +4921 +4922 +4911 +4910 +4907 +4911 +4912 +4936 +4918 +4921 +4915 +4927 +4929 +4931 +4932 +4939 +4944 +4945 +4946 +4949 +4947 +4954 +4964 +4965 +4977 +4978 +4982 +4975 +4978 +4982 +4981 +4985 +4993 +4994 +5000 +5017 +5015 +5039 +5037 +5035 +5047 +5064 +5066 +5072 +5071 +5076 +5078 +5082 +5100 +5102 +5107 +5106 +5104 +5105 +5106 +5105 +5117 +5109 +5110 +5116 +5117 +5118 +5100 +5102 +5103 +5110 +5111 +5126 +5135 +5136 +5134 +5135 +5175 +5177 +5176 +5177 +5203 +5202 +5223 +5226 +5223 +5230 +5256 +5260 +5265 +5267 +5268 +5274 +5273 +5275 +5278 +5284 +5270 +5271 +5272 +5279 +5290 +5298 +5302 +5318 +5321 +5324 +5336 +5335 +5343 +5347 +5352 +5358 +5367 +5368 +5371 +5368 +5373 +5374 +5364 +5367 +5364 +5356 +5360 +5352 +5361 +5356 +5373 +5374 +5375 +5386 +5396 +5398 +5394 +5396 +5398 +5397 +5412 +5413 +5405 +5386 +5389 +5388 +5387 +5403 +5406 +5420 +5429 +5430 +5441 +5449 +5458 +5467 +5466 +5467 +5479 +5478 +5479 +5485 +5525 +5524 +5525 +5524 +5492 +5493 +5497 +5502 +5503 +5504 +5505 +5506 +5515 +5512 +5511 +5513 +5519 +5520 +5521 +5538 +5556 +5567 +5568 +5569 +5587 +5578 +5579 +5581 +5577 +5581 +5591 +5592 +5570 +5572 +5578 +5572 +5575 +5577 +5578 +5586 +5585 +5577 +5578 +5575 +5581 +5569 +5572 +5585 +5576 +5579 +5568 +5569 +5572 +5571 +5572 +5574 +5567 +5572 +5575 +5580 +5583 +5586 +5600 +5602 +5601 +5606 +5609 +5611 +5614 +5623 +5620 +5632 +5640 +5641 +5636 +5620 +5626 +5628 +5636 +5645 +5646 +5623 +5622 +5654 +5673 +5679 +5688 +5695 +5690 +5692 +5709 +5710 +5712 +5722 +5721 +5735 +5746 +5758 +5786 +5766 +5769 +5780 +5781 +5793 +5811 +5812 +5809 +5823 +5825 +5804 +5794 +5795 +5787 +5788 +5819 +5826 +5830 +5832 +5809 +5803 +5804 +5805 +5824 +5825 +5831 +5841 +5842 +5843 +5832 +5838 +5839 +5841 +5840 +5837 +5838 +5832 +5834 +5848 +5852 +5863 +5858 +5859 +5862 +5861 +5863 +5864 +5868 +5875 +5861 +5860 +5837 +5838 +5840 +5841 +5842 +5862 +5877 +5878 +5877 +5878 +5881 diff --git a/inputs/02.txt b/inputs/02.txt new file mode 100644 index 0000000..b71a00f --- /dev/null +++ b/inputs/02.txt @@ -0,0 +1,1000 @@ +forward 3 +down 7 +forward 7 +down 4 +down 9 +down 7 +forward 5 +forward 9 +forward 3 +forward 8 +down 4 +down 6 +down 3 +forward 7 +forward 1 +forward 4 +down 1 +forward 7 +forward 9 +down 3 +down 1 +down 5 +forward 8 +down 2 +down 9 +forward 3 +down 9 +down 7 +down 6 +down 1 +forward 4 +forward 9 +forward 8 +down 3 +down 9 +down 5 +forward 5 +down 7 +down 7 +up 1 +down 2 +up 1 +down 7 +up 1 +up 1 +down 8 +down 8 +forward 2 +down 5 +forward 9 +forward 8 +forward 4 +up 2 +down 9 +down 7 +forward 4 +up 7 +up 4 +down 4 +down 3 +forward 8 +down 8 +up 2 +up 1 +forward 3 +up 6 +up 8 +down 5 +down 4 +down 4 +forward 1 +down 8 +forward 3 +forward 5 +forward 4 +forward 2 +forward 7 +up 5 +up 2 +forward 2 +forward 5 +down 4 +up 6 +forward 3 +forward 1 +forward 1 +forward 6 +forward 7 +forward 1 +forward 8 +forward 4 +forward 4 +forward 8 +down 6 +down 8 +forward 4 +forward 1 +down 8 +forward 3 +forward 3 +forward 9 +forward 9 +forward 3 +up 1 +down 2 +down 5 +forward 4 +forward 5 +forward 7 +forward 4 +forward 4 +up 5 +forward 1 +down 9 +down 9 +down 1 +up 7 +down 8 +up 6 +down 4 +forward 7 +down 8 +down 1 +forward 4 +forward 5 +forward 9 +down 2 +forward 7 +forward 7 +up 2 +up 1 +forward 9 +forward 1 +forward 7 +up 3 +forward 8 +forward 1 +down 6 +down 6 +down 4 +forward 2 +forward 1 +down 3 +down 4 +down 2 +forward 9 +up 8 +down 4 +down 3 +down 1 +down 1 +forward 6 +forward 6 +down 7 +forward 1 +forward 5 +forward 9 +forward 5 +forward 1 +up 8 +forward 7 +up 3 +forward 6 +down 5 +up 8 +down 4 +down 8 +forward 2 +up 7 +forward 9 +down 9 +forward 1 +down 5 +forward 8 +down 7 +forward 8 +forward 1 +forward 5 +down 4 +down 1 +forward 4 +up 6 +down 3 +down 1 +forward 1 +forward 1 +up 8 +down 9 +forward 8 +forward 5 +down 5 +forward 1 +up 9 +down 6 +down 4 +up 2 +forward 5 +down 7 +up 1 +forward 3 +up 5 +forward 9 +up 6 +down 4 +forward 6 +down 8 +down 2 +forward 3 +forward 4 +down 5 +down 7 +down 4 +up 3 +up 8 +down 8 +up 8 +down 8 +forward 8 +down 3 +up 3 +forward 8 +down 6 +forward 2 +down 8 +down 5 +up 2 +forward 1 +forward 4 +down 1 +forward 5 +forward 5 +forward 2 +forward 2 +forward 4 +down 7 +forward 6 +up 6 +down 8 +forward 4 +forward 6 +forward 2 +down 8 +down 2 +up 1 +down 8 +forward 9 +up 5 +forward 8 +up 9 +down 1 +down 2 +forward 6 +down 9 +forward 3 +up 8 +up 4 +down 8 +forward 2 +down 1 +forward 6 +forward 4 +down 4 +forward 4 +up 8 +down 6 +forward 3 +up 2 +up 6 +down 1 +down 3 +down 1 +up 6 +down 9 +up 6 +forward 9 +down 4 +forward 3 +forward 1 +up 7 +down 1 +forward 5 +up 1 +up 8 +forward 5 +down 5 +forward 2 +up 8 +up 7 +forward 4 +up 7 +up 4 +forward 5 +forward 3 +down 9 +forward 1 +down 8 +forward 3 +up 3 +down 7 +forward 4 +down 7 +down 5 +down 8 +down 8 +forward 6 +forward 5 +up 4 +down 6 +forward 4 +up 2 +up 4 +down 4 +down 9 +forward 7 +down 8 +forward 6 +forward 5 +up 8 +down 6 +forward 1 +up 2 +forward 5 +forward 7 +down 4 +down 6 +forward 9 +forward 2 +up 6 +up 6 +forward 1 +up 6 +forward 8 +down 7 +forward 1 +down 1 +up 9 +up 1 +forward 1 +forward 7 +forward 5 +down 4 +forward 6 +forward 4 +down 8 +up 6 +up 8 +forward 6 +forward 3 +up 6 +forward 6 +down 8 +down 5 +down 5 +down 2 +down 6 +forward 1 +forward 4 +forward 5 +down 5 +forward 6 +forward 2 +forward 2 +up 7 +up 6 +up 7 +forward 7 +forward 6 +down 7 +down 7 +up 4 +forward 5 +forward 2 +down 6 +up 4 +forward 8 +down 1 +down 5 +up 6 +down 4 +down 3 +down 8 +forward 8 +down 9 +forward 8 +forward 6 +down 4 +down 3 +forward 6 +up 4 +up 9 +forward 3 +down 3 +down 9 +forward 1 +down 7 +forward 2 +up 7 +down 6 +forward 5 +down 8 +down 1 +forward 8 +down 4 +up 3 +down 5 +forward 6 +down 7 +forward 3 +forward 6 +forward 8 +forward 6 +down 4 +down 6 +forward 9 +up 8 +forward 2 +forward 8 +forward 1 +forward 1 +forward 3 +forward 8 +forward 6 +forward 8 +down 5 +down 2 +down 6 +up 4 +forward 5 +forward 9 +forward 1 +down 3 +down 6 +down 7 +forward 5 +forward 8 +up 1 +forward 4 +up 3 +forward 6 +down 3 +down 7 +down 1 +down 1 +forward 8 +forward 3 +forward 2 +forward 1 +forward 3 +forward 7 +up 6 +down 8 +forward 3 +forward 8 +forward 1 +forward 4 +up 3 +down 7 +up 9 +up 6 +forward 1 +forward 6 +forward 5 +down 5 +down 2 +forward 8 +up 8 +down 4 +forward 6 +down 2 +forward 1 +down 8 +forward 2 +forward 9 +forward 1 +down 9 +down 1 +down 9 +down 1 +up 9 +forward 3 +forward 7 +forward 3 +down 5 +up 3 +forward 4 +up 1 +forward 2 +down 8 +forward 8 +down 1 +up 9 +down 7 +forward 9 +up 6 +down 3 +forward 9 +down 2 +down 3 +up 5 +up 5 +forward 8 +down 2 +forward 2 +up 3 +down 8 +down 1 +down 9 +forward 5 +down 5 +down 5 +down 4 +down 8 +forward 7 +up 3 +up 4 +up 4 +up 7 +down 2 +down 6 +up 3 +down 9 +up 2 +forward 6 +forward 1 +down 7 +down 5 +forward 6 +down 6 +up 4 +down 4 +down 8 +up 5 +forward 9 +down 8 +forward 1 +forward 2 +forward 8 +forward 2 +forward 3 +up 9 +up 8 +up 9 +up 6 +down 5 +forward 7 +up 8 +forward 1 +down 3 +down 8 +forward 3 +up 6 +down 2 +forward 2 +up 4 +up 4 +forward 6 +forward 1 +forward 4 +down 3 +down 1 +up 7 +down 9 +up 1 +down 9 +down 4 +up 2 +forward 8 +down 3 +forward 7 +up 6 +forward 7 +up 2 +forward 5 +down 3 +up 2 +down 3 +down 8 +forward 5 +down 8 +forward 7 +up 6 +down 4 +forward 4 +down 1 +up 3 +forward 6 +down 1 +down 2 +down 2 +forward 7 +down 6 +down 2 +forward 9 +down 2 +forward 2 +down 2 +forward 6 +down 9 +up 4 +up 7 +up 6 +down 3 +forward 3 +down 7 +down 6 +forward 8 +down 4 +up 3 +down 1 +forward 8 +down 4 +forward 5 +forward 1 +down 7 +forward 5 +up 3 +down 7 +forward 3 +down 4 +up 1 +down 5 +forward 8 +down 2 +forward 9 +forward 3 +up 2 +down 9 +forward 5 +up 7 +down 7 +down 1 +down 7 +down 8 +forward 1 +down 9 +down 7 +forward 4 +down 5 +forward 9 +down 6 +down 1 +forward 2 +up 4 +up 3 +down 1 +forward 4 +up 3 +forward 4 +up 2 +forward 6 +down 6 +up 8 +down 3 +forward 5 +down 2 +forward 9 +down 3 +down 7 +forward 4 +down 5 +up 9 +up 9 +down 4 +up 5 +forward 1 +down 8 +up 8 +up 4 +up 2 +up 8 +forward 5 +down 5 +up 1 +down 6 +down 3 +up 4 +forward 3 +forward 1 +forward 1 +up 4 +forward 1 +down 6 +forward 7 +forward 4 +forward 4 +forward 9 +forward 6 +down 6 +forward 4 +up 7 +down 5 +down 2 +forward 3 +down 7 +forward 8 +down 7 +forward 4 +up 9 +down 1 +forward 3 +forward 1 +forward 4 +down 2 +up 2 +down 1 +down 4 +down 7 +forward 5 +forward 3 +up 5 +forward 1 +down 4 +down 8 +up 4 +up 1 +down 1 +down 4 +down 2 +down 4 +up 8 +down 3 +forward 8 +up 5 +down 4 +forward 9 +forward 7 +down 4 +forward 7 +forward 9 +forward 6 +forward 9 +up 9 +down 3 +up 4 +down 8 +forward 9 +up 2 +up 3 +forward 8 +forward 3 +forward 1 +forward 7 +forward 8 +forward 9 +down 7 +forward 3 +forward 3 +forward 4 +up 8 +forward 1 +forward 5 +up 9 +down 2 +down 7 +forward 5 +up 4 +forward 9 +down 9 +up 2 +forward 7 +down 9 +up 8 +up 1 +up 1 +up 5 +forward 4 +down 2 +forward 7 +down 1 +down 8 +down 8 +forward 3 +forward 8 +up 9 +forward 7 +forward 6 +forward 3 +forward 7 +up 3 +up 6 +forward 5 +forward 5 +down 2 +down 7 +down 7 +up 7 +forward 6 +forward 1 +forward 7 +up 6 +down 9 +forward 7 +forward 1 +up 7 +forward 4 +forward 9 +up 2 +down 5 +down 6 +down 4 +forward 1 +forward 7 +forward 4 +forward 5 +down 2 +forward 5 +down 9 +forward 7 +forward 4 +up 5 +down 6 +forward 2 +forward 4 +forward 8 +up 1 +down 2 +up 9 +forward 6 +down 1 +forward 6 +forward 4 +down 6 +forward 6 +up 4 +down 5 +forward 8 +down 3 +up 4 +forward 3 +down 6 +up 7 +down 8 +down 5 +down 7 +forward 4 +down 1 +forward 5 +up 9 +up 3 +down 4 +forward 9 +forward 6 +forward 1 +up 5 +down 5 +forward 1 +forward 6 +down 4 +up 7 +forward 5 +down 5 +forward 1 +forward 5 +down 4 +forward 6 +down 6 +down 5 +down 5 +forward 4 +down 5 +forward 2 +down 9 +down 6 +down 5 +forward 5 +down 9 +down 7 +up 8 +down 3 +forward 6 +down 4 +forward 8 +forward 9 +down 1 +up 3 +forward 4 +up 3 +forward 7 +down 5 +up 8 +forward 1 +up 1 +down 2 +forward 1 +up 9 +down 4 +forward 1 +up 3 +down 9 +up 8 +down 2 +up 4 +forward 2 +forward 8 +up 8 +forward 9 +forward 2 +down 4 +forward 8 +down 4 +forward 9 +down 1 +up 8 +forward 6 +down 4 +down 8 +forward 1 +forward 1 +forward 5 +forward 9 +up 4 +down 7 +forward 4 +down 5 +forward 1 +down 4 +up 8 +up 4 +forward 2 +forward 9 +down 8 +down 3 +down 2 +up 3 +down 1 +down 8 +forward 5 +down 6 +down 5 +forward 8 +down 8 +down 1 +forward 1 +forward 3 +forward 7 +forward 1 +up 2 +up 3 +forward 9 +down 2 +forward 5 +down 8 +forward 7 +forward 3 +up 5 +forward 1 +forward 1 +up 8 +down 1 +down 2 +down 7 +down 1 +down 9 +forward 7 +down 8 +down 4 +up 8 +forward 1 +down 6 +forward 9 +forward 7 +up 2 +forward 3 +forward 2 +up 3 +up 6 +up 1 +down 1 +up 9 +forward 8 +forward 6 +down 6 +up 8 +down 8 +forward 5 +forward 7 +down 7 +forward 3 +forward 9 +down 8 +down 8 +forward 2 +up 7 +down 4 +down 7 +up 6 +down 3 +forward 1 +forward 8 +down 5 +down 6 +up 5 +forward 8 +forward 6 +up 8 +forward 8 +up 3 +up 6 +up 3 +forward 1 diff --git a/inputs/03.txt b/inputs/03.txt new file mode 100644 index 0000000..a7f46b0 --- /dev/null +++ b/inputs/03.txt @@ -0,0 +1,1000 @@ +000011000110 +100110100101 +101100101001 +001100010000 +011000100100 +110100101111 +110110001001 +010010100101 +100111000010 +001010110001 +110111010001 +110001011000 +011110010100 +001001010111 +110010111111 +111011010111 +100010001011 +010001100010 +111110111111 +001000101111 +010111110110 +000000001100 +001000110101 +111111010011 +111010011100 +111010010110 +100110011000 +110110000010 +101101011101 +111100000001 +110000101011 +000110111000 +110101110000 +110001100001 +110101001101 +100011011000 +110101000111 +100010100111 +111101001100 +000110000110 +101011000100 +011100100001 +101110111010 +110011011101 +010111001101 +110001001101 +100000000101 +010011100100 +111001111111 +101111111111 +110000101010 +000110100001 +111100111000 +000010000100 +010100101001 +000000111111 +111100111011 +000010100111 +100101101110 +101001110110 +100101000111 +111100101011 +011101101000 +101010110101 +010011000100 +111001101110 +001110000110 +000111001011 +010110101011 +100001011001 +001111000111 +110000111000 +111111111011 +100010110011 +001011000100 +100011101111 +111101101000 +111100111010 +000110001100 +010000110001 +000101010101 +110100011000 +001100101111 +110110101010 +101111100111 +011111110001 +011000001100 +110101100001 +101010000111 +101000001000 +001101110100 +100000111010 +011101110000 +011100100100 +111000111010 +100001111110 +100001001111 +011111110010 +001110101011 +111100011010 +010100010111 +000000110001 +110100010001 +110100111101 +101110110000 +111010101010 +101100110001 +010011011001 +111000001001 +100001110101 +011001000110 +010001100101 +100111010101 +100011011010 +001101110011 +100111101101 +111000010010 +011110110001 +100110000010 +000000100011 +100010110100 +101001010101 +101001101100 +000111111000 +101010110100 +010011000001 +110110011101 +111001010110 +011100111101 +001100010001 +011101000001 +001001101001 +010111001011 +111000000010 +111011011101 +101010011101 +001001001110 +001011100011 +100100111111 +101110101111 +111001011101 +000010001100 +010110101010 +001101000010 +010011101110 +110000001001 +010111001111 +100011000010 +100000110010 +100111110101 +100111111011 +010000000101 +111000101101 +010111001010 +100100110101 +100110000110 +110010110111 +000000111101 +010110011100 +100000101000 +000110001111 +001001110110 +101010111001 +101010100110 +101101100111 +001111010110 +001001110100 +011010011111 +101100101010 +001010011010 +101111010100 +100110100001 +111001110101 +110100001110 +000011001100 +001101011110 +001011111010 +101100011101 +001111001110 +111000111000 +100111001010 +010100111100 +010100000111 +010100101011 +010100000001 +100111000110 +111011010000 +100011011001 +111001001110 +000000010101 +111001011110 +010101011000 +110010001001 +100011000000 +111100001100 +001010000100 +100000100110 +100011110110 +010010110001 +011110000000 +000000101000 +010001011001 +011010111010 +011010101110 +001101011011 +111100111001 +011011010110 +111110100101 +100001110001 +010111011100 +111100100001 +110011100010 +001010001011 +100100111100 +000010010001 +101111010000 +111000001101 +000110001011 +000101101001 +001001011011 +001001010010 +011110111011 +001001100001 +110011001011 +000011110000 +001011011101 +001010010010 +011100111110 +101000101000 +110000011001 +010001100001 +011010100010 +100101110010 +111100001010 +001110000010 +011101000000 +110100110011 +010010011101 +101001000100 +110111110010 +001100000011 +000001110110 +000101010010 +100000011011 +000000000010 +011111000111 +110010101011 +100101101001 +010110010101 +000100101000 +001011100010 +001110100010 +110111101001 +101110110100 +011100110101 +011101100111 +001100101100 +111101000010 +011110110100 +111001100000 +111110011000 +001101001110 +101000011111 +110010010110 +111011100011 +110010111001 +101111110111 +101001100110 +011010011010 +000010100101 +110110100001 +000101001001 +000001111111 +010010111011 +100010110111 +110111011111 +010001001101 +000110110101 +010010010100 +101011001111 +111000011110 +110110010010 +111110100110 +100110000001 +011111100001 +001100010100 +001101000101 +011011100010 +011110101111 +001101110110 +110101010110 +000110101101 +111010111000 +011001011111 +100011111101 +110100111100 +100111101100 +001011001110 +111000010100 +001100000110 +111011010101 +000001001011 +111100000000 +010010111101 +110011101010 +011110111110 +011111011110 +111001001001 +000100100111 +001010010101 +101011101101 +110011010111 +011000001000 +111001000101 +101001110011 +011110110101 +111101111011 +111100101100 +001010110100 +101100111000 +011011000000 +101000100011 +100001100110 +001000011101 +001110100000 +011111111101 +010001010111 +001101001000 +100101100100 +000011010110 +100000000100 +011100011111 +000010110011 +100000100010 +101100101110 +100100000010 +001001111001 +011100110111 +011111100011 +010000101100 +100101001101 +000110010100 +110101010010 +100010100011 +110101000001 +010000000110 +110110001011 +100011001001 +111111110000 +111010000011 +011001010101 +011111101000 +100010101111 +010100100000 +100110110100 +101111010011 +011101010001 +100100001010 +001110000000 +001110000101 +111010000010 +101000010000 +111101011111 +001001110001 +011001000100 +000011101100 +100010010111 +110000101111 +110010100100 +100000011111 +011100100011 +000001101000 +101010100001 +010001100011 +001010111110 +111010111110 +011011000100 +001101100000 +001101100011 +111010011111 +111110110010 +010110100111 +101011011010 +110010011001 +001011010010 +000101100000 +100000100011 +000111100001 +001111110101 +000011101001 +110101010100 +111011010110 +101111011000 +001000100100 +010110011001 +110111000011 +001010011000 +110011000010 +111101001000 +000001010001 +101011110111 +011001100110 +101101101101 +100011010110 +110001010000 +110001010001 +100011100110 +111111011100 +000101101000 +110000111001 +111100010011 +101010110001 +101100001011 +110100110001 +100110111011 +011100100111 +110001011111 +011010100101 +101011111100 +111000010101 +110110110100 +111101100011 +001110100101 +100010111001 +100010001001 +100001010101 +010011001100 +000101010111 +101100010100 +000101000111 +001111101100 +111000001100 +100110101101 +000001100010 +100010011011 +011001000011 +110000010100 +010100001011 +101011001110 +000110110000 +110011000110 +101101111101 +001001000111 +001001011111 +110100011011 +101110010011 +100001011000 +010010110111 +011001011000 +011011101100 +100110000100 +001101110000 +011011001101 +111110001011 +110111100101 +101001010100 +100101110101 +100010000001 +011110011010 +000010011100 +111011000101 +100110001011 +000101101011 +011100100010 +000010111000 +000001100000 +000100001000 +110110101110 +101000100110 +100101010001 +011010010100 +000001111110 +001100010110 +001001101111 +111010001011 +100100101111 +011100011011 +100111011110 +000010010101 +011001110001 +001011011000 +011010100110 +110011011111 +001110011101 +111101010001 +101010111000 +110000010110 +110110001000 +011000111001 +111010100111 +101011011110 +001001011001 +101011100111 +111011110010 +010100110101 +101001111010 +111110011111 +110110010000 +101101010101 +000101111100 +001110101010 +111111111000 +001001000100 +111011011111 +111000010001 +111101100010 +001000011100 +100100000001 +111101010011 +001100011110 +110000001100 +000101011000 +101000101111 +100000101100 +001010100001 +001100111001 +000110011011 +000111100000 +010001000001 +010010111001 +101111001101 +110111011101 +101010001110 +101010100111 +111101000001 +101001011010 +011111010100 +100010111000 +110111110001 +001110111000 +000010001111 +110111001101 +110110011110 +000001001111 +110100000000 +100101011001 +111101110001 +001000000000 +110110001010 +010000101111 +110000000100 +111100110100 +001110000011 +101100111111 +100101011110 +010010101110 +001011001001 +011000101000 +100000001010 +010001110001 +011001111001 +111100001111 +000111100011 +110100100111 +101101111011 +101010111101 +110000001011 +011011010000 +001000100000 +101101001100 +110111101000 +111011101011 +110011101100 +000010010000 +111100010100 +000111011101 +110110110011 +100110100000 +101010000110 +101001110001 +101110001101 +100010111110 +011001001001 +011111111001 +000101010110 +010011110111 +000000000011 +001101001100 +001001110101 +010010101100 +101100000110 +010110011111 +101000010110 +011001011010 +011111110000 +101101111001 +110011110110 +101101101010 +111111111110 +011001110110 +000010111101 +100110110001 +000111010001 +000011001101 +100110111111 +101010011110 +101010011011 +110011010001 +101001100000 +111100000111 +000111101000 +011011010111 +010111000011 +000111100101 +101111011111 +101110011111 +100010001000 +101111000001 +100101010101 +101011110010 +001010111111 +010101010001 +110101110110 +000000111110 +010001101000 +111111001001 +110111101111 +100100110000 +110111010010 +111011000000 +011100010001 +001100100010 +010110010011 +111101010000 +011010101011 +100110010101 +011100000110 +001110011001 +001010100000 +101000000000 +101011101110 +111100110101 +100111110100 +011000110010 +110011010011 +101011011101 +101001110111 +011010111111 +101011000010 +001100110010 +111100100111 +100110111000 +111111010010 +010111010100 +101000101010 +011000011111 +000001110100 +101110111000 +001001011000 +011001100101 +011111000000 +110001101010 +010000101110 +000001110010 +000000000101 +001010111001 +101101101001 +110100100100 +001000100011 +010000000000 +010111010101 +011010001010 +000101010011 +101011001010 +001010101101 +101110001010 +101101110000 +001000010001 +100001000001 +010100000011 +011111011010 +001110011111 +010000110000 +100100010010 +111011111101 +010010010010 +110010000000 +011000111100 +001110010101 +100110011010 +110101000011 +110011000001 +110101111000 +111001011100 +101010000100 +001001110011 +101011110101 +101011010101 +110011111000 +100001011010 +000010000111 +001010110010 +000110010000 +101101101111 +111010010000 +011010000100 +011110010101 +011010011101 +010001011010 +001111101010 +100001001000 +010010110110 +000001011101 +001001101011 +111001110010 +101101100100 +001000101110 +000000010100 +001010110000 +011010101000 +010001001001 +100110111110 +110111001010 +111110000111 +101111011110 +001110110001 +001101110001 +111000000011 +010000010001 +011001111010 +010100111111 +111000000111 +101011001100 +111000100101 +101001110100 +101110100000 +100011001110 +010111101110 +000100000100 +110011110011 +011110101010 +101100001000 +011010111101 +111111111010 +100000101011 +001110101001 +011100000111 +010000101101 +001101011000 +011000101010 +000100111001 +110111100000 +000111111101 +111001011011 +000011001110 +011110010000 +100010101110 +111001110001 +000101011010 +110001100101 +010011011000 +000000100100 +000101001101 +111110011110 +000010110110 +101100001100 +010111000111 +000110010110 +110110010100 +111000110011 +111011011100 +011001000000 +100101000110 +100011010101 +101011101111 +010011111010 +000110011100 +111010010010 +111010111100 +010111100101 +101101001101 +010110100100 +011100010101 +000001100110 +001000110110 +011101000010 +111100101111 +110110001110 +000011100010 +101011000001 +110100100000 +001111111000 +110111001111 +000100111110 +111100000110 +010111010010 +001000101001 +000001010000 +100010110010 +101101110100 +111101100001 +000101111111 +000101001110 +110010001101 +101000011001 +111001001111 +111000000000 +000101110110 +111001111001 +010010010101 +110011011000 +011000001001 +110001010010 +101100110010 +101011010011 +000000110110 +111000011000 +101001101011 +111100100100 +111011111001 +111101001110 +101000001010 +000111000101 +110011010010 +011101101001 +111000110010 +111010011010 +110001011101 +101000111100 +100111011111 +011000101101 +011111101101 +100001000111 +010001101010 +110100010000 +110100011100 +111001100001 +001101010100 +000101100110 +001111001000 +011001011100 +000100011001 +011100010010 +101010101100 +111011110101 +101011000111 +100111010100 +111001100100 +110011101011 +010011000110 +111101100101 +101101011000 +000101000100 +010001001110 +110000011110 +100100100101 +011000100000 +010111010000 +000101011001 +110110101100 +000011010000 +010110100000 +110010101101 +111100111111 +001101101001 +000110000010 +100101111101 +101101010010 +110111011000 +000110000100 +001000001001 +010010101010 +101111010101 +010010000000 +101011011111 +111110010010 +111000111011 +000001011100 +010101111111 +011000101100 +000001011001 +100001011011 +100001101110 +110010000001 +001011110100 +011110010001 +111100110000 +101000111111 +110000011011 +011100111010 +001010011101 +100110001100 +110011011010 +111001000100 +010100111110 +010001110111 +010011010010 +000101001000 +010011101010 +000001110101 +010101101101 +010001100111 +101001111111 +111011011011 +100001100011 +101101111000 +110011011001 +001110110010 +011101001101 +010101010010 +110001110001 +010011010000 +110000000111 +011100110100 +010000011000 +011001111011 +111010110010 +101100010011 +011011001000 +111011101101 +010000011101 +000001010101 +101011100011 +010110111011 +001100100000 +111011100001 +111111001000 +111110110001 +100001110000 +010001001010 +100111010011 +000010000000 +010011000010 +110101110101 +000110011110 +011111111010 +011010101101 +110110000101 +111000110000 +111011000110 +111101000011 +101110010110 +000001000111 +001111111001 +110101011001 +111010110100 +100000000011 +010110110011 +100011100111 +001111101110 +110010111000 +001100111010 +101010100101 +000101110111 +011001110010 +010110001100 +101010111111 +010010011011 +100110011111 +100010010000 +110100001000 +001001000010 +101010100100 +100111001011 +010100000000 +100100100111 +110001101011 +011000110100 +111000001000 +011111110110 +011111000101 +000000011011 +100111000111 +010001110100 +101000010001 +010011100010 +111010001010 +101101110111 +010100010101 +000100001111 +001110000001 +000011110001 +101000010101 +111100100010 +101100010110 +000111001101 +101100101111 +110011101001 +111110110101 +000110011010 +010100100010 +111100010110 +011110110110 +101011101000 +100001000010 +001001101101 +110111111101 +111001110100 +111001001000 +011011100101 +010111011110 +111000011111 +110111100100 +010011110110 +010000111011 +100000001001 +101110010101 +100110111010 +100001000000 +110100110111 diff --git a/src/01.lisp b/src/01.lisp new file mode 100644 index 0000000..9646e40 --- /dev/null +++ b/src/01.lisp @@ -0,0 +1,24 @@ +(load "~/quicklisp/setup.lisp") +(ql:quickload "uiop") + +(defun get-file-lines (name) + (uiop:read-file-lines name)) + +;; Turn the input file into whatever form you will use for both parts +;; (get-file-lines) and (get-file-string) will be useful +(defun parse-input (input-file) + (mapcar 'parse-integer (get-file-lines input-file))) + +;; Loops through two item windows on input and counts each time the first is less than the second +(defun part-a (parsed-input) + (let ((sum 0) (prev 0)) + (dolist (i parsed-input) + (if (> i prev) (progn (incf sum 1) (setf prev i)))) + sum)) + +;; Similar to part a, but with four item windows, comparing the sum of the first 3 with the next 3 +(defun part-b (parsed-input) + (loop for (w x y z) on parsed-input until (null z) if (< (+ w x y) (+ x y z)) count w)) + +(time (format t "part 1: ~a~%" (part-a (parse-input "../inputs/01.txt")))) +(time (format t "part 1: ~a~%" (part-b (parse-input "../inputs/01.txt")))) diff --git a/src/02.lisp b/src/02.lisp new file mode 100644 index 0000000..970e363 --- /dev/null +++ b/src/02.lisp @@ -0,0 +1,33 @@ +(load "~/quicklisp/setup.lisp") +(ql:quickload 'uiop :silent t) +(ql:quickload 'cl-ppcre :silent t) + +(defun get-file-lines (name) + (uiop:read-file-lines name)) + +;; Turn the input file into whatever form you will use for both parts +;; (get-file-lines) and (get-file-string) will be useful +(defun parse-input (input-file) + (let ((input (mapcar (lambda (s) (cl-ppcre:split " " s)) (get-file-lines input-file)))) + (mapcar (lambda (x) (cons (intern (string-upcase (CAR x))) (parse-integer (CADR x)))) input))) + +(defun part-a (parsed-input) + (let ((h 0) (v 0)) + (dolist (i parsed-input) + (case (car i) + (forward (incf h (cdr i))) + (up (decf v (cdr i))) + (down (incf v (cdr i))))) + (* h v))) + +(defun part-b (parsed-input) + (let ((h 0) (v 0) (a 0)) + (dolist (i parsed-input) + (case (car i) + (forward (progn (incf v (* (cdr i) a)) (incf h (cdr i)))) + (up (decf a (cdr i))) + (down (incf a (cdr i))))) + (* h v))) + +(time (format t "part 2: ~a~%" (part-a (parse-input "../inputs/02.txt")))) +(time (format t "part 2: ~a~%" (part-b (parse-input "../inputs/02.txt")))) diff --git a/src/03.lisp b/src/03.lisp new file mode 100644 index 0000000..ae2f0bd --- /dev/null +++ b/src/03.lisp @@ -0,0 +1,45 @@ +(load "~/quicklisp/setup.lisp") +(ql:quickload "uiop") + +(defun get-file-lines (name) + (uiop:read-file-lines name)) + +(defun parse-bin-char (x) (case x (#\1 1) (#\0 0))) + +;; Turn the input file into whatever form you will use for both parts +;; (get-file-lines) and (get-file-string) will be useful +(defun parse-input (input-file) + (mapcar (lambda (x) (mapcar #'parse-bin-char (coerce x 'list))) (get-file-lines input-file))) + +;; Loops through two item windows on input and counts each time the first is less than the second +(defun partial (func &rest args1) + (lambda (&rest args2) + (apply func (append args1 args2)))) + +(defun is-less (h l) + (mapcar (lambda (x) (if (< x h) 0 1)) l)) + +(defun not-list (l) + (mapcar (lambda (x) (if (= x 0) 1 0)) l)) + +(defun range (max &key (min 0) (step 1)) + (loop :for n :from (- max 1) :above (- min 1) :by step + :collect n)) + +(defun to-dec (l) + (apply #'+ (mapcar (lambda (a b) (* a (expt 2 b))) l (range (list-length l))))) + +(defun part-a (parsed-input) + (let* ((half-length (/ (list-length parsed-input) 2)) + (l (is-less half-length (apply (partial #'mapcar #'+) parsed-input))) + (gamma (to-dec l)) + (epsilon (to-dec (not-list l)))) + (* epsilon gamma))) + +;; Similar to part a, but with four item windows, comparing the sum of the first 3 with the next 3 +(defun part-b (parsed-input) + (loop for (w x y z) on parsed-input until (null z) if (< (+ w x y) (+ x y z)) count w)) + +(time (format t "part 1: ~a~%" (part-a (parse-input "../inputs/03.txt")))) +;;(time (format t "part 1: ~a~%" (part-a (parse-input "test.txt")))) +;;(time (format t "part 1: ~a~%" (part-b (parse-input "../inputs/01.txt")))) -- cgit