commit adb46f38a83b68b25d5e8ae62010843649738f34 Author: Alek Ratzloff Date: Fri Dec 3 12:36:35 2021 -0800 Initial commit with days 1, 2, and 3 Signed-off-by: Alek Ratzloff diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5f36ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,166 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/python,vim +# Edit at https://www.toptal.com/developers/gitignore?templates=python,vim + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +# End of https://www.toptal.com/developers/gitignore/api/python,vim diff --git a/README.md b/README.md new file mode 100644 index 0000000..6807b80 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# Advent of code 2021 + +You should be able to run any of them by cd'ing into the directory and executing the script and +passing the input file in through STDIN. + +Example: + +``` +cd day02 +./day02.py < input.txt +``` diff --git a/day01/day01.py b/day01/day01.py new file mode 100755 index 0000000..2a72c1d --- /dev/null +++ b/day01/day01.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import sys +from typing import Sequence + + +def part1(lines: Sequence[int]): + inc = 0 + last = lines[0] + for line in lines[1:]: + if line > last: + inc += 1 + last = line + print(f"{inc} increments") + + +def part2(lines: Sequence[int]): + WINDOW_SIZE = 3 + last = sum(lines[0:WINDOW_SIZE]) + inc = 0 + for i in range(1, len(lines) - WINDOW_SIZE + 1): + window = sum(lines[i:i+WINDOW_SIZE]) + if window > last: + inc += 1 + last = window + print(f"{inc} increments") + + +lines = [int(line) for line in sys.stdin if line] +print("Part 1") +part1(lines) +print("Part 2") +part2(lines) diff --git a/day01/input.txt b/day01/input.txt new file mode 100644 index 0000000..3f5fd3b --- /dev/null +++ b/day01/input.txt @@ -0,0 +1,2000 @@ +100 +125 +124 +127 +141 +145 +160 +161 +178 +185 +193 +196 +195 +200 +212 +216 +222 +244 +274 +276 +279 +307 +309 +325 +332 +336 +338 +339 +359 +378 +380 +381 +386 +388 +417 +418 +432 +458 +459 +462 +463 +467 +468 +480 +482 +486 +495 +510 +518 +526 +528 +539 +537 +536 +537 +545 +564 +566 +567 +571 +580 +595 +602 +596 +605 +618 +630 +631 +633 +632 +634 +645 +657 +673 +693 +694 +705 +721 +722 +743 +744 +753 +754 +755 +756 +757 +772 +775 +812 +801 +811 +812 +813 +816 +806 +807 +808 +825 +837 +838 +833 +825 +827 +826 +818 +808 +825 +828 +834 +836 +839 +859 +879 +870 +875 +886 +889 +894 +897 +898 +901 +904 +942 +955 +965 +983 +982 +984 +985 +987 +984 +1005 +1012 +1024 +1033 +1036 +1048 +1052 +1058 +1070 +1078 +1080 +1079 +1094 +1102 +1104 +1110 +1122 +1117 +1118 +1107 +1108 +1118 +1133 +1138 +1165 +1167 +1172 +1169 +1179 +1193 +1157 +1164 +1165 +1167 +1170 +1178 +1179 +1180 +1188 +1187 +1188 +1202 +1201 +1200 +1206 +1213 +1214 +1213 +1219 +1220 +1223 +1233 +1235 +1237 +1245 +1246 +1250 +1251 +1256 +1263 +1268 +1271 +1294 +1295 +1308 +1311 +1314 +1317 +1321 +1332 +1336 +1337 +1327 +1330 +1310 +1319 +1323 +1325 +1356 +1353 +1370 +1372 +1397 +1410 +1413 +1425 +1428 +1432 +1440 +1443 +1452 +1451 +1455 +1456 +1457 +1461 +1462 +1463 +1464 +1456 +1467 +1470 +1471 +1474 +1492 +1478 +1492 +1498 +1508 +1516 +1515 +1516 +1519 +1520 +1509 +1510 +1521 +1526 +1528 +1533 +1536 +1547 +1560 +1571 +1589 +1586 +1589 +1591 +1597 +1598 +1605 +1613 +1615 +1617 +1618 +1642 +1632 +1628 +1638 +1641 +1640 +1657 +1669 +1675 +1690 +1714 +1715 +1716 +1715 +1717 +1740 +1741 +1743 +1741 +1746 +1759 +1766 +1772 +1773 +1792 +1793 +1795 +1827 +1832 +1833 +1834 +1846 +1867 +1868 +1872 +1877 +1878 +1876 +1878 +1881 +1883 +1886 +1904 +1920 +1921 +1924 +1929 +1955 +1956 +1961 +1962 +1968 +1971 +1968 +1955 +1973 +1974 +1991 +1984 +1989 +1990 +1987 +1991 +1998 +2002 +2005 +1989 +1986 +1985 +1987 +1991 +2011 +2014 +2019 +2021 +2022 +2033 +2039 +2044 +2046 +2045 +2056 +2060 +2062 +2058 +2063 +2072 +2073 +2075 +2100 +2124 +2131 +2143 +2145 +2153 +2155 +2154 +2156 +2157 +2158 +2174 +2197 +2187 +2188 +2192 +2194 +2195 +2205 +2206 +2208 +2210 +2211 +2222 +2227 +2229 +2230 +2240 +2245 +2246 +2243 +2244 +2261 +2262 +2263 +2258 +2261 +2263 +2284 +2294 +2295 +2294 +2289 +2290 +2293 +2294 +2295 +2290 +2319 +2323 +2324 +2332 +2336 +2340 +2373 +2374 +2375 +2377 +2408 +2417 +2422 +2442 +2443 +2444 +2447 +2448 +2465 +2467 +2468 +2485 +2486 +2489 +2504 +2505 +2506 +2529 +2530 +2531 +2557 +2563 +2579 +2582 +2583 +2595 +2629 +2634 +2638 +2635 +2640 +2643 +2653 +2658 +2656 +2657 +2658 +2660 +2662 +2670 +2679 +2672 +2685 +2688 +2699 +2695 +2696 +2714 +2698 +2702 +2703 +2707 +2711 +2718 +2719 +2727 +2742 +2758 +2759 +2768 +2769 +2773 +2787 +2801 +2810 +2811 +2805 +2806 +2811 +2812 +2815 +2848 +2850 +2856 +2845 +2855 +2866 +2874 +2885 +2887 +2877 +2878 +2879 +2880 +2887 +2888 +2892 +2899 +2900 +2891 +2901 +2900 +2876 +2885 +2893 +2921 +2923 +2925 +2940 +2945 +2947 +2950 +2944 +2947 +2949 +2950 +2958 +2959 +2961 +2957 +2958 +2959 +2963 +2959 +2966 +2976 +2985 +2986 +2987 +2993 +2994 +3005 +3008 +3010 +3011 +3028 +3032 +3035 +3036 +3059 +3060 +3061 +3060 +3065 +3069 +3115 +3123 +3129 +3130 +3128 +3126 +3123 +3124 +3120 +3124 +3134 +3138 +3143 +3145 +3149 +3188 +3196 +3203 +3201 +3203 +3204 +3206 +3208 +3214 +3201 +3220 +3236 +3237 +3259 +3260 +3274 +3276 +3283 +3280 +3282 +3301 +3313 +3319 +3326 +3338 +3339 +3341 +3345 +3331 +3335 +3363 +3364 +3369 +3364 +3371 +3370 +3388 +3390 +3398 +3399 +3398 +3387 +3394 +3395 +3396 +3404 +3408 +3416 +3414 +3437 +3451 +3453 +3455 +3477 +3481 +3482 +3489 +3488 +3486 +3501 +3510 +3520 +3538 +3561 +3564 +3570 +3583 +3563 +3565 +3566 +3567 +3569 +3573 +3575 +3576 +3584 +3593 +3569 +3585 +3586 +3585 +3591 +3593 +3596 +3597 +3592 +3611 +3614 +3620 +3621 +3637 +3641 +3642 +3648 +3660 +3667 +3664 +3678 +3687 +3703 +3715 +3725 +3730 +3731 +3738 +3739 +3740 +3754 +3756 +3760 +3768 +3772 +3775 +3779 +3809 +3816 +3806 +3807 +3806 +3811 +3813 +3820 +3819 +3820 +3822 +3827 +3828 +3826 +3836 +3837 +3838 +3832 +3833 +3835 +3836 +3839 +3849 +3853 +3854 +3862 +3868 +3871 +3872 +3877 +3878 +3881 +3910 +3911 +3912 +3913 +3925 +3926 +3958 +3961 +3964 +3977 +3995 +4001 +3997 +3981 +3960 +3961 +3954 +3964 +3963 +3968 +3964 +3965 +3980 +3984 +3985 +3986 +3991 +3998 +4008 +4015 +4019 +4020 +4023 +4040 +4055 +4061 +4064 +4074 +4078 +4079 +4078 +4086 +4101 +4102 +4104 +4106 +4109 +4107 +4113 +4112 +4120 +4108 +4116 +4118 +4119 +4130 +4123 +4135 +4132 +4133 +4136 +4109 +4088 +4090 +4091 +4092 +4094 +4099 +4102 +4113 +4131 +4130 +4151 +4152 +4153 +4157 +4161 +4180 +4182 +4186 +4192 +4223 +4218 +4219 +4220 +4246 +4255 +4259 +4257 +4258 +4274 +4293 +4294 +4303 +4305 +4316 +4314 +4315 +4324 +4330 +4317 +4318 +4331 +4332 +4376 +4379 +4388 +4396 +4399 +4403 +4405 +4401 +4409 +4415 +4419 +4421 +4427 +4428 +4446 +4447 +4448 +4456 +4467 +4483 +4484 +4486 +4495 +4496 +4503 +4516 +4517 +4521 +4523 +4532 +4536 +4555 +4557 +4563 +4564 +4565 +4577 +4579 +4576 +4577 +4581 +4598 +4600 +4620 +4623 +4624 +4627 +4630 +4645 +4646 +4658 +4668 +4671 +4682 +4665 +4702 +4701 +4705 +4712 +4716 +4715 +4716 +4720 +4726 +4741 +4760 +4765 +4760 +4761 +4764 +4755 +4756 +4757 +4758 +4759 +4761 +4767 +4768 +4769 +4776 +4774 +4775 +4780 +4782 +4780 +4781 +4782 +4785 +4795 +4788 +4793 +4800 +4812 +4830 +4832 +4831 +4832 +4833 +4846 +4849 +4845 +4849 +4853 +4866 +4870 +4898 +4900 +4904 +4905 +4907 +4909 +4910 +4911 +4906 +4866 +4868 +4881 +4882 +4894 +4898 +4900 +4913 +4914 +4918 +4926 +4925 +4926 +4918 +4933 +4925 +4932 +4933 +4939 +4940 +4946 +4947 +4957 +4958 +4960 +4961 +4963 +4968 +4969 +4963 +4964 +4966 +4946 +4950 +4974 +4975 +4978 +4980 +4983 +4985 +5005 +4990 +5002 +5026 +5021 +5039 +5052 +5025 +5024 +5023 +5026 +5037 +5045 +5056 +5058 +5059 +5060 +5040 +5047 +5050 +5079 +5081 +5086 +5088 +5064 +5067 +5068 +5083 +5097 +5102 +5101 +5087 +5090 +5089 +5088 +5090 +5092 +5104 +5109 +5111 +5116 +5113 +5114 +5103 +5120 +5122 +5117 +5104 +5126 +5127 +5128 +5121 +5123 +5124 +5127 +5129 +5131 +5132 +5137 +5141 +5164 +5178 +5184 +5196 +5211 +5210 +5218 +5219 +5250 +5251 +5260 +5250 +5256 +5253 +5251 +5243 +5244 +5245 +5256 +5261 +5262 +5266 +5269 +5270 +5276 +5291 +5299 +5300 +5315 +5317 +5320 +5321 +5322 +5324 +5333 +5330 +5359 +5362 +5383 +5386 +5389 +5391 +5412 +5413 +5415 +5438 +5439 +5441 +5459 +5460 +5459 +5465 +5461 +5463 +5466 +5470 +5467 +5477 +5483 +5485 +5486 +5487 +5490 +5518 +5537 +5546 +5556 +5576 +5574 +5582 +5583 +5587 +5583 +5584 +5589 +5590 +5600 +5601 +5602 +5604 +5605 +5606 +5607 +5617 +5604 +5609 +5596 +5597 +5601 +5607 +5612 +5613 +5625 +5627 +5640 +5642 +5651 +5655 +5651 +5655 +5656 +5680 +5683 +5684 +5687 +5689 +5691 +5696 +5706 +5708 +5729 +5748 +5749 +5753 +5757 +5772 +5773 +5783 +5785 +5783 +5784 +5785 +5786 +5785 +5787 +5808 +5801 +5803 +5810 +5818 +5823 +5829 +5832 +5826 +5839 +5841 +5844 +5846 +5847 +5860 +5862 +5872 +5869 +5854 +5865 +5866 +5870 +5872 +5875 +5911 +5924 +5937 +5947 +5965 +5969 +5971 +5976 +5974 +5976 +5960 +5962 +5963 +5965 +5975 +5976 +5985 +5986 +5981 +5990 +5993 +5982 +5989 +5990 +5994 +6015 +6020 +6030 +6041 +6012 +6014 +6035 +6040 +6016 +6038 +6061 +6047 +6052 +6055 +6057 +6072 +6094 +6099 +6104 +6112 +6110 +6126 +6125 +6135 +6152 +6161 +6169 +6172 +6187 +6197 +6198 +6206 +6207 +6205 +6204 +6202 +6205 +6200 +6202 +6206 +6223 +6224 +6231 +6237 +6241 +6271 +6272 +6273 +6281 +6277 +6282 +6283 +6298 +6305 +6307 +6333 +6334 +6340 +6341 +6342 +6343 +6336 +6342 +6343 +6348 +6355 +6375 +6388 +6389 +6391 +6416 +6417 +6418 +6419 +6428 +6462 +6463 +6464 +6465 +6432 +6443 +6444 +6446 +6451 +6453 +6472 +6470 +6483 +6484 +6495 +6485 +6489 +6490 +6466 +6462 +6468 +6461 +6462 +6458 +6461 +6475 +6499 +6502 +6504 +6506 +6512 +6527 +6528 +6540 +6542 +6545 +6565 +6566 +6585 +6592 +6597 +6598 +6599 +6613 +6622 +6626 +6637 +6639 +6657 +6672 +6679 +6684 +6687 +6684 +6721 +6722 +6725 +6727 +6728 +6730 +6732 +6751 +6756 +6763 +6764 +6779 +6807 +6817 +6822 +6824 +6826 +6821 +6823 +6838 +6834 +6835 +6837 +6843 +6862 +6863 +6864 +6865 +6835 +6839 +6844 +6845 +6884 +6885 +6895 +6904 +6905 +6908 +6909 +6914 +6916 +6917 +6920 +6921 +6920 +6921 +6934 +6913 +6917 +6928 +6930 +6931 +6941 +6944 +6957 +6959 +6967 +6970 +6971 +6973 +6984 +6986 +6987 +6990 +6993 +6994 +7018 +7019 +7026 +7028 +7044 +7048 +7051 +7053 +7052 +7050 +7053 +7056 +7030 +7044 +7043 +7055 +7067 +7068 +7083 +7065 +7066 +7082 +7084 +7088 +7079 +7078 +7080 +7081 +7083 +7086 +7092 +7102 +7122 +7146 +7149 +7150 +7155 +7167 +7170 +7168 +7176 +7185 +7186 +7182 +7183 +7185 +7187 +7204 +7208 +7209 +7211 +7228 +7230 +7232 +7233 +7239 +7242 +7245 +7246 +7247 +7251 +7253 +7255 +7258 +7259 +7268 +7270 +7272 +7291 +7319 +7320 +7321 +7323 +7333 +7351 +7343 +7349 +7366 +7378 +7383 +7384 +7381 +7377 +7379 +7383 +7386 +7401 +7410 +7438 +7441 +7443 +7444 +7446 +7445 +7446 +7448 +7459 +7462 +7457 +7461 +7462 +7466 +7477 +7489 +7497 +7500 +7501 +7523 +7524 +7527 +7536 +7538 +7539 +7541 +7533 +7536 +7539 +7547 +7567 +7548 +7544 +7546 +7548 +7563 +7564 +7571 +7583 +7585 +7594 +7597 +7605 +7606 +7633 +7655 +7656 +7660 +7672 +7676 +7684 +7686 +7687 +7688 +7689 +7681 +7680 +7691 +7690 +7711 +7725 +7726 +7729 +7741 +7744 +7745 +7772 +7773 +7786 +7782 +7783 +7788 +7794 +7795 +7803 +7804 +7813 +7817 +7848 +7858 +7849 +7856 +7858 +7860 +7859 +7877 +7878 +7879 +7901 +7931 +7935 +7937 +7944 +7945 +7949 +7954 +7955 +7953 +7956 +7968 +7970 +7973 +7974 +7971 +7975 +7991 +7989 +7994 +7985 +7988 +8002 +8008 +8015 +8019 +8029 +8028 +8052 +8057 +8051 +8063 +8065 +8064 +8069 +8082 +8093 +8098 +8105 +8104 +8109 +8103 +8119 +8130 +8153 +8165 +8157 +8159 +8176 +8168 +8173 +8171 +8162 +8176 +8182 +8190 +8208 +8212 +8213 +8214 +8220 +8222 +8209 +8194 +8220 +8221 +8242 +8252 +8255 +8252 +8231 +8239 +8236 +8237 +8242 +8244 +8245 +8246 +8261 +8280 +8281 +8282 +8288 +8289 +8283 +8287 +8288 +8299 +8303 +8305 +8318 +8319 +8328 +8331 +8344 +8346 +8371 +8377 +8388 +8405 +8414 +8415 +8416 +8396 +8364 +8352 +8353 +8362 +8363 +8369 +8375 +8382 +8403 +8405 +8407 +8406 +8411 +8419 +8423 +8427 +8433 +8434 +8439 +8442 +8447 +8436 +8442 +8443 +8451 +8452 +8472 +8473 +8499 +8504 +8496 +8481 +8484 +8511 +8503 +8506 +8513 +8517 +8522 +8525 +8524 +8527 +8532 +8551 +8552 +8554 +8555 +8558 +8567 +8568 +8570 +8571 +8573 +8574 +8577 +8578 +8579 +8586 +8596 +8597 +8616 +8617 +8620 +8624 +8625 +8627 +8629 +8642 +8643 +8648 +8662 +8664 +8665 +8679 +8686 +8685 +8711 +8714 +8718 +8720 +8724 +8726 +8735 +8736 +8777 +8778 +8780 +8783 +8779 +8788 +8789 +8825 +8827 +8837 +8871 +8873 +8874 +8881 +8898 +8902 +8871 +8884 +8885 +8889 +8915 +8909 +8910 +8912 +8915 +8914 +8922 +8927 +8941 +8979 +8974 +8987 +8974 +8981 +8975 +9004 +9008 +9011 +9025 +9027 +9028 +9030 +9043 +9057 +9072 +9078 +9084 +9088 +9091 +9095 +9101 +9105 +9114 +9123 +9134 +9174 +9171 +9172 +9173 +9171 +9179 +9183 +9188 +9190 +9196 +9197 +9198 +9202 +9210 +9231 +9232 +9243 +9256 +9257 +9259 +9263 +9265 +9264 +9258 +9273 +9282 +9285 +9269 +9274 +9262 +9261 +9270 +9284 +9285 +9286 +9289 +9290 +9291 +9293 +9282 +9285 +9286 +9289 +9287 +9289 +9291 +9289 +9290 +9299 +9302 +9316 +9317 +9342 +9337 +9339 +9340 +9341 +9342 +9371 +9373 +9374 +9373 +9374 +9376 +9384 +9390 +9423 +9424 +9427 +9429 +9430 +9431 +9432 +9434 +9465 +9473 +9474 +9478 +9482 +9483 +9485 +9469 +9471 +9441 +9457 +9467 +9462 +9474 +9475 +9481 +9475 +9476 +9479 +9482 +9484 +9493 +9500 +9506 +9509 +9510 +9511 +9524 +9529 +9558 +9571 +9576 +9579 +9581 +9582 +9587 +9594 +9618 +9638 +9646 +9649 +9650 +9649 +9655 +9646 +9648 +9652 +9665 +9659 +9697 +9703 +9733 +9750 +9751 +9753 +9754 +9755 +9761 +9762 +9766 +9784 +9789 +9766 +9767 +9768 +9771 +9785 +9789 +9792 +9807 +9821 +9823 +9830 +9844 +9847 +9857 +9858 +9860 +9873 +9870 +9873 +9887 +9880 +9878 +9891 +9893 +9894 +9896 +9902 +9911 +9920 +9931 +9963 +9972 +9974 +9973 +9974 +9976 +9990 +9989 +9996 +9995 +10024 +10025 +10026 +10028 +10040 +10041 +10040 +10041 +10044 diff --git a/day02/day02.py b/day02/day02.py new file mode 100755 index 0000000..f8ee5f8 --- /dev/null +++ b/day02/day02.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import sys +from typing import Sequence, Tuple + + +def part1(lines: Sequence[Tuple[str, int]]): + horz = 0 + depth = 0 + for direction, amount in lines: + if direction == "forward": + horz += amount + elif direction == "down": + depth += amount + elif direction == "up": + depth -= amount + else: + assert False, f"not sure how to handle {direction}" + print(f"horizontal position: {horz}") + print(f"depth: {depth}") + print(f"product: {depth * horz}") + + +def part2(lines: Sequence[Tuple[str, int]]): + horz = 0 + depth = 0 + aim = 0 + for direction, amount in lines: + if direction == "forward": + horz += amount + depth += aim * amount + elif direction == "down": + aim += amount + elif direction == "up": + aim -= amount + else: + assert False, f"not sure how to handle {direction}" + print(f"horizontal position: {horz}") + print(f"depth: {depth}") + print(f"product: {depth * horz}") + + +lines = [(direction, int(amount)) for direction, amount in map(str.split, sys.stdin)] + +print("Part 1") +part1(lines) +print("Part 2") +part2(lines) diff --git a/day02/input.txt b/day02/input.txt new file mode 100644 index 0000000..7890315 --- /dev/null +++ b/day02/input.txt @@ -0,0 +1,1000 @@ +forward 6 +forward 8 +down 6 +down 6 +forward 9 +down 7 +down 3 +forward 4 +forward 7 +up 3 +forward 9 +up 4 +forward 4 +down 3 +up 2 +forward 2 +down 4 +forward 9 +up 4 +forward 8 +up 9 +forward 3 +down 7 +down 4 +down 7 +up 5 +down 5 +down 5 +forward 5 +up 9 +down 5 +down 3 +up 3 +forward 2 +forward 2 +down 2 +forward 1 +down 4 +down 1 +down 6 +down 9 +forward 4 +forward 7 +down 4 +up 7 +forward 8 +down 3 +down 6 +down 5 +down 2 +down 1 +up 9 +forward 2 +forward 3 +up 3 +forward 5 +down 4 +up 3 +up 9 +forward 6 +up 5 +up 8 +up 8 +forward 6 +up 1 +forward 4 +down 4 +forward 9 +down 9 +down 7 +forward 5 +down 7 +forward 7 +up 2 +down 9 +down 2 +forward 8 +forward 9 +down 4 +down 4 +down 7 +down 4 +down 8 +forward 4 +down 9 +down 6 +forward 8 +down 8 +down 8 +forward 7 +up 9 +forward 7 +up 3 +down 5 +forward 9 +down 7 +down 5 +down 8 +forward 5 +down 1 +down 5 +down 5 +forward 8 +down 8 +up 8 +down 6 +down 3 +forward 1 +down 2 +down 3 +up 4 +forward 8 +down 6 +up 8 +forward 2 +forward 8 +forward 9 +forward 5 +forward 5 +forward 2 +forward 1 +down 8 +forward 8 +forward 9 +up 8 +up 8 +down 7 +down 5 +forward 1 +forward 1 +up 9 +up 3 +forward 5 +down 8 +down 4 +up 2 +down 7 +down 4 +down 3 +forward 3 +forward 7 +forward 3 +forward 1 +forward 8 +down 9 +up 4 +down 8 +down 3 +down 9 +up 8 +up 6 +up 9 +up 2 +down 9 +down 9 +down 6 +up 3 +down 4 +down 3 +down 9 +forward 2 +forward 2 +forward 7 +forward 9 +up 5 +up 8 +forward 8 +down 8 +up 7 +forward 4 +up 7 +up 7 +down 9 +down 7 +down 1 +forward 4 +forward 6 +up 4 +forward 7 +up 4 +down 6 +forward 2 +up 4 +forward 2 +up 2 +down 4 +down 2 +forward 4 +forward 8 +down 9 +up 7 +forward 3 +down 5 +down 2 +down 7 +up 9 +down 2 +up 5 +down 9 +down 4 +forward 8 +forward 9 +down 7 +up 3 +down 4 +up 3 +down 3 +down 3 +up 5 +forward 7 +down 8 +down 1 +up 7 +forward 8 +forward 9 +forward 3 +forward 1 +up 4 +forward 4 +down 6 +forward 3 +down 9 +forward 2 +up 8 +down 4 +forward 7 +forward 1 +up 9 +forward 6 +down 1 +down 8 +forward 7 +forward 8 +forward 2 +up 6 +forward 3 +forward 2 +forward 7 +down 6 +up 8 +down 2 +down 8 +forward 6 +forward 1 +up 9 +down 8 +down 4 +forward 3 +down 2 +forward 1 +forward 8 +down 9 +down 9 +forward 3 +down 5 +down 5 +down 1 +down 3 +up 3 +down 6 +forward 9 +forward 7 +up 5 +forward 8 +up 1 +up 4 +down 8 +up 3 +forward 1 +up 9 +forward 5 +down 8 +down 1 +up 3 +down 1 +down 7 +forward 2 +down 9 +forward 3 +down 2 +up 5 +down 5 +forward 9 +down 2 +down 3 +forward 4 +forward 2 +down 5 +forward 9 +down 5 +forward 9 +down 9 +down 8 +forward 8 +forward 9 +down 2 +forward 4 +forward 9 +up 1 +down 2 +down 5 +forward 8 +forward 5 +up 5 +forward 2 +up 8 +forward 3 +down 2 +forward 1 +forward 7 +forward 7 +forward 1 +up 9 +down 5 +down 3 +down 7 +forward 2 +up 5 +forward 1 +forward 7 +up 7 +down 3 +up 5 +down 1 +forward 9 +down 7 +forward 4 +forward 5 +down 1 +down 5 +up 7 +forward 1 +down 4 +down 8 +down 6 +forward 8 +forward 4 +forward 2 +up 8 +down 5 +down 2 +forward 2 +down 1 +down 8 +down 5 +forward 5 +forward 8 +down 9 +forward 1 +forward 3 +down 3 +down 1 +down 5 +forward 6 +forward 6 +down 3 +forward 5 +forward 8 +down 9 +down 9 +forward 4 +forward 4 +forward 1 +forward 7 +down 6 +up 2 +down 2 +up 6 +forward 7 +forward 8 +up 3 +down 7 +up 9 +down 5 +down 7 +down 7 +forward 3 +down 3 +up 9 +up 5 +forward 4 +down 7 +down 7 +forward 1 +down 1 +down 2 +forward 8 +down 9 +down 2 +forward 3 +forward 5 +down 4 +up 7 +forward 1 +forward 4 +forward 7 +forward 1 +up 1 +down 6 +forward 2 +down 1 +forward 2 +forward 7 +forward 7 +up 3 +down 8 +forward 6 +forward 1 +down 6 +down 8 +down 1 +up 3 +up 6 +down 6 +down 1 +up 8 +forward 6 +up 6 +forward 5 +up 4 +up 7 +up 4 +down 5 +forward 2 +forward 7 +down 1 +forward 6 +down 5 +up 3 +up 4 +forward 1 +up 4 +forward 7 +up 5 +up 1 +up 2 +forward 4 +forward 2 +forward 7 +down 6 +forward 1 +up 5 +up 2 +down 8 +forward 5 +up 2 +down 9 +up 4 +down 2 +down 1 +forward 8 +down 2 +up 8 +down 8 +up 7 +up 4 +up 2 +forward 8 +up 1 +up 6 +forward 8 +forward 8 +forward 2 +down 5 +up 2 +down 1 +forward 2 +up 5 +forward 4 +forward 9 +down 1 +down 6 +forward 4 +down 3 +down 7 +down 5 +down 6 +up 6 +forward 4 +down 2 +down 4 +down 3 +forward 3 +forward 2 +up 7 +forward 7 +forward 6 +forward 3 +forward 1 +forward 8 +forward 3 +forward 2 +forward 3 +forward 9 +down 3 +forward 9 +up 9 +up 1 +down 8 +down 2 +up 9 +down 8 +forward 5 +down 8 +up 8 +down 3 +up 7 +down 3 +down 7 +up 9 +up 8 +down 5 +down 1 +forward 1 +down 9 +forward 5 +down 1 +forward 5 +forward 6 +up 2 +forward 5 +down 2 +up 3 +forward 8 +forward 9 +down 1 +up 9 +forward 6 +down 9 +down 2 +forward 2 +forward 4 +forward 9 +forward 3 +down 6 +down 9 +forward 8 +forward 3 +down 9 +up 6 +forward 5 +forward 8 +down 7 +forward 9 +forward 5 +forward 4 +forward 3 +down 9 +forward 7 +forward 7 +forward 8 +down 7 +down 3 +up 5 +forward 2 +up 6 +down 6 +down 5 +up 2 +down 1 +forward 7 +forward 3 +down 2 +up 4 +forward 8 +down 8 +down 2 +forward 8 +up 8 +forward 1 +forward 1 +down 1 +forward 4 +forward 7 +forward 2 +forward 6 +down 9 +down 2 +up 7 +up 5 +forward 4 +down 3 +down 4 +up 7 +forward 7 +up 6 +forward 6 +up 4 +forward 5 +forward 7 +forward 3 +down 2 +forward 2 +forward 2 +up 1 +down 8 +up 7 +down 4 +down 9 +forward 2 +forward 9 +down 7 +down 4 +down 8 +forward 9 +up 1 +forward 6 +forward 7 +down 3 +forward 9 +forward 3 +down 3 +up 2 +down 8 +down 7 +forward 1 +down 9 +up 3 +forward 6 +forward 1 +forward 7 +down 3 +forward 2 +forward 1 +down 8 +down 7 +forward 1 +forward 5 +down 7 +up 7 +forward 4 +down 3 +forward 7 +forward 2 +up 2 +forward 1 +up 2 +up 6 +forward 3 +forward 2 +down 3 +down 7 +down 2 +down 9 +down 6 +forward 8 +down 4 +forward 6 +up 7 +down 8 +up 5 +down 8 +up 6 +down 2 +down 1 +forward 9 +forward 8 +down 6 +down 3 +up 8 +down 1 +forward 2 +down 6 +forward 4 +forward 9 +forward 6 +down 2 +down 9 +up 3 +forward 8 +forward 1 +forward 6 +forward 8 +forward 4 +forward 8 +up 7 +down 7 +forward 7 +down 6 +forward 1 +down 9 +forward 5 +down 3 +down 6 +down 6 +down 9 +forward 8 +forward 5 +down 4 +forward 1 +down 8 +down 5 +down 5 +down 9 +forward 1 +forward 1 +forward 9 +forward 5 +down 4 +forward 3 +down 2 +forward 3 +up 7 +down 2 +down 5 +down 4 +up 2 +forward 7 +down 3 +down 4 +down 8 +down 2 +forward 3 +up 8 +down 9 +down 1 +down 2 +forward 3 +down 1 +down 7 +down 9 +forward 9 +forward 7 +down 2 +down 5 +up 8 +forward 1 +forward 2 +forward 6 +up 3 +forward 3 +down 6 +forward 1 +up 8 +down 3 +down 1 +forward 6 +up 7 +forward 3 +down 5 +down 5 +up 8 +down 4 +forward 1 +up 5 +down 4 +forward 5 +up 6 +forward 2 +up 4 +forward 9 +forward 1 +forward 9 +forward 5 +forward 9 +up 2 +forward 8 +forward 6 +down 5 +forward 9 +forward 7 +down 1 +forward 7 +forward 7 +forward 3 +up 9 +down 2 +up 7 +down 1 +up 7 +forward 6 +forward 2 +forward 5 +forward 6 +down 4 +down 8 +forward 6 +down 1 +forward 7 +up 8 +forward 7 +up 5 +down 2 +forward 9 +forward 7 +forward 8 +up 2 +down 9 +forward 5 +forward 8 +forward 5 +forward 7 +down 8 +down 8 +up 4 +down 8 +up 2 +up 6 +down 2 +forward 2 +forward 9 +forward 8 +forward 3 +up 3 +up 1 +down 3 +forward 7 +down 2 +up 2 +forward 5 +down 3 +forward 2 +forward 4 +up 2 +down 1 +down 5 +up 6 +down 7 +up 7 +up 6 +forward 5 +down 7 +forward 9 +forward 2 +up 8 +down 1 +down 6 +forward 9 +down 8 +up 7 +down 6 +forward 9 +forward 2 +down 1 +up 4 +up 7 +down 7 +up 6 +forward 4 +up 1 +forward 5 +forward 9 +down 3 +up 2 +down 3 +up 7 +down 8 +forward 1 +down 9 +down 1 +down 9 +forward 8 +down 4 +down 7 +down 7 +forward 4 +up 5 +forward 1 +forward 7 +down 9 +forward 6 +up 8 +down 5 +down 8 +up 9 +forward 6 +down 1 +forward 8 +up 8 +up 1 +up 7 +down 9 +forward 8 +down 8 +forward 4 +down 1 +down 5 +forward 9 +down 7 +forward 3 +forward 1 +forward 2 +down 9 +up 2 +up 1 +forward 6 +up 1 +down 3 +forward 3 +down 7 +down 4 +forward 2 +forward 8 +forward 7 +down 6 +up 1 +forward 8 +down 8 +forward 5 +down 4 +forward 2 +up 8 +down 5 +down 9 +forward 1 +down 8 +down 5 +forward 6 +down 1 +down 6 +up 5 +up 8 +forward 7 +forward 4 +down 5 +down 1 +forward 4 +up 9 +forward 9 +up 7 +down 4 +forward 8 +forward 5 +up 8 +down 9 +up 8 +forward 7 +down 8 +forward 4 +down 8 +up 7 +forward 4 +down 9 +forward 5 +up 7 +forward 5 +forward 9 +down 6 +up 6 +forward 2 +down 4 +down 8 +forward 9 +forward 4 +forward 6 +up 6 +down 6 +forward 6 +forward 7 +forward 5 +forward 3 +forward 7 +up 3 +down 6 +forward 2 +down 9 +up 8 +down 2 +forward 7 +down 9 +down 3 +up 9 +up 6 +down 6 +forward 8 +up 2 +up 1 +down 5 +forward 4 +down 2 +up 2 +forward 2 +forward 3 +up 5 +down 6 +forward 9 +up 3 +forward 6 +forward 4 +down 3 +up 9 +forward 1 +up 6 +down 9 +down 7 +forward 5 +down 2 +down 6 +forward 5 +forward 1 +forward 5 +forward 8 +up 2 +forward 9 +down 8 +forward 2 +down 6 +down 1 +down 9 +forward 6 diff --git a/day03/day03.py b/day03/day03.py new file mode 100755 index 0000000..390a464 --- /dev/null +++ b/day03/day03.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import copy +import sys +from typing import Sequence + + +def part1(lines: Sequence[int], bits=12): + gamma = 0 + epsilon = 0 + for bit in range(bits): + mask = 1 << (bits - bit - 1) + ones = 0 + for line in lines: + if mask & line: + ones += 1 + zeroes = len(lines) - ones + if ones > zeroes: + gamma |= mask + else: + epsilon |= mask + # Fun thing - epsilon rate is just the inversion of the gamma rate. + # However, python doesn't seem to support signed inversion so we just calculate it above. boo + print(f"gamma: {gamma} {bin(gamma)}") + print(f"epsilon: {epsilon} {bin(epsilon)}") + print(f"product: {gamma * epsilon}") + + +def part2(lines: Sequence[int], bits=12): + oxygen = copy.deepcopy(lines) + carbon = copy.deepcopy(lines) + for bit in range(bits): + # Find the most common bit + if len(oxygen) > 1: + mask = 1 << (bits - bit - 1) + ones = 0 + for line in oxygen: + if mask & line: + ones += 1 + zeroes = len(oxygen) - ones + if ones >= zeroes: + # Filter out oxygen numbers that don't have a 1 in this position + oxygen = [line for line in oxygen if line & mask] + else: + oxygen = [line for line in oxygen if not (line & mask)] + + # Now do this on the carbon array + if len(carbon) > 1: + ones = 0 + for line in carbon: + if mask & line: + ones += 1 + zeroes = len(carbon) - ones + if ones >= zeroes: + # Keep the *least* common + carbon = [line for line in carbon if not (line & mask)] + else: + carbon = [line for line in carbon if line & mask] + oxygen, = oxygen + carbon, = carbon + print(f"Oxygen: {oxygen}") + print(f"Carbon: {carbon}") + print(f"Product: {oxygen * carbon}") + + +lines = [int(line, 2) for line in sys.stdin] + +print("Part 1") +part1(lines) +print("Part 2") +part2(lines) diff --git a/day03/input.txt b/day03/input.txt new file mode 100644 index 0000000..e324b50 --- /dev/null +++ b/day03/input.txt @@ -0,0 +1,1000 @@ +011110111110 +110111000111 +001000001010 +000101111101 +101011011110 +010010010111 +111101001100 +111101011100 +110011101101 +001111010011 +110000000110 +111000010001 +011011011000 +000111110100 +111100101010 +001011001100 +011100000101 +100011110110 +111001011101 +110101011010 +110101101111 +011011101001 +111001010110 +011000101000 +100101111100 +011101110010 +010000110000 +111010110100 +000001000011 +110111000000 +101010010110 +100000001011 +001111110001 +001111000011 +001101001010 +100011001111 +001011001101 +010001010000 +000000000000 +011001011011 +000101100101 +010101101101 +000110011001 +100100110001 +010110011011 +110101100101 +010101101011 +011100000000 +011001101000 +001000100110 +101001010011 +111111101101 +100010111001 +000011011100 +010001111100 +011011111100 +000100010001 +101111100110 +000000111101 +111010110001 +000100110101 +111010100100 +111111001011 +001000010010 +100100000110 +010111010110 +111111010110 +000011011011 +001111001000 +000000010101 +011011100111 +110010111110 +110001011111 +011101100110 +010011111100 +010101100011 +000110010110 +100110001111 +010111100000 +001110110000 +101010010010 +010011011001 +100000100110 +010100011010 +100110001010 +111110001001 +101001000000 +100010110000 +101100001000 +000000110101 +100001010011 +011101100001 +000100111001 +011110100001 +001111000111 +001011001111 +110111000101 +011001010101 +101100111000 +011111110010 +000000100001 +100101011111 +110110011100 +011001011101 +000101010001 +100100001000 +110100001111 +101100010010 +010000011001 +010111011111 +001001101101 +101110101001 +101111011101 +100011010010 +101001100010 +110010111101 +100100010001 +100010011000 +100010110110 +100110101101 +101110010011 +111111011001 +100110100111 +011111011100 +011011001010 +101000011110 +010110011110 +101000111010 +110100001101 +111011010001 +011111100010 +101111000010 +111011111011 +001000011010 +010000001101 +001101110101 +000110010011 +011001110110 +110010010001 +010001010011 +110111100100 +011100110011 +011000010111 +100011101110 +101100110110 +101000100111 +100000000111 +011011011010 +011111011000 +010001111101 +000010111100 +101100100001 +011011111111 +010111001110 +110100111101 +011101111010 +100010001001 +101110011111 +000000000101 +110100100000 +010100011100 +101100111011 +110011110101 +000101110111 +001111100011 +001110001001 +101001001111 +010000011101 +100101111101 +001101000111 +000100100110 +010110111110 +111110110011 +101010101011 +101010011011 +100011010101 +101110010100 +110110001100 +111001010010 +011000111000 +110011001101 +111100100000 +100111110011 +110011010000 +100000101111 +110110101001 +001010000010 +000010100100 +101111101001 +011111001001 +111001111011 +001100001110 +111011011101 +110101001111 +010100001101 +000000001111 +001111001111 +100101101001 +011101101101 +101100101100 +110100101001 +100111001001 +111111001001 +101011000011 +010101110000 +010110100100 +101011000100 +100010001111 +111001101010 +111010010010 +000011000100 +110000111101 +110011110111 +101111011000 +100110110110 +000011111010 +011011110111 +011010010001 +110010111000 +100101000101 +110111011101 +110010011110 +010101010100 +110010011000 +101001101100 +100111011101 +001001100101 +011001010001 +001101000000 +011110111010 +001010011001 +011010101101 +101001001010 +001101101010 +100110111011 +000000101111 +111100000110 +100000100000 +011100010101 +111000110010 +111010001010 +111000011010 +000111001101 +001111000000 +011110000111 +101001010110 +011001001010 +001010001001 +111001001101 +111111000001 +001001111110 +101000111110 +001111010110 +010000011111 +010101010001 +011001010010 +111010000011 +110000111100 +110101000000 +000111011110 +101100101011 +001110101011 +000110100111 +010100000001 +101111000001 +000110101100 +111110010000 +010000110101 +000010000010 +111111111101 +011101001010 +001111100101 +100101010111 +100011010100 +110111110010 +100110110011 +011100101011 +000001010011 +010110101001 +000111110101 +101111001001 +100010101110 +111010010011 +100101000111 +111101110110 +100101110011 +001000110000 +010111100001 +100100011100 +000100111011 +101110111111 +100110010001 +100100111000 +011010111010 +111011101101 +110010110100 +101110101110 +110001101101 +110000011011 +101000000010 +010100000111 +000110100101 +011000101100 +111001111110 +101010100001 +101111111001 +100010010100 +111001111000 +100000011010 +111000101110 +010000000101 +111111000111 +100001011110 +100110111001 +101100101001 +000011111101 +111101110001 +101010010011 +101000110111 +000000111111 +110001000111 +010110000010 +011010101011 +000100110000 +101010111101 +000100101101 +001000001100 +010000000111 +100100100011 +010010111101 +000011001010 +010100111110 +011110110101 +110001000110 +010001100011 +100111010100 +100000101010 +110101110001 +111010000111 +011000000011 +001101011000 +100110101110 +101110101010 +001101101001 +111011101111 +011010001110 +111100001100 +111111001000 +111000110100 +111101100011 +010010101011 +111101100101 +111111000011 +110100000011 +110000010101 +001111111000 +100100101111 +100101111000 +011111110001 +000110001000 +001101110110 +110010011010 +110010101110 +011010011010 +000011000101 +101101100000 +100111111000 +001100000010 +101101101010 +100100111001 +111100101100 +101100110010 +010010111110 +101001100101 +100001111001 +100010000101 +110111010011 +100000010011 +111100000011 +110000000010 +101101001100 +011001001000 +101011110001 +011111011010 +110001010111 +110001101100 +011001000011 +111101000011 +110100100110 +010111111001 +011011111101 +100100110011 +011111000100 +100010011110 +000010011011 +111101100111 +111001111010 +001111111100 +111011001111 +111011110100 +000001101111 +110010110110 +101000101101 +111000011100 +001001101010 +010110100001 +000101110110 +110101101101 +000001001010 +001011010011 +010011001001 +100101111010 +000100011011 +000100010010 +101110110001 +100000011001 +011000010000 +101111001010 +101111100111 +001000000110 +100110011100 +001010101011 +111001001100 +101110101011 +100100011001 +010011101001 +110000001100 +101010100000 +011101010010 +001010001110 +001111101110 +101101011100 +011000100001 +111100011101 +010011110000 +111010001011 +011101000111 +001100000100 +101110010110 +111101010111 +011010100001 +011110000101 +011100001100 +100100010011 +000100110111 +100101111110 +010100011011 +111110100000 +011010011111 +011100010011 +010111101000 +000000010111 +100001110001 +111100011100 +001010110100 +100111000000 +001110101000 +011010000001 +110101110110 +010010110101 +011110100000 +010101001001 +011111111100 +011100110010 +100101011010 +011011000101 +101000110011 +000000100101 +110111101001 +010101100110 +101101111011 +011100100110 +101110011101 +010000001001 +000010100111 +000000110110 +101111101110 +111100010011 +001110101001 +000000011000 +110011100011 +100001101010 +010010101111 +110111100011 +011001110001 +101000100001 +011111001101 +110101011101 +000010110100 +101110101111 +111011000111 +101101001001 +100110000111 +001110110100 +001001100010 +010110001001 +100010001010 +111100000101 +101111101000 +100001100110 +111001010001 +110101111100 +000010100011 +010001010010 +011111101110 +101110011010 +110111101011 +110101000110 +101001111000 +000110010010 +110010011100 +101101010100 +000011001100 +010100100000 +001010001111 +100111111110 +100111011001 +001011100010 +101010101110 +011011001111 +010011111001 +101101000110 +100001111011 +000100001000 +111111010100 +111001111101 +001100101100 +000010111000 +000110110011 +011101110011 +111100000001 +100000100101 +100011001110 +101000101100 +101010010000 +110110110000 +010101011010 +001101100101 +010010101010 +111000100100 +110000001101 +100001000000 +010000100011 +110001010001 +010010111001 +011100000110 +100111100010 +110110110110 +100001000001 +100010101010 +001111100110 +101101101110 +110010010111 +111100101011 +101011110010 +111001011110 +010101000010 +101011001010 +001111110111 +111100100101 +111001110010 +010110001101 +110000110100 +110010110000 +101110101101 +001010000001 +101111000101 +001110100001 +010011101111 +001100000111 +101100110001 +110011111011 +011110001010 +010111111101 +000001111011 +000001001001 +001101000100 +111110011011 +010000011011 +110011000110 +001010000111 +111100011110 +000110111010 +001011101110 +001010000101 +011101010111 +110000101111 +010010010011 +110100110110 +100011000011 +001111100001 +000110000000 +000110111110 +011001100001 +010111111010 +010101010111 +000010011000 +010011000010 +100000011100 +000111101101 +001001010000 +111000000011 +010110001010 +101000001000 +010000001000 +011001101110 +110001110110 +100010011011 +011011001000 +001100101111 +011010111100 +010100110011 +000111000011 +111101010011 +000111011011 +011110000110 +101100000001 +011111100000 +111010101110 +110001101010 +100101000100 +101011101001 +110010101111 +010010011011 +100110111101 +010000111010 +010100011000 +110111010101 +001000011100 +010011000110 +101010001000 +110010100011 +001101011010 +000011110000 +100101001101 +011001011111 +100011100111 +100001101000 +001100011100 +110001010000 +101001110111 +000001110010 +010011100111 +110011110011 +101110111100 +010110010101 +101101101101 +011001000010 +001110010010 +111111001101 +010000100111 +111101110011 +011101101000 +000111101100 +110101011100 +101001101101 +101001100011 +001101111011 +000111111001 +010000000010 +100011110000 +111111011110 +011000110010 +110001110010 +010010100110 +100000111101 +010001001110 +110001111111 +110111000100 +111010011100 +001100101001 +111001111100 +001100101010 +000000010010 +010111101011 +101100001111 +110101001100 +100101110010 +011101111110 +111100101110 +010010000100 +111010100010 +001000101011 +001000110111 +100011001001 +111101111010 +110101010111 +001101100010 +000110011100 +010111101111 +111110000010 +000100101011 +010000100110 +111000010100 +111110011111 +010001001100 +000000001000 +011001110101 +101110100000 +011100100001 +110001100101 +111101011001 +101000101001 +000011010100 +001000001111 +100101110100 +001101110011 +001000100111 +101011011100 +000100000010 +001111011001 +001001110101 +001101011110 +001111011010 +001111001011 +100010100011 +000000010011 +100100010100 +111001000011 +110110111110 +001110011101 +011011010111 +011100001111 +101110100101 +111101010110 +111100100111 +101111101100 +111000000001 +101011011101 +101011010101 +100111000001 +111100110001 +111111100001 +110001110101 +011010111011 +011100101000 +111101011010 +101010010100 +111001011011 +000100100010 +111110000111 +110110001000 +011100111001 +100100100100 +010000100010 +111010001000 +010001011010 +100010111110 +001001001111 +100001101101 +000001111000 +001100110110 +000101101010 +011000001001 +111011101010 +100110001101 +110001010011 +001000000111 +110111001101 +111010110111 +100010101101 +100101101011 +001111100010 +111011101001 +000001110001 +011110001000 +001111100100 +001001010010 +110011100001 +110011100100 +111110111110 +111011011001 +111111111011 +110011000111 +011111000110 +110001011101 +010101111000 +111100101101 +010001101001 +110001101001 +111101000010 +101110000111 +000011101101 +001110000010 +011110011101 +100011001101 +100010111011 +010001101011 +011101110110 +000010011001 +100100010101 +011100101101 +010010100010 +101110100011 +100001111110 +001011000000 +000000000010 +111000111110 +100010010101 +111101100010 +100101000110 +111001100100 +101111001111 +101110110111 +010001000100 +101101110010 +111001101101 +111101101111 +000100000100 +101011011011 +111000110001 +101010100101 +110100000001 +000111010110 +001000010100 +111110010111 +011101000110 +100111110010 +010010000011 +101011100100 +101000100110 +110101100001 +001110000000 +111101100100 +011101010011 +111100101000 +100000010101 +010011010011 +011000001100 +011111001111 +110100001011 +100000001111 +001011001010 +010001110110 +101000110001 +110001000101 +010100111001 +100000010010 +101010111100 +001110011001 +110000100011 +010010000111 +101111110000 +010101010010 +011010001001 +111010011111 +000101100010 +000101110011 +100011111100 +000100000111 +101101100011 +000101111010 +000011010001 +111000011101 +100110000110 +110100100011 +010111000010 +100011001011 +010011100000 +010111100101 +100011100000 +011000010010 +010111010010 +011010010110 +111001111001 +101100011100 +110111111000 +001001011000 +000000011100 +011000011010 +011110000001 +110110000100 +010010100111 +100000100111 +011111110110 +001010110000 +110011000011 +001010110011 +011110101011 +101011111001 +010101011000 +001100101011 +000111100011 +110010001111 +001011101000 +010101011111 +001101000010 +010011101000 +111111110110 +101011111111 +110000001010 +011011100110 +110001111000 +100001110000 +100011000101 +111001000101 +101101101000 +010000011110 +100100111110 +101010110010 +000000101101 +011100111011 +101110101000 +000011000001 +100010110010 +000101101101 +110110100001 +001001011111 +101111110010 +010011110101 +101000110100 +000001101000 +111110000000 +011000111100 +010010010010 +011110001111 +110100111000 +010011100011 +000100100100 +010000110001 +000000001011 +011110111000 +010000000011 +110010010100 +111110111001 +011111111001 +010000101000 +110101100011 +100110001001 +011011000111 +100110101010 +011011011111 +011001011001 +110110100101 +011101000010 +001000100100 +000100110100 +110000111010 +000100100101 +100000111110 +010110110101 +110100100001 +110101100111 +101000100000 +101110001001 +011000111110 +110010101010 +011100110000 +001101000011 +110101101110 +111000001010 +110101000001 +100111101001 +011010111001 +010011110011 +101000011011 +111001010111 +010000000001 +100111001010 +010101100111 +011100101100 +101011110111 +100111100110 +100111100000 +110010111100 +100011010011 +110011110000 +111100010010 +001000101010 +101110110110 +010111101101 +011110010000 +000101000101 +111110111000 +111010100001 +011101011101 +111110000011 +010011101010 +010111000111 +100010011001 +000010000000 +000000100100 +110110110101 +100010100100 +101000000101 +111111100000 +101101101111 +010100101110 +111111100101 +101000010101 +001011111000 +001110110011 +010101100000 +001010101010 +111001100101 +100110000011 +010101011011 +101001110100 +100011100001 +100110101000