diff --git a/01/01.py b/01/01.py new file mode 100644 index 0000000..a7e24a2 --- /dev/null +++ b/01/01.py @@ -0,0 +1,7 @@ +with open("input") as f: + data = f.read().strip().split('\n') + data = [int(x) for x in data] + +print(sum([1 for x,y in zip(data, data[1:]) if y-x>0])) +d2 = [a+b+c for a,b,c in zip(data, data[1:], data[2:])] +print(sum([1 for x,y in zip(d2, d2[1:]) if y-x>0])) diff --git a/01/input b/01/input new file mode 100644 index 0000000..6af96b4 --- /dev/null +++ b/01/input @@ -0,0 +1,2000 @@ +162 +164 +165 +166 +175 +185 +182 +191 +205 +204 +198 +196 +197 +213 +216 +217 +218 +219 +213 +219 +221 +222 +227 +231 +221 +211 +230 +232 +241 +243 +256 +272 +274 +273 +279 +287 +288 +287 +286 +288 +289 +291 +292 +294 +292 +296 +307 +314 +326 +332 +337 +347 +330 +333 +346 +344 +357 +362 +365 +366 +328 +323 +350 +362 +336 +346 +348 +325 +329 +330 +329 +333 +365 +363 +376 +377 +369 +343 +365 +360 +362 +377 +376 +379 +374 +376 +377 +369 +371 +374 +375 +377 +384 +401 +372 +374 +363 +372 +363 +377 +342 +340 +342 +344 +345 +351 +352 +353 +354 +330 +332 +324 +326 +335 +327 +324 +316 +324 +308 +311 +302 +314 +328 +340 +341 +338 +336 +337 +335 +323 +327 +321 +322 +302 +315 +289 +288 +287 +300 +294 +298 +297 +288 +289 +290 +288 +287 +283 +292 +306 +304 +306 +326 +336 +337 +340 +343 +352 +374 +373 +377 +357 +352 +357 +360 +373 +375 +377 +380 +384 +407 +409 +402 +405 +403 +426 +429 +428 +431 +399 +393 +399 +401 +418 +420 +421 +440 +446 +447 +450 +448 +463 +456 +458 +421 +409 +407 +394 +414 +412 +417 +418 +413 +414 +417 +418 +427 +426 +425 +426 +424 +431 +450 +448 +470 +484 +489 +466 +477 +479 +488 +489 +494 +501 +502 +505 +509 +514 +516 +522 +533 +537 +536 +546 +549 +539 +522 +523 +537 +536 +555 +556 +554 +541 +555 +557 +558 +573 +574 +571 +572 +573 +581 +580 +572 +586 +579 +581 +589 +597 +593 +598 +599 +600 +614 +622 +623 +646 +642 +652 +653 +655 +657 +663 +665 +667 +669 +655 +642 +643 +645 +660 +661 +658 +656 +661 +673 +672 +673 +680 +690 +691 +699 +698 +702 +716 +757 +758 +759 +778 +792 +789 +790 +791 +797 +806 +809 +801 +800 +802 +805 +814 +811 +836 +827 +836 +848 +855 +856 +857 +859 +855 +858 +864 +866 +875 +877 +865 +871 +879 +862 +869 +872 +879 +881 +883 +872 +861 +869 +867 +871 +888 +889 +893 +894 +897 +885 +891 +890 +910 +907 +909 +915 +940 +941 +944 +947 +938 +935 +927 +922 +932 +933 +895 +896 +897 +922 +931 +927 +936 +938 +962 +972 +973 +1010 +1003 +1004 +1003 +1004 +1007 +1000 +1015 +1017 +1006 +1008 +1021 +1019 +1018 +1003 +1010 +1011 +1016 +1017 +1025 +1008 +1001 +1007 +1015 +1001 +1004 +1010 +993 +994 +992 +994 +997 +990 +991 +1018 +1033 +1047 +1038 +1037 +1043 +1047 +1056 +1042 +1048 +1059 +1063 +1045 +1053 +1051 +1071 +1060 +1069 +1074 +1076 +1082 +1085 +1081 +1084 +1089 +1091 +1079 +1101 +1100 +1109 +1108 +1109 +1100 +1098 +1100 +1098 +1099 +1095 +1097 +1119 +1115 +1116 +1117 +1121 +1126 +1167 +1168 +1178 +1180 +1169 +1170 +1168 +1169 +1176 +1178 +1167 +1169 +1163 +1184 +1174 +1175 +1202 +1206 +1212 +1213 +1222 +1233 +1234 +1216 +1218 +1219 +1223 +1222 +1205 +1208 +1206 +1207 +1208 +1209 +1222 +1223 +1219 +1220 +1223 +1228 +1260 +1275 +1278 +1263 +1281 +1293 +1292 +1307 +1299 +1297 +1298 +1295 +1297 +1299 +1300 +1301 +1299 +1313 +1314 +1319 +1316 +1294 +1299 +1315 +1316 +1327 +1331 +1332 +1333 +1342 +1340 +1327 +1332 +1335 +1333 +1353 +1357 +1347 +1350 +1351 +1352 +1353 +1360 +1361 +1372 +1373 +1389 +1404 +1409 +1403 +1407 +1412 +1409 +1413 +1414 +1416 +1422 +1426 +1418 +1436 +1441 +1437 +1431 +1407 +1437 +1430 +1447 +1453 +1456 +1475 +1484 +1486 +1507 +1498 +1500 +1496 +1513 +1499 +1505 +1506 +1500 +1502 +1504 +1506 +1513 +1514 +1516 +1508 +1514 +1518 +1514 +1510 +1501 +1495 +1512 +1513 +1510 +1513 +1521 +1520 +1527 +1536 +1525 +1534 +1535 +1512 +1514 +1520 +1521 +1525 +1526 +1527 +1546 +1550 +1560 +1564 +1572 +1570 +1576 +1584 +1586 +1588 +1592 +1588 +1602 +1592 +1615 +1589 +1592 +1594 +1591 +1595 +1601 +1613 +1618 +1623 +1630 +1631 +1645 +1602 +1606 +1608 +1609 +1610 +1604 +1606 +1605 +1621 +1630 +1635 +1646 +1648 +1646 +1648 +1657 +1687 +1676 +1679 +1680 +1683 +1681 +1682 +1681 +1682 +1680 +1679 +1680 +1682 +1695 +1704 +1711 +1714 +1720 +1746 +1750 +1748 +1753 +1754 +1763 +1765 +1783 +1792 +1793 +1798 +1801 +1800 +1803 +1784 +1785 +1784 +1787 +1790 +1784 +1788 +1783 +1785 +1787 +1794 +1795 +1798 +1799 +1803 +1805 +1806 +1786 +1787 +1816 +1812 +1813 +1816 +1818 +1812 +1838 +1837 +1839 +1832 +1834 +1838 +1840 +1855 +1856 +1842 +1841 +1850 +1852 +1851 +1853 +1859 +1853 +1881 +1882 +1886 +1899 +1897 +1910 +1906 +1907 +1906 +1901 +1896 +1897 +1883 +1889 +1890 +1896 +1877 +1888 +1889 +1895 +1896 +1893 +1858 +1855 +1863 +1871 +1878 +1879 +1877 +1878 +1874 +1906 +1921 +1927 +1924 +1925 +1929 +1928 +1933 +1923 +1926 +1904 +1892 +1889 +1906 +1908 +1909 +1924 +1926 +1948 +1949 +1951 +1991 +1990 +1996 +1997 +2009 +2007 +2006 +2012 +2029 +2036 +2039 +2040 +2049 +2051 +2052 +2065 +2063 +2065 +2064 +2065 +2067 +2072 +2069 +2051 +2049 +2046 +2045 +2047 +2039 +2037 +2041 +2044 +2043 +2033 +2034 +2024 +2026 +2023 +2013 +2014 +2015 +2017 +2019 +2018 +2019 +2018 +2020 +2021 +2024 +2029 +2017 +2048 +2049 +2027 +2028 +2023 +2040 +2033 +2037 +2056 +2096 +2097 +2093 +2110 +2111 +2110 +2120 +2122 +2106 +2122 +2124 +2118 +2120 +2128 +2127 +2134 +2135 +2149 +2151 +2178 +2179 +2180 +2179 +2188 +2198 +2196 +2204 +2214 +2222 +2223 +2222 +2221 +2247 +2249 +2257 +2267 +2266 +2265 +2268 +2261 +2266 +2268 +2269 +2275 +2274 +2275 +2289 +2283 +2284 +2276 +2278 +2274 +2275 +2279 +2280 +2264 +2260 +2270 +2274 +2282 +2273 +2274 +2270 +2269 +2268 +2274 +2280 +2300 +2301 +2303 +2301 +2306 +2316 +2337 +2349 +2363 +2373 +2377 +2381 +2380 +2402 +2408 +2407 +2406 +2404 +2405 +2409 +2411 +2421 +2420 +2419 +2422 +2415 +2418 +2426 +2396 +2399 +2398 +2411 +2413 +2414 +2393 +2400 +2393 +2389 +2400 +2404 +2405 +2408 +2405 +2409 +2411 +2423 +2427 +2428 +2429 +2418 +2419 +2426 +2428 +2443 +2451 +2464 +2465 +2483 +2476 +2479 +2480 +2481 +2482 +2476 +2464 +2506 +2499 +2500 +2490 +2486 +2480 +2481 +2482 +2507 +2515 +2519 +2526 +2516 +2523 +2530 +2536 +2537 +2538 +2555 +2564 +2553 +2565 +2548 +2537 +2538 +2533 +2537 +2550 +2553 +2541 +2543 +2546 +2550 +2554 +2555 +2573 +2578 +2575 +2595 +2601 +2600 +2582 +2583 +2585 +2579 +2581 +2582 +2590 +2588 +2589 +2595 +2584 +2585 +2584 +2592 +2602 +2607 +2611 +2627 +2636 +2646 +2643 +2648 +2654 +2648 +2649 +2654 +2652 +2653 +2656 +2657 +2658 +2687 +2699 +2702 +2679 +2681 +2684 +2683 +2681 +2683 +2684 +2701 +2709 +2711 +2715 +2716 +2725 +2715 +2719 +2720 +2716 +2717 +2704 +2707 +2705 +2695 +2697 +2696 +2699 +2697 +2698 +2718 +2722 +2726 +2727 +2728 +2724 +2722 +2731 +2732 +2728 +2725 +2722 +2728 +2735 +2729 +2731 +2733 +2739 +2734 +2757 +2763 +2765 +2772 +2771 +2772 +2768 +2765 +2759 +2772 +2775 +2767 +2771 +2774 +2770 +2758 +2772 +2775 +2789 +2791 +2793 +2800 +2780 +2791 +2777 +2778 +2774 +2779 +2780 +2779 +2780 +2781 +2783 +2788 +2796 +2800 +2799 +2807 +2811 +2825 +2826 +2831 +2842 +2843 +2852 +2854 +2858 +2841 +2842 +2837 +2838 +2839 +2843 +2861 +2888 +2892 +2886 +2885 +2904 +2905 +2927 +2928 +2929 +2915 +2917 +2895 +2901 +2923 +2932 +2934 +2936 +2938 +2944 +2947 +2951 +2959 +2958 +2956 +2944 +2942 +2941 +2942 +2929 +2946 +2954 +2948 +2949 +2973 +2980 +2981 +2994 +2997 +3021 +3038 +3047 +3060 +3058 +3061 +3057 +3073 +3074 +3094 +3126 +3125 +3126 +3122 +3123 +3122 +3120 +3115 +3114 +3113 +3117 +3122 +3121 +3123 +3133 +3134 +3138 +3152 +3153 +3155 +3154 +3159 +3156 +3153 +3159 +3160 +3161 +3157 +3158 +3160 +3161 +3170 +3202 +3204 +3225 +3211 +3207 +3209 +3211 +3206 +3207 +3214 +3213 +3206 +3199 +3198 +3208 +3225 +3226 +3227 +3238 +3208 +3209 +3210 +3211 +3214 +3209 +3210 +3233 +3232 +3233 +3234 +3237 +3240 +3246 +3252 +3239 +3246 +3248 +3246 +3248 +3250 +3258 +3259 +3260 +3271 +3272 +3280 +3288 +3279 +3272 +3274 +3280 +3288 +3292 +3313 +3307 +3302 +3303 +3304 +3302 +3304 +3307 +3320 +3306 +3303 +3304 +3303 +3292 +3293 +3282 +3285 +3286 +3281 +3276 +3283 +3246 +3247 +3254 +3268 +3267 +3274 +3276 +3288 +3289 +3288 +3275 +3274 +3276 +3271 +3273 +3271 +3270 +3265 +3271 +3266 +3258 +3259 +3256 +3255 +3250 +3261 +3265 +3263 +3264 +3265 +3279 +3280 +3285 +3301 +3304 +3291 +3283 +3300 +3301 +3295 +3298 +3297 +3296 +3291 +3294 +3297 +3301 +3298 +3299 +3265 +3266 +3270 +3265 +3282 +3289 +3288 +3290 +3289 +3291 +3293 +3295 +3296 +3297 +3269 +3280 +3281 +3282 +3291 +3306 +3304 +3305 +3306 +3329 +3327 +3331 +3332 +3334 +3338 +3318 +3315 +3323 +3324 +3325 +3327 +3328 +3326 +3329 +3342 +3343 +3344 +3345 +3346 +3345 +3321 +3320 +3318 +3315 +3318 +3344 +3349 +3354 +3353 +3351 +3362 +3379 +3395 +3421 +3423 +3411 +3406 +3403 +3407 +3408 +3406 +3408 +3413 +3407 +3423 +3435 +3437 +3438 +3441 +3452 +3453 +3452 +3453 +3457 +3463 +3456 +3439 +3437 +3441 +3439 +3442 +3443 +3445 +3452 +3459 +3474 +3466 +3456 +3480 +3479 +3481 +3497 +3500 +3494 +3496 +3502 +3486 +3489 +3496 +3505 +3526 +3543 +3549 +3550 +3552 +3555 +3559 +3558 +3566 +3568 +3567 +3568 +3569 +3555 +3576 +3567 +3566 +3563 +3590 +3597 +3622 +3623 +3610 +3611 +3615 +3616 +3620 +3653 +3662 +3649 +3661 +3664 +3656 +3672 +3680 +3681 +3687 +3693 +3692 +3706 +3686 +3685 +3675 +3669 +3672 +3673 +3667 +3674 +3677 +3663 +3685 +3681 +3682 +3695 +3688 +3702 +3708 +3709 +3708 +3711 +3707 +3729 +3730 +3748 +3775 +3779 +3780 +3784 +3797 +3803 +3822 +3843 +3860 +3888 +3875 +3866 +3869 +3878 +3877 +3886 +3888 +3889 +3894 +3905 +3919 +3921 +3922 +3964 +3965 +3967 +3960 +3978 +3977 +3983 +3989 +3997 +3999 +4010 +3998 +3999 +4013 +4025 +4033 +4050 +4051 +4053 +4052 +4050 +4051 +4052 +4053 +4069 +4071 +4079 +4082 +4083 +4085 +4081 +4076 +4090 +4091 +4098 +4105 +4121 +4119 +4124 +4130 +4132 +4131 +4130 +4094 +4106 +4105 +4100 +4098 +4092 +4091 +4093 +4091 +4101 +4102 +4104 +4105 +4100 +4111 +4133 +4134 +4140 +4136 +4121 +4120 +4139 +4140 +4141 +4140 +4144 +4152 +4133 +4136 +4148 +4149 +4148 +4166 +4171 +4162 +4179 +4175 +4185 +4186 +4201 +4218 +4226 +4224 +4214 +4212 +4187 +4191 +4194 +4193 +4196 +4199 +4195 +4196 +4178 +4177 +4180 +4172 +4173 +4166 +4172 +4175 +4180 +4185 +4186 +4189 +4190 +4191 +4193 +4195 +4209 +4218 +4221 +4223 +4215 +4182 +4181 +4194 +4202 +4203 +4204 +4208 +4210 +4218 +4217 +4216 +4224 +4238 +4239 +4246 +4249 +4250 +4222 +4219 +4246 +4261 +4263 +4272 +4277 +4276 +4277 +4279 +4292 +4281 +4282 +4261 +4268 +4264 +4265 +4272 +4277 +4278 +4281 +4282 +4304 +4296 +4288 +4305 +4306 +4304 +4306 +4307 +4310 +4290 +4280 +4281 +4282 +4283 +4299 +4298 +4299 +4300 +4284 +4292 +4303 +4306 +4304 +4288 +4291 +4288 +4285 +4297 +4296 +4297 +4298 +4291 +4275 +4269 +4270 +4269 +4268 +4285 +4287 +4288 +4287 +4288 +4289 +4280 +4279 +4286 +4289 +4285 +4286 +4287 +4297 +4294 +4319 +4306 +4333 +4338 +4339 +4332 +4337 +4338 +4325 +4320 +4318 +4308 +4317 +4337 +4336 +4338 +4340 +4343 +4324 +4325 +4326 +4323 +4322 +4327 +4329 +4333 +4341 +4347 +4372 +4375 +4378 +4371 +4374 +4373 +4369 +4371 +4389 +4392 +4372 +4382 +4383 +4384 +4381 +4390 +4391 +4394 +4416 +4430 +4398 +4403 +4394 +4383 +4399 +4387 +4418 +4431 +4434 +4417 +4418 +4417 +4420 +4430 +4426 +4429 +4430 +4429 +4430 +4440 +4449 +4450 +4434 +4452 +4444 +4446 +4439 +4440 +4414 +4407 +4408 +4410 +4411 +4420 +4445 +4454 +4455 +4451 +4456 +4455 +4449 +4470 +4469 +4473 +4470 +4488 +4470 +4466 +4463 +4477 +4481 +4494 +4493 +4491 +4486 +4475 +4479 +4484 +4485 +4497 +4472 +4473 +4490 +4499 +4507 +4515 +4521 +4554 +4555 +4538 +4526 +4539 +4543 +4537 +4541 +4543 +4527 +4538 +4537 +4536 +4550 +4554 +4567 +4585 +4603 +4623 +4624 +4626 +4629 +4627 +4629 +4628 +4636 +4640 +4647 +4649 +4651 +4655 +4626 +4631 +4632 +4630 +4622 +4625 +4632 +4652 +4657 +4661 +4650 +4654 +4656 +4658 +4659 +4676 +4675 +4681 +4694 +4714 +4723 +4706 +4707 +4741 +4743 +4718 +4714 +4715 +4697 +4699 +4698 +4696 +4703 +4702 +4704 +4709 +4726 +4725 +4743 +4747 +4765 +4766 +4768 +4764 +4768 +4770 +4777 +4778 +4779 +4786 +4804 +4806 +4790 +4797 +4808 +4809 +4806 +4808 +4818 +4822 +4823 +4854 +4855 +4885 +4902 +4903 +4905 +4906 +4908 +4907 +4909 +4915 +4916 +4906 +4935 +4949 +4948 +4952 +4964 +4960 +4962 +4975 +4976 +4987 +4996 +4994 +4996 +4997 +5000 +5001 +4986 +4988 +4999 +4997 +4998 +4997 +5004 +5005 +5006 +5004 +5005 +5018 +5019 +5021 +5022 +5028 +5057 +5058 +5063 +5067 +5068 diff --git a/02/02.py b/02/02.py new file mode 100644 index 0000000..74a21a4 --- /dev/null +++ b/02/02.py @@ -0,0 +1,30 @@ +with open("input") as f: + data = f.read().strip().split('\n') + data = [x.split() for x in data] + +d = 0 +x = 0 +for com, i in data: + i = int(i) + if com=='forward': + x += i + elif com=='up': + d -= i + elif com=='down': + d += i +print(d*x) + +d = 0 +x = 0 +aim = 0 +for com, i in data: + i = int(i) + if com=='forward': + x += i + d += aim*i + elif com=='up': + aim -= i + elif com=='down': + aim += i +print(d*x) + diff --git a/02/input b/02/input new file mode 100644 index 0000000..315cd7a --- /dev/null +++ b/02/input @@ -0,0 +1,1000 @@ +forward 2 +forward 2 +down 7 +forward 6 +down 7 +forward 4 +down 7 +up 2 +forward 4 +down 2 +down 4 +down 5 +forward 4 +up 1 +up 2 +forward 9 +forward 7 +down 1 +forward 4 +forward 7 +forward 9 +down 2 +down 3 +forward 1 +forward 4 +forward 6 +up 2 +forward 6 +down 2 +down 5 +up 4 +down 5 +forward 6 +down 7 +down 4 +up 5 +forward 9 +forward 5 +down 8 +forward 3 +forward 1 +down 7 +down 5 +forward 2 +down 3 +forward 8 +down 1 +forward 4 +up 8 +up 8 +up 8 +forward 2 +down 3 +down 5 +up 8 +forward 1 +forward 3 +up 1 +up 2 +up 4 +down 8 +forward 5 +down 9 +down 9 +forward 9 +up 3 +down 2 +down 9 +up 8 +forward 3 +up 2 +down 7 +forward 9 +forward 1 +up 1 +forward 9 +forward 1 +down 1 +forward 7 +up 3 +up 5 +forward 3 +forward 8 +forward 4 +down 3 +forward 5 +forward 4 +forward 2 +down 2 +down 3 +forward 1 +up 2 +up 2 +down 9 +down 6 +down 6 +up 2 +down 6 +forward 6 +forward 5 +down 8 +up 3 +up 2 +up 1 +forward 8 +down 3 +down 5 +forward 8 +forward 7 +down 9 +down 7 +down 9 +down 2 +forward 8 +down 9 +forward 2 +forward 2 +down 5 +up 8 +forward 9 +down 7 +down 9 +forward 2 +forward 9 +forward 1 +forward 3 +forward 1 +forward 3 +down 4 +forward 6 +forward 4 +down 7 +up 4 +up 5 +forward 1 +down 4 +down 8 +down 3 +down 8 +up 3 +forward 2 +up 7 +down 1 +down 7 +down 3 +forward 3 +forward 4 +up 8 +down 2 +forward 8 +down 8 +up 8 +up 5 +forward 5 +forward 1 +forward 5 +up 4 +down 5 +down 1 +forward 3 +forward 4 +down 8 +down 9 +forward 4 +down 5 +down 5 +forward 9 +forward 7 +down 3 +down 4 +forward 2 +down 7 +down 3 +down 9 +down 8 +forward 6 +forward 3 +forward 1 +forward 5 +down 4 +down 4 +forward 9 +down 9 +down 5 +up 8 +forward 1 +forward 3 +down 1 +down 4 +forward 1 +up 5 +down 9 +forward 8 +down 8 +down 2 +down 3 +forward 2 +forward 9 +forward 7 +up 3 +down 3 +forward 4 +down 8 +forward 7 +down 3 +forward 3 +down 5 +forward 8 +forward 7 +forward 4 +down 2 +up 5 +forward 9 +forward 8 +down 7 +up 5 +up 8 +down 4 +down 9 +forward 5 +up 6 +forward 7 +down 4 +forward 8 +up 4 +up 2 +down 8 +forward 4 +down 8 +down 3 +down 3 +forward 1 +up 7 +forward 5 +forward 1 +down 5 +forward 4 +down 3 +down 4 +forward 4 +down 5 +up 9 +forward 6 +down 6 +up 6 +down 8 +forward 2 +down 9 +down 8 +forward 7 +down 2 +forward 1 +forward 4 +down 7 +forward 1 +up 8 +forward 6 +forward 2 +forward 5 +up 1 +forward 6 +up 7 +down 8 +down 5 +down 2 +forward 4 +forward 3 +down 7 +up 5 +forward 1 +forward 2 +forward 3 +forward 6 +down 9 +down 2 +forward 7 +up 3 +down 4 +forward 3 +forward 3 +forward 6 +up 2 +down 4 +forward 8 +down 3 +down 4 +forward 1 +forward 3 +forward 8 +forward 1 +forward 6 +forward 1 +forward 7 +down 8 +up 3 +up 5 +forward 4 +forward 6 +down 3 +forward 5 +forward 5 +down 9 +forward 4 +down 5 +forward 6 +down 1 +forward 2 +forward 3 +forward 2 +up 4 +forward 9 +forward 7 +forward 6 +up 1 +down 6 +down 1 +forward 5 +up 4 +up 9 +forward 5 +forward 3 +up 9 +down 4 +forward 7 +up 9 +down 7 +forward 5 +down 4 +down 9 +up 4 +forward 2 +forward 2 +forward 1 +forward 3 +forward 4 +down 3 +down 5 +up 9 +forward 8 +up 5 +down 3 +forward 5 +down 4 +forward 1 +forward 1 +up 5 +down 7 +up 7 +down 3 +forward 7 +down 3 +down 3 +down 5 +down 2 +down 7 +down 5 +down 1 +up 3 +forward 5 +forward 9 +up 1 +down 8 +up 5 +forward 4 +down 5 +forward 5 +down 3 +up 8 +forward 2 +up 7 +down 4 +forward 1 +up 6 +down 7 +down 4 +forward 9 +forward 3 +forward 7 +up 5 +down 1 +down 3 +up 2 +forward 3 +down 8 +up 7 +forward 9 +forward 9 +forward 9 +down 3 +forward 4 +forward 9 +down 6 +up 1 +up 7 +down 3 +forward 4 +forward 9 +down 9 +up 4 +down 2 +forward 6 +forward 4 +down 5 +up 3 +down 6 +up 4 +down 5 +down 7 +down 3 +up 1 +down 2 +forward 1 +forward 8 +up 7 +forward 4 +down 5 +down 3 +up 7 +forward 1 +forward 7 +up 6 +forward 4 +forward 5 +forward 3 +forward 1 +down 5 +up 3 +up 3 +down 8 +forward 1 +forward 2 +up 6 +down 3 +down 6 +down 5 +down 4 +up 1 +down 9 +forward 3 +down 8 +up 9 +down 3 +forward 6 +down 8 +forward 2 +forward 4 +forward 6 +forward 3 +forward 6 +up 6 +up 3 +down 6 +up 1 +forward 9 +forward 2 +up 6 +forward 7 +down 5 +forward 5 +forward 7 +down 6 +down 9 +forward 9 +forward 1 +up 4 +forward 3 +forward 2 +forward 2 +up 4 +down 7 +down 2 +up 2 +down 2 +up 9 +forward 4 +forward 3 +forward 3 +up 4 +down 7 +forward 5 +down 5 +forward 1 +down 4 +forward 4 +up 1 +down 5 +forward 2 +up 3 +up 1 +down 9 +up 9 +down 3 +forward 1 +down 6 +forward 8 +down 5 +forward 7 +down 4 +forward 2 +down 3 +down 1 +forward 6 +forward 4 +down 9 +forward 3 +up 4 +up 8 +down 2 +up 5 +up 8 +up 7 +down 2 +down 9 +forward 8 +down 4 +up 7 +forward 2 +up 4 +forward 7 +down 3 +down 3 +down 6 +up 3 +down 6 +down 6 +up 7 +down 6 +up 9 +down 6 +forward 3 +forward 8 +forward 3 +down 9 +forward 6 +forward 8 +down 7 +forward 3 +forward 7 +forward 3 +forward 8 +forward 6 +down 9 +up 4 +forward 1 +forward 6 +forward 2 +forward 4 +down 4 +down 9 +forward 7 +forward 4 +forward 4 +up 3 +up 6 +forward 4 +forward 7 +forward 4 +down 2 +forward 8 +up 4 +forward 8 +up 2 +up 4 +down 5 +forward 5 +up 2 +up 8 +up 9 +forward 6 +forward 2 +up 9 +forward 5 +up 3 +forward 8 +forward 8 +down 5 +forward 6 +up 6 +down 6 +down 1 +forward 2 +down 1 +down 5 +forward 2 +down 3 +up 7 +forward 6 +up 9 +down 3 +up 3 +forward 3 +down 9 +down 4 +down 2 +forward 7 +forward 2 +down 4 +forward 5 +up 1 +down 6 +down 6 +up 2 +down 2 +down 4 +down 4 +forward 8 +down 3 +down 5 +down 3 +up 2 +down 6 +down 9 +up 8 +forward 3 +down 9 +down 6 +down 7 +down 6 +forward 9 +up 1 +forward 9 +down 8 +forward 8 +up 5 +down 8 +forward 5 +down 6 +down 9 +forward 1 +up 5 +up 5 +forward 4 +forward 1 +forward 6 +down 1 +down 4 +down 3 +down 1 +down 1 +down 9 +down 3 +forward 6 +up 9 +up 4 +down 1 +up 6 +forward 3 +down 2 +down 8 +forward 1 +forward 8 +forward 4 +down 4 +down 5 +up 5 +up 5 +forward 7 +forward 6 +forward 4 +down 5 +forward 7 +down 4 +forward 2 +forward 5 +forward 3 +forward 5 +up 6 +up 9 +down 6 +forward 8 +down 3 +up 2 +forward 8 +down 9 +forward 9 +down 3 +down 4 +down 5 +up 3 +forward 6 +forward 6 +forward 8 +up 6 +up 4 +forward 2 +down 1 +down 5 +forward 1 +forward 8 +up 5 +down 2 +forward 4 +down 9 +up 5 +down 8 +forward 6 +forward 3 +down 8 +up 1 +down 5 +down 6 +forward 2 +forward 7 +down 8 +forward 2 +forward 8 +forward 1 +down 1 +down 3 +down 8 +down 1 +forward 1 +forward 8 +up 4 +up 5 +forward 2 +forward 5 +forward 5 +forward 9 +forward 2 +forward 4 +forward 4 +down 1 +up 8 +forward 3 +down 9 +forward 9 +up 5 +forward 7 +forward 3 +up 5 +up 5 +down 9 +forward 9 +up 2 +forward 1 +forward 1 +down 5 +down 7 +forward 2 +up 8 +up 7 +down 4 +down 6 +down 6 +down 6 +forward 4 +forward 7 +down 6 +forward 3 +forward 5 +down 2 +up 3 +forward 3 +forward 6 +forward 9 +forward 7 +forward 6 +down 4 +down 9 +forward 4 +forward 4 +down 8 +down 7 +down 1 +down 6 +up 7 +forward 3 +forward 9 +forward 9 +up 7 +forward 2 +up 5 +up 6 +down 7 +down 7 +down 5 +forward 8 +down 1 +up 4 +down 4 +forward 4 +forward 3 +forward 7 +forward 4 +down 6 +down 3 +down 3 +forward 6 +forward 7 +forward 6 +up 5 +down 9 +forward 9 +forward 5 +up 5 +down 9 +up 8 +down 6 +down 8 +down 8 +down 8 +forward 2 +down 8 +down 4 +down 6 +forward 8 +forward 3 +forward 2 +down 5 +down 3 +forward 1 +forward 2 +up 9 +forward 6 +down 8 +up 2 +down 2 +forward 7 +up 6 +up 2 +forward 1 +down 2 +forward 7 +forward 4 +down 6 +forward 4 +up 4 +forward 3 +down 2 +down 5 +up 5 +down 2 +down 1 +down 9 +forward 3 +down 5 +up 8 +down 6 +forward 3 +forward 9 +up 6 +down 2 +forward 6 +forward 7 +down 1 +up 9 +up 9 +up 9 +up 4 +forward 2 +down 7 +down 1 +forward 8 +down 2 +down 1 +forward 9 +forward 8 +up 8 +down 5 +forward 8 +down 1 +down 4 +down 3 +down 1 +forward 2 +down 2 +down 6 +forward 5 +down 9 +forward 8 +down 9 +up 6 +up 5 +forward 8 +forward 3 +down 9 +up 6 +down 8 +down 3 +down 2 +up 1 +up 9 +up 7 +up 1 +up 4 +forward 7 +down 8 +up 3 +forward 1 +up 3 +up 7 +forward 4 +up 3 +down 1 +forward 3 +forward 4 +forward 7 +down 4 +down 4 +down 2 +up 1 +up 5 +up 3 +forward 6 +forward 6 +forward 9 +down 9 +forward 2 +up 3 +forward 3 +down 2 +down 4 +forward 6 +forward 7 +down 5 +forward 9 +up 7 +down 9 +down 1 +down 1 +forward 1 +up 1 +up 5 +down 5 +forward 4 +up 3 +down 1 +down 3 +forward 3 +forward 6 +up 4 +down 2 +forward 1 +forward 5 +forward 3 +forward 2 +forward 4 +down 3 +forward 2 +down 4 +down 7 +up 4 +down 7 +forward 8 +forward 2 +down 4 +down 2 +forward 8 +up 7 +forward 1 +up 4 +forward 4 +up 7 +forward 2 +forward 7 +forward 9 +down 8 +down 2 +forward 8 +down 3 +up 5 +forward 3 +up 9 +forward 8 +forward 5 +up 2 +down 5 +down 9 +up 9 +forward 1 +forward 3 +down 3 +down 6 +forward 9 +forward 5 +down 4 +up 7 +forward 4 +forward 3 +down 2 +up 1 +forward 3 +down 4 +down 8 +up 4 +down 9 +forward 6 +down 7 +down 3 +down 9 +forward 3 +down 8 +forward 7 +forward 7 +down 1 +down 1 +forward 1 +down 4 +forward 8 diff --git a/03/03.py b/03/03.py new file mode 100644 index 0000000..2466ee5 --- /dev/null +++ b/03/03.py @@ -0,0 +1,25 @@ +with open("input") as f: + data = f.read().strip().split('\n') + +l = len(data) +gamma = [round(sum(map(int, x))/l) for x in zip(*data)] +epsilon = [0 if x==1 else 1 for x in gamma] +_gamma = int(''.join(map(str, gamma)), base=2) +_epsilon = int(''.join(map(str, epsilon)), base=2) +print(_gamma*_epsilon) + +def f(g): + i = 0 + x = data + while len(x)>1: + a = list(zip(*x))[i] + b = a.count("1") >= a.count("0") + x = [z for z in x if z[i]==g(b)] + i += 1 + return int(x[0], base=2) + + +o2 = f(lambda b: "1" if b else "0") +co2 = f(lambda b: "0" if b else "1") + +print(o2*co2) diff --git a/03/input b/03/input new file mode 100644 index 0000000..39e208c --- /dev/null +++ b/03/input @@ -0,0 +1,1000 @@ +000011010001 +000001110100 +111100101010 +111001100111 +001010100100 +101010010001 +000001100011 +010010110101 +011001011100 +001110111000 +111101011111 +001111001011 +100110010010 +000001011001 +110001000111 +010011111110 +111011000111 +001000110111 +010011101110 +111010111000 +001101100000 +111101010111 +111000010111 +101111001011 +100000000011 +110000111100 +101110110001 +010000100011 +001100111111 +011011011100 +000001110011 +001110111011 +011110011101 +110011010010 +010111001010 +110010000100 +101111001101 +011111001101 +111110010000 +001011010011 +111111001101 +011110110000 +100001011001 +011010010010 +101001111010 +001100001010 +110000000010 +010000011001 +010010010110 +110101111111 +011001101110 +001100000111 +101111001010 +110000100000 +000111101110 +101101111011 +100110101011 +011010011000 +101000101010 +000001010100 +110101011101 +010101010100 +011010000111 +011001001001 +011101010001 +111111011110 +100010100110 +101001111110 +110010100101 +111110110011 +101101111101 +001010110000 +001111001010 +011001111010 +000111010010 +010100000001 +101000111110 +110111000011 +110111011101 +110111001000 +111111001000 +001000010110 +110000010010 +001011010001 +011000110000 +101001101001 +000101101001 +010100111100 +100001111110 +010011001100 +100010010111 +000010000000 +010110101111 +010000100010 +110111010111 +110100011010 +000111101100 +011110101000 +010000010111 +011010111101 +110111111000 +110001010101 +101011110010 +110011111001 +010111101010 +000000010000 +010010011000 +100100001110 +001101011101 +101101010100 +000011001101 +101000000001 +101000000111 +110001010011 +100001011010 +000100111101 +100011000101 +110001001000 +000110011111 +010100111001 +111111111011 +000010010100 +101001011000 +011000011010 +010011111111 +101100001101 +110101010111 +111010011001 +100010111011 +100010000000 +111001111010 +010111011110 +010010000101 +101100110110 +111101001000 +000010111011 +111010010100 +101011011110 +110110010111 +101100010011 +000110101001 +100010101111 +101001010011 +111010100101 +000011011010 +110010111001 +010100101110 +101001001101 +101110011111 +110101100010 +110100111001 +111110100111 +101101000010 +111111111000 +100001100001 +011100100010 +011100101011 +111101111111 +010011000100 +010001110111 +100101001100 +111100100110 +110001111110 +001100100110 +010011011001 +001001010011 +111000100100 +011011010111 +101011010010 +101100001111 +011111000111 +100001101000 +011101101101 +011000001010 +100101111011 +111000100001 +011101111000 +011011001011 +011010011001 +101111100011 +010001110000 +000101110010 +010100001111 +100110010001 +110011111100 +011100100100 +010011111001 +001010011011 +000111111100 +101000000010 +110101010000 +101110011101 +001110001110 +001110100111 +010111010101 +100100001111 +001111010110 +100010111010 +001010000100 +010001001100 +011111010011 +010000100110 +110011000111 +111010000100 +101101001011 +010110111001 +000110100101 +000010011000 +000111011100 +011010101100 +101100110000 +101001011001 +110011010100 +000101011000 +110010110111 +101001101101 +010100011101 +101100011010 +010111000111 +010110101001 +111000011010 +011011100101 +011111110101 +110110000000 +111111010010 +011001000000 +000100010000 +111011100110 +011100111100 +001010000110 +011110000011 +011001011101 +111001111101 +011010101111 +100011001000 +111111110100 +100101011101 +101110111111 +110100100011 +010100100111 +111011011000 +011111011001 +101111010001 +011111110010 +010000011100 +111101111110 +001010011000 +011010010011 +011011100111 +100001000110 +111111010100 +101100100001 +100101010101 +111110011110 +101001001110 +111011100001 +110111011011 +011100101100 +011000111011 +110100110101 +110000001011 +110101100001 +110011000000 +010010011011 +000110000001 +110001001111 +101010100111 +001011001100 +111100011111 +111101000101 +010110110001 +001000111110 +001110111111 +000100001001 +100101010110 +111110101101 +101111111001 +011011000101 +111011101010 +001000100001 +001111110101 +111110100000 +111011000110 +111101111010 +000100000101 +011000010110 +000000011011 +110011010011 +000101100000 +111100111111 +111110111000 +000101100011 +010000110110 +100101101011 +010101000100 +110110100011 +110001010001 +100010011100 +111101100000 +011110001100 +011101010011 +101111000111 +101000001010 +001010110010 +110000101000 +101101111111 +101000111100 +011011010010 +111101010001 +000100010010 +100010011000 +111110101000 +011101001010 +100100110001 +101010000000 +110100111101 +001101000110 +110101010010 +010101110110 +100011010011 +011011101011 +010110111011 +111001000000 +001100000101 +001101111110 +111000100110 +001010001001 +001000111100 +011110110110 +011111010110 +101010000011 +011111010100 +010100010111 +010100110001 +110100100111 +110001110100 +100101010100 +001111111010 +100111110111 +011010001000 +011101111001 +101110111010 +110011000100 +000010111010 +000011011001 +101010010011 +001110001011 +000100000100 +001001001000 +111101011010 +111110101110 +101110000100 +110101110000 +001110010110 +001001100100 +010011001111 +010011101010 +001111001000 +110001000011 +001100001111 +101100100011 +001100110011 +110111000110 +100010101000 +011110100111 +010111010001 +111100000101 +011110110010 +111010000111 +010101011110 +011101111010 +001100010100 +111000000001 +011001110111 +010000101110 +001010111111 +111100110110 +111000010010 +101011000111 +111000011101 +100111010001 +001110101000 +100111001010 +100110111000 +110001011110 +000001000100 +001100110110 +110110100001 +011101000001 +111001010111 +111000001010 +101100010100 +000110111111 +001100000001 +110011100011 +101111100110 +011010101001 +110001001100 +011111010111 +110100100010 +011100001110 +111000000010 +001010110011 +001100100011 +001010000111 +100000111010 +011011001101 +111001000110 +110011110111 +010001001000 +111010110011 +001100111011 +010000110001 +000110000111 +111100110101 +010111010110 +011100100001 +101011010000 +101010101000 +111011110110 +101100010001 +111110000010 +101010110111 +001001100000 +001110010011 +000110111110 +001001111001 +010101110000 +111001100110 +100100100101 +010001011101 +010000011110 +100001001001 +001001010100 +111100000000 +110011001110 +010101001100 +101000011111 +000010001111 +001111010001 +101010001111 +111101000011 +101000011001 +001111111100 +010110101101 +010011110110 +110000111110 +010000100100 +010011000111 +100101011110 +110100100101 +100100001000 +110110011101 +011011110100 +010001011111 +111000100000 +011100101001 +110010100100 +000001001011 +101011110001 +011011110000 +101011110101 +011011010000 +001110110001 +100010100111 +111001100100 +010011100110 +111111111100 +101110001010 +001001111111 +010100110011 +100101000000 +011101110001 +010110000111 +110100000111 +010100101100 +001000000011 +001100011110 +101100011100 +001001110000 +100110100010 +100011010111 +011101111100 +010110010000 +001111101011 +101100001110 +000010110110 +010110100110 +101110100111 +001111010011 +101110101010 +110011110001 +010001001110 +111010100110 +000001111001 +000100100001 +000000111100 +011100101111 +000001101110 +101000110101 +010011011110 +100000111101 +010010001100 +010101101010 +000001000001 +111111000100 +111111100110 +101011101000 +111100000011 +010110001111 +010011101101 +100101111010 +000001001111 +010000001111 +010111000000 +100110101110 +110101101110 +000000000110 +010001110001 +000111100001 +110101101111 +000110010111 +011010100011 +111110001101 +100000101001 +001010100110 +100001001111 +011010100000 +101010111000 +001101110111 +111001101011 +000111111001 +100010001000 +001010110110 +011001011111 +000111000101 +001111100110 +100110101001 +101111000110 +001101011111 +001111011110 +110110110100 +011001111111 +100001010101 +101101100010 +111101011110 +111110000000 +001011111100 +100100010111 +111000110001 +001110101010 +100100001100 +110100011111 +010101000111 +110111010000 +011111100011 +101110111001 +101011001000 +000011010011 +101011001110 +100101110111 +001011100011 +000110100100 +110110101010 +000011110111 +110010100010 +000111010101 +011011010110 +001001011110 +100101110100 +000110110000 +011001100100 +010010000110 +001110101110 +010000001000 +110000100010 +000010011011 +101000111011 +011001100111 +000000010100 +110101111110 +110100101101 +111111111101 +110100011110 +000001111000 +100110100111 +101010111011 +001000011101 +010001000010 +100100100010 +000111110000 +100001000010 +000110001100 +000001111010 +000101001010 +000101100100 +011000001101 +010000111000 +101111111000 +001110011101 +001010110101 +001011101000 +010110011100 +000010111101 +011001010110 +000011000000 +001000010101 +001101001000 +111100010000 +111111001111 +001011011000 +100000101000 +010101110101 +010010011010 +011001000001 +011000000000 +010101011101 +100101001000 +110101110101 +101101011001 +000101011100 +011001010100 +100010010100 +010101001011 +000001001001 +011011001100 +100001110100 +000101101110 +011011000000 +000010010011 +111111001001 +100110010111 +001011000000 +101111100101 +110100111000 +101110010000 +010000101001 +110100101110 +011000100100 +100100100001 +010101100010 +111011010101 +111001110000 +010011110010 +000011001000 +010011010011 +110110110010 +100101001111 +101011100011 +011111110111 +011000100010 +111001000111 +110001000110 +011100101000 +011100000101 +001010111010 +001101010011 +000101111101 +001101111111 +101111010111 +000011100011 +111001110101 +100101011100 +001011101011 +110001001110 +001001110001 +101011010011 +100110011101 +101001010100 +111001100000 +001011011100 +010001101101 +100100100100 +100110111100 +000101010000 +010011100000 +111101110010 +111001010100 +101100001000 +110100010110 +000010011111 +100100111001 +101011101010 +110101111010 +111011110011 +101110011011 +010101010101 +101111111111 +110011110010 +001010001100 +001001110100 +101110110010 +001010101101 +001111111101 +110110011111 +111000011001 +000010000011 +010001111100 +001001100001 +101011010111 +100111000010 +011101110011 +001110000010 +100000111111 +101101010101 +001010000011 +110101011110 +011011100110 +100101001001 +001101000001 +000001100111 +101100110111 +100000001100 +011100001111 +111000010101 +000110101110 +000101011010 +101110110100 +000001101011 +010001111001 +000000011101 +110100010101 +000101010111 +011011011110 +010010110011 +111101011011 +111100101001 +010010110100 +101001000110 +111100110011 +011100000100 +001000100111 +100001001010 +101101110101 +011010110101 +110110010011 +100110110110 +111110001111 +010111101000 +011100011110 +010110000100 +111001001011 +011010110111 +100110000111 +101110111000 +011000101001 +101010001010 +001101011010 +001010100001 +101111101011 +101111101000 +110010011101 +001010001010 +111000011100 +101011110100 +110000010001 +101010101010 +110111010110 +010100011110 +110101110100 +000101011001 +000110000000 +101110111100 +000110001011 +100010011101 +110001011011 +011010111000 +100111111000 +101011100111 +100001101011 +111110111010 +000011010010 +011010100101 +001110110101 +111110011111 +101010110001 +000011110001 +101001001011 +001100001011 +101111011101 +000110110001 +001001111110 +011001111001 +100001111101 +011110001111 +011011010100 +111101000111 +011000011110 +100011011000 +100001110011 +101010100010 +100110000110 +111010010101 +110000101101 +110111001001 +111001111100 +001000001110 +110001101001 +100111010000 +110110011001 +110100010011 +001100011001 +100111110001 +100000011111 +001000101010 +010010010100 +001010010111 +111111110110 +001011110011 +001010110111 +100100111011 +111100100011 +111111110111 +101110100000 +100001111010 +000100011100 +001011100010 +011001110110 +111010111001 +000101011101 +000011110110 +100000001010 +010110110100 +101100110010 +011010110011 +100010111001 +100101111101 +101110111011 +100001101110 +001101001111 +000011101100 +000011011101 +001001010101 +100111101011 +000111010110 +100000101100 +001011011101 +111001010110 +110000011100 +100011010100 +100110110001 +101001000000 +111111101110 +101110100100 +000101011110 +010010101100 +110011001011 +001100011111 +000000110000 +010101111101 +000111101111 +101110001100 +110101001011 +110010110010 +001110010000 +001100110100 +000001010101 +110001111100 +001101101001 +100010100101 +001010110001 +100000100010 +110010111011 +110101110011 +011111010101 +111001111110 +010000101000 +101001101100 +111010101110 +011010101000 +110011101001 +110110000101 +111011101101 +101110100110 +010010001011 +110000110110 +100001100101 +111000111101 +011000010100 +101111110110 +001100011101 +001100010000 +101110000111 +011110010000 +111101001011 +110101100100 +011100101010 +101001100111 +110110011010 +011110011010 +011101100111 +011001010001 +111111100010 +111011110001 +110111110011 +101111000100 +001000111111 +010011100011 +100110100001 +101000001110 +100010000111 +011010000010 +010100111101 +110001010000 +110011100101 +001101010000 +100011111000 +010001000001 +011011110110 +100101001011 +000011011100 +010000111001 +011111011101 +011011111001 +110010011110 +100010110100 +111010001111 +101110011100 +001111010101 +000100011001 +010111011111 +110010000010 +000010011010 +001101011100 +010000100101 +110011100001 +110100000101 +100010101110 +011010010101 +111101010010 +000111100000 +111010110101 +000100111100 +101100101011 +000100110011 +000111110111 +000101010100 +101101110011 +101011011001 +001001010111 +010011011100 +101100110011 +010101101011 +000011110100 +111111111001 +010011100101 +001001000000 +101101010000 +001111110001 +001100101000 +000000001001 +001111011101 +111110110001 +110110011000 +100000011100 +110101111000 +100010110001 +110101111100 +000001010010 +110010000001 +100101111001 +110010001101 +111011010010 +000110110011 +110000100111 +010110011010 +101111101110 +010101111010 +000011101111 +000001110010 +100100011011 +011100011011 +101010110110 +010001011010 +111110011010 +111110011000 +010110101000 +100110110000 +010100000011 +100001100011 +011101000100 +010111110001 +110111110100 +101001001001 +001001101001 +111000010100 +100010000110 +110010010100 +001001111000 +010001111101 +100111000111 +011110101111 +101110010100 +010010101000 +111011111101 +111010010110 +101000100011 +010000011000 +001011000100 +111001010010 diff --git a/04/04.py b/04/04.py new file mode 100644 index 0000000..af88551 --- /dev/null +++ b/04/04.py @@ -0,0 +1,66 @@ +from itertools import compress, chain +from collections import defaultdict +data = ''' +7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1 + +22 13 17 11 0 + 8 2 23 4 24 +21 9 14 16 7 + 6 10 3 18 5 + 1 12 20 15 19 + + 3 15 0 2 22 + 9 18 13 17 5 +19 8 7 25 23 +20 11 10 24 4 +14 21 16 12 6 + +14 21 17 24 4 +10 16 15 9 19 +18 8 23 26 20 +22 11 13 6 5 + 2 0 12 3 7 +'''.strip().split('\n', 1) + +with open("input") as f: + data = f.read().strip().split('\n', 1) +numbers = list(map(int, data[0].split(','))) +tables = data[1].strip().split('\n\n') +tables = [[list(map(int, x.split())) for x in t.split('\n')] for t in tables] + +table_hits = [0]*len(tables) +index = defaultdict(list) +for i, table in enumerate(tables): + for y, row in enumerate(table): + for x, number in enumerate(row): + index[number].append((i,x,y)) + +def find_sum(winner): + t = tables[winner] + w = bin(table_hits[winner])[2:][::-1] + w = w + '0'*(25-len(w)) + w = list(map(lambda x: 1 if x=='0' else 0, w)) + return sum(compress(chain(*t), w)) + +row = 0b11111 +column = 0b0000100001000010000100001 +def win(i): + for shift in range(5): + if table_hits[i] & (row << shift*5)== row << shift*5: + return True + for shift in range(5): + if table_hits[i] & (column << shift)== column << shift: + return True + return False + +winners = [] +w = set() +for number in numbers: + for i, x, y in index[number]: + table_hits[i] |= 1 << (y*5+x) + if win(i) and i not in w: + winners.append(number*find_sum(i)) + w.add(i) + +print(winners[0]) +print(winners[-1]) diff --git a/04/input b/04/input new file mode 100644 index 0000000..5338ded --- /dev/null +++ b/04/input @@ -0,0 +1,601 @@ +63,23,2,65,55,94,38,20,22,39,5,98,9,60,80,45,99,68,12,3,6,34,64,10,70,69,95,96,83,81,32,30,42,73,52,48,92,28,37,35,54,7,50,21,74,36,91,97,13,71,86,53,46,58,76,77,14,88,78,1,33,51,89,26,27,31,82,44,61,62,75,66,11,93,49,43,85,0,87,40,24,29,15,59,16,67,19,72,57,41,8,79,56,4,18,17,84,90,47,25 + +25 29 78 57 69 +47 51 7 21 82 +61 81 99 53 30 +50 80 41 94 46 + 9 37 48 71 91 + +26 10 29 27 90 +21 65 44 5 1 +42 51 35 11 98 +72 23 41 95 48 +40 97 99 92 2 + +20 70 21 58 5 +63 29 16 71 45 +43 7 26 0 62 +24 75 9 87 55 +88 10 11 47 4 + + 5 31 99 96 16 +61 37 91 92 23 +46 8 36 9 42 + 3 32 49 64 48 +15 2 47 53 55 + +28 40 96 38 9 +33 11 65 76 13 +24 35 20 3 99 +95 78 51 74 4 +80 14 44 98 58 + +24 55 8 59 65 +96 11 15 12 99 +21 75 35 85 34 +20 53 72 50 70 +61 48 74 41 36 + +61 32 13 42 90 +81 22 66 75 51 +46 1 41 9 34 +86 50 48 64 74 +72 85 97 11 71 + +16 32 41 37 61 +14 31 29 6 79 +28 97 11 15 9 +13 72 3 85 64 +81 95 20 77 69 + +42 76 14 78 35 +49 89 7 81 90 +13 18 32 24 9 +10 98 12 2 65 +82 21 67 70 84 + +89 38 21 83 5 + 7 87 37 14 98 +55 81 13 56 39 +42 19 51 36 30 +76 15 57 94 20 + +29 18 49 10 67 +91 93 37 45 34 +60 8 56 86 32 +95 89 71 51 59 +87 3 27 44 41 + + 9 71 95 12 42 +83 90 98 79 49 +72 1 53 80 33 +29 82 65 4 25 +92 5 76 54 66 + +72 85 4 39 29 +86 0 95 30 21 +11 51 2 99 38 +58 52 25 59 77 +69 74 37 87 32 + +99 16 9 63 55 +79 50 48 96 92 +47 35 15 93 76 +19 70 25 49 38 +80 60 43 69 81 + +50 19 10 7 83 +79 52 14 51 55 +68 65 54 21 62 +71 25 34 70 92 +44 26 61 4 46 + +75 26 15 76 61 +42 0 51 29 81 +82 57 16 91 4 +12 19 30 10 24 +78 58 55 74 53 + +36 80 46 9 85 +34 17 43 96 57 +37 6 33 88 28 +59 48 18 22 79 +55 52 20 2 61 + + 3 99 46 7 31 +61 43 17 78 4 +59 45 47 52 10 +55 95 33 9 35 +13 8 89 73 12 + +19 58 46 56 62 +11 72 82 0 12 +92 9 70 18 65 +35 61 79 87 36 + 1 27 22 8 74 + +60 92 94 2 84 +73 69 72 29 37 +50 74 56 58 6 +51 80 86 33 4 +32 24 20 7 78 + +47 25 76 89 61 +86 77 71 43 22 +42 18 70 24 98 +31 68 62 79 9 +17 10 78 16 84 + +90 41 71 1 58 +88 91 86 4 34 +48 31 3 74 21 +85 5 37 36 28 +18 46 17 49 69 + +41 55 52 58 44 + 4 75 81 12 48 +72 93 8 86 10 +66 29 94 85 69 +74 36 50 9 19 + +80 76 36 21 57 +58 8 27 18 86 +79 5 48 82 64 + 0 93 30 1 4 +78 40 52 50 62 + +58 60 77 25 22 +93 97 49 2 41 +59 38 95 36 44 +30 79 69 54 86 +23 4 80 85 27 + +27 67 68 46 41 +93 4 96 49 23 +11 54 80 88 75 +69 34 44 12 37 +39 78 66 5 43 + +20 32 71 99 19 +42 96 58 47 65 +72 31 70 59 26 +46 17 38 11 23 +18 85 52 77 67 + +38 98 42 31 40 +76 2 77 82 34 +92 73 55 93 19 +25 58 90 10 68 + 6 56 85 43 95 + +16 71 12 76 86 +78 26 15 34 45 +17 22 20 8 1 +51 52 24 90 79 +53 40 14 69 21 + +77 75 68 32 69 +61 9 74 58 44 +21 39 94 84 46 +14 29 93 31 63 +12 72 2 98 40 + +68 32 38 58 24 +61 11 76 55 39 + 6 21 31 93 99 +64 75 15 62 56 +34 12 14 73 77 + +50 24 71 22 67 +18 80 89 51 90 +54 64 31 19 44 +61 88 85 25 98 +73 69 37 72 39 + +79 2 62 91 97 +36 41 72 28 42 +26 89 98 86 10 +35 16 85 63 64 +43 51 39 60 55 + +47 86 44 56 74 + 0 96 39 84 54 +38 45 68 88 21 +11 33 17 52 97 +83 58 42 65 81 + +16 1 22 8 24 + 7 3 12 30 59 +79 91 53 69 68 +20 88 14 81 51 +89 71 54 56 52 + +25 12 32 53 3 +63 29 92 70 97 +54 6 21 4 86 +76 39 84 49 96 +68 0 15 72 28 + +56 20 35 71 23 +51 21 96 42 64 +83 1 8 94 55 +44 73 76 24 67 +81 70 6 61 46 + +85 37 30 39 97 +36 14 71 59 15 +46 26 27 25 9 + 6 56 79 52 67 +72 54 58 74 76 + +90 24 86 43 1 +18 70 89 20 9 +44 4 52 65 66 +56 17 96 78 67 +53 80 32 42 63 + +35 50 95 53 16 +75 1 85 31 81 +99 22 27 84 38 +98 8 19 25 92 +56 59 62 48 54 + + 8 22 67 70 91 +73 51 96 49 37 +31 4 99 52 27 +13 50 39 1 85 +19 9 40 55 47 + +59 35 52 60 91 +75 86 13 39 21 +33 99 11 64 50 +37 58 71 22 54 + 6 72 88 3 85 + +85 63 5 48 20 +96 55 53 35 60 + 0 17 26 22 13 +25 45 62 4 41 +78 40 46 95 33 + +23 53 82 22 74 + 5 45 15 44 65 +62 84 68 83 88 +52 46 61 77 59 +56 60 71 2 43 + +27 77 28 8 84 +33 0 22 62 40 + 3 44 19 53 91 +60 83 75 48 94 +29 93 23 82 65 + +77 34 72 62 4 + 9 8 76 52 60 +37 54 98 20 22 +11 13 86 48 57 +10 63 41 23 61 + +58 57 47 55 3 +38 11 39 15 9 + 5 65 92 98 41 +72 45 6 16 83 +74 40 99 50 30 + +72 46 35 9 53 +70 67 74 93 55 +24 4 30 38 47 +29 96 51 17 71 +90 5 69 54 61 + +90 59 93 99 34 +85 39 52 16 20 +32 66 75 35 17 +38 33 84 40 89 +91 77 26 86 54 + + 2 87 96 34 28 +98 74 56 17 37 +10 62 71 89 95 + 6 90 5 99 92 +39 73 55 18 8 + +87 44 72 2 45 +82 78 32 64 37 +46 75 95 67 80 + 8 60 57 97 56 +22 43 92 26 96 + +98 1 21 17 14 +85 6 33 69 16 +53 82 0 41 73 +46 72 2 35 23 +89 94 80 76 42 + +27 94 98 5 95 +64 19 77 15 92 +11 52 41 50 51 + 4 57 99 21 29 +20 35 78 34 87 + +52 83 84 21 59 +30 64 85 90 91 +24 32 57 0 81 +17 47 1 25 27 +10 51 65 79 34 + +83 9 94 14 85 +65 51 28 32 48 +81 71 8 12 31 +38 50 92 57 47 +34 49 56 73 27 + +54 8 72 38 29 +34 78 69 16 30 +82 24 9 0 13 +90 41 60 28 12 +71 22 70 80 66 + +71 50 24 86 21 +14 92 45 30 95 +57 60 0 88 91 +87 97 6 7 26 +61 98 25 5 84 + + 1 63 45 36 67 +27 16 54 72 41 +32 74 53 9 35 +95 29 90 19 26 +82 97 11 42 28 + + 2 93 86 28 43 +90 12 21 56 76 +98 30 25 9 75 +11 20 45 95 50 +22 31 39 49 6 + + 2 53 74 9 64 +24 8 85 86 59 +41 38 57 63 32 +88 93 14 11 55 +69 31 25 66 52 + +10 60 42 16 95 + 8 14 81 84 5 +98 32 68 12 6 +83 66 90 69 46 +54 40 59 73 91 + +24 66 62 30 83 +72 80 54 25 17 + 3 77 60 68 36 +26 22 8 74 95 +63 39 4 53 87 + +49 96 48 2 78 +14 21 38 98 45 +30 34 54 16 92 + 0 89 70 68 57 + 7 74 10 86 97 + +25 91 46 84 66 +44 50 40 10 67 +62 77 5 6 43 +63 29 79 51 53 +70 69 61 80 54 + +19 11 24 9 93 +21 53 81 2 61 +69 83 33 23 68 +73 22 77 71 52 +92 76 94 86 1 + +51 31 27 28 95 +16 50 36 13 57 + 1 11 79 45 90 +41 77 3 78 42 +56 74 85 44 52 + +58 0 63 88 30 +35 18 48 49 80 +36 11 46 13 76 +37 19 9 93 87 +68 15 17 8 82 + +96 20 7 81 11 +42 17 14 44 36 +99 98 68 58 56 +15 57 80 3 67 +61 66 38 83 59 + + 3 60 25 55 17 +42 45 66 24 14 +13 16 41 11 88 +89 96 97 35 1 +83 5 52 69 28 + +99 11 53 82 3 +88 74 42 38 13 +94 80 27 92 34 +29 56 8 14 76 +85 65 66 79 59 + +80 82 43 87 70 +85 22 53 10 1 +30 78 39 26 77 + 7 92 20 21 93 +75 36 61 13 90 + +53 41 29 77 58 +98 83 86 14 94 +10 99 24 17 32 + 3 87 42 19 61 +57 89 36 13 9 + +30 45 53 99 41 +80 85 25 18 10 +47 98 64 78 11 +58 94 9 91 87 +35 97 43 0 32 + +70 1 80 98 85 +73 69 90 63 20 +53 77 39 49 64 +28 7 78 84 57 +56 86 23 88 97 + +18 53 73 49 40 +36 95 46 42 94 +97 19 23 72 84 +21 47 91 8 17 +99 90 68 30 25 + +26 9 84 35 59 +44 47 66 8 48 + 0 82 68 54 58 +65 7 28 62 61 +55 37 21 72 86 + +47 55 12 75 61 +99 74 9 10 67 + 2 57 25 20 46 +83 97 43 49 59 + 3 79 94 69 70 + +12 2 41 69 24 +93 95 43 52 66 +71 92 57 14 58 +30 25 81 62 79 + 7 96 70 22 42 + +92 83 35 65 8 +63 71 43 33 19 +95 24 51 85 41 +66 13 68 12 20 + 7 1 22 40 75 + +30 56 10 85 72 +83 52 51 80 14 +32 29 67 41 74 +96 62 16 15 98 +73 45 99 48 79 + +24 9 5 38 52 +32 57 87 30 90 + 7 54 39 43 14 +31 76 96 65 0 +51 99 20 61 92 + +19 37 39 15 86 +53 32 42 57 70 + 9 26 84 93 10 +33 25 61 21 0 +34 60 30 99 7 + +62 50 33 29 54 +92 12 81 0 87 +60 2 27 7 9 +28 18 31 35 59 +20 63 38 72 14 + +96 89 34 56 63 +61 8 25 90 78 +94 26 10 47 84 + 1 32 7 83 73 +16 65 69 23 97 + +44 59 87 16 18 +31 50 27 9 38 +49 10 56 69 35 +13 24 91 46 70 +22 37 6 43 25 + +87 79 59 26 35 +81 73 36 66 51 +97 11 43 17 7 +24 94 71 91 48 +12 77 93 55 34 + +91 93 56 55 58 +24 11 82 35 86 +68 81 50 34 23 +59 73 1 8 37 +18 83 80 53 85 + +40 30 7 72 22 +68 94 95 89 42 +91 84 11 49 36 +64 29 26 73 76 +37 1 51 9 25 + +32 48 47 36 88 +54 91 59 72 50 +31 83 19 20 0 +24 67 61 46 99 +52 53 11 16 69 + +86 52 95 73 6 +56 45 8 13 80 +28 77 19 59 48 +99 33 47 10 85 +35 81 27 46 76 + +41 45 1 12 49 +32 16 21 85 27 +50 80 66 64 10 +76 11 9 59 52 +71 37 34 2 43 + +43 19 88 81 12 + 4 48 9 91 31 + 1 46 10 6 56 +72 41 30 36 94 +61 83 86 28 79 + +39 10 40 25 52 +29 60 38 18 31 +65 46 11 0 94 +68 12 42 4 84 +55 20 86 77 26 + +12 65 79 59 43 +93 6 68 1 29 +17 48 45 26 80 +37 22 5 66 47 +71 11 41 18 64 + + 5 45 54 82 64 +90 89 22 17 71 +81 60 65 32 34 +41 86 35 30 48 +67 47 23 51 6 + +19 65 11 58 49 +97 68 56 10 39 +87 29 43 40 83 + 9 41 26 79 77 +63 72 93 4 51 + +82 50 90 45 4 +53 96 93 30 19 + 8 95 73 74 98 +35 20 32 7 36 +56 52 59 26 16 + +94 67 97 34 75 +23 80 68 24 47 +56 8 21 66 36 +69 5 3 95 17 +29 38 44 42 28 + +84 35 72 8 38 +94 30 48 24 27 +81 61 18 87 90 +65 17 85 22 45 +32 15 74 52 68 + + 9 69 63 68 36 +44 31 35 12 39 +57 83 6 49 23 +64 0 10 85 81 +82 40 34 91 24 diff --git a/05/05.py b/05/05.py new file mode 100644 index 0000000..e1f53ed --- /dev/null +++ b/05/05.py @@ -0,0 +1,35 @@ +from collections import defaultdict +with open("input") as f: + data = f.read().strip().split('\n') + +data = [tuple(tuple(map(int, point.split(','))) for point in line.split(' -> ')) for line in data] +data1 = list(filter(lambda x: x[0][0]==x[1][0] or x[0][1]==x[1][1], data)) + +d = defaultdict(int) +for (x1,y1), (x2,y2) in data1: + if x1==x2: + for y in range(min(y1,y2), max(y1,y2)+1): + d[(x1, y)] += 1 + else: + for x in range(min(x1,x2), max(x1,x2)+1): + d[(x, y1)] += 1 +k = sum(1 for (x, y), c in d.items() if c>1) +print(k) + +d = defaultdict(int) +for (x1,y1), (x2,y2) in data: + if x1==x2: + for y in range(min(y1,y2), max(y1,y2)+1): + d[(x1, y)] += 1 + elif y1==y2: + for x in range(min(x1,x2), max(x1,x2)+1): + d[(x, y1)] += 1 + else: + if x1>x2: + x1,x2 = x2,x1 + y1,y2 = y2,y1 + y = 1 if y11) +print(k) diff --git a/05/input b/05/input new file mode 100644 index 0000000..4f66e5f --- /dev/null +++ b/05/input @@ -0,0 +1,500 @@ +955,125 -> 151,929 +830,251 -> 526,555 +182,185 -> 13,16 +73,871 -> 73,951 +169,968 -> 626,968 +471,180 -> 471,746 +725,478 -> 791,544 +577,413 -> 577,753 +636,937 -> 181,937 +46,601 -> 714,601 +400,905 -> 400,972 +911,773 -> 883,801 +818,684 -> 818,705 +71,846 -> 151,846 +737,489 -> 626,378 +634,800 -> 634,482 +401,209 -> 401,469 +676,688 -> 384,396 +247,819 -> 680,819 +944,343 -> 196,343 +57,689 -> 586,160 +13,54 -> 918,959 +736,490 -> 520,706 +331,20 -> 208,20 +639,865 -> 322,548 +914,227 -> 914,980 +163,411 -> 163,825 +344,58 -> 344,199 +274,153 -> 989,153 +15,14 -> 983,982 +784,269 -> 332,721 +206,921 -> 206,331 +219,944 -> 260,903 +81,92 -> 976,987 +325,633 -> 502,810 +887,850 -> 887,83 +203,756 -> 203,627 +447,33 -> 748,33 +87,245 -> 87,932 +817,324 -> 881,324 +922,227 -> 167,982 +626,867 -> 155,396 +743,689 -> 743,779 +516,433 -> 133,433 +444,407 -> 614,407 +42,140 -> 475,140 +311,422 -> 311,514 +526,59 -> 643,59 +709,69 -> 455,69 +136,46 -> 159,46 +300,113 -> 763,576 +979,977 -> 18,16 +380,490 -> 380,556 +134,726 -> 134,287 +317,717 -> 383,717 +726,712 -> 211,197 +703,952 -> 165,952 +806,575 -> 122,575 +589,691 -> 589,716 +965,337 -> 879,337 +938,23 -> 57,904 +186,141 -> 385,141 +864,744 -> 959,744 +276,957 -> 636,957 +98,846 -> 98,349 +559,261 -> 559,63 +564,808 -> 564,429 +491,362 -> 491,746 +513,250 -> 897,250 +939,442 -> 249,442 +366,678 -> 916,678 +325,79 -> 604,358 +513,890 -> 133,890 +360,88 -> 427,88 +777,266 -> 522,266 +371,859 -> 776,859 +111,600 -> 111,980 +366,471 -> 646,191 +849,407 -> 933,407 +867,681 -> 570,384 +467,707 -> 797,377 +624,304 -> 852,76 +341,149 -> 575,383 +34,499 -> 736,499 +13,312 -> 927,312 +897,188 -> 897,639 +372,665 -> 372,501 +651,22 -> 173,22 +450,394 -> 450,798 +140,584 -> 140,960 +223,919 -> 980,919 +893,645 -> 429,181 +284,488 -> 207,411 +823,868 -> 622,667 +426,881 -> 868,881 +49,63 -> 974,988 +921,475 -> 81,475 +166,653 -> 166,913 +40,191 -> 767,918 +911,499 -> 911,363 +966,960 -> 84,78 +193,522 -> 193,379 +208,255 -> 673,255 +684,837 -> 684,192 +921,758 -> 921,841 +756,244 -> 756,277 +866,533 -> 866,186 +97,747 -> 798,46 +415,287 -> 415,759 +570,824 -> 902,824 +341,792 -> 44,792 +849,787 -> 161,99 +501,621 -> 565,685 +409,62 -> 215,256 +591,780 -> 855,780 +901,67 -> 901,223 +662,212 -> 578,212 +196,924 -> 196,94 +404,492 -> 300,492 +10,984 -> 984,10 +722,739 -> 722,775 +805,637 -> 805,299 +848,722 -> 707,722 +444,597 -> 158,597 +402,57 -> 509,57 +490,353 -> 273,353 +868,208 -> 421,655 +102,930 -> 903,129 +557,877 -> 557,529 +27,69 -> 843,885 +549,695 -> 468,695 +767,701 -> 104,701 +415,141 -> 415,809 +205,767 -> 205,427 +264,723 -> 952,35 +357,279 -> 390,279 +529,436 -> 250,715 +390,472 -> 889,971 +983,11 -> 21,973 +732,307 -> 112,927 +412,801 -> 252,801 +738,338 -> 738,94 +80,135 -> 952,135 +623,269 -> 870,516 +216,507 -> 32,507 +927,10 -> 927,946 +389,955 -> 389,399 +683,825 -> 629,879 +163,450 -> 208,495 +303,217 -> 831,217 +827,632 -> 827,736 +629,880 -> 629,533 +368,67 -> 111,67 +625,268 -> 397,268 +737,335 -> 299,773 +666,767 -> 494,939 +144,238 -> 757,238 +511,211 -> 270,211 +312,901 -> 548,665 +550,763 -> 47,763 +942,403 -> 464,881 +969,18 -> 15,972 +963,831 -> 187,55 +933,831 -> 933,408 +733,658 -> 876,658 +599,392 -> 980,11 +44,406 -> 900,406 +645,169 -> 577,237 +731,41 -> 731,265 +574,397 -> 574,249 +316,279 -> 316,657 +826,116 -> 18,924 +611,892 -> 824,892 +607,168 -> 607,85 +371,914 -> 113,656 +145,201 -> 458,514 +813,952 -> 189,328 +633,15 -> 239,409 +832,278 -> 202,908 +234,698 -> 509,423 +635,27 -> 635,18 +701,147 -> 701,577 +777,722 -> 777,835 +519,298 -> 497,298 +80,71 -> 875,866 +872,350 -> 58,350 +128,711 -> 131,711 +591,709 -> 362,480 +129,647 -> 54,572 +980,731 -> 282,33 +245,813 -> 682,813 +867,238 -> 463,642 +511,888 -> 511,391 +727,38 -> 289,38 +311,888 -> 311,801 +261,915 -> 926,250 +855,835 -> 145,125 +78,688 -> 826,688 +989,40 -> 66,963 +956,30 -> 101,885 +665,826 -> 406,826 +97,981 -> 985,93 +971,847 -> 357,233 +725,531 -> 725,556 +63,570 -> 403,570 +41,430 -> 577,430 +40,54 -> 796,810 +417,232 -> 417,392 +214,800 -> 936,78 +542,955 -> 146,955 +76,263 -> 471,263 +784,507 -> 784,858 +443,222 -> 443,881 +317,157 -> 317,956 +245,599 -> 166,520 +307,649 -> 307,313 +399,782 -> 538,782 +483,731 -> 294,731 +950,903 -> 281,234 +283,522 -> 866,522 +472,505 -> 278,505 +435,693 -> 845,283 +881,751 -> 294,164 +40,840 -> 179,979 +481,398 -> 481,661 +509,687 -> 509,875 +976,866 -> 684,574 +133,130 -> 158,130 +268,81 -> 641,454 +613,754 -> 393,974 +980,984 -> 14,18 +55,909 -> 952,12 +865,132 -> 986,132 +147,773 -> 147,414 +135,62 -> 934,861 +298,293 -> 298,978 +583,990 -> 424,990 +760,189 -> 516,189 +286,292 -> 286,648 +60,352 -> 60,830 +335,241 -> 420,156 +360,571 -> 360,354 +361,233 -> 714,233 +21,78 -> 922,979 +35,748 -> 449,748 +859,26 -> 73,812 +277,827 -> 277,708 +160,633 -> 515,278 +673,422 -> 568,317 +620,235 -> 620,645 +538,698 -> 156,698 +47,543 -> 439,543 +65,975 -> 945,95 +259,644 -> 242,644 +777,216 -> 794,216 +100,191 -> 835,926 +450,581 -> 450,433 +475,784 -> 475,118 +840,584 -> 580,844 +191,283 -> 191,58 +170,650 -> 130,690 +478,269 -> 478,781 +44,981 -> 839,186 +270,744 -> 270,902 +941,960 -> 102,121 +303,690 -> 303,467 +150,18 -> 150,601 +470,523 -> 240,523 +166,575 -> 621,575 +197,765 -> 691,271 +164,798 -> 369,798 +544,319 -> 677,319 +31,212 -> 777,958 +894,774 -> 894,752 +567,225 -> 67,225 +884,201 -> 184,201 +675,961 -> 187,473 +203,78 -> 203,690 +52,945 -> 957,40 +987,214 -> 987,762 +792,975 -> 792,673 +358,782 -> 598,542 +105,716 -> 777,44 +736,643 -> 245,643 +507,940 -> 275,940 +231,936 -> 231,209 +204,545 -> 186,563 +881,426 -> 881,460 +315,867 -> 96,867 +793,324 -> 642,324 +276,709 -> 540,973 +834,401 -> 834,701 +616,874 -> 616,606 +892,596 -> 892,570 +255,919 -> 850,324 +764,62 -> 82,744 +682,374 -> 978,374 +218,353 -> 218,787 +140,289 -> 720,869 +811,20 -> 811,203 +165,291 -> 284,291 +137,382 -> 137,767 +15,14 -> 989,988 +947,682 -> 499,234 +751,356 -> 862,356 +398,362 -> 398,494 +260,32 -> 780,552 +839,484 -> 584,484 +198,865 -> 198,327 +600,461 -> 418,279 +346,439 -> 495,588 +854,661 -> 775,661 +119,575 -> 119,415 +349,849 -> 349,421 +13,401 -> 21,393 +169,511 -> 169,61 +848,678 -> 213,678 +42,25 -> 729,712 +903,740 -> 816,740 +398,862 -> 398,116 +443,624 -> 101,624 +135,158 -> 223,158 +440,742 -> 388,742 +903,963 -> 49,109 +131,198 -> 208,198 +147,289 -> 147,663 +684,307 -> 684,299 +453,864 -> 453,404 +361,982 -> 978,365 +840,64 -> 563,64 +377,301 -> 613,301 +32,366 -> 609,366 +867,240 -> 867,188 +798,714 -> 956,714 +617,792 -> 617,354 +309,357 -> 309,797 +824,888 -> 824,598 +947,958 -> 305,316 +505,934 -> 461,890 +45,685 -> 597,133 +875,170 -> 66,979 +239,959 -> 985,213 +769,423 -> 769,39 +62,750 -> 764,48 +749,798 -> 749,307 +110,646 -> 241,777 +93,804 -> 867,30 +361,663 -> 856,663 +494,788 -> 187,788 +696,379 -> 696,823 +664,935 -> 146,417 +895,804 -> 895,144 +200,240 -> 805,240 +347,794 -> 487,934 +978,920 -> 978,408 +730,480 -> 390,140 +933,810 -> 933,513 +429,864 -> 134,864 +476,339 -> 183,632 +677,878 -> 677,417 +980,261 -> 757,261 +452,569 -> 452,280 +535,223 -> 867,223 +159,466 -> 983,466 +332,155 -> 334,153 +887,478 -> 887,179 +173,245 -> 773,845 +441,274 -> 632,465 +987,389 -> 987,440 +830,806 -> 747,806 +103,82 -> 796,775 +945,14 -> 129,14 +110,873 -> 520,873 +393,391 -> 291,391 +598,125 -> 129,594 +378,546 -> 175,546 +302,558 -> 617,243 +943,752 -> 244,53 +972,943 -> 41,12 +16,164 -> 124,164 +270,815 -> 27,815 +146,729 -> 146,317 +153,255 -> 166,255 +511,505 -> 270,505 +404,568 -> 388,568 +485,751 -> 485,785 +752,686 -> 160,686 +523,676 -> 385,676 +854,437 -> 618,437 +578,212 -> 875,509 +800,115 -> 815,130 +439,554 -> 868,983 +225,803 -> 244,822 +494,735 -> 655,574 +932,191 -> 932,41 +842,325 -> 630,325 +201,288 -> 518,288 +255,332 -> 53,332 +385,959 -> 329,903 +757,447 -> 276,447 +884,957 -> 884,449 +686,354 -> 195,354 +384,677 -> 951,110 +173,77 -> 164,77 +767,840 -> 248,321 +81,180 -> 81,371 +517,838 -> 517,461 +950,559 -> 221,559 +934,826 -> 329,221 +311,329 -> 311,146 +140,459 -> 280,459 +200,195 -> 24,19 +517,270 -> 865,618 +43,54 -> 939,950 +853,339 -> 853,388 +297,795 -> 240,795 +358,890 -> 275,973 +26,70 -> 931,975 +781,141 -> 318,604 +17,794 -> 204,794 +87,534 -> 763,534 +590,968 -> 590,613 +358,836 -> 758,836 +598,635 -> 764,635 +313,670 -> 313,478 +832,330 -> 832,629 +973,36 -> 21,988 +131,814 -> 709,236 +261,163 -> 261,906 +720,48 -> 659,48 +988,152 -> 326,814 +937,761 -> 690,761 +988,784 -> 988,879 +807,445 -> 336,916 +933,978 -> 51,96 +305,966 -> 305,402 +184,687 -> 437,687 +256,172 -> 186,172 +508,162 -> 421,162 +689,52 -> 740,52 +545,807 -> 545,630 +676,924 -> 620,924 +976,68 -> 139,905 +322,96 -> 45,96 +663,407 -> 199,871 +562,636 -> 224,974 +172,439 -> 126,439 +740,628 -> 852,628 +252,28 -> 596,372 +129,850 -> 571,408 +75,446 -> 399,446 +67,460 -> 704,460 +932,531 -> 932,60 +520,229 -> 255,494 +462,756 -> 462,614 +158,117 -> 592,551 +203,722 -> 203,892 +93,822 -> 207,822 +634,172 -> 634,457 +272,365 -> 272,377 +989,23 -> 25,987 +739,776 -> 40,776 +843,708 -> 24,708 +665,10 -> 665,728 +271,858 -> 11,598 +947,642 -> 629,960 +230,760 -> 938,52 +291,552 -> 291,388 +689,400 -> 260,829 +610,194 -> 470,194 +628,824 -> 45,241 +935,940 -> 51,56 +90,871 -> 90,933 +973,934 -> 104,65 +435,245 -> 768,245 +43,666 -> 625,666 +770,563 -> 724,563 +363,816 -> 363,889 +25,725 -> 701,49 +784,846 -> 484,846 +989,293 -> 989,502 +572,135 -> 485,135 +683,807 -> 370,494 +982,182 -> 225,939 +838,522 -> 520,522 +253,942 -> 970,225 +442,963 -> 577,963 +867,193 -> 307,753 +269,204 -> 771,204 +941,925 -> 136,120 +329,488 -> 728,89 +37,424 -> 254,424 +179,864 -> 895,148 +359,473 -> 359,675 +976,933 -> 129,86 +220,101 -> 376,101 +988,667 -> 946,667 +667,22 -> 308,22 +831,782 -> 245,196 +759,813 -> 225,279 diff --git a/06/06.py b/06/06.py new file mode 100644 index 0000000..d6f5617 --- /dev/null +++ b/06/06.py @@ -0,0 +1,29 @@ +from collections import Counter +with open("input") as f: + data = f.read().strip().split(',') +data = list(map(int, data)) + +_data = data +for _ in range(80): + if _%80==0: + print(_) + new_data = [] + new_fish = [] + for x in _data: + if x==0: + new_fish.append(8) + new_data.append(6) + else: + new_data.append(x-1) + _data = new_data + new_fish + +print(len(_data)) + +_data = [0]+[y for x, y in sorted(Counter(data).items(), key=lambda x: x[0])]+[0,0,0] +for _ in range(256): + x = _data[0] + _data = _data[1:] + [_data[0]] + _data[6] += x +print(sum(_data)) + + diff --git a/06/input b/06/input new file mode 100644 index 0000000..229caa9 --- /dev/null +++ b/06/input @@ -0,0 +1 @@ +1,2,1,1,1,1,1,1,2,1,3,1,1,1,1,3,1,1,1,5,1,1,1,4,5,1,1,1,3,4,1,1,1,1,1,1,1,5,1,4,1,1,1,1,1,1,1,5,1,3,1,3,1,1,1,5,1,1,1,1,1,5,4,1,2,4,4,1,1,1,1,1,5,1,1,1,1,1,5,4,3,1,1,1,1,1,1,1,5,1,3,1,4,1,1,3,1,1,1,1,1,1,2,1,4,1,3,1,1,1,1,1,5,1,1,1,2,1,1,1,1,2,1,1,1,1,4,1,3,1,1,1,1,1,1,1,1,5,1,1,4,1,1,1,1,1,3,1,3,3,1,1,1,2,1,1,1,1,1,1,1,1,1,5,1,1,1,1,5,1,1,1,1,2,1,1,1,4,1,1,1,2,3,1,1,1,1,1,1,1,1,2,1,1,1,2,3,1,2,1,1,5,4,1,1,2,1,1,1,3,1,4,1,1,1,1,3,1,2,5,1,1,1,5,1,1,1,1,1,4,1,1,4,1,1,1,2,2,2,2,4,3,1,1,3,1,1,1,1,1,1,2,2,1,1,4,2,1,4,1,1,1,1,1,5,1,1,4,2,1,1,2,5,4,2,1,1,1,1,4,2,3,5,2,1,5,1,3,1,1,5,1,1,4,5,1,1,1,1,4 diff --git a/07/07.py b/07/07.py new file mode 100644 index 0000000..c958506 --- /dev/null +++ b/07/07.py @@ -0,0 +1,8 @@ +with open("input") as f: + data = list(map(int, f.read().strip().split(','))) + +print(min(sum(abs(y-x) for y in data) for x in range(min(data), max(data)+1))) +print(min(sum(abs(y-x)*(abs(y-x)+1)//2 for y in data) for x in range(min(data), max(data)+1))) + + + diff --git a/07/input b/07/input new file mode 100644 index 0000000..22a3223 --- /dev/null +++ b/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,867,253,111,269,117,150,421,508,1073,136,247,10,1427,802,2,492,1302,228,2,48,113,0,741,34,107,559,514,283,372,78,423,405,1303,360,281,1850,367,892,1021,930,318,80,709,349,32,203,94,1359,456,783,62,34,1487,245,294,749,250,1441,8,1388,604,324,483,696,119,294,1478,529,189,454,785,703,13,1099,790,402,251,919,116,318,201,893,571,3,45,756,41,65,92,21,1903,219,32,191,1037,177,480,232,389,1342,1178,1320,955,1020,655,276,203,221,316,689,621,270,911,537,230,327,662,552,410,1608,385,7,26,227,71,1646,257,725,531,413,8,19,1029,182,1518,270,124,113,569,468,126,505,376,367,113,425,4,80,1883,433,1167,768,231,393,528,69,422,17,350,858,1028,659,972,108,542,602,1577,11,1481,127,466,415,567,1178,38,137,777,446,965,832,1347,642,716,176,264,487,32,425,354,104,230,756,310,711,228,580,520,677,781,45,926,1063,126,235,262,199,330,874,1570,221,107,803,810,1723,266,99,940,21,38,1680,44,32,17,907,403,413,628,968,138,12,24,483,114,658,206,24,61,561,882,532,1280,255,805,75,237,321,310,1022,545,1515,609,65,791,933,233,846,506,704,628,516,868,726,134,6,243,1048,227,259,1599,117,114,461,365,63,1559,62,98,884,11,426,915,192,901,4,1481,122,424,307,250,256,693,162,1217,834,516,644,898,396,1073,642,480,361,1434,607,23,818,515,6,288,443,324,4,1559,659,409,415,82,41,1233,657,93,1405,17,94,18,379,32,8,419,1511,766,234,818,916,775,4,1009,282,372,317,371,945,1314,261,485,529,1076,298,223,40,434,401,117,1030,153,2,19,27,41,544,477,1117,588,206,155,12,1197,1518,305,51,921,775,296,1187,57,517,2,36,145,92,67,68,559,771,1,69,250,612,94,1638,1327,501,434,114,6,1468,429,28,1163,207,576,50,1759,216,9,50,432,598,664,1087,409,828,1115,169,120,318,21,1245,314,338,47,469,231,236,892,671,373,991,1136,488,341,168,143,850,1135,42,449,666,814,16,232,505,122,1316,803,1093,977,79,5,936,512,217,942,1333,13,13,1861,2,267,74,1096,1058,107,461,78,418,861,547,25,1398,255,562,344,820,1171,1376,494,17,116,1333,256,20,1425,1668,79,604,1614,223,45,18,917,30,965,866,1331,91,141,1120,829,3,0,498,57,78,1579,467,185,1399,683,590,11,913,33,540,536,459,367,175,176,946,130,324,634,671,554,277,570,968,409,468,419,1249,1039,45,238,4,808,1022,10,151,1158,32,38,1054,969,90,70,1194,1582,512,876,289,1042,91,1872,305,996,349,17,517,968,1493,637,142,141,226,590,181,811,608,4,135,97,389,385,929,1143,1319,684,509,437,133,843,101,118,71,120,80,25,33,259,894,1050,1450,583,1665,372,128,586,282,1147,1160,1643,1488,339,445,268,1577,101,8,308,719,210,288,332,1034,47,1303,31,59,16,270,104,68,1107,736,420,108,367,461,791,279,863,645,2,999,453,682,21,764,244,435,1238,36,1193,37,346,35,70,114,78,67,1245,15,1002,83,450,353,50,396,1068,26,21,429,551,13,498,117,731,601,23,1218,271,26,958,852,139,331,92,560,218,1243,410,109,296,35,588,6,645,87,64,188,497,28,693,18,88,196,62,7,33,311,1102,187,829,664,630,331,304,1249,21,309,1238,64,155,38,134,291,77,90,32,765,332,87,257,755,93,181,174,118,584,98,825,292,428,187,731,813,784,1222,117,345,1380,31,1447,269,672,747,1112,147,32,690,1258,253,763,92,1427,503,4,40,289,41,733,240,884,201,136,594,560,3,1083,1282,686,918,667,1535,702,158,65,1055,100,481,457,1565,1067,641,289,18,1537,62,545,401,1238,528,713,1042,430,144,390,220,953,42,817,18,26,137,1870,999,557,234,586,1316,87,104,369,39,215,595,922,1194,187,1056,382,397,387,872,191,464,1841,883,162,119,38,916,2,676,1524,315,1217,63,382,328,591,372,138,883,733,910,635,1059,87,773,630,1179,169,947,401,20,820,119,575,1117,48,268,45,896,772,293,217,73,732,26,528,1121,382,813,419,424,221,107,145,264,526,589,482,51,1399,954,292,276,248,1276,218,1005,296,360,60,5,499,661,192,199,250,1001,496,281,361,664,248,1090,86,203,241,61,329,1551,182,790,787,408,442,603,681,522,478,1072,527,1094,104,1267,418,730,217,1198,859 diff --git a/08/08.py b/08/08.py new file mode 100644 index 0000000..00f3686 --- /dev/null +++ b/08/08.py @@ -0,0 +1,34 @@ +from itertools import combinations +with open("input") as f: + data = f.read().strip().split('\n') +data = [[s.split() for s in d.split('|')] for d in data] + +print(sum(sum(1 if len(y) in {2,3,4,7} else 0 for y in x) for _, x in data)) + +known = { + 2: 1, + 3: 7, + 4: 4, + 7: 8, +} +s = 0 +for digits, number in data: + real = {} + for digit in digits: + if len(digit) in known: + real[known[len(digit)]] = set(digit) + for x in combinations(digits, 9): + base = set('abcdefg') + for d in x: + base = base.intersection(set(d)) + if len(base)==1: + f = next(iter(base)) + real[2] = [d for digit in digits if len(d := set(digit))==5 and f not in d][0] + real[3] = [d for digit in digits if len(d := set(digit))==5 and len(real[2]-d)==1 and len(d-real[2])==1][0] + real[5] = [d for digit in digits if len(d := set(digit))==5 and d!=real[2] and d!=real[3]][0] + real[9] = [d for digit in digits if len(d := set(digit))==6 and d==real[3] | real[4]][0] + real[0] = [d for digit in digits if len(d := set(digit))==6 and len(d - real[5])==2][0] + real[6] = [d for digit in digits if len(d := set(digit))==6 and d!=real[0] and d!=real[9]][0] + real = {frozenset(v): k for k, v in real.items()} + s += int(''.join(str(real[frozenset(n)]) for n in number)) +print(s) diff --git a/08/input b/08/input new file mode 100644 index 0000000..ce56799 --- /dev/null +++ b/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/09/09.py b/09/09.py new file mode 100644 index 0000000..315b53d --- /dev/null +++ b/09/09.py @@ -0,0 +1,28 @@ +from math import prod +with open("input") as f: + data = [[int(x) for x in line] for line in f.read().strip().split('\n')] +data = [[9]*len(data[0])] + data + [[9]*len(data[0])] +data = [[9]+line+[9] for line in data] + +print(sum(1+data[i][j] for i in range(1, len(data)-1) for j in range(1, len(data[0])-1) if all(data[i][j]': 25137, + } +opens = { + ')': '(', + ']': '[', + '}': '{', + '>': '<', +} +closings = {v: k for k, v in opens.items()} +second_scores = { + ')': 1, + ']': 2, + '}': 3, + '>': 4, + } + + +s = 0 +ss = [] +for line in data: + parens = [] + for c in line: + if c in scores: + if opens[c] != parens[-1]: + s += scores[c] + break + else: + parens.pop() + else: + parens.append(c) + else: + if parens: + x = 0 + for p in reversed(parens): + x = x*5 + second_scores[closings[p]] + ss.append(x) + +print(s) +print(sorted(ss)[len(ss)//2]) + + diff --git a/10/input b/10/input new file mode 100644 index 0000000..661c46a --- /dev/null +++ b/10/input @@ -0,0 +1,94 @@ +{[<([<[[(<[({<<><>><()[]>}<(()())(())>)<(([]())){<()()><{}<>)}>][(((()<>)[{}{}]){<[]<>>({}{})})]>)[(({([{}[]] +{{[[(<[[[<[<<{()()}(<>{})>[<<><>>[[]]]>[{{[]<>}[[]]}<<[]{}>[<>[]]>]]([[[{}<>]]<<()[]>{()<>}>]([<< +([<{[[{{((([(<[]<>>{[]<>})<([]){<>{}}>][([<>[]][[]{}])])[[{{()[]}<()[]>}<{(){}}>]]]<{(<[{}< +(({(<{(([<[({([]())(<>())}{([]{})[{}{}]})]{(({{}()}{<>()}](<[]<>>(()[])))({[[]{}]<[]<>>})}>[[[{<<>[]>(() +[([<([{({{[{[([]{})[{}[]]][[{}{})]}<([<>{}]<<>()>)>]}([<{[()<>]{()<>}}[[{}{}]<(){}>]><{{{}[]}[()<>]}[{{ +<(([<{{<(<[(<{()()}>(({}()){()[]}))<[<[]()>[[]()]]<{[]()}<<>{}>>>](<[([]())]>(([()()][()<>])({()<>}<[]<>>)) +[{({<(<[{({{{[()[]](<>[])}{([]{})<<>{}>}}}{{<<{}[]>(<>)><(<><>)([]())>}<{({}<>)(<><>)}{[{}{} +([(<{<[<{[({[<[]{}><<><>>]<({}[])({}<>)>}([{{}<>}<[]()>]<<<><>>>)){({<<><>>[[]{}]}(<()<>>{()}))<{<[ +({{([(<{{{{{{([]{}){<>{}}}}{<<()>{{}{}}>[({}())(()<>)]}}[[[[{}{}](<><>)]{<()[]><[][]>}](([[]](()()))<[[] +(<<[<{{{({{<{{(){}}{<>()}}<({}{}){[][]}>>[{<[]{}>{<>()}}<{[]<>}[()<>]>]}}({([({}[])(<>{})][{<>}])[{[()<>]<{} +{[(<<((<[[<{<{<>()}[{}[]]>}{{((){})[()<>]}<{(){})[{}{}]>}>]({((<<>()>){[<>()]{{}()}}){{[()()][<><>]} +{(((([[(<[({({{}()}[<>[]])<(<><>)([]())>}{<[[]<>]><<()<>><()<>>>})<[[<[]{}><<>{}>]]>]<<{{[ +[{(<[[(<(<[{<({}[])<{}{}>>(<[]<>>)}]<{(<[]()>[()()])}>>{({<{{}()}[<>()]>})<[[(<>())(<>{})]{{{}[]}}][({{}[]} +{[[<([{[(<<[<<()()>[[]]>[{()()}]](<[()]<()[]>><<{}()>{()()}>)>><[[([{}<>]{{}()})<{{}[]}<()[]>>]]})[([{{{<>()} +((({[(<<{(((<<{}()>><{<><>}>)))[[{<({}[])[{}[]]>}(<[<><>][()()]><[[][]]<{}[]>>)]]}((({<(<>())>[({}{ +{<{{[(<<{(<{[({}<>)<{}[]>]([(){}](<>[]))}<(({}()){[][]}}[<()[]><{}()>]>>)}<<{(<[{}()]{<>{}}>[[[]()](() +{(<<({{([<[<[<{}<>>{[][]}]<[<><>][()[]]>>{(({}{})){<()><()()>}}]>(<({{()()}({}<>)}<([]<>){[]{}}>){([[]<> +<(<({{{([({{<<{}<>><()[]>>[{()<>}[<>{}]]}})({([{()[]}{(){}}]<(()<>)<{}<>>>)}<{{<{}<>>[[][]]}}<[{<>}[<> +{({{(<<([({{[(()<>)[[]<>]][(<>{})({}())]}})]{(<[<(<>()){<><>}><<{}()>[[]]>][{{<>()}{[]()}}{[()<>]{<>()}}]>) +([<({{{([[<<[[()[]][<><>]]<<<>[]><()()>>>(<{()<>}<()[]>><{<>()}<[]{}>>)>({(<()[]]<()()>)<[<>()][{}]> +{[{<((<[<<({<{[]{}}[()()>>({[][]}[[]()])})(([{()}{{}()}]<<{}()>{{}{}}>)<([<>()])(<{}<>><{}[]>)>)>{[{ +{{([([{(<[[{[{()<>}({}())][[[]<>]<{}{}>]}]<<[({}[])(()<>)]({(){}}[()()])>{{(())<(){}>}}>]{[<{[[]()]{<>[]}} +<(<({<{<<<([<([]<>)([]<>)>]<{{{}{}}<<>()>}>)<<{[[]()](<>{})}(([]())<[]()>)><[{<>{}}[(){}]]>>>>>(<{<[[[{ +(([({<{(<{[<({<><>}){{[][]}}>{<([]()){{}{}}>[([][])<{}{}>]}]}[((<{()<>}>)[{{()<>}{[][]}}])] +(<<<(({{{([[<{(){}}>{(()())(()[])}]{({{}[]}<[][]>]<{{}<>}{()}>}])<(({[[][]]{{}{}}}(([][])<(){}>) +{<{{[[({<<{{({{}()}({}{})><[()<>][<>{}]>}([<()[]>({}())][{()<>}[()]])}{<[{(){}}<[]{}>][[[]<>][[][]]]>([[<>] +{{{[(<([[[[{[[(){}}<{}>]<{<>[]}{{}{}}>}]<[[(<>())((){})]((<>()))]{(<[]{}>([][])){<[]<>>(()[])}}>] +(<{[([[<(<[<{[<>{}]}(<[]<>>{{}<>})>[{(())}]]>){<{(<(<>())<{}()>>]}({<<[]<>>[[]<>]>((()<>)[<><>])} +[<{[[(({([((({[]{}}[()()])))]>[((<<[<><>][[]()]>{[()<>][()()]}>({{<>[]}({}<>)})))]})){((<[<[<[<>()]> +<({[{{{<{[<[({[]{}}<[]>)(({}[])({}<>))]><{((()()))[[()<>]{<>[]}]}(<((){})<{}{}>><({}[])>)]][([<{ +<(<<<<<[(<<[{{[][]}{{}{}}}{{[][]}<()>}](<([]{})[()[]]>[[{}{}]{<>()}])>([{[[]()]<<>[]>}[<<>{}>{<> +<(<[[<[[[<<(<(()[])<{}()>><(<>{})>)[([{}{}]([]{}))]><<<[<>[]]{<>[]}>{(()<>)({}[])}>>><[[[{< +([[{[({<({(([<(){}><[]<>>]<{()<>}({})>))([([{}<>][{}[]]){[<>[]]({}<>)}][[({}[]){[]()}]])})>[({{(<(()[]){<> +<[<{<[{(<<[[{{(){}}({}<>)}<(()[])>]<<<()()>(()<>)>({{}})>]({[(<>{})<{}()>]{<{}<>><<><>>}}<<{()<>} +{[{({[[(({{{{<()()>{[]{}}}{[<>[]]<()<>>}}(<<<>()><{}<>>>({()<>}[()<>])}}{<{[()[]]{(){}}}>[<<[]{}>>[((){})<( +{{(<[<(<(<{{(<[]()><()<>>)}{((<><>))[<<>{}>{()[]}]}}>{{<({{}{}}[()<>])[<(){}>(<>[])]><<(<>{}}[{} +[{{{[[[[{(<{<[<>[]](()[])]{{<>{}}}}{[(()()){[][]}]{([][])}}><<{<<>()>([])}[[[]{}]<{}{}>]>(([{}<>]<[]()>) +{[[(<([[[[((({<>{}}(<>())){<{}[]>})[([<>[]](<>[])}[({}[])([]())]])([<{{}()}(<>())><[[][]][<>()]>][([()()]<<>[ +<[{[{({(<(((<<<>{}><[]()>][{{}()}{[][]}])[(((){})([][]))[[()<>][[]{}]]])[[(((){})[()])[[(){}]<{} +[{[[<[<{{(({([(){}]<()()>](([]<>)[()[]])}<<{[][]}([][])>>)<[[([]())<{}[]>]]>){[[[{{}()}[<>[]]]{<[]{}> +[[<([([[<<<{{[{}[]][<><>]}}{{{{}{}}}}>>>[([[(<<>[]>({}<>))<([]())<<><>>>]{{<<>[]>{<>()}}}][<{{[ +({[<<<((<<<<<<[]{}>[()()]>{[()[]]{()<>}}>[((<>()){()()}){<[][]]<{}{}>}]>{{[[{}{}]<{}[]>]([[]<>])}(( +({<<[[{{<{[[{<()><<>>}<<()[]>([][])>]]([[({}<>)[()[]]](([]{})<<>[]])]<[([]<>){[]}]>)}(((<<{}[ +<(<(<(([([[[{{[]()}{<>()}}{<{}[]>[{}()]}]{{[{}{}]<()[]>}({<>()}<(){}>)}][[{<{}()><[][]>}](<[ +[[<{<[<[<({<<{[]}<()<>>>({<><>}{[]<>})><([<>()]([][]))>}[({[{}{}]<{}[]>})({[<><>]})])>]([[{<({ +<([{[[<<[({<<[{}()]({}[])>{<[][]>{()()}}>{<(<>[])([]{})>([{}[]}[<>])}}{{[<<>[]>{[]<>}][([][]){{}{}}] +[([({((<[{{{[<{}><<>()>]<<()[]>>}<[{{}{}}([][])]{{()<>}<(){}>}>}<{<[[][]]>({{}<>}{()[]})}> +[[[{([({{{<{[[[][]]{()()}]}{{<<>[]>[{}[]]}[[[]()]<<>>]}>({{(<>[])[{}[]]}({<>()}[{}[]])}{{(()< +{<{{{<[{[<{(<{[]{}}{[][]}>{{[]<>}}}}[{((()[])<()()>)[<<>[]><{}()>]}<[{<>{}}[()<>]]<[<>[]][<>{}]>>]>[<[ +<[<{[[<{<[([{({}[])(()<>)}[[<>()]{()[]}]])][[<{[<>[]][<>[]]}<{<>{}}{<>{}}>>{<<()()><()<>>>{([]() +<[{{({<[<([[[([]{})({}())]]<[{{}}[()<>]]<{<>{}}{()}>>])<[<[<<>()>]{<{}{}>[[]<>]}><({[]()}<<><>>)[(()<>)(<>()) +{<[[[<(<[<{<({<>{}}[<><>])([{}<>]<[][]>)><<[(){}](<>[])>[({}[])<<>[]}]>}{{{(<>())(<>{})}}<((<>()) +<{(<<[{[{<{<<((){})[[]{}]><([]<>)<{}[]>>>{[[[][]]<()()>]}}{({{<>()}<<>()>}{<{}<>><()[]>})}>}<[<([<()()>{()() +{{([<{[[((<<{<<>()><<>[]>}<(()<>)>>><<[<[][]><{}<>>]>{<([]()){[]<>}>}>))]<{(((<[[]<>]([]<>)>[{{}()}<< +([{{({{<[[(((<[][]>{<>{}}){<()[]>{[]()}})(<({}<>)([]<>)>(([])[()<>])))(([([][]){()<>}]{{[]<>}{[]( +[{{<{({[<{<{((<>())({}[]))<{<>()}({}[])>}(<[{}()]<{}<>>>({[][]}{()<>}))}{([({}[]){{}[]}]<([][])>)}}{<{({{}( +[{(([[[([<<(<([]()){<>}>(({}<>)(()())))[((<>{})){[()<>]<<>{}>}]>>][<{{[<()<>>{{}[]}]<<{}[]><{}[]>]}[ +{<<<(<[<[{<[<({}[])>(([])<[]<>>)]<<<{}{}>({}())>{[<>{}}<[][]>}>>[{[<<>()><()()>]{[<>[]]<[]>}}[<<<>[]>{[]() +([(((<<(<[[<[<{}<>>(<><>)]>([<{}[]>{<>{}}]({<>{}}[()()]))]](<({<<>[]>({}[])}<[[]<>]{<>[]}>)(<{ +([{({{{[(((<<{[]()}<{}<>>>((<><>){[]()>)>({<{}()><(){}>}<[<>()]>))){((([[][]]{<>{}})[([]<>){<>[]}] +<(({{{[(([<[{<(){}>([]<>)}(<[]><()<>>)]><<([()[]]([]()))>{[(()<>}<{}>]}>]){{[{(({}{})<(){}>){[[]]{[] +[<{(<({<{((<<<[]<>>([]())>(((){})[[]()])>{[[<>]<{}<>>]}){[<[<>[]]({}())]{{()[]}<()>}]})<([[([]())<< +[[<<[<{{[{({<[()<>]{<>[]}>{([][]){<><>}}}<[[{}()]][<<><>>{{}[]}]>)}{<{{({}<>)(()())}[{{}{}}[{}()]] +({<({[{[{(([<<()()>{<>[]}>[([]<>)<()<>>]]{<{<>()}[{}{}]>((<>{}){<>{}})})([<([][])[[]{}]>(<[]()>{<> +{[[((<{[[<<({<[]<>>[()<>]}{[()]{<>}})>[<{<<>()><()[]>}{{()[]}<()<>>}>(([{}[]]))]>[[{({<><>})} +{{(<[{{[{<[({(()){{}<>}}(<{}[]>[[]()]))]>}({(<((()[])((){}))<{<><>}[<>()]>>)}(<<[(())<{}<>>]{[[]]<{} +<{{([<<<<[([<[<><>][[]]><<(){}>[()()]>]<{(<><>)<<><>>}([{}{}])>)][[([<()()><<>()>])(({[]<>}([]{}]){<[]><[] +{(<<[[<{{((([<[]<>>[{}<>]][([][]){{}{}}>)(<<<><>><[]{}>>{{(){}}[<>{}]}))({<(())[<>()]><{<>{}}(<>[])>}(({ +[[[([({([<<[[[<>{}]{<>{}}]<[<><>]{{}<>}>]>[({[()()]<<>()>}{[()()][{}()]}){({{}()}[(){}))}]>[(<{[()<> +[{{(<<<[{(((<<()<>>([])>({<>{}}<()[]>)))[{(([]){()<>})(({}[])<{}})}<{([]{})({}())}<(<>[])<<>[]>>> +{<<<<[{[{({{[<<>()><{}[]>]<[[]{}][{}{}]>}(<({}{})<()<>>>{{()<>}})}{[[{{}{}}[{}{}]]<[<><>](<>{})>]})(([{[<>() +<(<[<{(<{[{<{[[]{}]{{}[]}}>[{[[]<>][{}{}]}(([]())(<>))]}<{{[{}{}]([]{})}[({}())]}{<<<>()>>([( +<{{[{[<{[[<[{<[]{}><<>{}>}]{({()<>}(<><>)){[<>[]]}}>{([[<>{}]({}{})](({}{})<[]{}>))<{[{}<> +{{<<{<<<[{[[([[]()][()()])(({}()))][[({}[])<()()>]]]{<[<{}[]>{{}{}}]>}}[[[[([]())]([<>[]][[]{}]>]] +[[<<[({{{(<[(<()<>>[<>])]([(()<>){<>())]([<>[]][[]<>]))>{{[[[]()]([]())]{<[]{}>{()<>}}}[<([]<>)<()>>({<>{}}[< +([[([<{<[<((<(<>[])(<>[])>(<<><>><{}[]>)){<<{}<>>>({{}{}}<()[]>)}>[{{(<><>)(()<>)}[<<>[]>]}]>]<{{ +{{{((<<{[[{<([[]{}][{}<>])>}<[((()())<()<>>)[[[]{}]{[][]}]]<<<[]{}>{{}[]}>(<<>()><(){}>)>>](< +{(([[{{<[[<{(({}<>)[<>[]])}<{({}{}){{}}}[[()[]](()())]>>]([<[{()[]})({<>}[<>{}])>{[{{}{}}{(){}}]{<{}{}>}}]) +{([(<{<<({[<[{()()}<[]<>>]{<[]{}>}><[[<>][()<>]]>]{<{{[]{}}<(){}>}[({})]>{{<{}{}><()<>>}([{} +{{[[({{({[(([{{}()}[{}]]({{}<>}([][]))){({{}<>}[[]{}])<<()<>>>})]{(<[<{}{}>{<>()}](({}())((){ +{<({{<<{{([{{{[]<>}{<>{}}}((<><>)<()<>>)}[<[{}<>][()[]]><[<>()][<><>]>]]{{[[()<>]<<>[]>]<(<><>) +<(<[(<<[[<<<[({}())<[][]>](({}<>)[{}<>])>>[<{{{}}<()<>>}<(()<>){{}{}}>>]>({{<[<><>](<><>)>[(<>{} +[((<{[{{(<{[({{}[]}((){}))([[][]]{<>[]})]<{<{}[]>[{}<>]}[<{}()><{}<>>]>]>)}}]}{{{(<[(<{{()()}}>{[<{}<>><<>[]> +{([<<{(<([[({{{}<>}<(){}>}<<()[]>{<>{}}>)((<[][]>[<><>])<<[][]>{<>()}>)]((<{<>[]}{[][]}>[[<>()]{<>[]}]]{{[ +[<{(<{([{{(([<<>()>]{<(){}><()<>>}){(([]{}>)<(<><>)>})}({({[<>]{<>[]}}[[{}<>]])}[{<[()[]]<{}<> +{[(<(<{(<<[{[<[]()>(<>[])][{{}}[()[]]]}{{[[]{}]{()()}}<<<>>[[]()]>}]>{{<[<{}()>([]())]({(){}}(()<>))>([(<>( +{{([[([[[<(({<{}<>>[<>[]]}{([]<>)<<>{}>})<{{[]<>}{{}<>}}([()()]<<>[]>>>){{[[()<>]]<((){})<[]{}>>}{<<[]<>><() +<({([[[[[({[[{{}<>}({}<>)]({<>[]}[<>{}])][([<>[]](<>()))<([]())[{}{}]>]}(((({}[])[()[]])[{{}{}}(<>)])(<<<> +[({{<{[([(((<{[]{}}{<>()}><[{}<>>{<>[]}>)){([<{}{}><()[]>]<([]{})[{}{}]>){{[[]]<[]{}>}((()[])[( +(({<[<<{{[[<{(<>{})([]())}([[]{}]{{}()})><[<{}()><{}{}>]<<<>()>[[]()]>>]<[<<()[]><<>()>>[{{}<>}[<>]]]>] +((<[[<{{{[({<(()[])<()<>>>})]{<(([()()][[]]))({[[]()]{[]<>}}{[<>()]})><<(({}[])[{}{}])>>}}}[[[{{{{[]{}}({}[ +([<[<{{{{[<<{{<>[]}([]<>)}><{{()[]}[<><>]}{<[]>[()<>]}>><{[{[][]}<()[]>]({[][]}(()<>))}<{(<>())( +{((<(([[<[(<[{()[]}([]())>>[<[<>()]<[]{}>>(<()<>><[]>)])<(<{()}>(([]<>){<>{}}))<[[[]<>]{[]()} +[(<[([([{{{<([[]<>]<<>>)[{<>[]}{{}<>}]}({(())[{}()]}[<{}<>>{<>()}])}([<[(){}]([][])><(()()) diff --git a/11/11.py b/11/11.py new file mode 100644 index 0000000..6c066a0 --- /dev/null +++ b/11/11.py @@ -0,0 +1,64 @@ +from collections import defaultdict +data = ''' +5483143223 +2745854711 +5264556173 +6141336146 +6357385478 +4167524645 +2176841721 +6882881134 +4846848554 +5283751526 +'''.strip().split('\n') +with open("input") as f: + data = f.read().strip().split('\n') +data = [list(map(int, line)) for line in data] +N = len(data)*len(data[0]) +d = defaultdict(lambda: -100000) +d.update({(i,j): x for i, row in enumerate(data) for j, x in enumerate(row)}) + +directions = {(x,y) for x in [-1,0,1] for y in [-1,0,1]}-{(0,0)} + +s = 0 +for _ in range(100): + for c, x in d.items(): + d[c] = x+1 + ready = set() + flashed = {c for c, x in d.items() if x>9 and c not in ready} + while flashed: + s += len(flashed) + ready = ready | flashed + for i, j in flashed: + for di, dj in directions: + d[(i+di, j+dj)] += 1 + flashed = {c for c, x in d.items() if x>9 and c not in ready} + for c in ready: + d[c] = 0 + +print(s) + +step = 0 +ready = set() +flashed = {c for c, x in d.items() if x>9 and c not in ready} +while flashed: + ready = ready | flashed + for i, j in flashed: + for di, dj in directions: + d[(i+di, j+dj)] += 1 + flashed = {c for c, x in d.items() if x>9 and c not in ready} +while len(ready)!=N: + for c in ready: + d[c] = 0 + step += 1 + for c, x in d.items(): + d[c] = x+1 + ready = set() + flashed = {c for c, x in d.items() if x>9 and c not in ready} + while flashed: + ready = ready | flashed + for i, j in flashed: + for di, dj in directions: + d[(i+di, j+dj)] += 1 + flashed = {c for c, x in d.items() if x>9 and c not in ready} +print(step+100) diff --git a/11/input b/11/input new file mode 100644 index 0000000..674e736 --- /dev/null +++ b/11/input @@ -0,0 +1,10 @@ +8826876714 +3127787238 +8182852861 +4655371483 +3864551365 +1878253581 +8317422437 +1517254266 +2621124761 +3473331514 diff --git a/12/12.py b/12/12.py new file mode 100644 index 0000000..bed537a --- /dev/null +++ b/12/12.py @@ -0,0 +1,57 @@ +from timeit import timeit +data = """ +fs-end +he-DX +fs-he +start-DX +pj-DX +end-zg +zg-sl +zg-pj +pj-he +RW-he +fs-DX +pj-RW +zg-RW +start-pj +he-WI +zg-he +pj-fs +start-RW +""".strip().split('\n') + +with open("input") as f: + data = f.read().strip().split('\n') + +d = {tuple(line.split('-')) for line in data} +small = {x for pair in d for x in pair if x.islower()} - {'start', 'end'} + + +def make_paths(d, valid_path): + def f(v, path): + if path.count('start')>1: + return + if not valid_path(path): + return + if v=='end': + yield path + return + for next_v in {x for x, y in d if y==v}|{y for x, y in d if x==v}: + yield from f(next_v, path+[next_v]) + yield from f('start', ['start']) + +valid_path = lambda x: all(x.count(v)<=1 for v in small) +print(sum(1 for p in make_paths(d, valid_path))) + +def valid_path(path): + if any(path.count(v)>2 for v in small): + return False + if sum(1 for v in small if path.count(v)==2)>1: + return False + return True + +print(timeit('print(sum(1 for p in make_paths(d, valid_path)))', globals=globals(), number=1)) + + + + diff --git a/12/input b/12/input new file mode 100644 index 0000000..02a4bb4 --- /dev/null +++ b/12/input @@ -0,0 +1,26 @@ +start-YY +av-rz +rz-VH +fh-av +end-fh +sk-gp +ae-av +YY-gp +end-VH +CF-qz +qz-end +qz-VG +start-gp +VG-sk +rz-YY +VH-sk +rz-gp +VH-av +VH-fh +sk-rz +YY-sk +av-gp +rz-qz +VG-start +sk-fh +VG-av diff --git a/13/13.py b/13/13.py new file mode 100644 index 0000000..d678cd8 --- /dev/null +++ b/13/13.py @@ -0,0 +1,38 @@ +with open("input") as f: + data, folds = f.read().strip().split('\n\n') +data = {tuple(map(int, line.split(','))) for line in data.split('\n')} +folds = [(d[0], d[1]) for x in folds.split('\n') if (y := x.split('=')) and (d := (y[0][-1], int(y[1])))] + +def print_data(data): + for y in range(max(a[1] for a in data)+1): + for x in range(max(a[0] for a in data), -1, -1): + if (x, y) in data: + print('#', end='') + else: + print('.', end='') + print() + +def make_fold(data, fold): + d, n = fold + if d=='x': + first_pred = lambda x: x[0]n + else: + first_pred = lambda x: x[1]n + + first = set(filter(first_pred, data)) + second = set(filter(second_pred, data)) + if d=='y': + second = {(x, n-(y-n)) for x, y in second} + else: + second = {(x-n-1, y) for x, y in second} + first = {(-x+n-1, y) for x, y in first} + return first | second + +for fold in folds[:1]: + data = make_fold(data, fold) +print(len(data)) +for fold in folds[1:]: + data = make_fold(data, fold) +print_data(data) diff --git a/13/input b/13/input new file mode 100644 index 0000000..5b61af0 --- /dev/null +++ b/13/input @@ -0,0 +1,876 @@ +159,344 +771,626 +1140,868 +790,25 +607,254 +375,140 +924,198 +293,548 +1068,798 +1140,26 +890,750 +960,506 +510,886 +592,87 +72,627 +1131,110 +1173,760 +249,690 +291,841 +1019,501 +465,312 +1062,84 +1206,696 +594,414 +1191,651 +5,33 +557,16 +388,480 +246,862 +1082,446 +582,822 +556,222 +266,739 +304,506 +137,121 +301,519 +596,343 +654,479 +497,715 +309,250 +966,520 +1176,119 +587,728 +239,767 +1109,539 +433,826 +587,480 +1169,383 +49,257 +1260,297 +1280,44 +141,455 +671,112 +835,784 +1268,215 +1092,266 +1268,7 +428,87 +206,551 +25,519 +1252,775 +771,275 +393,654 +1206,198 +1034,530 +826,387 +274,719 +335,605 +1173,691 +59,304 +967,232 +377,749 +651,158 +691,119 +335,737 +45,156 +1280,492 +6,868 +813,795 +512,869 +1285,375 +649,257 +199,186 +1091,121 +1295,176 +95,250 +335,829 +274,175 +816,357 +42,7 +321,459 +380,719 +93,637 +771,619 +475,784 +318,179 +810,491 +279,700 +261,215 +1121,536 +137,760 +1292,631 +219,569 +743,879 +248,810 +403,444 +278,595 +465,569 +103,763 +899,707 +498,698 +1297,555 +1250,739 +2,637 +395,463 +734,574 +619,36 +83,259 +1221,625 +909,196 +1014,477 +1248,680 +759,266 +30,641 +417,868 +1183,691 +783,87 +1195,306 +1215,868 +97,379 +619,53 +443,268 +1228,648 +1014,507 +1114,371 +544,206 +564,374 +890,872 +509,532 +483,737 +465,536 +1071,749 +1144,537 +58,306 +144,886 +1308,698 +733,624 +587,838 +301,534 +1121,858 +611,243 +867,268 +13,555 +703,640 +992,267 +753,515 +527,190 +413,568 +421,77 +1203,121 +1236,507 +652,644 +497,534 +642,873 +797,159 +20,892 +431,439 +248,285 +1128,31 +1129,33 +1083,26 +852,371 +659,102 +803,155 +279,194 +796,455 +191,432 +771,140 +1009,88 +883,26 +1155,381 +1144,357 +1294,117 +211,44 +182,863 +552,803 +639,827 +980,705 +1063,126 +763,708 +905,288 +445,704 +1066,638 +527,87 +509,301 +425,318 +345,642 +720,520 +967,616 +1078,518 +1009,375 +104,887 +714,159 +960,58 +840,25 +1250,155 +276,536 +170,868 +602,427 +0,52 +915,463 +853,375 +473,369 +837,369 +1113,843 +1038,516 +1165,77 +90,520 +254,851 +263,194 +17,637 +935,754 +594,155 +242,833 +853,395 +525,570 +662,698 +436,266 +236,598 +950,257 +810,641 +567,127 +703,642 +1221,420 +753,16 +889,77 +514,252 +472,456 +249,204 +845,536 +827,737 +754,222 +790,473 +38,245 +874,182 +1155,513 +698,7 +355,238 +80,382 +1099,460 +838,8 +1256,712 +1004,826 +233,33 +1250,403 +574,730 +602,19 +238,28 +1064,557 +1049,240 +596,159 +775,467 +639,379 +764,628 +60,491 +145,481 +835,54 +791,120 +718,456 +423,235 +552,539 +575,707 +704,595 +681,131 +557,515 +1213,291 +189,858 +291,393 +406,810 +594,29 +525,324 +306,739 +1176,473 +189,708 +1305,637 +1017,71 +1213,379 +1225,18 +209,190 +1027,651 +818,703 +1307,736 +701,604 +447,19 +1096,862 +1297,746 +1230,382 +877,826 +708,427 +720,117 +311,830 +1225,288 +736,606 +1093,264 +30,44 +1245,414 +1173,614 +574,288 +1079,340 +1165,810 +300,303 +251,179 +124,679 +845,235 +361,647 +1207,579 +589,567 +262,184 +840,2 +980,481 +1196,497 +1044,155 +877,75 +206,103 +783,203 +465,179 +833,756 +386,887 +189,355 +268,646 +279,340 +393,688 +719,472 +157,99 +375,340 +833,260 +1087,192 +271,260 +840,886 +527,651 +104,63 +232,518 +980,413 +888,376 +223,254 +574,836 +403,226 +448,551 +602,175 +1077,861 +1082,894 +473,749 +902,414 +55,708 +1156,253 +703,192 +144,415 +413,158 +1036,467 +589,327 +1006,518 +960,836 +810,627 +761,628 +874,628 +291,501 +95,698 +1295,782 +333,540 +330,705 +668,873 +1230,730 +1176,7 +88,70 +35,393 +594,739 +194,877 +955,238 +0,842 +977,540 +977,316 +935,642 +581,196 +862,791 +783,691 +147,840 +698,315 +803,739 +189,325 +649,705 +393,575 +1243,474 +64,744 +345,250 +184,869 +1121,708 +196,371 +304,56 +55,186 +1099,588 +20,378 +1307,774 +1019,138 +1072,866 +393,206 +716,739 +274,467 +393,319 +17,257 +965,250 +453,539 +1206,831 +1063,544 +723,166 +182,438 +1246,441 +242,798 +157,715 +1221,269 +805,756 +1150,357 +189,312 +253,196 +853,499 +427,84 +590,520 +1111,691 +793,121 +1251,142 +1161,298 +967,448 +304,836 +244,638 +775,691 +848,327 +229,196 +686,641 +349,467 +1121,312 +405,158 +1227,187 +500,253 +796,642 +137,582 +1304,868 +893,26 +730,387 +581,308 +1263,700 +52,467 +812,698 +35,858 +472,723 +743,767 +465,599 +1048,710 +238,866 +473,77 +674,527 +1001,705 +383,634 +1305,379 +1071,145 +659,288 +1042,159 +1087,254 +1252,588 +411,208 +790,775 +241,400 +917,43 +1280,726 +1001,250 +393,240 +930,719 +965,189 +223,192 +248,84 +1267,467 +43,243 +436,488 +1069,781 +1129,525 +682,292 +1248,214 +1099,306 +457,395 +867,476 +800,232 +1063,824 +863,19 +296,417 +831,229 +219,345 +648,698 +512,25 +62,680 +223,455 +5,481 +477,756 +1256,630 +1141,171 +582,520 +965,392 +114,621 +319,737 +334,499 +813,534 +1078,600 +228,446 +577,288 +60,539 +1176,869 +309,196 +607,640 +182,31 +1217,145 +330,180 +360,257 +95,144 +407,483 +517,569 +999,830 +1058,163 +639,247 +6,26 +1141,771 +1079,428 +177,472 +231,728 +920,662 +134,775 +309,257 +321,588 +671,827 +801,413 +243,187 +691,53 +547,186 +845,569 +510,415 +247,96 +771,306 +392,486 +1017,619 +607,702 +899,208 +656,842 +1017,395 +1205,68 +484,26 +375,442 +145,616 +1116,185 +463,120 +1203,773 +714,735 +425,739 +651,102 +838,662 +672,117 +1131,211 +1128,367 +691,36 +662,868 +281,19 +127,651 +219,840 +309,54 +845,325 +408,836 +517,728 +388,414 +1208,539 +82,246 +1289,254 +1168,8 +1289,640 +396,40 +882,807 +281,106 +228,894 +283,243 +321,435 +897,494 +547,392 +1170,455 +1096,166 +1061,606 +1223,463 +182,456 +874,404 +648,26 +908,731 +671,624 +720,632 +406,161 +349,875 +98,5 +1049,127 +803,211 +218,266 +1212,889 +704,635 +345,257 +1103,875 +658,257 +475,278 +552,701 +120,775 +761,714 +458,371 +519,774 +169,771 +892,519 +510,8 +343,662 +803,683 +1091,569 +1238,627 +182,415 +462,567 +1285,728 +897,158 +639,647 +422,376 +2,196 +1064,32 +758,193 +80,512 +746,374 +231,166 +393,215 +1252,119 +1293,705 +885,155 +206,791 +681,203 +93,145 +247,544 +443,418 +145,593 +1119,432 +917,319 +652,250 +1031,194 +672,777 +62,255 +674,695 +234,144 +15,176 +758,803 +624,253 +328,724 +654,842 +243,208 +1215,280 +1118,869 +1017,548 +304,376 +907,715 +170,26 +514,439 +299,120 +159,792 +559,78 +371,651 +1191,467 +986,637 +656,415 +639,278 +999,446 +965,698 +268,567 +333,683 +530,537 +793,728 +865,704 +803,879 +1079,302 +513,327 +95,78 +350,616 +436,628 +84,833 +1001,840 +343,232 +134,7 +1091,345 +1243,207 +1047,472 +1068,385 +417,26 +969,474 +989,528 +95,868 +1228,246 +668,469 +5,637 +1186,679 +345,644 +1066,256 +629,71 +281,754 +103,315 +724,182 +228,453 +1310,191 +1153,795 +770,273 +1031,700 +933,593 +539,82 +798,25 +783,634 +261,127 +488,357 +723,838 +1200,878 +497,179 +780,357 +837,749 +49,301 +898,294 +596,306 +1011,120 +241,333 +589,414 +982,170 +309,189 +574,830 +1001,196 +1044,865 +1304,698 +977,77 +417,756 +1150,89 +577,382 +736,730 +254,374 +649,481 +413,669 +90,879 +933,861 +42,215 +330,238 +887,235 +611,427 +642,21 +893,138 +1104,103 +612,579 +754,0 +472,8 +386,24 +433,490 +1196,397 +567,15 +1062,138 +231,302 +115,12 +960,616 +345,189 +805,876 +303,847 +89,420 +1006,58 +378,373 +393,43 +3,736 +875,345 +264,456 +800,886 +1252,63 +535,203 +875,54 +1006,388 +965,54 +89,625 +248,609 +15,616 +60,851 +268,159 +826,26 +525,499 +119,467 +1103,691 +879,192 +246,32 +266,865 +934,819 +254,491 +830,694 +505,18 +671,247 +559,302 +582,72 +246,557 +611,651 +1039,634 +736,830 +333,354 +189,536 +418,879 +433,819 +967,446 +1285,519 +692,467 +965,257 +739,259 +492,703 +54,404 +845,179 +462,697 +661,257 +1215,144 +738,190 +274,427 +1285,166 +95,18 +1255,186 +247,126 +36,467 +75,603 +641,250 +1154,238 +1121,569 +1063,70 +1099,754 +333,316 +1074,598 +418,519 +710,264 +1280,850 +658,644 +45,315 +335,65 +375,252 +1036,175 +634,135 +89,474 +607,666 +651,606 +840,869 +1191,691 +590,632 +709,121 +874,490 +1262,595 +991,289 +728,72 +1096,614 +83,187 +739,824 +892,851 +1016,819 +1051,32 +455,203 +965,642 +247,350 +624,402 +721,567 +937,875 + +fold along x=655 +fold along y=447 +fold along x=327 +fold along y=223 +fold along x=163 +fold along y=111 +fold along x=81 +fold along y=55 +fold along x=40 +fold along y=27 +fold along y=13 +fold along y=6 diff --git a/14/14.py b/14/14.py new file mode 100644 index 0000000..4af6b1a --- /dev/null +++ b/14/14.py @@ -0,0 +1,53 @@ +import csv +from collections import Counter, defaultdict +template, rules = """ +NNCB + +CH -> B +HH -> N +CB -> H +NH -> C +HB -> C +HC -> B +HN -> C +NN -> C +BH -> H +NC -> B +NB -> B +BN -> B +BB -> N +BC -> B +CC -> N +CN -> C +""".strip().split('\n\n') +with open("input") as f: + template, rules = f.read().strip().split('\n\n') +rules = {k: v for k, v in (line.split(' -> ') for line in rules.split('\n'))} + +def f(template): + for _ in range(5): + new_template = [] + for a, b in zip(template, template[1:]): + if a+b in rules: + new_template.append(a+rules[a+b]) + else: + new_template.append(a) + new_template.append(template[-1]) + new_template = ''.join(new_template) + template = new_template + return template + +c = Counter(f(f(template))) +print(max(c.values()) - min(c.values())) + +class MyCounter(Counter): + def __mul__(self, n): + return MyCounter({k: v*n for k, v in self.items()}) + +d = MyCounter(zip(template, template[1:])) +for _ in range(8): + d = sum((MyCounter(zip(l:=f(''.join(x)), l[1:]))*v for x, v in d.items()), start=MyCounter()) +res = defaultdict(int) +for (a, b), v in d.items(): + res[b] += v +print((max(res.values()) - min(res.values()))) diff --git a/14/input b/14/input new file mode 100644 index 0000000..11180ab --- /dev/null +++ b/14/input @@ -0,0 +1,102 @@ +VPPHOPVVSFSVFOCOSBKF + +CO -> B +CV -> N +HV -> H +ON -> O +FS -> F +NS -> S +VK -> C +BV -> F +SC -> N +NV -> V +NC -> F +NH -> B +BO -> K +FC -> H +NB -> H +HO -> F +SB -> N +KP -> V +OS -> C +OB -> P +SH -> N +BC -> H +CK -> H +SO -> N +SP -> P +CF -> P +KV -> F +CS -> V +FF -> P +VS -> V +CP -> S +PH -> V +OP -> K +KH -> B +FB -> S +CN -> H +KS -> P +FN -> O +PV -> O +VC -> S +HF -> N +OC -> O +PK -> V +KC -> C +HK -> C +PO -> N +OO -> S +VH -> N +CC -> K +BP -> K +HC -> K +FV -> K +KF -> V +VF -> C +HN -> S +VP -> B +HH -> O +FO -> O +PC -> N +KK -> C +PN -> P +NN -> C +FH -> N +VV -> O +OK -> V +CB -> N +SN -> H +VO -> H +BB -> C +PB -> F +NF -> P +KO -> S +PP -> K +NO -> O +SF -> N +KN -> S +PS -> O +VN -> V +SS -> N +BF -> O +HP -> H +HS -> N +BS -> S +VB -> F +PF -> K +SV -> V +BH -> P +FP -> O +CH -> P +OH -> K +OF -> F +HB -> V +FK -> V +BN -> V +SK -> F +OV -> C +NP -> S +NK -> S +BK -> C +KB -> F diff --git a/14/test.csv b/14/test.csv new file mode 100644 index 0000000..e69de29