From 061a5bae272f45db6dcde99746922735f9769d25 Mon Sep 17 00:00:00 2001 From: Christian Segundo Date: Mon, 5 Dec 2022 17:00:08 +0100 Subject: add day 5 --- .github/workflows/benchmark.yml | 21 + Dockerfile | 15 + Makefile | 35 + README.md | 14 + bin/aoc-2022 | Bin 0 -> 97651 bytes build.zig | 30 + day-1/input | 2266 ----------------------------------- day-1/main.zig | 46 - day-1/util | 1 - day-2/input | 2500 --------------------------------------- day-2/main.zig | 110 -- day-2/util | 1 - day-3/input | 300 ----- day-3/main.zig | 46 - day-3/util | 1 - day-4/input | 1000 ---------------- day-4/main.zig | 47 - day-4/util | 1 - day_01.zig | 61 + day_02.zig | 110 ++ day_03.zig | 63 + day_04.zig | 48 + day_05.zig | 138 +++ inputs/day_01 | 2266 +++++++++++++++++++++++++++++++++++ inputs/day_02 | 2500 +++++++++++++++++++++++++++++++++++++++ inputs/day_03 | 300 +++++ inputs/day_04 | 1000 ++++++++++++++++ inputs/day_05 | 513 ++++++++ main.zig | 115 +- util/aoc.zig | 20 + util/mem.zig | 19 - 31 files changed, 7198 insertions(+), 6389 deletions(-) create mode 100644 .github/workflows/benchmark.yml create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 README.md create mode 100755 bin/aoc-2022 create mode 100644 build.zig delete mode 100644 day-1/input delete mode 100644 day-1/main.zig delete mode 120000 day-1/util delete mode 100644 day-2/input delete mode 100644 day-2/main.zig delete mode 120000 day-2/util delete mode 100644 day-3/input delete mode 100644 day-3/main.zig delete mode 120000 day-3/util delete mode 100644 day-4/input delete mode 100644 day-4/main.zig delete mode 120000 day-4/util create mode 100644 day_01.zig create mode 100644 day_02.zig create mode 100644 day_03.zig create mode 100644 day_04.zig create mode 100644 day_05.zig create mode 100644 inputs/day_01 create mode 100644 inputs/day_02 create mode 100644 inputs/day_03 create mode 100644 inputs/day_04 create mode 100644 inputs/day_05 create mode 100644 util/aoc.zig delete mode 100644 util/mem.zig diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml new file mode 100644 index 0000000..f8dbc2b --- /dev/null +++ b/.github/workflows/benchmark.yml @@ -0,0 +1,21 @@ +--- +name: Run benchmarks + +on: + workflow_dispatch: + +jobs: + update: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.ref }} + fetch-depth: 0 + - run: make docker-benchmark + - run: | + git config user.email 'actions@github.com' + git config user.name 'github-actions' + if git commit -am ':robot: Update README.md'; then + git push origin HEAD:${{ github.ref }} + fi diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..adfd1ab --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM alpine:3.16 + +ARG ZIG_VERSION + +RUN apk update && \ + apk --no-cache add \ + curl \ + make \ + musl-dev \ + libarchive-tools && \ + if echo ${ZIG_VERSION} | grep -q "dev"; then PREFIX=builds; else PREFIX="download/${ZIG_VERSION}"; fi && \ + curl -s \ + https://ziglang.org/${PREFIX}/zig-linux-x86_64-${ZIG_VERSION}.tar.xz |\ + bsdtar -x -f - && \ + mv zig-linux-x86_64-${ZIG_VERSION}/* /usr/local/bin/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6285dbf --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +ZIG_VERSION=0.11.0-dev.149+7733246d6 +IMAGE_NAME=zigci + +all: clean test fmt benchmark + +clean: + $(RM) -rf zig-cache bin README.md + +test: + zig build test + +build: + zig build -p . + +benchmark: build + echo '```' > README.md + ./bin/aoc-2022 2>> README.md + echo '```' >> README.md + +fmt: + find . -name "*.zig" -exec zig fmt --check {} \; + +docker-build: + docker build \ + -t $(IMAGE_NAME) \ + --build-arg ZIG_VERSION=$(ZIG_VERSION) \ + -f Dockerfile . + +docker-%: docker-build + docker run \ + --rm \ + --privileged \ + -v $(shell pwd):/data \ + -w /data $(DOCKER_EXTRA_ARGS) \ + $(IMAGE_NAME) sh -c "make $*" diff --git a/README.md b/README.md new file mode 100644 index 0000000..de3da84 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +``` + +day=1, puzzle_1=69912, input_bytes=10517, time=102µs +day=1, puzzle_2=208180, input_bytes=10517, time=61µs + +day=2, puzzle_1=12855, input_bytes=10000, time=62µs +day=2, puzzle_2=13726, input_bytes=10000, time=70µs + +day=3, puzzle_1=8039, input_bytes=9946, time=33µs +day=3, puzzle_2=2510, input_bytes=9946, time=43µs + +day=4, puzzle_1=483, input_bytes=11399, time=195µs +day=4, puzzle_2=874, input_bytes=11399, time=151µs +``` diff --git a/bin/aoc-2022 b/bin/aoc-2022 new file mode 100755 index 0000000..7d7dca3 Binary files /dev/null and b/bin/aoc-2022 differ diff --git a/build.zig b/build.zig new file mode 100644 index 0000000..ab47001 --- /dev/null +++ b/build.zig @@ -0,0 +1,30 @@ +const std = @import("std"); + +pub fn build(b: *std.build.Builder) void { + // Standard target options allows the person running `zig build` to choose + // what target to build for. Here we do not override the defaults, which + // means any target is allowed, and the default is native. Other options + // for restricting supported target set are available. + const target = b.standardTargetOptions(.{}); + + const exe = b.addExecutable("aoc-2022", "main.zig"); + exe.setTarget(target); + exe.setBuildMode(std.builtin.Mode.ReleaseFast); + exe.install(); + + const run_cmd = exe.run(); + run_cmd.step.dependOn(b.getInstallStep()); + if (b.args) |args| { + run_cmd.addArgs(args); + } + + const run_step = b.step("run", "Run the app"); + run_step.dependOn(&run_cmd.step); + + const exe_tests = b.addTest("main.zig"); + exe_tests.setTarget(target); + exe_tests.setBuildMode(std.builtin.Mode.Debug); + + const test_step = b.step("test", "Run unit tests"); + test_step.dependOn(&exe_tests.step); +} diff --git a/day-1/input b/day-1/input deleted file mode 100644 index 6c1f923..0000000 --- a/day-1/input +++ /dev/null @@ -1,2266 +0,0 @@ -6669 -6434 -6564 -1032 -1098 -1829 -2608 -7322 -2690 -7061 -1664 -5769 - -6160 -1082 -3958 -5272 -2188 -5618 -3418 -2302 -2926 -3338 -1082 -2024 -4195 -4083 - -3276 -5581 -3421 -3403 -4356 -2989 -1278 -1868 -3630 -4702 -3409 -4887 -2383 - -7104 -7496 -5265 -8078 -8788 -7402 -3601 -2641 -1252 -4994 - -4074 -7524 -8889 -9290 -8892 -5785 -2163 -1074 -6747 - -7452 -8006 -12427 -7919 -4012 -6850 - -34591 -26861 - -13028 -12695 -12762 -11006 -15937 - -17218 -12408 -17554 -11415 - -1118 -7240 -6400 -3431 -1032 -3283 -4667 -6100 -5076 -1101 -6952 -3527 - -7633 -4385 -4510 -4073 -3052 -11738 - -33554 - -3448 -16054 -10839 - -4496 -2697 -4731 -5150 -5327 -4039 -4004 -2148 -6150 -4001 -2882 -5780 -4327 - -4095 -2064 -6701 -3828 -2427 -4775 -2583 -2000 -1390 -7391 -1701 -3796 - -10355 -1262 -8781 -6350 - -11053 -11527 -1389 -6007 -12383 -11033 - -7951 -4258 -9815 -10061 -7579 -3769 -11431 - -3597 -35622 - -2129 -2994 -4260 -5269 -4179 -1612 -3509 -3581 -4544 -3713 -3202 -6458 -1203 -1095 - -17196 -13475 -12666 - -3549 -6432 -6593 -6723 -1272 -4023 -2112 -2844 -5135 -5103 -1585 -4773 -5635 - -8731 -16378 -5076 -2999 - -11136 -1525 -8684 -9731 -9753 -5366 -7399 - -8996 -1483 -4922 -1191 -2761 -9333 -9247 -3797 -3940 - -5876 -4139 -2158 -5905 -5445 -2438 -2814 -3853 -3432 -2289 -5783 -3839 -2811 -4361 - -3260 -6058 -3620 -2171 -4387 -4011 -4552 -1646 -3400 -2941 -6776 -2793 -6702 - -2318 -3118 -4920 -1293 -5593 -2308 -6819 -5949 -3819 -1742 -1074 -4565 -5891 - -5260 -8430 -6832 -6248 -2162 -7770 -1692 -4345 -7140 -6748 - -2921 -2075 -6039 -2875 -1479 -5835 -2350 -5981 -2684 -2560 -1608 -1495 -1358 -2047 -5003 - -13864 -8452 -10716 -6642 -14875 - -9704 -7477 -3664 -7751 -11616 -11067 -3496 - -12744 -11268 -7987 -15133 - -2859 -6255 -1302 -4053 -6133 -4181 -3008 -3450 -4421 -6065 -2732 -7142 - -7502 -3436 -2987 -8648 -1103 -1477 -7647 -9669 -6285 - -69741 - -60977 - -3987 -10933 -1170 -12375 - -6773 -2923 -8707 -3434 -5872 -5793 -5573 -6338 -7182 -2158 - -5522 -5345 -4425 -6178 -5236 -1397 -6165 -2173 -3547 -5225 -3949 -2238 -2594 -6032 - -7998 -6850 -1552 -3087 -6978 -7829 -1957 -1432 -7504 -2382 -3534 - -16000 -12845 -12638 -8250 - -5712 -1853 -2986 -6472 -1543 -1147 -5670 -5085 -3519 -5847 -4603 -1394 -2353 -1668 - -3542 -2995 -5413 -1108 -1783 -3902 -5173 -4228 -3997 -1759 -5652 -5896 -2109 -5697 -4198 - -3625 -7049 -4471 -11613 -1668 -9077 -3143 - -4473 -3397 -12107 -1364 -5698 -8030 -12081 - -2337 -3212 -3567 -1115 -3963 -1753 -1769 -6966 -3093 -4758 -5271 -3635 - -4387 -3770 -2931 -3029 -2657 -1109 -1592 -4884 -5784 -1911 -2938 -2501 -5851 -3793 - -1438 -7877 -7911 -2781 -1486 -4302 -6924 -3930 -6489 - -3794 -5964 -3072 -2292 -5199 -2157 -2357 -3649 -4888 -4522 -5408 -4743 -2753 -1717 - -8856 -7753 -8504 -1696 -5469 -7135 -7838 -6572 -4414 - -3860 -6400 -4018 -4506 -6979 -5493 -1950 -2544 -7426 -1405 -6440 -6253 - -8397 -2488 -4483 -3346 -8035 -3996 -6236 -4951 -2849 -6277 - -2113 -5149 -2409 -3971 -2762 -1704 -1799 -3929 -3224 -2149 -5804 -2026 -2269 -1107 -3140 - -2851 -10610 - -2901 -2215 -3138 -4848 -2612 -5624 -4878 -4137 -4093 -4660 -3369 -1970 -1176 -2141 -2298 - -50004 - -37286 -4713 - -2844 -1432 -2303 -4938 -3770 -1589 -5731 -5173 -3512 -5820 -3910 -6687 - -8039 -11639 -2325 -11278 -8313 - -7488 -15716 -1889 -4665 - -10258 -1862 -10452 -8650 -8039 -8984 -8778 -6486 - -8827 -12823 -25875 - -4658 -12284 -10171 -5966 -13525 - -7011 -2322 -8908 -8383 -3992 - -8965 -4198 -18224 -19587 - -5325 -20017 - -13271 -10542 -5223 -3178 - -1563 -4352 -6234 -2095 -1565 -1904 -6494 -6102 -3930 -4529 -5226 -5391 -1159 -4928 - -1588 -4779 -3001 -3698 -5784 -5327 -2149 -3020 -5362 -5751 -5704 -3296 -4746 -2595 -3169 - -5627 -24442 -5459 - -1867 -7808 -1287 -4179 -1395 -5759 -3916 -3549 -7235 -1740 -3753 - -11451 -8529 -1874 -6475 -1205 -8217 -9286 - -2929 -3725 -6071 -2336 -1725 -7049 -2041 -1694 -1231 - -3587 -6327 -8078 -4723 -10069 -5008 -8537 -7827 - -4148 -4758 -3453 -1189 -5086 -1045 -2429 -5157 -4454 -3198 -3080 -5980 -6011 -3575 -5044 - -7858 -7552 -7965 -3623 -7309 -4740 -6151 -1926 -2370 -6310 - -1734 -11654 -8498 - -2099 -4433 -3831 -6238 -4152 -1749 -4146 -5282 -3683 -4976 -5297 -1710 -4181 -4213 - -1981 -1318 -5839 -4815 -6083 -3841 -2842 -3246 -3884 -5193 -3451 -5147 -2518 - -2960 -3167 -5279 -2233 -6509 -5722 -3576 -6488 -4366 -1564 -6941 - -7515 -1502 -4892 -4008 -3196 -1730 -7263 -5971 -6213 -6673 -7824 - -5835 - -2444 -4473 -6654 -2285 -2184 -6397 -3411 -2602 -5380 -6952 -1234 -1474 -6842 - -3876 -7019 -1240 -6349 -4016 -2340 -8085 -1932 -5186 -4549 -6375 - -19405 -2299 -5583 - -13376 -12685 -9717 -12221 -2883 - -9537 -8867 -13398 -6781 -13954 - -2874 -1486 -5232 -5947 -2140 -7588 -1404 -8295 -6127 -7705 - -22842 -26153 - -8396 -2626 -3725 -5917 -2949 -1524 - -30131 - -5851 -1366 -3574 -1450 -5377 -6713 -3783 -3281 -4981 -6910 -5229 -4359 - -9099 -2211 -2814 -4583 -4690 -7122 -9334 - -17546 - -1378 -6567 -5300 -3819 -5604 -5316 -7159 -3564 -4302 -1442 -5763 -6610 - -1891 -8030 -3579 -4977 -3620 -2421 -7637 -1481 -9177 - -3298 -3865 -6812 -5409 -6482 -7245 -7049 -4319 -3040 -6027 -7195 -6023 - -28329 - -3409 -4600 -6903 -4511 -4341 -6742 -6967 -4247 -6802 -3453 -1515 - -2517 -13539 -3030 -11819 - -2974 -3749 -3971 -4509 -9599 -1036 -8176 - -1000 -2863 -1029 -2452 -2286 -2891 -5244 -3929 -5734 -2075 -5107 -2622 -4680 -1847 - -9653 -4720 -5078 -1589 -2431 -3149 -3261 -7308 -6953 - -5916 -7409 -3773 -7286 -4552 -9685 -2114 - -38289 - -1591 -10416 -3921 -16121 - -3217 -10969 -5198 -9305 -8671 -9606 -9759 - -60758 - -26875 - -12555 -12735 -14656 -4437 -4307 - -1528 -4259 -3310 -5563 -2281 -4305 -2573 -5733 -2725 -1519 -3299 -2055 -4674 -6146 - -21988 -17405 -15500 - -1775 -3126 -5002 -9407 -6048 -3346 -8368 -2185 -2825 - -24510 - -25200 -37377 - -9852 -1000 -2688 -11027 -11129 -11742 - -16298 -12093 -16906 -1567 - -1677 -3068 -6035 -6271 -6344 -5794 -1933 -6032 -4308 -6874 -6225 -1046 -6712 - -2194 -4404 -8838 -6737 -8595 -2478 -1033 -3489 - -5439 -14385 -13397 -3570 -13810 - -1726 -5761 -4318 -2813 -3351 -3168 -1539 -3847 -4422 -6071 -3376 -1093 -1979 -3206 -4011 - -2491 -4041 -3106 -2550 -3206 -5553 -3473 -5805 -1934 -4179 -1963 -4113 -3996 -2351 -3437 - -8747 -3481 -11813 -7672 -4711 - -4393 -2158 -3121 -6931 -7801 -3706 -4801 -3971 -1195 -1553 -1058 - -20051 -11463 - -1299 -6007 -6845 -1866 -2461 -3548 -4175 - -10323 -9098 -5566 -8553 -8768 -1022 -10088 - -5388 -4289 -5067 -5871 -5451 -4891 -8796 -6506 -3323 - -2652 -1923 -5235 -1539 -9256 -5794 -6153 -1379 -3568 - -12764 -15021 -11371 -1577 -4189 - -1960 -7462 -6862 -6710 -2350 -1689 -8322 -1575 -5367 -1074 - -4411 -4588 -3164 -1456 -6084 -2628 -5635 -2845 -3593 -3027 -6316 -5661 -2890 -2470 - -5592 -5071 -4290 -4402 -6091 -2907 -1531 -6229 -6159 -1791 -3833 -2435 -3919 -3160 - -18373 -2699 -6711 -14268 - -7693 -1264 -4217 -5299 -3786 -4555 -1112 -3392 -2535 -6768 -3618 - -11723 -6939 -7761 - -15672 -15601 -13101 -6229 - -23344 - -7787 -4343 -6661 -2629 -3189 -5155 -7999 -2351 -1308 -2726 -3177 - -18631 -18125 - -9177 -3897 -3655 -3449 -8336 -4366 -3363 -2145 -8594 - -1820 -9067 -2171 -2487 -15998 - -16221 -3430 -14946 -6869 -5305 - -4483 -7157 -1588 -2629 -5109 -7299 -1688 -4386 -6960 -6538 -1525 - -1289 -1340 -1520 -3601 -4316 -2653 -6140 -6219 -5044 -4306 -2573 -4028 -1828 -5844 - -7277 -5775 -2893 -3958 -6228 -6786 -7203 -7119 -5786 -6477 - -4367 -10361 -5973 -9197 -2832 -7900 -6711 -8279 - -9606 -6118 -10025 -10242 -8279 -8938 -6688 -7905 - -2478 -1918 -5575 -1840 -4897 -5871 -6309 -2778 -1937 -5396 -3249 -3456 -1002 - -12936 -11011 -11487 -11919 -13937 -8622 - -3853 -13287 -8285 -7842 - -11250 -7923 -8049 -3931 -7625 -4918 - -6516 -8209 -1752 -6258 -8501 -7426 - -10432 -3916 -12055 -13687 -1774 -8053 - -4682 -6779 -7258 -6929 -6899 -2643 -7021 -4960 -1732 -4065 -2854 -3593 - -13273 -11558 -5225 -3607 -5637 -11317 - -65129 - -6830 -3890 -4718 -6376 -3029 -8343 -7250 -7484 -3379 - -16188 -11694 -16583 -18745 - -4379 -2764 -4045 -3392 -1546 -3255 -2029 -3239 -1565 -5060 -1208 -1340 -5419 -3466 -4620 - -5408 -11519 -10387 -7305 -5770 -1733 -5462 - -9975 -4492 -14939 - -6365 -5846 -1825 -2851 -5483 -4801 -4109 -2581 -4729 -5149 -5573 -3345 -5426 -2060 - -15826 -6853 -10422 -12615 - -26180 - -5520 -1816 -1983 -4838 -2454 -4060 -2788 -6199 -6235 -2288 -4959 -4117 -3684 -3781 - -33317 -13949 - -1439 -1401 -4390 -4539 -5877 -2857 -3622 -3524 -4414 -1908 -2148 -1941 -4218 -1323 - -9364 -14727 -3282 - -22309 -24789 -7850 - -3434 -19391 -9665 - -1420 -3456 -4714 -4667 -2824 -3442 -1875 -2679 -4123 -1089 -2733 -4700 -5369 -1177 -1161 - -1710 -4521 -2164 -5986 -2485 -5614 -6494 -5043 -6334 -4947 -1423 -3351 -4010 -4360 - -3366 -3591 -8590 -3852 -9035 -8474 -1698 -5448 - -4560 -2248 -7197 -1821 -5411 -4522 -4914 -7806 -1387 -5702 -1780 - -3156 -2143 -5586 -2022 -3913 -5090 -5977 -4643 -3195 -5785 -6892 -5048 - -3839 -1261 -10477 -8350 -5769 -12750 - -19348 -9824 -15316 -17581 - -7925 -7634 - -2947 -4578 -1499 -1778 -10217 -5597 -3943 -8172 - -2012 -3917 -8065 -5627 -7562 -5489 -4334 -1648 -6666 -8287 - -15138 -7610 -12478 -12309 -13290 - -6296 -1234 -7587 -5783 -3061 -5613 -3283 -4447 -7188 -4577 -4102 - -8355 -2352 -1164 -1204 -2809 -6145 -6475 -3972 -1539 - -1805 -1214 -4153 -1685 -2472 -4620 -2784 -1859 -1390 -3591 -2560 -6291 -2805 - -11842 -20590 -15179 - -22669 -16927 -13861 - -2691 -9308 -3682 -1107 - -6906 -5502 -2120 -6862 -8843 -5379 -9651 -8263 -7238 - -3026 -5505 -2220 -1215 -4409 -2544 -3819 -7524 -3042 -4252 -1241 - -11244 -2129 -8844 -10557 -4463 -2319 - -5365 -2200 -1589 -4451 -5736 -1895 -4986 -3211 -1235 -4028 -1707 -1051 -6037 - -14311 -5746 - -2013 -8567 -3579 -6440 -3637 -10568 -8596 -7767 - -5653 -7015 -5853 -3670 -4265 -3003 -4139 -3132 -7538 -3629 - -3173 -1436 -3076 -5275 -4686 -5149 -6179 -2238 -1339 -2123 -4221 -6509 -5150 -2728 - -35818 - -11419 -8083 -12069 -3666 -2300 - -28844 -10855 - -30505 -18426 - -3369 -3085 -7409 -7308 -6556 -9671 -5416 -5981 -7558 - -5259 -9105 -15313 -6050 - -3203 -3414 -11117 -6231 -6049 -11632 -4816 - -11686 -5815 -11464 -7186 -9842 -5953 -8553 - -9330 -1817 -3529 -1761 -1823 -3942 -9471 -2207 - -8304 -9429 -12445 -3950 -16005 - -4809 -3869 -6968 -3204 -3621 -5925 -3967 -5180 -5238 -3013 -5291 -1371 - -4656 -2372 -1950 -4696 -1060 -3802 -5178 -5875 -3804 -5357 -3257 -1949 -3892 -5813 -3996 - -10281 -24432 -9867 - -7152 -5979 -4947 -6123 -6631 -6929 -4675 -3974 -5293 -6265 -4023 -6536 - -2200 -2917 -4479 -3671 -7268 -3545 -6762 -5921 -1814 -3704 -2767 -4692 - -9984 -5140 -2532 -4146 -13613 -11710 - -2027 -2367 -7666 -8617 -7563 -6593 -5060 -4431 -2666 -5080 - -7837 -6223 -2698 -8080 -3586 -8054 -6153 - -4364 -5979 -13237 -9841 -8704 - -5197 -4477 -5255 -8748 -11477 -1361 -4220 - -12430 -4451 -1038 -9999 -7577 - -59250 - -3857 -2158 -7069 -4813 -1980 -1636 -3646 -6760 -2842 -4217 -7578 - -1360 -2241 -2170 -2623 -2647 -5193 -3950 -4758 -5644 -2097 -3768 -5600 -3042 -3976 - -3905 -7116 -9941 -1927 -2265 -4489 - -6072 -3192 -6263 -3496 -3332 -2584 -5862 -6093 -6069 -4497 -1483 -6109 -4352 -1235 - -18487 -10619 -16127 -11370 - -2449 -2250 -2025 -3522 -5687 -5202 -4474 -5911 -3270 -5929 -4208 -2694 -5863 -3789 -2120 - -2591 -9936 -3145 -4471 -2234 -2250 -1547 -3760 - -13060 -12425 -20060 - -1786 -6317 -2087 -1998 -4111 -2185 -5446 -2732 -3731 -6082 -4513 -6370 -2494 -3197 - -5581 -5685 -1428 -1539 -1704 -5007 -2207 -4835 -1700 -4340 -1818 -3276 -1724 -1555 - -16085 -18634 - -1834 -2654 -5257 -2329 -4180 -4424 -4947 -5484 -1141 -4607 -5401 -2856 -2045 -4916 -5992 - -2925 -4945 -4969 -1400 -6410 -1093 -2398 -1949 -2701 -2763 -6314 -1105 -1580 -2804 - -52492 - -4181 -8013 -15867 - -2465 -4182 -6901 -1949 -5107 - -3078 -5461 -5477 -5344 -5974 -9751 - -26600 - -3943 -9282 -9655 -4304 -11368 - -4386 -7039 -7871 -9075 -2279 -10752 -1240 -5754 - -6914 -7359 -6766 -5693 -7719 -5043 -8665 -7241 -3498 -8771 - -12438 - -2288 -2764 -2633 -3416 -3396 -3172 -2004 -3583 -1862 -3027 -3928 -3165 - -3265 -2973 -2084 -5073 -1835 -2803 -2420 -3924 -4277 -5862 -1330 -5599 -3553 -3640 -5041 - -8709 -1629 - -5938 -9575 -1789 -6720 - -3623 -4874 -8500 -6566 -6965 -9388 -2106 -8552 - -9147 -4821 -5991 -9194 -3138 -2877 -5089 -4677 -3841 - -2865 -4858 -4642 -3755 -5958 -8076 -5599 -7931 - -5112 -2846 -2713 -3603 -5395 -4539 -4324 -2518 -1850 -5995 - -44743 - -1052 -3226 -3355 -4357 -4745 -4324 -4606 -3155 -3877 -1188 -4762 -1587 -2101 -1792 -4723 - -2071 -4440 -7135 -5825 -6083 -4034 -4572 -6942 - -3345 -5000 -1167 -1951 -4713 -2062 -4786 -7635 -1304 -6163 -5063 - -7060 -1738 -2658 -1217 -1388 -7416 -3719 -3903 -2305 -1051 -4437 -2496 - -9603 - -17966 -16434 -6253 - -8045 -8593 -9128 -6057 -10943 -11143 -2626 - -1961 -2742 -5305 -4780 -4307 -2465 -4472 -2946 -1404 -2195 -4822 -5607 -1027 -5697 - -26688 - -1004 -1382 -1194 -4638 -3773 -5037 -3731 -2676 -3567 -1159 -1136 -2883 diff --git a/day-1/main.zig b/day-1/main.zig deleted file mode 100644 index d985c9b..0000000 --- a/day-1/main.zig +++ /dev/null @@ -1,46 +0,0 @@ -const std = @import("std"); -const min_idx = @import("util/mem.zig").min_idx; - -pub fn puzzle_1(input: []const u8) !i32 { - var iter = std.mem.split(u8, input, "\n"); - var count: i32 = 0; - var max: i32 = 0; - - while (iter.next()) |line| { - if (line.len == 0) { - if (count > max) { - max = count; - } - count = 0; - } else { - count += try std.fmt.parseInt(i32, line, 0); - } - } - - return max; -} - -pub fn puzzle_2(input: []const u8) !i32 { - var iter = std.mem.split(u8, input, "\n"); - var count: i32 = 0; - var max: [3]i32 = std.mem.zeroes([3]i32); - - while (iter.next()) |line| { - if (line.len == 0) { - const lowest_u = min_idx(i32, &max); - if (count > max[lowest_u]) { - max[lowest_u] = count; - } - count = 0; - } else { - count += try std.fmt.parseInt(i32, line, 0); - } - } - - count = 0; - for (max) |v| { - count += v; - } - - return count; -} diff --git a/day-1/util b/day-1/util deleted file mode 120000 index 40c3fc5..0000000 --- a/day-1/util +++ /dev/null @@ -1 +0,0 @@ -../util \ No newline at end of file diff --git a/day-2/input b/day-2/input deleted file mode 100644 index e49a6c4..0000000 --- a/day-2/input +++ /dev/null @@ -1,2500 +0,0 @@ -A Z -A Z -C Y -A X -A X -A Z -C X -A X -C Y -A Z -B Y -B Y -C X -C Y -C X -B Y -A Y -C Y -B Y -B Z -B Y -C X -A Z -C Y -B Y -B Y -A Z -B Y -B Y -B Y -B Z -B Y -A Z -B Y -C Y -B Y -B Z -C X -B Z -A X -B Y -B Z -C Y -A Z -C Y -A Z -B Y -C Y -A Z -A Z -B Y -C Y -C X -A Z -B Z -A Z -B Y -C X -B Y -B Y -B Y -A Y -B Z -C Y -C X -A Z -B Y -B Y -B X -A Z -C X -B Y -B Y -A Z -A Z -A X -A X -B Y -C X -A X -A Z -A Z -B Y -C Y -B Z -A X -B Z -A Z -B Y -A Z -C Y -A Z -A X -B Y -C Y -B Y -A X -B Z -C Y -B Y -B Y -A Z -A X -A X -B Y -C Y -B X -B Z -C X -B Y -A Y -B Y -B Y -B Y -A X -C Y -A Z -C Y -C Y -B Z -B Y -A Z -A Z -A Z -B Y -C Y -B Z -C X -C Y -B Z -A X -A Z -C Y -B Y -C Y -C Y -C Y -B Y -B X -B Y -B Y -C Y -A X -B Z -B X -C X -B X -C Y -B Z -B Y -A X -C Y -C Y -C X -B Z -B Y -A Y -B Z -A Z -B Y -B Y -B Z -B Z -C Y -A Z -A X -A X -C Y -B Y -A Z -B Z -A X -A Z -B Z -C Y -C Z -A X -A Y -B Y -C Y -B Y -C Y -B Z -B Y -A Z -C Y -B Z -B Y -A Z -A Y -B Y -B Y -C Y -A Z -C Y -B Y -B Y -A X -A Z -A Z -B Y -B Y -B Z -C Y -C X -B Z -A Y -B Z -A X -C X -A Y -B Z -B Z -A X -C X -C X -A Z -C Y -A X -A X -C X -A X -B Z -C Z -B Z -B Y -B Y -A Z -A Z -B Y -A Z -C Y -C X -B Y -A X -A X -B Z -C Y -C Y -A X -B Z -A X -C X -C X -B Z -C X -B Z -A X -A Y -A X -A Z -A X -B Y -C Y -A X -C Y -A Z -B Z -A Z -C Y -A X -A Z -B Y -A Z -B Z -B Z -A Z -B Z -A X -B Y -B Z -C X -B Y -B Y -B Y -B Y -A X -B Z -B Z -A Z -A Z -C Y -B Y -C X -A X -B Y -B Y -C X -B Y -A X -C Y -A Z -B Y -A Y -B Z -B Y -A Z -A X -B Z -C Y -A Z -C Y -C X -B Y -B Z -C X -A Y -B Z -A Y -B Z -B Z -B Y -B Z -C X -B Y -A X -B Z -A Z -B Y -A Z -C Y -C Y -C X -C X -A X -C X -A X -A X -B Z -B Y -B Y -B Y -B Y -C X -C X -A Z -A Z -C X -C X -C Y -C Y -C Y -B Y -A Z -C Y -B Z -B Z -B Y -C X -C X -C Y -C Y -C X -B Z -B Z -B Y -C Y -B Y -A Z -C Y -A X -B Y -C Y -C Y -C Y -B Y -A Z -B Y -A X -B Z -C X -A Z -C X -A Z -B Z -C Y -C Y -C Y -C X -B Z -C X -B Y -B Z -C X -B X -A Z -B Z -B Y -C Y -B Z -C Y -A X -B Z -C Y -C Y -B Z -B Y -C Y -B Z -C Y -A Z -C X -C X -C Y -A Z -C Z -C Y -B Y -C Y -B Y -B Y -B Z -C X -C X -B Z -B Z -B Z -A Z -B Y -B Y -A X -B Y -C Y -B Y -C X -C X -B Y -B Y -A Y -B Z -B Y -B Y -C Y -A Z -C X -A Y -B Y -B Z -B Y -A Y -C Y -A Y -A Z -B Y -A Z -C Y -C Y -B Y -A Z -B Y -B Y -A Z -B Z -B Y -C X -C Y -B Z -B Y -B Y -A Z -C Z -A Z -A X -C X -B Z -B Z -C X -C Y -B Y -B X -A X -C Y -B Z -B Y -C X -B Y -A Z -A Z -A X -C Y -B Z -B Y -C X -C X -B Y -A Z -C Z -B Y -A Z -C Y -B Y -C X -A Z -A Z -A X -C X -A X -C X -C X -A Z -C X -B Y -A Z -B Y -B Y -C Y -C X -A Z -B Z -B Y -B Y -A Y -A Z -B Y -A Z -B Z -B Y -C Y -A Z -B Y -B Y -B Y -C Y -C X -A X -A Z -B Z -B Y -C Y -B Z -C X -B Y -C X -A Z -B Y -B X -B Y -A Y -A X -A X -C X -C X -B Y -B X -C Y -A Z -B Z -C Y -C Y -B Y -A Z -C X -A Z -C Y -B Z -B X -C X -B X -C X -B Y -C Y -C Y -B Z -B Y -B Z -B Z -A Z -B Y -A Y -B Z -C X -C Y -C X -A Z -B Z -C Y -B Y -B Z -C X -B Y -A Y -A X -A X -C Y -B X -C X -B Z -A Z -A Y -B Z -C X -C X -B Y -A X -B Z -C Y -B X -B Z -C Y -B Y -C Y -B Z -B Y -B Z -B Y -C X -B Y -C X -B Z -B Z -C X -B Z -A X -B X -B Y -A X -B Z -C X -B Z -B Y -B Y -C X -A Y -B Z -B Z -B Y -B Y -B Z -C Y -B Z -C Y -C X -A Z -C X -A X -C Y -B Y -C X -A Z -B Y -A Z -A Z -B X -C Y -B Z -C Y -B Y -B Z -A X -B Z -A X -C X -B Z -B Y -C X -C Y -C Y -B X -C X -C X -B Z -C Y -B Z -B Y -B Z -C Y -B Y -C Y -C X -B Y -B Y -B Z -A Z -C X -A Z -B Y -B Z -A Z -C Y -A Z -B Y -A Z -A Z -C Y -A Y -B Y -A Y -C X -B Y -C X -B Z -C Y -A Z -C X -C X -B Z -C Z -C Z -B Y -B Y -C Y -C Y -A Z -C Y -C Y -C Y -A Z -B Z -C Y -B Y -C Y -C X -C X -B X -B Y -C Y -A Y -B Y -B Z -B Y -A Y -B Y -B X -C X -C Z -C Y -C Y -C Y -B Z -B X -C Y -B Z -C X -C Y -A Z -A Y -B Y -C X -A Z -B Y -C Y -B Z -A Z -A Z -B Y -A Z -C Y -A X -C Y -B Z -B Z -B Z -B Y -B Y -A Z -A Z -B Y -C X -A Z -C Y -B Y -A Z -C Y -A Z -B Z -B Z -A Y -B Y -B Y -B Z -C Z -B Y -B X -B Y -C X -B Z -C Y -B Z -A Y -B Z -A Z -A X -A Z -C X -C X -B Y -C X -C Y -A Z -B Z -B Y -A Z -B Z -B Z -B Z -C Y -B Y -A X -C Y -C Y -C X -A X -C Y -B Y -C X -B Z -A Y -B X -B Y -A Z -B Y -B Y -B Y -B Z -C X -B Z -B Z -C X -B Y -A Y -B Y -C Y -A Z -C Z -B Y -B Z -B Z -C Y -A Z -C Y -C X -C Y -B Y -A X -A X -B Z -C Y -B Z -B Y -A Y -C X -A Z -B Z -C Y -C Z -C X -B Y -C X -A Y -A Y -B Z -C X -B X -C X -B Y -B Z -B Z -B Y -C Y -B Y -B Y -A Z -B Z -B Y -C X -B Z -B Y -B Y -C Y -C Z -C X -B Y -A X -C Y -C X -B Z -C Y -A X -B Y -A Y -B Y -C X -C Y -C X -A X -B Z -C X -B Y -A Z -C X -B Y -A Z -B Y -B Y -B Y -A Z -A X -C X -C Y -C Y -B Y -B Y -B Z -A Y -C X -C X -B Y -B Y -B Z -A X -C X -C X -B X -A X -B Z -B Y -C X -A X -B Y -C Y -A X -B Y -C X -B Z -C Z -B X -C Y -B Y -C Y -A Z -C Y -B Z -C X -B Z -C X -C Y -C X -C Y -C Z -C X -C X -B Y -C Y -C X -C X -B Z -B Z -A X -C Y -C Z -B Y -C Z -C Y -C X -C X -B Y -C Y -A Y -B Y -A Y -B Y -B Y -B Y -C Y -C Z -B Y -C X -C X -B Z -B Y -B Z -C Y -B Z -C X -B Z -B Y -B Y -A Z -A X -B X -A X -C X -C Y -B Y -A X -B Z -B Y -B Y -A X -C X -C X -B Y -B Y -C Y -C Y -B Z -B Y -B Y -B Y -C Y -A X -B Y -C Y -B Z -B Y -B Y -B Z -B Y -B Y -B Z -B Y -B Y -C Y -A Z -B Z -A Y -B Y -C Y -B Z -B Y -B Y -C X -A X -C Z -C X -B Y -B Z -C Y -C X -B Z -A Z -A Z -C Y -A Z -B Y -B Y -B Z -B Y -C Y -B Z -C Y -B Z -B Z -B Y -C X -B Y -B Z -A X -C X -C X -B Z -B Z -C X -B Y -A Z -B Y -B Z -C Y -B Y -A Z -B Z -B Y -B Y -B Y -C X -C Y -A Z -B Y -B Y -A Z -A Z -A Z -A X -B X -A Z -C Y -C X -A X -B Z -A X -C X -B Z -B Y -B Y -C X -A Z -C Y -C X -A Y -C X -A Z -B Z -B Z -B Y -C Y -B Z -A Z -A Z -C Y -B Y -B Z -A Z -A Z -B Z -B Y -A Z -C Y -A Z -A Z -B Y -B Z -B Z -A X -A X -B Y -B Z -B Z -C X -B Z -C Z -B Y -B Y -B Y -B Z -A X -A Z -B Y -A X -B Y -B Y -C X -C X -C Y -C Y -A Z -A X -B Y -A Z -B Z -B Y -C X -B Y -B X -C X -A X -A Z -C Y -C X -C Y -B Y -B Y -A X -A Y -B Y -A Y -C Y -C X -B Y -B Y -B Z -C X -C X -B Y -C X -B Z -C Y -A X -A Z -A Z -B Y -A Y -C Y -C X -C Y -C Y -B Y -B Y -A Z -C X -A X -B Y -B Y -B Y -B Z -A Z -B Y -B Y -A Z -B Y -A Z -C X -B Z -C Y -B Y -B Y -A X -B Y -A X -B Y -B Z -C X -B Z -B Y -C X -C Y -C Y -A X -A X -B Z -B Z -B Y -C X -A Z -C Y -C Y -C Y -B Z -B Z -B Y -A Z -C Y -A X -A Z -C Y -B Z -B Y -B Y -A Z -B Y -A Z -C X -A X -B Z -B Y -B Y -B Z -A Z -C X -B Y -C X -B Z -C X -A Z -B Y -A Z -A Z -B Y -C Y -C X -C Y -A X -C Y -B Y -B Z -C X -C Y -A X -B Z -B Y -C Y -A X -B Z -A Y -B Z -B Y -B Z -A X -A Z -A X -B Z -C Y -B Y -A Y -B Z -A Z -C Y -C X -B Z -B Y -C Y -B Z -C X -C Y -A X -B Z -B Z -B Z -B Z -B Y -C X -B Y -C X -A Z -A Z -C Y -A Y -B Y -C X -A Z -B Z -C X -C X -A X -B Y -C X -A Z -B Y -B Y -B Y -B Y -C X -C Y -C Y -B Y -A Z -B Y -B Z -B Z -B Y -A X -B Z -B Z -C X -C X -C Y -B Y -C Y -B Y -B Y -B Z -B X -C X -C Y -A Z -B Z -B Y -A X -B Z -A Z -B Z -B Y -B Y -A Z -C Y -B Y -C Y -B Z -B Y -C X -B Z -B Z -C Y -C Y -B Y -C Y -C X -B X -B Y -C Y -B Y -B X -C X -B Y -A Y -A Z -A Y -B Z -A Z -A Z -A Z -B Y -A Z -A Z -C Y -B Z -A Z -A X -B Y -C Y -C X -C X -A Z -B Z -B X -B Z -C X -B Z -C Y -C X -C Z -C X -B Z -B Z -B Z -B Z -A Z -A Z -C Y -C Z -C Y -A X -B Y -B Y -B Y -A Z -A Z -B Z -C Y -C X -B Y -C X -B Z -B Y -B Y -B Y -B Y -B Y -B X -A Z -A X -A Y -C X -B Z -B Y -B Z -C Y -A Z -B Z -B Z -C Y -B Z -B Z -C X -B Y -C X -B Z -C X -C Y -C Y -C X -A Z -A Z -B Z -B Y -C X -C X -A Y -A Z -C X -A X -A X -A Z -C Y -B Z -B Y -A Z -B Y -B Y -B Z -B Y -C Y -B Z -A X -B Y -A X -B Z -A Z -C X -A X -C Z -A Z -C Y -A X -B Y -B Z -B Z -A X -C Y -A Z -C X -A Y -C X -B Y -B Z -A X -B Y -B Y -A Y -A X -B Y -C X -A Y -B Y -B Y -C Y -A Z -B Z -A Z -B Y -A Z -C Y -C X -B Z -B Y -B Z -A X -C Y -C Z -A X -A X -C Y -C Y -A Z -C Y -C X -A Y -C Y -B Y -B X -B Y -A Z -C X -C X -B Y -A Z -A X -B Z -C X -B Y -B Y -C Z -A X -A X -B Z -C X -C Y -B Z -C Z -B Y -A Y -A Z -A Y -C Y -C Y -C Y -B Z -B Z -B Y -B Y -B Y -B Z -B Z -C X -A X -C X -B Y -B Y -B Y -C Y -B Y -B Y -C X -A Y -B Z -C X -B Z -B Y -A X -C Y -B Y -C Y -B Z -B Y -C Y -C Z -C Y -A Y -B Z -A X -B Z -A Z -A Z -A Z -B Y -A X -C Y -B Y -B Y -B Y -C X -B Y -A X -C X -B Y -C X -A Z -B Z -B Z -B Y -C Y -B Y -A Z -B Y -C Y -B Z -C X -B Y -B Y -B Z -C X -C Y -B Z -B Z -C Y -C X -C X -B Y -B Z -A X -C X -A Z -A Y -B Z -B Y -B Y -C Y -C X -B Y -B Z -C Y -C Y -C X -C X -B Z -A Z -B Z -B Y -C X -A X -C X -A Z -C X -B Z -C Z -B Y -C Y -B Y -C Z -A Z -B Y -C Z -A X -B Z -B X -C Y -C X -B Z -A Z -B Y -A X -B X -A Z -C Y -A Y -A Z -A X -C X -A Y -C X -B X -B Y -C Z -A Z -C X -B Y -C X -C X -B X -B Y -A Y -B Y -B Y -A Z -B Y -C Y -C X -B Y -B Y -B Z -C Y -B Z -A Z -A Z -A X -B Y -C Y -B Y -C Y -C Y -B Z -A X -C Y -B Z -C Y -A Y -B Y -B Y -B Y -C Y -A Z -A Z -B Z -A Z -C Y -C Y -B Y -C X -B Y -A Z -B Z -A X -B Z -B Y -B Z -A X -A X -C Y -A Z -B Z -C Y -B Z -C X -B Z -A X -B Z -B Z -C Y -B Y -B Y -C Y -B Y -A X -B Y -C Y -A Z -B Y -C X -A Z -B Z -A Z -B Z -C Y -B Y -B Y -B Y -C Y -B Y -B Y -A Z -B Y -B Z -C X -B Z -C X -C X -A X -B Z -C Z -B Z -A Y -C X -C X -A Z -A X -A Y -A X -B Y -B Y -C X -C Z -A Y -C Y -B Y -B Y -C X -C X -B Z -B Z -B Y -C Y -A Z -B Y -C X -C X -A X -A X -A Y -B Y -C X -A Z -C Z -C Y -C Y -C Y -B Y -C Y -A Y -A X -B X -B Y -B Y -B Y -B Y -A Z -B Z -B Y -B Y -C Y -A X -A Z -A Z -A Z -B Y -A X -C Y -C Y -B Y -B Y -C Y -A Z -C Y -A X -C X -B Z -B Y -C X -B Y -A X -A Z -C X -C Y -C Y -C X -C X -B Z -B Y -A Z -B Y -B Z -B Z -B Y -B Y -A X -C X -C Y -C X -A Z -B Z -B Y -B Y -C Y -A X -A X -C Y -C X -B Z -A Y -B Y -B Z -B Y -A X -C Y -B Y -A X -C X -B Y -B Y -A Z -A Z -A Z -B Y -B Y -C X -B Z -A Z -B Z -A Z -C X -B Y -C X -B Y -C X -C X -B Y -B Y -A Y -C Y -C Y -B Z -C X -B Y -B Y -A X -A Z -B Y -C Y -B Y -C Y -A X -C Y -C Y -B Z -C Y -A X -C X -A Z -C Y -A Z -C X -B Z -B Y -B Z -C Y -B X -A Z -C Y -C X -B Y -C X -B Z -A X -A Z -C X -B Z -C X -B Y -A Z -B Y -C Y -B Y -C X -C Y -B X -B X -B Y -B Y -B Y -B Z -B Y -C X -A Z -A Z -C X -B Y -B Y -B Y -A Y -C Y -B Z -C X -C Y -A X -C Y -B Z -C Y -B Y -B Y -B Z -A Z -A Z -B Y -A Y -B Z -A X -C Y -B Y -A X -C X -B Y -C Y -B Z -B Y -C X -A Z -C Y -A Z -B Y -C Y -B Y -C X -A Z -C Y -C Y -A Y -B Z -C X -C X -A Z -C Z -C X -B Y -C X -A X -C Y -C X -C X -A X -A Y -A X -C X -A X -A X -B X -B Y -C Y -A X -B Z -C X -C Y -B Y -B Z -C Y -B Z -B Y -C X -A X -B Y -B Z -C Y -A Z -C X -C Z -A X -A Z -A Z -B Z -A Z -B Y -C Y -C Y -B Z -C Y -C Y -C Y -C X -A X -B Y -A X -C X -C Z -B Y -A Z -B Y -C Y -C Y -B Z -C Y -C X -B Z -C Y -B Y -B Z -A Z -B Z -B Z -B Y -A Z -A Y -C X -B Y -A Z -C Y -B Z -A Z -B Y -B Y -C Y -B Y -B Y -B Y -C Y -B X -B Y -A X -A X -B Z -A X -C Y -A Z -B Y -B Y -B Z -A Z -C Y -C X -B Y -A Z -A X -B Y -C X -B Z -A X -C X -B Z -B Z -B Z -B X -A X -C Z -C X -C Z -B X -A Z -C X -B Y -C X -C Y -C Y -B Y -B Z -B Y -C Y -C X -A Z -C Y -C Y -C Y -B Z -A Z -A Y -C X -C Y -B Y -C Y -C Y -B Z -C Y -B Y -B Y -C X -B Z -B Y -A X -B Y -A Z -B Y -C X -B Y -C X -B Y -A Z -C X -B Y -C X -B Z -C X -B Y -A X -C X -C X -A X -C Y -A Z -C Y -B Z -A Z -A X -C X -A X -C Y -A X -A X -B Z -C X -C Y -A Y -B Z -B Y -C Y -B Y -A Y -C Y -C Y -B Y -B Y -B Z -B Z -C X -B Y -C X -A X -A Z -C Y -B Z -C Y -B Y -C X -C X -A Z -B Z -A Z -C X -B Y -B Z -C Y -B Y -A X -A X -B Y -B Y -B Y -A X -B Y -B Z -A Z -A X -A X -B Z -B Y -A X -B Z -A Z -B Y -B Z -B Z -B Z -C Y -C Y -A Z -B Y -C Y -A Z -C X -B Z -A X -B X -B Y -B Y -C Y -C Y -B Z -B Y -A Z -B Y -A X -B Z -B Y -C Z -B Y -B Y -C Y -B Y -B Y -A Y -C Y -A Z -A Y -B Z -C X -B Z -A X -A Z -A X -C Y -A Z -B Y -B Z -B Z -C Y -C Y -C Y -B X -B Y -B Z -A X -B Y -C Y -A X -A X -B Y -C Y -A Y -B Z -B Z -B Z -A Z -B Y -C X -A Z -C Y -C Y -B Y -C Y -C Y -C Y -C Y -B Y -B Z -A Z -B X -C Y -C X -C X -C Y -A Z -C Y -C X -B Z -B Y -A Y -C Z -B Y -B Y -B Y -B Y -C Y -B Y -C Y -A Z -B Y -C X -C Y -B Z -A X -C Y -B Y -B Y -B Y -A Z -A X -A X -C X -C Z -B Z -A X -A Z -A X -A Y -C Y -C Y -A Z -C X -C X -B X -B Y -A X -A Z -A X -C Y -B X -A X -A X -C X -A Y -B Z -A Z -B Y -A X -A Z -B Y -A Z -C Y -B Z -A Z -C Y -C X -B Z -C Y -B Y -C X -A Z -B Z -A X -A X -C Z -A X -C X -B Y -B Z -A X -A X -C Y -A Z -C Y -C X -C Y -B Z -B Y -C X -C X -B Z -B Z -C Y -A X -B X -C X -C Y -A X -A Z -B Y -C X -A Y -C X -C Y -A Z -B Y -B Z -B Y -C X -C Y -C X -C X -B Y -C X -C X -B Y -C Z -C Y -C Y -B Z -B Z -B Y -A X -B Y -A Z -A Y -B Y -C Y -B Z -B Z -A X -B Y -A X -B Y -A Z -B Y -C X -A Z -B Z -C Y -B Y -A Y -A X -C X -A X -B Y -B Z -B Z -C Y -A X -B Y -B Z -B Y -B X -C Z -B Z -C X -C Y -C X -B Z -C Y -A X -A X -C X -B Y -B X -B Y -A X -C Y -A Z -B Y -B Y -B Y -B Z -B Y -C X -A Z -C Y -A Z -B Z -C X -C Y -C X -C Y -A Y -B Z -B Y -B Z -C Y -A X -B Y -A X -C X -B X -C X -A Z -B Z -B Z -C Y -B Z diff --git a/day-2/main.zig b/day-2/main.zig deleted file mode 100644 index 3289ad2..0000000 --- a/day-2/main.zig +++ /dev/null @@ -1,110 +0,0 @@ -const std = @import("std"); -const slurp = @import("util/file.zig").slurp; - -const Hand = enum(u8) { Rock = 1, Paper = 2, Scissors = 3 }; -const Outcome = enum(u8) { Win = 6, Draw = 3, Lose = 0 }; - -const KV_Hand = struct { @"0": []const u8, @"1": Hand }; -const KV_Outcome = struct { @"0": []const u8, @"1": Outcome }; - -const Player_A_KV = std.ComptimeStringMap(Hand, [_]KV_Hand{ - .{ .@"0" = "A", .@"1" = .Rock }, - .{ .@"0" = "B", .@"1" = .Paper }, - .{ .@"0" = "C", .@"1" = .Scissors }, -}); - -const Player_B_KV = std.ComptimeStringMap(Hand, [_]KV_Hand{ - .{ .@"0" = "X", .@"1" = .Rock }, - .{ .@"0" = "Y", .@"1" = .Paper }, - .{ .@"0" = "Z", .@"1" = .Scissors }, -}); - -const Outcome_KV = std.ComptimeStringMap(Outcome, [_]KV_Outcome{ - .{ .@"0" = "X", .@"1" = .Lose }, - .{ .@"0" = "Y", .@"1" = .Draw }, - .{ .@"0" = "Z", .@"1" = .Win }, -}); - -const match_impl = struct { - fn puzzle_1(a: Hand, b: Hand) u8 { - switch (b) { - .Rock => { - switch (a) { - .Rock => return @enumToInt(b) + @enumToInt(Outcome.Draw), - .Paper => return @enumToInt(b) + @enumToInt(Outcome.Lose), - .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Win), - } - }, - .Paper => { - switch (a) { - .Rock => return @enumToInt(b) + @enumToInt(Outcome.Win), - .Paper => return @enumToInt(b) + @enumToInt(Outcome.Draw), - .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Lose), - } - }, - .Scissors => { - switch (a) { - .Rock => return @enumToInt(b) + @enumToInt(Outcome.Lose), - .Paper => return @enumToInt(b) + @enumToInt(Outcome.Win), - .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Draw), - } - }, - } - } - - fn puzzle_2(a: Hand, b: Outcome) u8 { - switch (a) { - .Rock => { - switch (b) { - .Win => return @enumToInt(b) + @enumToInt(Hand.Paper), - .Lose => return @enumToInt(b) + @enumToInt(Hand.Scissors), - .Draw => return @enumToInt(b) + @enumToInt(Hand.Rock), - } - }, - .Paper => { - switch (b) { - .Win => return @enumToInt(b) + @enumToInt(Hand.Scissors), - .Lose => return @enumToInt(b) + @enumToInt(Hand.Rock), - .Draw => return @enumToInt(b) + @enumToInt(Hand.Paper), - } - }, - .Scissors => { - switch (b) { - .Win => return @enumToInt(b) + @enumToInt(Hand.Rock), - .Lose => return @enumToInt(b) + @enumToInt(Hand.Paper), - .Draw => return @enumToInt(b) + @enumToInt(Hand.Scissors), - } - }, - } - } -}; - -pub fn puzzle_1(input: []const u8) u16 { - var iter = std.mem.split(u8, input, "\n"); - - var score: u16 = 0; - - while (iter.next()) |line| { - score += match_impl.puzzle_1( - Player_A_KV.get(&[_]u8{line[0]}).?, - Player_B_KV.get(&[_]u8{line[2]}).?, - ); - } - - return score; -} - -pub fn puzzle_2(input: []const u8) u16 { - var iter = std.mem.split(u8, input, "\n"); - - var score: u16 = 0; - - while (iter.next()) |line| { - score += match_impl.puzzle_2( - Player_A_KV.get(&[_]u8{line[0]}).?, - Outcome_KV.get(&[_]u8{line[2]}).?, - ); - } - - return score; -} diff --git a/day-2/util b/day-2/util deleted file mode 120000 index 40c3fc5..0000000 --- a/day-2/util +++ /dev/null @@ -1 +0,0 @@ -../util \ No newline at end of file diff --git a/day-3/input b/day-3/input deleted file mode 100644 index fca63f0..0000000 --- a/day-3/input +++ /dev/null @@ -1,300 +0,0 @@ -qFdBBvtHHfvRlfvsqldvqjPpQmnQmjnjjjTRTLGRNG -ZCWhhCsJCzSJzSbzgsmPTGNNPPNGjgLTLjgn -WJZsbJMwJcszJcScwhVltFwBFBlqddvFdHDfqq -crtTsGTtqFThGQGCrsjTwdNJwpRdnJJwffRClpSf -PWVBPVHLvHHVgvZWBzmPpnfRSJJRQnSRflRPSNSl -gmzBzDgzmZQWLDLLgVmDrqGhsscrqDMGhcqtqcFr -HsbcdVrsbVbcLfPqqQsqqtPj -mMBFzZRnmFMRBDnDFBGZDGdDqLjtdQtPtgfPfttgtqgq -BZvZZdJMBFdJhSvhbhchcHll -GNRSqRfcNTpfGCcqjfzBpDQPWBzgDpQsPWzW -rrSdnVHlbMdLdBDzgtBtBmQt -rbFwwnLFLFwlMLrFwFhMVLrGNSTfZTRhfTqjGJRRZTCNcf -QWTnQCnWNNWmTnSPQwmqDbcscbpcjPjVPbrjpq -vJhzZNlNNgdzgzJdlGzHHcHDpjsHqrvbVrbvrD -RzRdRlhLgtCwCWSLnN -SFTJFTTwTVVSJBnSTdvNNfWbZCZWNZCNNhBv -srLrcHDcsjtLcLLcrLctjlcvbDNhmWCvNhZWGZZhNvhZmb -rclgtMPrrSgVTgJCng -DbrhDzcDffbzNbZvZWSSqSTNSVWv -gCPltPmCPglFnPFwtGPhGPwTCTdZZWZVRvWqdRqVVdTdvR -hLBhlmlstcffBzrpfj -wFLLmhMfwZLDwmMNRhZwRLDvJgldbJHPdQvcQHHJQPgH -bjrVrTSSJdQHcVll -CGCSsCCBpspBrqbSttpbqWmWZRmfFRZhZMNNLFqFLm -zWGjjBHGjzzTWMjhtDDWtPPlJZPJpvqQrmZTqQQpmr -RFbVLcBVLRcRVcCsCCqvpCZqmplqQJmPrlvQ -FLNRRSSRgScSVLLLNdFdwjHjnftBtGMgMjzHgzjWjj -znVSqnqbqzSbzTHqDDZmlcFcnhDMnDmn -LtjsvdvLJdjfFwRRCCMlChwCpMcclCcZ -LgvjjfjFQVgNTgWq -SJRJRFFCMSsGRMMwtZJRCVTgqgTVgTBCVpjTjmmWlB -ccvnnpnDVqTcBVTV -vPHprdHdpnzHSMsSrMRZJGws -GddGrcGNHnGvnCHddvCSWqTSWsTwTWShbHlhhb -gDPzLRVZgQfpRRFQDDVFDfzhSzsTBqqqnqbhnWTSSlST -QVFfFgRQQgLtgffZRfpFPfntjrcrjCmtCdMMmjMdJJJNtm -jjmNcpGCNmDqqsBfnZnGGGRLsZ -lrmlVWlQQtWllgtbQVrWBnZsJgsRLfZLhZBBBffL -rWMVQtrFlbFlSSMHVSdHHNHdcdDcddzppzzm -bTpjpjcVTLmphbLppJwqzqwJLqqzzzgRLJ -sdHNbrvNHrqPvZZZPRww -bNQCrCNtNsSlhffhVhpVWFCW -lpNnpMMZZDbNbnBjcrbjvScFmbGj -wqhdqVqdscrjdLsv -HQftVqWCfhwqtCCjWwfqzzVPZRJQgMlggZMMMZTNMNTnNRTN -fvvGbFtVmtTwgtMT -WcCcClzPCCcczJJScPWWZzBDmwbhBBHSghgDDMTHMDBD -nWPljWzZWnbcbRsNFjFFdFdVjFsj -NQrcLNmQGRfGLHHLZgbbnpjZJJJndbgnlv -DWtThDWtzzhltWTwjbdpvjbgqjgg -VtSPFWtBPBFSFBWCStshWBmlRfHfMRcfQLQLLlmCrCcN -pbmwqJnqSJVwwDPCjZZzrZfD -QtssBTvNdNvNtQvQGpGhdjPjDjczZDfjhgPPDcgjgr -GltptQpMGNNpRWlWFVFHJFHLWH -ZLLsDGGVhZcQQLhrLshrVFwHnWqJnWMnJJJnqfWfGn -jMlPdTlPlgCgFpngFWFnJfpw -TlTNbdSSTSTmTjPMTCdBPjBMrLDczsZcNrDhRNDRQRLLRVVz -HDLpBqDVVTvwGDDNRT -PlVWjfhsPMMmWtlFNTrhrrvCCCTNNbvw -lsglfgVJmsfMjJfSqSzdZnLgqcnLnp -pfCDJWBpfDffpJLgQJzzVzNrgNgNgNhNzmVr -ZnnGZbGTPZnsnRFdTlbrwdrNzrrmmWwmwVwttH -GbPGRvTnZljWnpqSMMCjqJQSCf -ZgnFgwggznFrfrwfHhNMMr -pctLCLRhPHBLMLWfBL -JJcdJcQCCJmQJppmlgndnFslsVnsvghZ -WpMgTppWGSWWJmJDpJcJJhqm -zZzjZNHvNjPvNsbZLbRLzsPcqhVJSVttdwhwmdRhtdJRVd -sLbvvCZCPSSSbbPfNlQQTQGBllCTnMnWQn -fwbwswddwSbBfDBggMBPDPhHcPWDmhHhmWnWPC -FQFlzLCzQTlrTTzvltFqFrmhPHjnhhnnchcJWcRRmRRq -lpLzlFZzCltrTNlTztQLZfSMGBNdSBVwbBNVSMSbVs -FMmgbTFdgLSgFQdjrRPrQBPDdj -ZqqWRvsfGrrPvvPC -wZzwnqccRwRNNpRSMztSMMFbgzLTFS -qTwBPfTfqQDMDrssHdvtRHccHMjR -gWSZGWzGFhnFFgnhNsRHtRdsVjZcRjHs -jgplhpJJFgnDrrwfqprwDP -CWhMSRfWhVVnRSZnVVdsLQqQMzGqLBvGMQqczv -PHbpNwrjJplttvcclLlQzzDszc -NrJbJrFNNJNPrmwrtbjtNmCfSWfWhSZZfSWCsfShfFVR -VLhRPLGLRPRSStRRLwfGqfmDwbmqbqqDlD -rBSFvppnzTbwDwlDcFWm -MJrnJTMvMsrTsPtshRNPZdSLhL -BZBrRCrnCQBBnZfGqhGGMMRcthMhMG -TLjsCdDCPTvNssjdsPsDgsgqGcPHczchtHczWzPWzzlWhG -gsTpsdNbvNNjNSpsNDTsmCnSVQFmSFwZnQBnmnQQ -llbsNsWrmbrGbWCNtBjcCFBzQFZBCFjF -LdSpwgdqSgzwJdRdLMRHLjQQjHjFHctjHBDTZj -gSppgpSJMhpzwrhblfbhhlWlnW -DwhTvvsJZWsBnDzPpBLbFp -GHtNGRGNdzbMBBtmBt -NljlCSVSHdjGSQRGlCQSCswqfWzhZfTcfzcJvshJ -lmsGNFsDGqCbFQBbffjjwpzptw -hRQdvdrvrvSngWnvnHrTMfzfzRtftzwVTwwpzB -HnSSWrvLJvWJGFDsmFLPDFcQ -bwwpGphpLghpTvpWphvJlFLJqqltjSjVlSStSR -cmszZdDdBZzcNcDCDcNsmNMcqVjMJStFRJltVPVrlVPjVJll -HcdmcCzzzQcHNcsCdpnGnhwGgnRggHvbbR -CfMBbwBGbMbDCFrDvhFFDT -mjzRjjRdSmjPnzFZgnnrTT -cmSsVcHjLHTwMfLBpBpBwM -whqqfZzgHvhSzzVNVDbpDbmbVbNpJD -GcQFntGTCCcCTMCTGBlJsJsDDWpRbWBsJpNS -FnPcrGFFdddMnCnTqgqgqPHfLjLqgSzz -zMSzzjssFdGnszRtNftqqwFHbbZw -RRPLVrgrwHqBqgwt -rPWmLCTCQlCQQmmrWLrQShJshhzdhhJjcSjlzRds -lvgvCDfPqLHppqpCCDJncbntttbBtBBVHjwtrB -TdddszSQsWcngjzVbcVZ -hRWsTRTGQhNRGhRTFSWmlpgfqlvLmplPqvvGgv -LbWFLQdWWPwWSjSHPHRfppHHDRpggR -zmqqNNzlzmnzzNCmVCmtBzpfGsfpBgDgspprcfcfsrRB -qNNVNJtNmmmNzznVJzvCTDZWhvZZjZFbWQQhFhbZSw -DjdHqJVVhHVZjhDHPWtDtZLFBRBFmSRTFSbwmRRTffTTJf -NNznnGlgMQsnQzNclzpfSRSMRmfPMmFRwBwB -vzrcGcNcPPvHvHPt -wLCcmZwWTNtZNdMSMGSCnJGGMB -RFbHsPhVvFPRjlshhrnQnGjQGSdSqJfqnQBM -HhzVlFHhPwzScmSTgL -TNlBhDNvNBFpJgpPPpDQ -jjfCdCZZqsCZsbdqPgFGGMRzSFMqQMRS -jnWPtWssCtWcmZbbtstvnrrvhVBhTNNhBHlBlL -DZwNWPDzPVWbJngrQjrNnrQcMg -GRRfttLBhhvTvmLmFcFcgFFSnjWrnsrG -TLthBWtTRLHqhlLLfmhBqVPDJVdPwzJCPPZHwdDdVd -GGVhrVSMQwQqfVssVvnWFgvgWn -jtlcRBBtQRmpWsjzFCvzWnvF -QPcRbpppDmNDtPPblZMfhZdDwdMrqSSGrq -ZRrdtBdQvQsWnnfWFZsF -bJLcMzNDLbMgwfnGMWFv -lpvhmzNDmDmlNbzbmrVVPrHRCPHQBVCP -rZllQrsRWrlQswccMVbGbVbTdcQQ -NtJCntLSHCjznfLTcGGGqWMdWM -jCtzzSFthhSSSjPJrFDlvWrlDZRpwpRZ -mQmbLjbrLQjLmTtwwWBTTvWjtt -BHSqdHclHHNFlppNqWPwfwDvTfDPPtCw -ddSGMGHcdcMhMZnBbmbZmgGJJg -lvvBzvDnlzjfPnfjnQPlldRbVbRqbqqCgsqqVpQQgVqc -NNFtGNMtTNFmJNGNZtZMwVRTTcsCpVTbbgCbgRhscp -FGNGZMtNLWmmJWGFWJGLSNtPrPnBfDzzvjnDBzpnvDBLnv -fwvQRFQvQqwpwNJrwN -BstDnBjhjBhnshSptpJzWqNppbfr -CsDjCdZcBCDcjnfDHfhnfggZMGlgQVmgMTRmgVGMMl -MwlBVqVlsgnmzwJsvjhWZhGPvjvRRWzG -QNQpQpftHdHHCHGfSpCrQNdSrDRDhchhjvjcPrRRWrPvhZjv -LtLSCTSGfHGdGwswnqsggssTqV -qDDCHjzjznTvWshZQWfnZZ -PFFmmNMMtNMVFtczcFPJNrLhZwQZQsSvvSvWvGQQJQssss -tFzrrPPNNFlzVrpRTpblRDqjTpDC -DWDrrBdpmdpBrCgDthdtfcHsqJsCqscqwfsjzHcq -TNLNFNSTQNQTSnlMcczVJjVzsqLDDfJJ -TFPZQRvvlMSPPtRWDtmDRWrBGr -LWGVZdrvWdpLGWRsjPMsHmdHdHldlj -zJzznChzzzCSfTgMhCPDmlDCbmlsmjDDQj -nSTTJhJtnShNtzwhgNrGRRWZZRvMWMtVrqGp -PbPmtNmBbPlqBvqlDJBT -LpGVDzVpVZqqSTvq -pMnWGLRLRppnGpGndrGPtgDCjMPmbPgCQmPPNN -sqcZcbZZpcZspcCCRMmznWGWdLWhwDRGTTWggT -NjFSJgVHrvfVtrGzWdSznDwLSTLn -jFrBNVVjBFNvHrFHBlBFFpMslPgPcpMPmcQPPZCgpP -frddqsThtsTfTbPcvhsrbsRLpRBNRpmDpGmRGcRNLpGp -QWJHCJwWzlHZQZHQCJJRzRqnLDGRGpnGBRnNDN -CVwHCClJjQgWCZVZQgMwSdthjrqvrSPPhdbqtPhs -TvdphBBhhhCgdLNNJJJLWz -fVcsqRVrPcnJWgDnJN -JlqsRJtssZwqwVtPwltRPsHHbFTwTFbpjHhQjTQbvpTF -cQSnPDDQJGNzwnNpZb -RHDrssVRDHRgsRFHRlrVwzzpNGZlfZdppZdwGNZb -sHCHtDgtCjVVLFChqPMhBCMcSTqB -hdbQbqcCCQcqFbCbVdcWCQQlRMBtGlRHBtBMpHhpHThZMR -LLsSLLfgJPrgPnssnmlZtlZpHGHVGfZVtZpl -PvmvgmvvnzmrSsSLJDqDNzqFDQdDwzWWbV -HNNjnLbpLGHvWJDhdWWPpWDW -lVcSNgcSVclhRlPZPRCDCR -cqmSQrwwrrVSrtQFqVNmFwjQnvjHzBbLLGjfjzHTzvnH -QmvWVppPHQQvbbvmSHSpPzfzwnWMTZFFzwFMCzLnwT -jGBljlNNjgDtGDrNjjtjqqDRnMzRLnFzCFnMfRfMzCnttF -jqNrrGdJcdgLjqDqBrDQbbmhdQQmmpPbphmbVv -ZHQCggVHHRDWvbfjGptVtLvL -nnFwnwrDDMShnhFrFLLLpjvPlPGGtLGb -dcNSMhrrTDCBCsWgCTQW -HqDDLGtDdCnhfDnwnV -PmlJsJTPlbdBTzTnzhnnCCWWzV -lSPjMScggsScgjSMMbqHLFGrRLGHRZZtdrcG -ZVVtNNppdZSdLtCPqnHhqJJFtb -zgwwQBfwmGgSrDfgrrGBggzHCnbJbqbCJFnqhHBhnHHCqJ -rvrzfmlRrgDgmrzfggvwzvdjjcccLjMjVcVcsVLjVSZR -dppcLRHpphchhNhSddjzHzWQWQLtrMsrWQCWCsMZssCZ -JGfBfJJfBqvGVlVbDBwDBDBfZnrQsMQtssMttssDsQMWZncn -qPVwlgPBmjpPhcmS -zGPnzBgPzPnPlHZlDDHnZBNCvrtcjcjmMcFzNcNFmFdc -qQpfsLTTSspqTfJdmdCtMjdtjvJcmr -bfQqqSrswLLrfpLTqprfTnDVDVBBbgHPDHnhDPgDbV -JssTnsdFztZLdNJnNtTsLNZGqlbGFBqrGMHqHBcFBqMFMH -CCgSfgPSvSfhpShSRppCdfrlqGHGGcHmclmqbbqbqlPc -wvVSVjQSSQhRVvfQChvZZsdtJstjLNLZDJnLss -CmfNNNZNqDrnDjMhZM -gdczzGtdFcddtWQgGGMnVhnjJwnrJFDPTwMP -dlvcdzdHtzQSLRSfmhLSqv -ZpFFLcHFZZRRmJVZgD -PzhrtQntzcrjCRJtbtRgBsBRVR -zdzWfCzhQzlhWfWhlvpFNlpSqcMSHHMv -NrrMgMhNQhNjQrtqtPtwVtZpggPw -TfRLndnLFCRFTFbbRDHwpVqqBBwsHwZsfH -TJFRdLlRThrlcvZcvQ -scrwRVjbQvQBzsBC -gMfVqNnVmnCBQDTvdn -SMqhWqVlmWSmqMVRSJjjpcFrcLpJrR -HtSQHQntHsHMrtHnGfHQVVzLvSBSVvVVSFNJzzVN -cmPRmpqlpPmcgTlTpjJNjjVDvDRFNVVBFD -hlmCpmqmpgqpZTlcdQHFQfbHHZttwMQwtr -VpWgbgfwCjbftwVPPpGQFQhzTBQTBGPzqFTS -dbRbDcRrsnsRrLZmLRDZldDZqTNTGqqFFzGGhSTNTFTzNmNT -MlLdHlDDHrHclMMrCwgHCCwWwCbCCjjg -GGNLhfDMVcVrcGsT -jSJQFjHbwPFSvQSHwZFvHSHrqCCrrTsqBwNBrcBNsVTsqq -QjZSjZJZPvNRZJQPnSZbJZRWLfnmgDlmhdhWgWLdMdfmhM -CgGnzPNggCJtNTgTZTPZzZZvvcDcDDdqDFcJssJDHDqvHq -jhhrrLVlmLRRnRflfVbFHHHqdVsDqcvbHVDb -jWfWwrlmRRnQmPzZNGZPBNCQTB -NzDDhwNmhvtrGmNCvWRVbcRRVTcHHcVFTbwV -LgsPlLsQgQdJsLdldtpgFFTMbnFqTcMbHqFcPncq -dgsJsLLLggljrhtGNNtSjvGm -ptzSrZtzhsmmtPrhLFRFnjnnLMsnfLRL -HvwVDHwWWgGDGdHgqVDWDMnRnTjFNTNjfLJvRRRRRR -DwDgWgQbDDDHwBBBWdwQGVHhlhlZZSSmztfcppSBhzZcZp -CWmWRzlMJqWDWqCJbqDlCBBVLMQHVMGrfMVtQZrsLL -SnhPdFFPNZsBBdHtVQ -SSPcFFgnwnSpwvcSjwzCqRzTmJbpJCRBmbbD -wQbqGWWSqwrbGWWWGjbNMJPfgfnnDmPnPNLfjN -tJFztRZCvVRCztZFZRVgmMhmgNLfRfnmDPNPhm -BFCVZzpVFlHCdbQqcTcGlJbbSG -tttfLPZZQZTlZPHHPWgMVvBnjmvjnjgGBQ -FzcNDDDrNzprrrshprhFJtVGVnjtjGvnhvVnnjnjGM -RDqJNszDPfdqPtlT -QCJdMjCQbdBjSbTHDsbWDDwHTP -zlvlmqzqGfgdNzLldrHwwPGpWDrPGZWprr -gfVfRczVqcRzmdcSQMjQSQCSjQCQ -RhhCGhRBShjjRfpwppFTfFHZHZZD -qzdqzlnPPctPdmtPdTZbwQvvwqvHHvZpwZ -nVTVTcsWmWSRhhRVrGVB -GmshRMnzqRGsPNwMwcrrpcVV -CDCbFCLvCgfDSFLslgDpwpLtTwwcPtNNtTTprt -JvSFbSbbFllJlgDvlJbgdRhRdqzBGnzshZnRRRnHBZ -ShJhtcsvvvQbnnsccVTLVTppWqddpVnLWp -NdzPrPZgPMNNrmzpTzpTCjWfzCpzVL -dZgHmZRPPZRlZmrPDtDRccvbtQQbJbRS -wqjLjwhznhBLqLWGfvSlvcmlrJsqrtJTJJ -PwbpFPQDRCDrDJTrTmvs -gbZVFbZHgwHbCdpCRMnffNLhWnnzMdzLLW -RVVGSNTTRlNqHblBNB -JfwJMvLLZwLsMJwWMJfwLHBqzFlvzpBQcqzblFbBqblq -wMCZJsgJCCCnsMHrgLLjSPSVTgShtRjTPhRRmt -lmQSSWdMHHLWgWqD -ZZtVGGGJrJvGVCwfgHNLccmNFFcqtc -vrCGPhvrTPdRBnsRTmmp -dDMDDjzCQjwCCcDgjSLLLsLNlmpplN -FqrHFTFRLCLVFBmS -JhHJhHRThrfPZPvhnTZZbWdwdwDDWtDzJDtbMtCW -ghwDzJRDwHmPthncSPncLLsPcvnv -MWCrNTCHrMVjQQMQcSdnpTLnFFdTcnTc -qbWMfWfNrWVQWfbjVBbqMfwDtqzmhmRRzGhtHhHhRwZh -fmSmnjTjrlzGlTzJdH -BrhRRQMrgQvgFFhQQbwpFvGGdZqZJqpJqHVpJGJLHdLJ -ggbDwQMsvsMQrFMFcWSPSCPmSsPfnnmP -cmNVbMrrrjcHDRcvfW -wQGdFfSThFsLhhHWvDCWDCJRCCjd -LtpStGhqrrpnfnpp -bvcccTqbgvpGndJtgdsgNd -wDQwQhtQhQRmSmjsJndJdBBJBJnlLS -hwhmRrzFVjtwzDmrVFrvPCcCMVPPvfqpCCTVVb -jRrRNPNRWjPRWPRQNjQjThTCzBBzDCFBGzgDFGGQ -dnppLwmwCnvtlqltvtnTGBThGhdFZhgzDzGccD -MvnqpLlMqCqCHMjWPPHMSHSs -NNpNNvpvBdtTrMFFMhSSwzjzchzwhzwL -VVndHqflQZZZgHSLLhjzRSmZRhcR -glGgnqbQlngnWCGJpJprtrtFrdPPGs -WqwRjzGtRzZZRRGjWBJzjwmfMTHGGssTTDsrLmmmQLMD -SNdvSdFlSNNhSPFFcPFclbQQslHmfHTDsTQMLgDTmHQQ -CNcCFvpdnWpjWwJf -PVPnVHcnRncGZqbVzHVPnnLbSMjwrzWMjSwDtWwWtwWhwDWz -pTfsQCshCllpglWWSjBMSQSrMrjM -hvpvppggCpJTvTmshgfsmZRRHqbcLPHZmPLRnmPZ -LQbhVZZmZhZjBdbGmgHqnHTmvqgnnWHr -SzCfDFFNRfsSFFMFfvprvpWzqzgqTwHTvp -CDNDFJgMDSQhjVdPJLQG -plpdLdpjjrrHJJjLrrHLFdbzzCcvzgFgcwggzPMFvvcMhM -GRtSBQNsQlMPRzRlzw -ZSTtsmBlmjLLpnpH -hglGNVSdNSghzSgCBhDFLBMBtFMMFtHtbtLL -frQZccRcqGFmFHrJ -nvfGZwvTwGTfQwvfTwfgnCSlpdnzgzslppCsCV -snTSPbQnTTnQgbmsTJsLfZwjffhpLnGRjpGfjL -dcNWcNHHlNtWHHlCtltWNFNMLZwjpGfpmrZfrFprrRGpwZfp -HmdNWCmDMVvQPDgqJs -GGFtSngQLfnSnQffgPnRgFRGRwmRJvwbBbJDwjvTbjrwhJvJ -WHClslcNNWcqNWlCZdcHsVrThBwBjbhDTDBhrvDZJTwm -NWVqqcHHNpsNcNVdVlhCMlHQQMQQzLfzQPttFGPMLSLgtF diff --git a/day-3/main.zig b/day-3/main.zig deleted file mode 100644 index 57057bf..0000000 --- a/day-3/main.zig +++ /dev/null @@ -1,46 +0,0 @@ -const std = @import("std"); - -pub fn puzzle_1(input: []const u8) u16 { - var iter = std.mem.split(u8, input, "\n"); - - var count: u16 = 0; - while (iter.next()) |line| { - var p1: u64 = 0; - var p2: u64 = 0; - - for (line[0 .. line.len / 2]) |_, i| { - p1 |= @as(u64, 1) << @intCast(u6, line[i] - 65); // 65 == 'A' - p2 |= @as(u64, 1) << @intCast(u6, line[i + line.len / 2] - 65); - } - - count += char_to_priority(@intCast(u8, 65 + 63) - @clz(p1 & p2)); - } - - return count; -} - -pub fn puzzle_2(input: []const u8) u16 { - var iter = std.mem.split(u8, input, "\n"); - - var count: u16 = 0; - mainLoop: while (true) { - var parts = std.mem.zeroes([3]u64); - - for (parts) |*p| { - const line = iter.next() orelse break :mainLoop; - for (line) |_, i| { - p.* |= @as(u64, 1) << @intCast(u6, line[i] - 65); - } - } - - count += char_to_priority(@intCast(u8, 65 + 63) - @clz(parts[0] & parts[1] & parts[2])); - } - - return count; -} - -fn char_to_priority(char: u8) u8 { - if (char >= 65 and char <= 90) - return char - 38; - return char - 96; -} diff --git a/day-3/util b/day-3/util deleted file mode 120000 index 40c3fc5..0000000 --- a/day-3/util +++ /dev/null @@ -1 +0,0 @@ -../util \ No newline at end of file diff --git a/day-4/input b/day-4/input deleted file mode 100644 index cbdde37..0000000 --- a/day-4/input +++ /dev/null @@ -1,1000 +0,0 @@ -16-80,80-87 -4-9,10-97 -6-94,93-93 -31-73,8-73 -4-72,5-73 -6-63,4-5 -3-44,4-45 -89-96,95-95 -56-95,29-95 -5-22,5-22 -49-63,48-63 -97-97,2-98 -1-13,3-63 -63-93,64-94 -41-63,64-76 -24-45,46-72 -28-94,29-78 -18-36,35-37 -83-85,8-84 -22-35,21-22 -18-48,18-18 -98-98,1-99 -88-94,94-96 -21-93,74-93 -63-83,62-82 -89-90,15-90 -63-80,61-79 -12-14,19-63 -30-30,31-78 -7-88,87-88 -27-41,27-27 -6-35,6-36 -3-78,77-79 -4-67,22-57 -19-82,65-87 -3-93,6-46 -18-30,31-41 -14-95,13-94 -33-59,17-33 -37-38,38-96 -1-5,4-90 -64-79,39-84 -59-62,1-37 -15-29,2-9 -38-44,37-43 -8-75,9-54 -77-89,7-77 -2-87,2-86 -7-81,6-6 -59-94,93-93 -27-75,9-27 -24-76,23-75 -2-10,28-63 -60-61,17-60 -76-76,2-75 -12-60,13-61 -39-96,95-95 -31-88,88-94 -6-79,35-66 -51-93,58-94 -40-74,23-40 -12-62,13-65 -30-49,49-69 -36-98,10-98 -29-95,9-95 -8-79,79-86 -1-73,2-19 -8-15,14-16 -6-34,1-5 -38-58,37-59 -58-84,62-84 -26-26,25-27 -5-89,47-88 -36-50,34-49 -59-94,58-95 -67-71,68-70 -3-64,3-65 -65-93,94-94 -38-91,75-95 -97-97,6-98 -32-78,33-79 -20-89,19-90 -34-95,35-95 -3-99,2-97 -29-90,89-89 -31-48,32-49 -63-81,51-72 -6-96,98-99 -8-94,27-94 -7-99,3-99 -19-90,18-91 -28-97,27-88 -76-86,40-75 -7-65,6-8 -2-12,13-26 -83-88,60-86 -54-99,54-97 -6-7,6-97 -11-78,77-77 -3-99,3-99 -21-21,21-88 -11-20,2-50 -53-88,89-98 -52-97,52-98 -8-29,4-32 -88-89,6-89 -7-62,6-7 -89-98,8-89 -32-91,3-91 -39-49,48-50 -8-63,9-64 -23-80,22-79 -44-66,16-65 -44-58,38-58 -71-98,70-97 -4-99,5-99 -8-90,5-73 -51-98,77-96 -26-89,25-25 -8-25,14-65 -39-64,45-65 -30-94,59-92 -37-96,3-38 -45-72,22-44 -2-95,98-98 -35-35,34-34 -16-82,14-44 -66-79,65-78 -71-72,72-94 -14-21,13-20 -14-92,1-14 -24-69,68-88 -21-80,79-81 -56-86,69-85 -48-85,49-85 -47-90,90-91 -7-22,11-27 -97-98,24-92 -7-91,90-91 -46-58,58-69 -83-92,91-98 -27-66,27-66 -13-92,12-97 -84-86,17-79 -55-91,54-56 -2-87,2-88 -46-46,46-78 -97-97,92-98 -24-47,25-46 -4-22,21-27 -76-87,11-77 -17-87,16-18 -50-81,49-87 -93-98,29-93 -19-44,20-43 -18-53,53-57 -9-45,9-46 -7-55,33-55 -22-25,25-81 -96-96,75-97 -9-11,10-99 -27-73,72-74 -10-72,71-71 -65-66,64-66 -27-81,86-96 -33-37,37-68 -26-90,46-90 -1-4,4-97 -9-95,10-95 -6-32,7-72 -68-89,12-95 -2-98,13-99 -89-91,55-90 -7-23,22-67 -11-11,11-68 -86-90,72-91 -33-53,29-29 -80-91,6-80 -15-87,27-73 -1-99,1-99 -68-69,64-95 -17-62,45-61 -7-26,26-30 -64-96,95-97 -17-18,18-58 -20-97,98-98 -4-87,5-87 -15-19,18-19 -66-67,23-66 -13-95,9-94 -14-81,82-85 -12-85,8-85 -4-91,3-4 -98-99,31-95 -3-77,2-76 -15-97,5-15 -45-72,71-73 -3-70,2-4 -81-97,18-95 -68-83,17-84 -1-3,4-77 -33-92,91-91 -31-91,30-32 -45-64,46-65 -23-94,89-95 -5-76,5-58 -5-86,3-86 -31-69,8-69 -66-69,66-68 -50-64,63-64 -1-97,99-99 -76-77,75-80 -90-97,88-97 -22-52,11-30 -40-70,40-98 -2-96,42-99 -4-49,1-59 -20-75,74-76 -23-52,42-66 -3-94,92-96 -4-93,2-3 -4-92,3-92 -57-75,70-76 -4-95,2-5 -1-41,2-8 -94-99,2-81 -45-63,10-63 -3-8,9-45 -17-50,17-49 -43-76,42-76 -2-86,85-87 -27-29,28-42 -74-80,37-53 -19-97,13-99 -9-31,9-31 -37-39,38-59 -26-79,15-91 -85-85,31-86 -99-99,5-96 -10-39,9-16 -22-60,22-59 -13-95,1-12 -91-93,23-93 -77-98,19-78 -53-93,93-98 -78-80,27-79 -23-25,23-24 -12-62,11-13 -4-48,1-73 -6-63,6-63 -35-86,34-36 -5-27,4-27 -23-73,5-83 -28-34,21-38 -36-93,93-97 -16-84,17-84 -12-99,11-80 -33-81,20-32 -76-93,50-98 -30-82,33-93 -1-99,1-99 -61-68,32-67 -20-84,20-83 -7-13,6-13 -51-52,7-52 -27-67,65-65 -1-91,90-91 -81-98,86-98 -93-97,48-93 -4-53,5-53 -68-76,18-74 -5-21,1-6 -19-97,18-98 -2-65,2-66 -4-72,4-73 -5-92,65-75 -9-77,23-76 -17-89,17-89 -57-60,55-59 -2-90,1-1 -28-81,28-81 -34-56,48-85 -2-97,97-99 -42-43,43-99 -17-60,15-19 -62-99,6-62 -32-41,25-44 -4-37,7-36 -22-72,71-73 -24-32,24-33 -44-78,44-44 -1-32,32-65 -47-95,14-95 -47-77,46-56 -5-97,3-99 -20-99,21-98 -9-65,8-65 -88-96,23-96 -15-64,9-64 -1-24,25-64 -71-91,90-91 -51-52,39-53 -10-57,9-19 -8-86,7-87 -3-7,8-78 -13-17,16-49 -6-90,7-72 -6-86,4-85 -17-93,16-94 -7-83,82-83 -33-81,32-62 -13-99,19-99 -26-98,88-96 -48-98,97-98 -36-50,49-50 -1-75,74-75 -15-95,2-15 -51-58,16-51 -1-98,6-98 -2-99,10-90 -13-97,96-96 -50-70,43-70 -15-33,14-16 -8-89,7-44 -44-91,40-44 -93-94,2-96 -4-88,5-89 -15-73,73-74 -96-97,97-98 -39-57,56-85 -65-67,47-66 -26-27,27-78 -57-80,57-80 -97-99,2-98 -18-18,18-18 -27-47,27-48 -86-93,90-97 -19-47,10-48 -62-78,28-78 -93-99,3-93 -55-59,55-78 -98-99,89-91 -34-35,7-35 -78-88,21-79 -26-92,15-33 -57-64,38-57 -47-92,91-91 -14-38,13-13 -96-99,40-96 -55-84,25-82 -56-76,73-86 -10-82,26-81 -30-89,31-89 -24-68,25-68 -11-44,12-45 -33-49,11-49 -58-58,18-57 -23-84,23-85 -3-31,2-2 -50-96,41-96 -5-98,1-6 -10-97,11-97 -36-91,38-91 -9-88,20-87 -6-96,6-97 -28-87,74-87 -6-77,1-78 -6-73,6-74 -66-93,18-85 -5-80,66-80 -12-95,8-95 -68-89,18-68 -6-15,14-16 -4-87,4-88 -50-50,24-54 -96-97,3-96 -3-46,12-50 -77-87,29-34 -32-53,52-91 -10-68,5-68 -40-54,47-54 -8-22,9-16 -96-99,2-97 -10-63,6-9 -22-65,64-65 -88-89,87-90 -15-99,98-98 -89-89,66-90 -9-65,4-10 -36-61,39-39 -78-99,70-78 -85-87,86-97 -3-73,67-82 -3-68,68-69 -14-15,15-90 -42-59,43-59 -15-60,3-4 -25-92,29-79 -19-99,18-18 -3-88,10-76 -61-98,97-98 -2-92,1-7 -24-86,17-24 -82-82,3-83 -23-25,20-26 -4-65,1-66 -68-72,34-76 -24-93,25-94 -17-47,18-48 -30-65,30-65 -71-77,75-76 -24-64,58-88 -4-30,31-31 -4-65,5-66 -12-65,64-64 -52-52,51-81 -67-69,2-68 -6-81,8-81 -53-88,52-53 -70-98,69-98 -13-15,14-79 -15-71,14-86 -31-65,31-64 -59-86,5-86 -8-9,8-15 -94-96,63-78 -28-49,27-82 -3-3,3-95 -74-74,75-96 -82-96,97-97 -18-83,6-98 -1-74,3-41 -25-87,24-88 -42-96,95-96 -25-89,26-35 -35-61,35-61 -20-39,22-35 -4-65,3-5 -48-97,46-67 -37-73,38-73 -42-45,42-43 -54-85,84-85 -23-61,20-23 -23-60,22-28 -41-63,23-41 -68-90,69-89 -12-97,2-33 -8-83,25-83 -6-12,5-15 -37-67,31-68 -1-2,5-81 -63-89,62-62 -63-90,4-63 -8-95,1-7 -47-72,41-44 -93-94,19-81 -86-88,25-87 -57-57,57-88 -13-94,13-93 -16-17,15-16 -61-80,58-81 -4-96,3-4 -12-28,31-54 -57-96,56-57 -16-89,17-19 -71-87,70-90 -79-93,78-92 -31-38,32-70 -16-17,17-75 -76-92,91-95 -77-77,56-76 -63-90,62-66 -6-86,2-81 -3-42,4-41 -38-94,93-98 -52-60,52-61 -17-84,16-84 -5-5,13-90 -25-25,25-39 -22-91,22-90 -11-76,10-11 -9-45,2-45 -70-77,69-76 -6-10,5-7 -36-36,37-42 -12-96,54-98 -2-96,1-1 -2-94,5-94 -32-84,83-88 -84-84,84-96 -17-54,53-54 -1-68,14-69 -9-98,8-97 -1-88,85-94 -40-69,39-39 -5-21,21-76 -27-28,5-28 -2-80,2-81 -15-96,9-15 -87-89,2-89 -19-84,33-92 -32-95,11-95 -38-53,17-37 -67-89,67-90 -4-5,5-60 -45-84,83-88 -9-32,77-86 -45-72,16-65 -23-24,23-92 -8-93,92-92 -7-91,7-90 -45-48,47-78 -58-58,4-59 -86-91,13-87 -79-85,28-79 -12-13,10-16 -62-99,98-98 -25-96,25-96 -16-57,56-79 -38-77,38-76 -82-97,68-83 -7-66,56-63 -5-7,6-95 -15-93,8-15 -9-93,10-93 -74-90,51-91 -69-75,63-80 -4-11,10-91 -36-99,33-53 -8-8,9-95 -94-96,95-96 -1-38,37-38 -66-77,67-78 -65-87,87-95 -35-37,36-48 -55-92,54-93 -20-21,19-21 -76-76,77-98 -39-69,44-57 -6-26,25-54 -18-37,36-37 -34-74,45-57 -60-83,98-99 -92-94,3-93 -13-59,12-72 -48-98,6-87 -17-88,8-87 -24-92,23-93 -98-98,4-94 -11-57,8-8 -65-87,12-87 -25-99,25-98 -18-88,18-87 -34-80,33-79 -45-96,5-97 -33-67,20-33 -2-98,97-98 -32-33,33-90 -85-90,85-91 -94-94,38-95 -93-93,42-92 -38-48,13-78 -3-95,25-89 -17-93,16-16 -57-70,39-53 -11-61,7-10 -39-89,6-39 -7-17,16-97 -30-95,56-94 -2-8,8-23 -4-17,17-45 -77-82,73-77 -21-84,8-29 -35-91,81-97 -5-54,3-9 -1-94,2-95 -7-66,67-96 -21-45,15-22 -6-45,11-44 -52-87,29-51 -15-82,46-81 -74-76,45-75 -95-99,20-93 -40-89,24-52 -20-99,20-99 -5-34,35-97 -27-45,44-62 -8-75,2-8 -50-55,43-49 -15-50,19-50 -13-71,10-71 -45-64,44-45 -88-92,47-88 -33-68,33-52 -39-79,31-88 -31-58,95-97 -22-31,2-31 -36-88,37-89 -45-93,44-92 -6-97,96-98 -34-72,10-82 -54-58,31-58 -96-98,6-96 -45-46,46-96 -56-69,55-68 -14-54,13-53 -25-45,18-81 -54-55,40-55 -94-98,72-94 -7-91,6-92 -69-96,68-95 -42-82,41-46 -64-94,13-91 -52-80,52-81 -39-69,15-73 -32-53,33-52 -11-22,11-21 -15-79,14-69 -44-65,51-66 -1-32,4-26 -36-36,6-35 -65-71,65-72 -49-74,23-74 -27-96,74-96 -12-70,13-71 -64-66,7-66 -17-97,18-99 -30-30,31-95 -94-96,90-94 -1-15,15-15 -11-45,7-10 -14-93,15-93 -19-47,20-44 -9-97,8-98 -6-62,61-63 -21-51,50-63 -4-95,2-95 -54-55,55-58 -4-62,4-63 -18-88,18-87 -4-79,5-79 -92-97,10-93 -9-79,20-78 -44-87,26-91 -7-51,10-51 -43-92,62-95 -16-44,16-45 -5-98,4-99 -20-64,19-63 -2-20,1-19 -12-96,12-95 -13-94,95-95 -16-46,8-87 -5-24,25-54 -4-12,6-18 -32-66,31-37 -24-76,56-96 -5-51,4-51 -55-60,54-55 -11-74,6-7 -6-99,53-68 -15-90,88-91 -27-84,28-83 -14-67,3-98 -41-56,30-54 -29-52,29-51 -83-89,12-85 -47-76,40-64 -18-70,18-18 -5-20,6-21 -26-53,25-53 -36-48,49-92 -48-80,47-48 -51-63,17-58 -9-79,47-80 -38-39,7-39 -38-58,23-51 -19-37,36-37 -1-61,1-60 -9-65,8-65 -15-17,16-95 -50-66,50-79 -18-39,17-18 -7-14,13-98 -5-80,5-80 -12-98,12-12 -5-6,6-99 -72-91,24-95 -46-92,20-96 -27-73,26-49 -7-52,52-98 -20-57,2-56 -1-69,6-68 -52-95,53-95 -58-71,58-65 -20-86,20-86 -50-71,49-49 -9-79,8-78 -45-62,25-45 -15-23,18-24 -4-96,4-95 -13-97,12-97 -1-99,15-96 -52-54,53-54 -7-10,9-42 -12-79,11-78 -1-88,1-89 -23-95,24-94 -5-96,5-96 -27-73,64-73 -31-97,74-97 -6-74,74-90 -29-91,14-30 -16-36,7-37 -70-83,69-82 -58-96,30-97 -9-89,51-64 -63-88,87-99 -9-22,9-21 -25-99,22-22 -60-60,21-61 -31-83,32-88 -31-65,64-97 -9-9,9-91 -10-47,9-21 -14-97,60-83 -5-74,5-73 -4-7,6-89 -1-94,50-92 -12-69,11-12 -75-84,80-85 -27-38,18-39 -11-27,4-12 -93-96,5-93 -56-88,88-97 -45-99,20-95 -21-93,94-94 -16-96,15-16 -86-92,6-84 -10-63,3-7 -23-59,58-69 -10-13,12-12 -15-97,14-86 -15-98,4-50 -30-30,22-29 -44-58,45-58 -85-87,42-86 -58-59,16-59 -14-63,8-14 -48-64,48-64 -1-34,1-33 -75-99,76-98 -8-60,1-8 -3-8,7-9 -22-70,1-71 -38-93,93-99 -91-93,62-92 -95-95,6-96 -4-92,4-92 -35-99,36-84 -53-94,51-51 -27-93,27-94 -3-5,4-55 -88-94,44-94 -79-95,85-94 -11-23,23-46 -62-88,89-89 -1-84,1-85 -84-86,85-89 -1-99,1-99 -64-81,46-64 -25-26,25-31 -17-92,3-4 -7-51,16-24 -17-97,85-99 -5-5,6-91 -73-91,90-91 -18-65,49-64 -1-93,92-92 -5-97,96-97 -7-14,13-14 -42-73,42-86 -40-48,34-48 -22-94,21-93 -5-71,70-70 -74-92,11-91 -90-92,5-91 -53-58,16-59 -20-78,8-78 -3-5,4-4 -48-50,49-95 -71-88,44-45 -30-39,7-30 -11-69,40-69 -7-85,82-90 -75-79,53-67 -6-84,83-83 -86-95,88-96 -3-46,2-47 -3-86,86-94 -50-98,46-50 -24-45,23-24 -44-52,4-91 -38-67,67-99 -70-93,34-94 -40-86,40-40 -5-71,9-58 -31-71,31-70 -11-50,49-64 -34-39,35-45 -45-72,38-44 -68-73,72-72 -63-64,15-64 -91-91,31-90 -15-86,10-85 -6-17,7-8 -7-96,53-99 -88-88,28-89 -22-65,18-22 -13-95,99-99 -23-99,22-99 -55-62,33-55 -8-85,47-84 -13-81,14-22 -7-90,92-99 -11-47,13-77 -38-64,20-65 -58-61,2-62 -19-27,11-27 -30-43,29-34 -74-95,93-95 -66-76,62-87 -88-88,89-89 -45-80,45-80 -31-76,31-87 -37-84,37-37 -81-81,66-80 -41-85,19-42 -19-47,5-18 -50-75,25-75 -91-92,46-91 -65-84,3-47 -32-34,32-33 -36-60,5-61 -11-98,12-99 -27-74,27-74 -4-41,31-93 -46-76,45-74 -12-38,26-38 -5-80,5-80 -5-99,6-99 -49-90,49-49 -5-85,1-4 -3-99,4-28 -21-39,1-21 -46-86,45-69 -73-92,73-91 -2-97,45-97 -1-81,3-60 -44-78,17-78 -11-78,77-79 -18-51,52-75 -20-82,20-82 -43-55,4-43 -2-33,3-33 -11-16,4-10 -26-34,27-34 -85-94,93-93 -20-30,13-31 -42-90,42-89 -30-45,46-93 -5-99,4-95 -51-51,51-52 -95-96,38-96 -20-72,19-98 -31-86,30-86 -42-82,43-83 -15-89,21-90 -5-98,5-98 -7-96,37-98 -28-29,28-62 -4-89,36-89 -2-98,71-97 -28-90,8-17 -72-73,45-73 -95-96,82-96 -4-60,59-77 -20-63,64-64 -2-24,2-46 -26-67,26-68 -52-53,32-53 -24-99,79-88 -60-62,23-61 -2-96,3-97 -13-92,29-71 -1-2,1-85 -9-77,44-99 -1-96,3-96 -1-68,4-67 -52-60,12-61 -10-90,10-90 -66-69,41-69 -99-99,35-97 -15-95,14-95 -93-95,80-92 -7-41,8-42 -1-94,95-95 -3-32,1-32 -80-83,17-84 -53-69,68-91 -86-90,2-87 -73-87,28-86 -8-35,7-34 -74-88,36-74 -45-45,44-68 -67-88,9-66 -54-90,29-91 -13-45,44-94 -70-71,24-71 -82-96,81-97 -43-73,42-73 -8-45,39-44 -5-42,6-43 -54-93,5-55 -75-96,75-96 -11-31,3-7 -82-90,81-82 -33-77,54-57 -77-79,73-79 -34-90,33-56 -4-13,13-49 -3-19,18-97 -3-97,2-99 -28-51,19-29 -77-78,5-94 -9-11,10-11 -51-69,51-68 -34-73,46-52 -25-96,96-98 -1-55,2-55 -20-81,26-70 -91-97,79-92 -22-74,9-22 -3-97,2-3 -39-94,32-93 -66-95,96-97 -10-10,9-11 -30-65,21-40 -2-94,4-93 -1-91,2-90 -31-84,84-99 -82-95,6-75 -67-91,90-91 -12-12,12-97 -7-75,6-7 -28-28,14-27 -45-50,35-49 -43-72,71-73 -59-73,21-73 -58-75,39-82 -96-97,96-98 -97-97,2-98 -6-92,3-7 -84-86,27-85 -39-95,31-45 -27-84,43-95 -48-95,33-95 -47-55,46-48 -42-82,41-69 -12-96,13-98 -6-99,1-4 -62-94,62-94 -64-82,4-83 -73-75,10-74 -11-24,10-12 -23-54,7-23 -48-53,18-69 -7-11,10-11 -87-87,11-88 -50-79,78-78 -4-52,51-53 -81-82,39-82 -94-97,1-95 -15-75,33-75 -40-52,33-38 -34-71,70-71 -37-38,38-66 -7-43,5-6 -11-20,10-31 -19-98,1-4 -19-87,18-88 -94-95,18-95 -5-13,7-98 -45-73,32-45 -18-95,94-94 -37-95,94-95 -41-42,26-43 -18-92,19-92 -70-90,19-79 -16-95,15-96 diff --git a/day-4/main.zig b/day-4/main.zig deleted file mode 100644 index 6c0d193..0000000 --- a/day-4/main.zig +++ /dev/null @@ -1,47 +0,0 @@ -const std = @import("std"); - -pub fn puzzle_1(input: []const u8) !u16 { - var iter = std.mem.split(u8, input, "\n"); - - var count: u16 = 0; - while (iter.next()) |line| { - const range = try parse_range(line); - - if ((range[0][0] >= range[1][0] and range[0][1] <= range[1][1]) or - (range[0][0] <= range[1][0] and range[0][1] >= range[1][1])) - count += 1; - } - - return count; -} - -pub fn puzzle_2(input: []const u8) !u16 { - var iter = std.mem.split(u8, input, "\n"); - - var count: u16 = 0; - while (iter.next()) |line| { - const range = try parse_range(line); - - if ((range[0][0] >= range[1][0] and range[0][0] <= range[1][1]) or - (range[0][0] <= range[1][0] and range[0][1] >= range[1][0])) - count += 1; - } - - return count; -} - -fn parse_range(line: []const u8) ![2][2]u8 { - var r = std.mem.zeroes([2][2]u8); - - var parts = std.mem.split(u8, line, ","); - var p1 = std.mem.split(u8, parts.next().?, "-"); - var p2 = std.mem.split(u8, parts.next().?, "-"); - - r[0][0] = try std.fmt.parseInt(u8, p1.next().?, 0); - r[0][1] = try std.fmt.parseInt(u8, p1.next().?, 0); - - r[1][0] = try std.fmt.parseInt(u8, p2.next().?, 0); - r[1][1] = try std.fmt.parseInt(u8, p2.next().?, 0); - - return r; -} diff --git a/day-4/util b/day-4/util deleted file mode 120000 index 40c3fc5..0000000 --- a/day-4/util +++ /dev/null @@ -1 +0,0 @@ -../util \ No newline at end of file diff --git a/day_01.zig b/day_01.zig new file mode 100644 index 0000000..80bb649 --- /dev/null +++ b/day_01.zig @@ -0,0 +1,61 @@ +const std = @import("std"); +const math = std.math; +const Result = @import("util/aoc.zig").Result; + +pub fn puzzle_1(input: []const u8) !Result { + var iter = std.mem.split(u8, input, "\n"); + var count: i32 = 0; + var max: i32 = 0; + + while (iter.next()) |line| { + if (line.len == 0) { + if (count > max) { + max = count; + } + count = 0; + } else { + count += try std.fmt.parseInt(i32, line, 0); + } + } + + return .{ .int = max }; +} + +pub fn puzzle_2(input: []const u8) !Result { + var iter = std.mem.split(u8, input, "\n"); + var count: i32 = 0; + var max: [3]i32 = std.mem.zeroes([3]i32); + + while (iter.next()) |line| { + if (line.len == 0) { + const lowest_u = min_idx(i32, &max); + if (count > max[lowest_u]) { + max[lowest_u] = count; + } + count = 0; + } else { + count += try std.fmt.parseInt(i32, line, 0); + } + } + + count = 0; + for (max) |v| { + count += v; + } + + return .{ .int = count }; +} + +fn min_idx(comptime T: type, slice: []const T) usize { + var best = slice[0]; + var idx: usize = 0; + + for (slice[1..]) |item, i| { + const possible_best = math.min(best, item); + if (best > possible_best) { + best = possible_best; + idx = i + 1; + } + } + return idx; +} diff --git a/day_02.zig b/day_02.zig new file mode 100644 index 0000000..ce5e165 --- /dev/null +++ b/day_02.zig @@ -0,0 +1,110 @@ +const std = @import("std"); +const Result = @import("util/aoc.zig").Result; + +const Hand = enum(u8) { Rock = 1, Paper = 2, Scissors = 3 }; +const Outcome = enum(u8) { Win = 6, Draw = 3, Lose = 0 }; + +const KV_Hand = struct { @"0": []const u8, @"1": Hand }; +const KV_Outcome = struct { @"0": []const u8, @"1": Outcome }; + +const Player_A_KV = std.ComptimeStringMap(Hand, [_]KV_Hand{ + .{ .@"0" = "A", .@"1" = .Rock }, + .{ .@"0" = "B", .@"1" = .Paper }, + .{ .@"0" = "C", .@"1" = .Scissors }, +}); + +const Player_B_KV = std.ComptimeStringMap(Hand, [_]KV_Hand{ + .{ .@"0" = "X", .@"1" = .Rock }, + .{ .@"0" = "Y", .@"1" = .Paper }, + .{ .@"0" = "Z", .@"1" = .Scissors }, +}); + +const Outcome_KV = std.ComptimeStringMap(Outcome, [_]KV_Outcome{ + .{ .@"0" = "X", .@"1" = .Lose }, + .{ .@"0" = "Y", .@"1" = .Draw }, + .{ .@"0" = "Z", .@"1" = .Win }, +}); + +const match_impl = struct { + fn puzzle_1(a: Hand, b: Hand) u8 { + switch (b) { + .Rock => { + switch (a) { + .Rock => return @enumToInt(b) + @enumToInt(Outcome.Draw), + .Paper => return @enumToInt(b) + @enumToInt(Outcome.Lose), + .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Win), + } + }, + .Paper => { + switch (a) { + .Rock => return @enumToInt(b) + @enumToInt(Outcome.Win), + .Paper => return @enumToInt(b) + @enumToInt(Outcome.Draw), + .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Lose), + } + }, + .Scissors => { + switch (a) { + .Rock => return @enumToInt(b) + @enumToInt(Outcome.Lose), + .Paper => return @enumToInt(b) + @enumToInt(Outcome.Win), + .Scissors => return @enumToInt(b) + @enumToInt(Outcome.Draw), + } + }, + } + } + + fn puzzle_2(a: Hand, b: Outcome) u8 { + switch (a) { + .Rock => { + switch (b) { + .Win => return @enumToInt(b) + @enumToInt(Hand.Paper), + .Lose => return @enumToInt(b) + @enumToInt(Hand.Scissors), + .Draw => return @enumToInt(b) + @enumToInt(Hand.Rock), + } + }, + .Paper => { + switch (b) { + .Win => return @enumToInt(b) + @enumToInt(Hand.Scissors), + .Lose => return @enumToInt(b) + @enumToInt(Hand.Rock), + .Draw => return @enumToInt(b) + @enumToInt(Hand.Paper), + } + }, + .Scissors => { + switch (b) { + .Win => return @enumToInt(b) + @enumToInt(Hand.Rock), + .Lose => return @enumToInt(b) + @enumToInt(Hand.Paper), + .Draw => return @enumToInt(b) + @enumToInt(Hand.Scissors), + } + }, + } + } +}; + +pub fn puzzle_1(input: []const u8) Result { + var iter = std.mem.split(u8, input, "\n"); + + var score: u16 = 0; + + while (iter.next()) |line| { + score += match_impl.puzzle_1( + Player_A_KV.get(&[_]u8{line[0]}).?, + Player_B_KV.get(&[_]u8{line[2]}).?, + ); + } + + return .{ .int = score }; +} + +pub fn puzzle_2(input: []const u8) Result { + var iter = std.mem.split(u8, input, "\n"); + + var score: u16 = 0; + + while (iter.next()) |line| { + score += match_impl.puzzle_2( + Player_A_KV.get(&[_]u8{line[0]}).?, + Outcome_KV.get(&[_]u8{line[2]}).?, + ); + } + + return .{ .int = score }; +} diff --git a/day_03.zig b/day_03.zig new file mode 100644 index 0000000..b33c5cf --- /dev/null +++ b/day_03.zig @@ -0,0 +1,63 @@ +const std = @import("std"); +const Result = @import("util/aoc.zig").Result; + +pub fn puzzle_1(input: []const u8) Result { + var iter = std.mem.split(u8, input, "\n"); + + var count: u16 = 0; + while (iter.next()) |line| { + var p1: u64 = 0; + var p2: u64 = 0; + + // A note to whoever reads this in the future + // A to Z -> 65 to 90 + // a to z -> 97 to 122 + // + // u64 is ok + // 90 - 65 + 122 - 97 = 50 + + for (line[0 .. line.len / 2]) |_, i| { + p1 |= @as(u64, 1) << @intCast(u6, line[i] - 65); // 65 == 'A' + p2 |= @as(u64, 1) << @intCast(u6, line[i + line.len / 2] - 65); + } + + // Example + // + // p1: 0000000101100010001000110000000000011000000011000010000100 + // p2: 1000001000000000000110000000000000000001011001100001100000 + // + // &: 0000000000000000000000000000000000000000000001000000000000 = 46 0s + // + // 65 + 63 - 46 = 82 = R + + count += char_to_priority(@intCast(u8, 65 + 63) - @clz(p1 & p2)); + } + + return .{ .int = count }; +} + +pub fn puzzle_2(input: []const u8) Result { + var iter = std.mem.split(u8, input, "\n"); + + var count: u16 = 0; + mainLoop: while (true) { + var parts = std.mem.zeroes([3]u64); + + for (parts) |*p| { + const line = iter.next() orelse break :mainLoop; + for (line) |_, i| { + p.* |= @as(u64, 1) << @intCast(u6, line[i] - 65); + } + } + + count += char_to_priority(@intCast(u8, 65 + 63) - @clz(parts[0] & parts[1] & parts[2])); + } + + return .{ .int = count }; +} + +fn char_to_priority(char: u8) u8 { + if (char >= 65 and char <= 90) + return char - 38; + return char - 96; +} diff --git a/day_04.zig b/day_04.zig new file mode 100644 index 0000000..0fa2fdb --- /dev/null +++ b/day_04.zig @@ -0,0 +1,48 @@ +const std = @import("std"); +const Result = @import("util/aoc.zig").Result; + +pub fn puzzle_1(input: []const u8) !Result { + var iter = std.mem.split(u8, input, "\n"); + + var count: u16 = 0; + while (iter.next()) |line| { + const range = try parse_range(line); + + if ((range[0][0] >= range[1][0] and range[0][1] <= range[1][1]) or + (range[0][0] <= range[1][0] and range[0][1] >= range[1][1])) + count += 1; + } + + return .{ .int = count }; +} + +pub fn puzzle_2(input: []const u8) !Result { + var iter = std.mem.split(u8, input, "\n"); + + var count: u16 = 0; + while (iter.next()) |line| { + const range = try parse_range(line); + + if ((range[0][0] >= range[1][0] and range[0][0] <= range[1][1]) or + (range[0][0] <= range[1][0] and range[0][1] >= range[1][0])) + count += 1; + } + + return .{ .int = count }; +} + +fn parse_range(line: []const u8) ![2][2]u8 { + var r = std.mem.zeroes([2][2]u8); + + var parts = std.mem.split(u8, line, ","); + var p1 = std.mem.split(u8, parts.next().?, "-"); + var p2 = std.mem.split(u8, parts.next().?, "-"); + + r[0][0] = try std.fmt.parseInt(u8, p1.next().?, 0); + r[0][1] = try std.fmt.parseInt(u8, p1.next().?, 0); + + r[1][0] = try std.fmt.parseInt(u8, p2.next().?, 0); + r[1][1] = try std.fmt.parseInt(u8, p2.next().?, 0); + + return r; +} diff --git a/day_05.zig b/day_05.zig new file mode 100644 index 0000000..884fd81 --- /dev/null +++ b/day_05.zig @@ -0,0 +1,138 @@ +const std = @import("std"); +const Result = @import("util/aoc.zig").Result; + +const MAX_HEIGHT = 100; + +const Command = struct { From: u8, To: u8, Crates: u8 }; +const Data = struct { + Commands: []Command, + Crates: [][MAX_HEIGHT]u8, + + fn deinit(self: Data, allocator: std.mem.Allocator) void { + allocator.free(self.Commands); + allocator.free(self.Crates); + } +}; + +pub fn puzzle_1(allocator: std.mem.Allocator, input: []const u8) !Result { + var data = try parse_input(allocator, input); + defer data.deinit(allocator); + + for (data.Commands) |command| { + var command_crates = command.Crates; + + while (command_crates > 0) : (command_crates -= 1) { + if (command_crates == 0) break; + const tmp = data.Crates[command.From][len(data.Crates[command.From]) - 1]; + data.Crates[command.From][len(data.Crates[command.From]) - 1] = 0; + data.Crates[command.To][len(data.Crates[command.To])] = tmp; + } + } + + return build_answer(allocator, data.Crates); +} + +pub fn puzzle_2(allocator: std.mem.Allocator, input: []const u8) !Result { + var data = try parse_input(allocator, input); + defer data.deinit(allocator); + + for (data.Commands) |command| { + var command_crates = command.Crates; + + const crate_stack = blk: { + var r = std.mem.zeroes([MAX_HEIGHT]u8); + var idx: usize = 0; + + while (command_crates > 0) : (command_crates -= 1) { + if (command_crates == 0) break; + r[idx] = data.Crates[command.From][len(data.Crates[command.From]) - 1]; + data.Crates[command.From][len(data.Crates[command.From]) - 1] = 0; + idx += 1; + } + + break :blk r; + }; + var crate_stack_height = len(crate_stack); + + while (true) { + data.Crates[command.To][len(data.Crates[command.To])] = crate_stack[crate_stack_height]; + if (crate_stack_height == 0) break; + crate_stack_height -= 1; + } + } + + return build_answer(allocator, data.Crates); +} + +fn build_answer(allocator: std.mem.Allocator, crates: [][MAX_HEIGHT]u8) !Result { + var i: usize = 0; + var r = try std.ArrayList(u8).initCapacity(allocator, crates.len); + while (i < crates.len) : (i += 1) { + r.appendAssumeCapacity(crates[i][len(crates[i]) - 1]); + } + + return .{ .string = r.toOwnedSlice() }; +} + +fn parse_input(allocator: std.mem.Allocator, input: []const u8) !Data { + var iter = std.mem.split(u8, input, "\n"); + + var floor: u8 = 0; + var rows: u8 = 0; + + while (iter.next()) |line| : (floor += 1) { + if (line[1] == '1') { + var rows_iter = std.mem.splitBackwards(u8, line, " "); + _ = rows_iter.next(); + rows = try std.fmt.parseInt(u8, rows_iter.next() orelse unreachable, 0); + iter.reset(); + break; + } + } + + var crates = blk: { + var r = try std.ArrayList([MAX_HEIGHT]u8).initCapacity(allocator, rows); + var i: usize = 0; + while (i < rows) : (i += 1) r.appendAssumeCapacity(std.mem.zeroes([MAX_HEIGHT]u8)); + break :blk r.toOwnedSlice(); + }; + + while (iter.next()) |line| : (floor -= 1) { + if (floor == 0) break; + + var row: usize = 0; + var offset: usize = 1; + while (row < rows) : (row += 1) { + if (line[offset] != ' ') + crates[row][floor - 1] = line[offset]; + offset += 4; + } + } + + // There is an extra line between floor and commands + iter.index = iter.index.? + 1; + var commands = std.ArrayList(Command).init(allocator); + var i: usize = 0; + while (iter.next()) |line| : (i += 1) { + var command: Command = undefined; + var line_iter = std.mem.split(u8, line, " "); + _ = line_iter.next(); // move + command.Crates = try std.fmt.parseInt(u8, line_iter.next() orelse unreachable, 0); + _ = line_iter.next(); // from + command.From = try std.fmt.parseInt(u8, line_iter.next() orelse unreachable, 0) - 1; + _ = line_iter.next(); // to + command.To = try std.fmt.parseInt(u8, line_iter.next() orelse unreachable, 0) - 1; + try commands.append(command); + } + return .{ .Commands = commands.toOwnedSlice(), .Crates = crates }; +} + +fn len(row: [MAX_HEIGHT]u8) usize { + for (row) |v, i| { + if (v == 0) { + if (i > 0) return i; + return 0; + } + } + unreachable; +} diff --git a/inputs/day_01 b/inputs/day_01 new file mode 100644 index 0000000..6c1f923 --- /dev/null +++ b/inputs/day_01 @@ -0,0 +1,2266 @@ +6669 +6434 +6564 +1032 +1098 +1829 +2608 +7322 +2690 +7061 +1664 +5769 + +6160 +1082 +3958 +5272 +2188 +5618 +3418 +2302 +2926 +3338 +1082 +2024 +4195 +4083 + +3276 +5581 +3421 +3403 +4356 +2989 +1278 +1868 +3630 +4702 +3409 +4887 +2383 + +7104 +7496 +5265 +8078 +8788 +7402 +3601 +2641 +1252 +4994 + +4074 +7524 +8889 +9290 +8892 +5785 +2163 +1074 +6747 + +7452 +8006 +12427 +7919 +4012 +6850 + +34591 +26861 + +13028 +12695 +12762 +11006 +15937 + +17218 +12408 +17554 +11415 + +1118 +7240 +6400 +3431 +1032 +3283 +4667 +6100 +5076 +1101 +6952 +3527 + +7633 +4385 +4510 +4073 +3052 +11738 + +33554 + +3448 +16054 +10839 + +4496 +2697 +4731 +5150 +5327 +4039 +4004 +2148 +6150 +4001 +2882 +5780 +4327 + +4095 +2064 +6701 +3828 +2427 +4775 +2583 +2000 +1390 +7391 +1701 +3796 + +10355 +1262 +8781 +6350 + +11053 +11527 +1389 +6007 +12383 +11033 + +7951 +4258 +9815 +10061 +7579 +3769 +11431 + +3597 +35622 + +2129 +2994 +4260 +5269 +4179 +1612 +3509 +3581 +4544 +3713 +3202 +6458 +1203 +1095 + +17196 +13475 +12666 + +3549 +6432 +6593 +6723 +1272 +4023 +2112 +2844 +5135 +5103 +1585 +4773 +5635 + +8731 +16378 +5076 +2999 + +11136 +1525 +8684 +9731 +9753 +5366 +7399 + +8996 +1483 +4922 +1191 +2761 +9333 +9247 +3797 +3940 + +5876 +4139 +2158 +5905 +5445 +2438 +2814 +3853 +3432 +2289 +5783 +3839 +2811 +4361 + +3260 +6058 +3620 +2171 +4387 +4011 +4552 +1646 +3400 +2941 +6776 +2793 +6702 + +2318 +3118 +4920 +1293 +5593 +2308 +6819 +5949 +3819 +1742 +1074 +4565 +5891 + +5260 +8430 +6832 +6248 +2162 +7770 +1692 +4345 +7140 +6748 + +2921 +2075 +6039 +2875 +1479 +5835 +2350 +5981 +2684 +2560 +1608 +1495 +1358 +2047 +5003 + +13864 +8452 +10716 +6642 +14875 + +9704 +7477 +3664 +7751 +11616 +11067 +3496 + +12744 +11268 +7987 +15133 + +2859 +6255 +1302 +4053 +6133 +4181 +3008 +3450 +4421 +6065 +2732 +7142 + +7502 +3436 +2987 +8648 +1103 +1477 +7647 +9669 +6285 + +69741 + +60977 + +3987 +10933 +1170 +12375 + +6773 +2923 +8707 +3434 +5872 +5793 +5573 +6338 +7182 +2158 + +5522 +5345 +4425 +6178 +5236 +1397 +6165 +2173 +3547 +5225 +3949 +2238 +2594 +6032 + +7998 +6850 +1552 +3087 +6978 +7829 +1957 +1432 +7504 +2382 +3534 + +16000 +12845 +12638 +8250 + +5712 +1853 +2986 +6472 +1543 +1147 +5670 +5085 +3519 +5847 +4603 +1394 +2353 +1668 + +3542 +2995 +5413 +1108 +1783 +3902 +5173 +4228 +3997 +1759 +5652 +5896 +2109 +5697 +4198 + +3625 +7049 +4471 +11613 +1668 +9077 +3143 + +4473 +3397 +12107 +1364 +5698 +8030 +12081 + +2337 +3212 +3567 +1115 +3963 +1753 +1769 +6966 +3093 +4758 +5271 +3635 + +4387 +3770 +2931 +3029 +2657 +1109 +1592 +4884 +5784 +1911 +2938 +2501 +5851 +3793 + +1438 +7877 +7911 +2781 +1486 +4302 +6924 +3930 +6489 + +3794 +5964 +3072 +2292 +5199 +2157 +2357 +3649 +4888 +4522 +5408 +4743 +2753 +1717 + +8856 +7753 +8504 +1696 +5469 +7135 +7838 +6572 +4414 + +3860 +6400 +4018 +4506 +6979 +5493 +1950 +2544 +7426 +1405 +6440 +6253 + +8397 +2488 +4483 +3346 +8035 +3996 +6236 +4951 +2849 +6277 + +2113 +5149 +2409 +3971 +2762 +1704 +1799 +3929 +3224 +2149 +5804 +2026 +2269 +1107 +3140 + +2851 +10610 + +2901 +2215 +3138 +4848 +2612 +5624 +4878 +4137 +4093 +4660 +3369 +1970 +1176 +2141 +2298 + +50004 + +37286 +4713 + +2844 +1432 +2303 +4938 +3770 +1589 +5731 +5173 +3512 +5820 +3910 +6687 + +8039 +11639 +2325 +11278 +8313 + +7488 +15716 +1889 +4665 + +10258 +1862 +10452 +8650 +8039 +8984 +8778 +6486 + +8827 +12823 +25875 + +4658 +12284 +10171 +5966 +13525 + +7011 +2322 +8908 +8383 +3992 + +8965 +4198 +18224 +19587 + +5325 +20017 + +13271 +10542 +5223 +3178 + +1563 +4352 +6234 +2095 +1565 +1904 +6494 +6102 +3930 +4529 +5226 +5391 +1159 +4928 + +1588 +4779 +3001 +3698 +5784 +5327 +2149 +3020 +5362 +5751 +5704 +3296 +4746 +2595 +3169 + +5627 +24442 +5459 + +1867 +7808 +1287 +4179 +1395 +5759 +3916 +3549 +7235 +1740 +3753 + +11451 +8529 +1874 +6475 +1205 +8217 +9286 + +2929 +3725 +6071 +2336 +1725 +7049 +2041 +1694 +1231 + +3587 +6327 +8078 +4723 +10069 +5008 +8537 +7827 + +4148 +4758 +3453 +1189 +5086 +1045 +2429 +5157 +4454 +3198 +3080 +5980 +6011 +3575 +5044 + +7858 +7552 +7965 +3623 +7309 +4740 +6151 +1926 +2370 +6310 + +1734 +11654 +8498 + +2099 +4433 +3831 +6238 +4152 +1749 +4146 +5282 +3683 +4976 +5297 +1710 +4181 +4213 + +1981 +1318 +5839 +4815 +6083 +3841 +2842 +3246 +3884 +5193 +3451 +5147 +2518 + +2960 +3167 +5279 +2233 +6509 +5722 +3576 +6488 +4366 +1564 +6941 + +7515 +1502 +4892 +4008 +3196 +1730 +7263 +5971 +6213 +6673 +7824 + +5835 + +2444 +4473 +6654 +2285 +2184 +6397 +3411 +2602 +5380 +6952 +1234 +1474 +6842 + +3876 +7019 +1240 +6349 +4016 +2340 +8085 +1932 +5186 +4549 +6375 + +19405 +2299 +5583 + +13376 +12685 +9717 +12221 +2883 + +9537 +8867 +13398 +6781 +13954 + +2874 +1486 +5232 +5947 +2140 +7588 +1404 +8295 +6127 +7705 + +22842 +26153 + +8396 +2626 +3725 +5917 +2949 +1524 + +30131 + +5851 +1366 +3574 +1450 +5377 +6713 +3783 +3281 +4981 +6910 +5229 +4359 + +9099 +2211 +2814 +4583 +4690 +7122 +9334 + +17546 + +1378 +6567 +5300 +3819 +5604 +5316 +7159 +3564 +4302 +1442 +5763 +6610 + +1891 +8030 +3579 +4977 +3620 +2421 +7637 +1481 +9177 + +3298 +3865 +6812 +5409 +6482 +7245 +7049 +4319 +3040 +6027 +7195 +6023 + +28329 + +3409 +4600 +6903 +4511 +4341 +6742 +6967 +4247 +6802 +3453 +1515 + +2517 +13539 +3030 +11819 + +2974 +3749 +3971 +4509 +9599 +1036 +8176 + +1000 +2863 +1029 +2452 +2286 +2891 +5244 +3929 +5734 +2075 +5107 +2622 +4680 +1847 + +9653 +4720 +5078 +1589 +2431 +3149 +3261 +7308 +6953 + +5916 +7409 +3773 +7286 +4552 +9685 +2114 + +38289 + +1591 +10416 +3921 +16121 + +3217 +10969 +5198 +9305 +8671 +9606 +9759 + +60758 + +26875 + +12555 +12735 +14656 +4437 +4307 + +1528 +4259 +3310 +5563 +2281 +4305 +2573 +5733 +2725 +1519 +3299 +2055 +4674 +6146 + +21988 +17405 +15500 + +1775 +3126 +5002 +9407 +6048 +3346 +8368 +2185 +2825 + +24510 + +25200 +37377 + +9852 +1000 +2688 +11027 +11129 +11742 + +16298 +12093 +16906 +1567 + +1677 +3068 +6035 +6271 +6344 +5794 +1933 +6032 +4308 +6874 +6225 +1046 +6712 + +2194 +4404 +8838 +6737 +8595 +2478 +1033 +3489 + +5439 +14385 +13397 +3570 +13810 + +1726 +5761 +4318 +2813 +3351 +3168 +1539 +3847 +4422 +6071 +3376 +1093 +1979 +3206 +4011 + +2491 +4041 +3106 +2550 +3206 +5553 +3473 +5805 +1934 +4179 +1963 +4113 +3996 +2351 +3437 + +8747 +3481 +11813 +7672 +4711 + +4393 +2158 +3121 +6931 +7801 +3706 +4801 +3971 +1195 +1553 +1058 + +20051 +11463 + +1299 +6007 +6845 +1866 +2461 +3548 +4175 + +10323 +9098 +5566 +8553 +8768 +1022 +10088 + +5388 +4289 +5067 +5871 +5451 +4891 +8796 +6506 +3323 + +2652 +1923 +5235 +1539 +9256 +5794 +6153 +1379 +3568 + +12764 +15021 +11371 +1577 +4189 + +1960 +7462 +6862 +6710 +2350 +1689 +8322 +1575 +5367 +1074 + +4411 +4588 +3164 +1456 +6084 +2628 +5635 +2845 +3593 +3027 +6316 +5661 +2890 +2470 + +5592 +5071 +4290 +4402 +6091 +2907 +1531 +6229 +6159 +1791 +3833 +2435 +3919 +3160 + +18373 +2699 +6711 +14268 + +7693 +1264 +4217 +5299 +3786 +4555 +1112 +3392 +2535 +6768 +3618 + +11723 +6939 +7761 + +15672 +15601 +13101 +6229 + +23344 + +7787 +4343 +6661 +2629 +3189 +5155 +7999 +2351 +1308 +2726 +3177 + +18631 +18125 + +9177 +3897 +3655 +3449 +8336 +4366 +3363 +2145 +8594 + +1820 +9067 +2171 +2487 +15998 + +16221 +3430 +14946 +6869 +5305 + +4483 +7157 +1588 +2629 +5109 +7299 +1688 +4386 +6960 +6538 +1525 + +1289 +1340 +1520 +3601 +4316 +2653 +6140 +6219 +5044 +4306 +2573 +4028 +1828 +5844 + +7277 +5775 +2893 +3958 +6228 +6786 +7203 +7119 +5786 +6477 + +4367 +10361 +5973 +9197 +2832 +7900 +6711 +8279 + +9606 +6118 +10025 +10242 +8279 +8938 +6688 +7905 + +2478 +1918 +5575 +1840 +4897 +5871 +6309 +2778 +1937 +5396 +3249 +3456 +1002 + +12936 +11011 +11487 +11919 +13937 +8622 + +3853 +13287 +8285 +7842 + +11250 +7923 +8049 +3931 +7625 +4918 + +6516 +8209 +1752 +6258 +8501 +7426 + +10432 +3916 +12055 +13687 +1774 +8053 + +4682 +6779 +7258 +6929 +6899 +2643 +7021 +4960 +1732 +4065 +2854 +3593 + +13273 +11558 +5225 +3607 +5637 +11317 + +65129 + +6830 +3890 +4718 +6376 +3029 +8343 +7250 +7484 +3379 + +16188 +11694 +16583 +18745 + +4379 +2764 +4045 +3392 +1546 +3255 +2029 +3239 +1565 +5060 +1208 +1340 +5419 +3466 +4620 + +5408 +11519 +10387 +7305 +5770 +1733 +5462 + +9975 +4492 +14939 + +6365 +5846 +1825 +2851 +5483 +4801 +4109 +2581 +4729 +5149 +5573 +3345 +5426 +2060 + +15826 +6853 +10422 +12615 + +26180 + +5520 +1816 +1983 +4838 +2454 +4060 +2788 +6199 +6235 +2288 +4959 +4117 +3684 +3781 + +33317 +13949 + +1439 +1401 +4390 +4539 +5877 +2857 +3622 +3524 +4414 +1908 +2148 +1941 +4218 +1323 + +9364 +14727 +3282 + +22309 +24789 +7850 + +3434 +19391 +9665 + +1420 +3456 +4714 +4667 +2824 +3442 +1875 +2679 +4123 +1089 +2733 +4700 +5369 +1177 +1161 + +1710 +4521 +2164 +5986 +2485 +5614 +6494 +5043 +6334 +4947 +1423 +3351 +4010 +4360 + +3366 +3591 +8590 +3852 +9035 +8474 +1698 +5448 + +4560 +2248 +7197 +1821 +5411 +4522 +4914 +7806 +1387 +5702 +1780 + +3156 +2143 +5586 +2022 +3913 +5090 +5977 +4643 +3195 +5785 +6892 +5048 + +3839 +1261 +10477 +8350 +5769 +12750 + +19348 +9824 +15316 +17581 + +7925 +7634 + +2947 +4578 +1499 +1778 +10217 +5597 +3943 +8172 + +2012 +3917 +8065 +5627 +7562 +5489 +4334 +1648 +6666 +8287 + +15138 +7610 +12478 +12309 +13290 + +6296 +1234 +7587 +5783 +3061 +5613 +3283 +4447 +7188 +4577 +4102 + +8355 +2352 +1164 +1204 +2809 +6145 +6475 +3972 +1539 + +1805 +1214 +4153 +1685 +2472 +4620 +2784 +1859 +1390 +3591 +2560 +6291 +2805 + +11842 +20590 +15179 + +22669 +16927 +13861 + +2691 +9308 +3682 +1107 + +6906 +5502 +2120 +6862 +8843 +5379 +9651 +8263 +7238 + +3026 +5505 +2220 +1215 +4409 +2544 +3819 +7524 +3042 +4252 +1241 + +11244 +2129 +8844 +10557 +4463 +2319 + +5365 +2200 +1589 +4451 +5736 +1895 +4986 +3211 +1235 +4028 +1707 +1051 +6037 + +14311 +5746 + +2013 +8567 +3579 +6440 +3637 +10568 +8596 +7767 + +5653 +7015 +5853 +3670 +4265 +3003 +4139 +3132 +7538 +3629 + +3173 +1436 +3076 +5275 +4686 +5149 +6179 +2238 +1339 +2123 +4221 +6509 +5150 +2728 + +35818 + +11419 +8083 +12069 +3666 +2300 + +28844 +10855 + +30505 +18426 + +3369 +3085 +7409 +7308 +6556 +9671 +5416 +5981 +7558 + +5259 +9105 +15313 +6050 + +3203 +3414 +11117 +6231 +6049 +11632 +4816 + +11686 +5815 +11464 +7186 +9842 +5953 +8553 + +9330 +1817 +3529 +1761 +1823 +3942 +9471 +2207 + +8304 +9429 +12445 +3950 +16005 + +4809 +3869 +6968 +3204 +3621 +5925 +3967 +5180 +5238 +3013 +5291 +1371 + +4656 +2372 +1950 +4696 +1060 +3802 +5178 +5875 +3804 +5357 +3257 +1949 +3892 +5813 +3996 + +10281 +24432 +9867 + +7152 +5979 +4947 +6123 +6631 +6929 +4675 +3974 +5293 +6265 +4023 +6536 + +2200 +2917 +4479 +3671 +7268 +3545 +6762 +5921 +1814 +3704 +2767 +4692 + +9984 +5140 +2532 +4146 +13613 +11710 + +2027 +2367 +7666 +8617 +7563 +6593 +5060 +4431 +2666 +5080 + +7837 +6223 +2698 +8080 +3586 +8054 +6153 + +4364 +5979 +13237 +9841 +8704 + +5197 +4477 +5255 +8748 +11477 +1361 +4220 + +12430 +4451 +1038 +9999 +7577 + +59250 + +3857 +2158 +7069 +4813 +1980 +1636 +3646 +6760 +2842 +4217 +7578 + +1360 +2241 +2170 +2623 +2647 +5193 +3950 +4758 +5644 +2097 +3768 +5600 +3042 +3976 + +3905 +7116 +9941 +1927 +2265 +4489 + +6072 +3192 +6263 +3496 +3332 +2584 +5862 +6093 +6069 +4497 +1483 +6109 +4352 +1235 + +18487 +10619 +16127 +11370 + +2449 +2250 +2025 +3522 +5687 +5202 +4474 +5911 +3270 +5929 +4208 +2694 +5863 +3789 +2120 + +2591 +9936 +3145 +4471 +2234 +2250 +1547 +3760 + +13060 +12425 +20060 + +1786 +6317 +2087 +1998 +4111 +2185 +5446 +2732 +3731 +6082 +4513 +6370 +2494 +3197 + +5581 +5685 +1428 +1539 +1704 +5007 +2207 +4835 +1700 +4340 +1818 +3276 +1724 +1555 + +16085 +18634 + +1834 +2654 +5257 +2329 +4180 +4424 +4947 +5484 +1141 +4607 +5401 +2856 +2045 +4916 +5992 + +2925 +4945 +4969 +1400 +6410 +1093 +2398 +1949 +2701 +2763 +6314 +1105 +1580 +2804 + +52492 + +4181 +8013 +15867 + +2465 +4182 +6901 +1949 +5107 + +3078 +5461 +5477 +5344 +5974 +9751 + +26600 + +3943 +9282 +9655 +4304 +11368 + +4386 +7039 +7871 +9075 +2279 +10752 +1240 +5754 + +6914 +7359 +6766 +5693 +7719 +5043 +8665 +7241 +3498 +8771 + +12438 + +2288 +2764 +2633 +3416 +3396 +3172 +2004 +3583 +1862 +3027 +3928 +3165 + +3265 +2973 +2084 +5073 +1835 +2803 +2420 +3924 +4277 +5862 +1330 +5599 +3553 +3640 +5041 + +8709 +1629 + +5938 +9575 +1789 +6720 + +3623 +4874 +8500 +6566 +6965 +9388 +2106 +8552 + +9147 +4821 +5991 +9194 +3138 +2877 +5089 +4677 +3841 + +2865 +4858 +4642 +3755 +5958 +8076 +5599 +7931 + +5112 +2846 +2713 +3603 +5395 +4539 +4324 +2518 +1850 +5995 + +44743 + +1052 +3226 +3355 +4357 +4745 +4324 +4606 +3155 +3877 +1188 +4762 +1587 +2101 +1792 +4723 + +2071 +4440 +7135 +5825 +6083 +4034 +4572 +6942 + +3345 +5000 +1167 +1951 +4713 +2062 +4786 +7635 +1304 +6163 +5063 + +7060 +1738 +2658 +1217 +1388 +7416 +3719 +3903 +2305 +1051 +4437 +2496 + +9603 + +17966 +16434 +6253 + +8045 +8593 +9128 +6057 +10943 +11143 +2626 + +1961 +2742 +5305 +4780 +4307 +2465 +4472 +2946 +1404 +2195 +4822 +5607 +1027 +5697 + +26688 + +1004 +1382 +1194 +4638 +3773 +5037 +3731 +2676 +3567 +1159 +1136 +2883 diff --git a/inputs/day_02 b/inputs/day_02 new file mode 100644 index 0000000..e49a6c4 --- /dev/null +++ b/inputs/day_02 @@ -0,0 +1,2500 @@ +A Z +A Z +C Y +A X +A X +A Z +C X +A X +C Y +A Z +B Y +B Y +C X +C Y +C X +B Y +A Y +C Y +B Y +B Z +B Y +C X +A Z +C Y +B Y +B Y +A Z +B Y +B Y +B Y +B Z +B Y +A Z +B Y +C Y +B Y +B Z +C X +B Z +A X +B Y +B Z +C Y +A Z +C Y +A Z +B Y +C Y +A Z +A Z +B Y +C Y +C X +A Z +B Z +A Z +B Y +C X +B Y +B Y +B Y +A Y +B Z +C Y +C X +A Z +B Y +B Y +B X +A Z +C X +B Y +B Y +A Z +A Z +A X +A X +B Y +C X +A X +A Z +A Z +B Y +C Y +B Z +A X +B Z +A Z +B Y +A Z +C Y +A Z +A X +B Y +C Y +B Y +A X +B Z +C Y +B Y +B Y +A Z +A X +A X +B Y +C Y +B X +B Z +C X +B Y +A Y +B Y +B Y +B Y +A X +C Y +A Z +C Y +C Y +B Z +B Y +A Z +A Z +A Z +B Y +C Y +B Z +C X +C Y +B Z +A X +A Z +C Y +B Y +C Y +C Y +C Y +B Y +B X +B Y +B Y +C Y +A X +B Z +B X +C X +B X +C Y +B Z +B Y +A X +C Y +C Y +C X +B Z +B Y +A Y +B Z +A Z +B Y +B Y +B Z +B Z +C Y +A Z +A X +A X +C Y +B Y +A Z +B Z +A X +A Z +B Z +C Y +C Z +A X +A Y +B Y +C Y +B Y +C Y +B Z +B Y +A Z +C Y +B Z +B Y +A Z +A Y +B Y +B Y +C Y +A Z +C Y +B Y +B Y +A X +A Z +A Z +B Y +B Y +B Z +C Y +C X +B Z +A Y +B Z +A X +C X +A Y +B Z +B Z +A X +C X +C X +A Z +C Y +A X +A X +C X +A X +B Z +C Z +B Z +B Y +B Y +A Z +A Z +B Y +A Z +C Y +C X +B Y +A X +A X +B Z +C Y +C Y +A X +B Z +A X +C X +C X +B Z +C X +B Z +A X +A Y +A X +A Z +A X +B Y +C Y +A X +C Y +A Z +B Z +A Z +C Y +A X +A Z +B Y +A Z +B Z +B Z +A Z +B Z +A X +B Y +B Z +C X +B Y +B Y +B Y +B Y +A X +B Z +B Z +A Z +A Z +C Y +B Y +C X +A X +B Y +B Y +C X +B Y +A X +C Y +A Z +B Y +A Y +B Z +B Y +A Z +A X +B Z +C Y +A Z +C Y +C X +B Y +B Z +C X +A Y +B Z +A Y +B Z +B Z +B Y +B Z +C X +B Y +A X +B Z +A Z +B Y +A Z +C Y +C Y +C X +C X +A X +C X +A X +A X +B Z +B Y +B Y +B Y +B Y +C X +C X +A Z +A Z +C X +C X +C Y +C Y +C Y +B Y +A Z +C Y +B Z +B Z +B Y +C X +C X +C Y +C Y +C X +B Z +B Z +B Y +C Y +B Y +A Z +C Y +A X +B Y +C Y +C Y +C Y +B Y +A Z +B Y +A X +B Z +C X +A Z +C X +A Z +B Z +C Y +C Y +C Y +C X +B Z +C X +B Y +B Z +C X +B X +A Z +B Z +B Y +C Y +B Z +C Y +A X +B Z +C Y +C Y +B Z +B Y +C Y +B Z +C Y +A Z +C X +C X +C Y +A Z +C Z +C Y +B Y +C Y +B Y +B Y +B Z +C X +C X +B Z +B Z +B Z +A Z +B Y +B Y +A X +B Y +C Y +B Y +C X +C X +B Y +B Y +A Y +B Z +B Y +B Y +C Y +A Z +C X +A Y +B Y +B Z +B Y +A Y +C Y +A Y +A Z +B Y +A Z +C Y +C Y +B Y +A Z +B Y +B Y +A Z +B Z +B Y +C X +C Y +B Z +B Y +B Y +A Z +C Z +A Z +A X +C X +B Z +B Z +C X +C Y +B Y +B X +A X +C Y +B Z +B Y +C X +B Y +A Z +A Z +A X +C Y +B Z +B Y +C X +C X +B Y +A Z +C Z +B Y +A Z +C Y +B Y +C X +A Z +A Z +A X +C X +A X +C X +C X +A Z +C X +B Y +A Z +B Y +B Y +C Y +C X +A Z +B Z +B Y +B Y +A Y +A Z +B Y +A Z +B Z +B Y +C Y +A Z +B Y +B Y +B Y +C Y +C X +A X +A Z +B Z +B Y +C Y +B Z +C X +B Y +C X +A Z +B Y +B X +B Y +A Y +A X +A X +C X +C X +B Y +B X +C Y +A Z +B Z +C Y +C Y +B Y +A Z +C X +A Z +C Y +B Z +B X +C X +B X +C X +B Y +C Y +C Y +B Z +B Y +B Z +B Z +A Z +B Y +A Y +B Z +C X +C Y +C X +A Z +B Z +C Y +B Y +B Z +C X +B Y +A Y +A X +A X +C Y +B X +C X +B Z +A Z +A Y +B Z +C X +C X +B Y +A X +B Z +C Y +B X +B Z +C Y +B Y +C Y +B Z +B Y +B Z +B Y +C X +B Y +C X +B Z +B Z +C X +B Z +A X +B X +B Y +A X +B Z +C X +B Z +B Y +B Y +C X +A Y +B Z +B Z +B Y +B Y +B Z +C Y +B Z +C Y +C X +A Z +C X +A X +C Y +B Y +C X +A Z +B Y +A Z +A Z +B X +C Y +B Z +C Y +B Y +B Z +A X +B Z +A X +C X +B Z +B Y +C X +C Y +C Y +B X +C X +C X +B Z +C Y +B Z +B Y +B Z +C Y +B Y +C Y +C X +B Y +B Y +B Z +A Z +C X +A Z +B Y +B Z +A Z +C Y +A Z +B Y +A Z +A Z +C Y +A Y +B Y +A Y +C X +B Y +C X +B Z +C Y +A Z +C X +C X +B Z +C Z +C Z +B Y +B Y +C Y +C Y +A Z +C Y +C Y +C Y +A Z +B Z +C Y +B Y +C Y +C X +C X +B X +B Y +C Y +A Y +B Y +B Z +B Y +A Y +B Y +B X +C X +C Z +C Y +C Y +C Y +B Z +B X +C Y +B Z +C X +C Y +A Z +A Y +B Y +C X +A Z +B Y +C Y +B Z +A Z +A Z +B Y +A Z +C Y +A X +C Y +B Z +B Z +B Z +B Y +B Y +A Z +A Z +B Y +C X +A Z +C Y +B Y +A Z +C Y +A Z +B Z +B Z +A Y +B Y +B Y +B Z +C Z +B Y +B X +B Y +C X +B Z +C Y +B Z +A Y +B Z +A Z +A X +A Z +C X +C X +B Y +C X +C Y +A Z +B Z +B Y +A Z +B Z +B Z +B Z +C Y +B Y +A X +C Y +C Y +C X +A X +C Y +B Y +C X +B Z +A Y +B X +B Y +A Z +B Y +B Y +B Y +B Z +C X +B Z +B Z +C X +B Y +A Y +B Y +C Y +A Z +C Z +B Y +B Z +B Z +C Y +A Z +C Y +C X +C Y +B Y +A X +A X +B Z +C Y +B Z +B Y +A Y +C X +A Z +B Z +C Y +C Z +C X +B Y +C X +A Y +A Y +B Z +C X +B X +C X +B Y +B Z +B Z +B Y +C Y +B Y +B Y +A Z +B Z +B Y +C X +B Z +B Y +B Y +C Y +C Z +C X +B Y +A X +C Y +C X +B Z +C Y +A X +B Y +A Y +B Y +C X +C Y +C X +A X +B Z +C X +B Y +A Z +C X +B Y +A Z +B Y +B Y +B Y +A Z +A X +C X +C Y +C Y +B Y +B Y +B Z +A Y +C X +C X +B Y +B Y +B Z +A X +C X +C X +B X +A X +B Z +B Y +C X +A X +B Y +C Y +A X +B Y +C X +B Z +C Z +B X +C Y +B Y +C Y +A Z +C Y +B Z +C X +B Z +C X +C Y +C X +C Y +C Z +C X +C X +B Y +C Y +C X +C X +B Z +B Z +A X +C Y +C Z +B Y +C Z +C Y +C X +C X +B Y +C Y +A Y +B Y +A Y +B Y +B Y +B Y +C Y +C Z +B Y +C X +C X +B Z +B Y +B Z +C Y +B Z +C X +B Z +B Y +B Y +A Z +A X +B X +A X +C X +C Y +B Y +A X +B Z +B Y +B Y +A X +C X +C X +B Y +B Y +C Y +C Y +B Z +B Y +B Y +B Y +C Y +A X +B Y +C Y +B Z +B Y +B Y +B Z +B Y +B Y +B Z +B Y +B Y +C Y +A Z +B Z +A Y +B Y +C Y +B Z +B Y +B Y +C X +A X +C Z +C X +B Y +B Z +C Y +C X +B Z +A Z +A Z +C Y +A Z +B Y +B Y +B Z +B Y +C Y +B Z +C Y +B Z +B Z +B Y +C X +B Y +B Z +A X +C X +C X +B Z +B Z +C X +B Y +A Z +B Y +B Z +C Y +B Y +A Z +B Z +B Y +B Y +B Y +C X +C Y +A Z +B Y +B Y +A Z +A Z +A Z +A X +B X +A Z +C Y +C X +A X +B Z +A X +C X +B Z +B Y +B Y +C X +A Z +C Y +C X +A Y +C X +A Z +B Z +B Z +B Y +C Y +B Z +A Z +A Z +C Y +B Y +B Z +A Z +A Z +B Z +B Y +A Z +C Y +A Z +A Z +B Y +B Z +B Z +A X +A X +B Y +B Z +B Z +C X +B Z +C Z +B Y +B Y +B Y +B Z +A X +A Z +B Y +A X +B Y +B Y +C X +C X +C Y +C Y +A Z +A X +B Y +A Z +B Z +B Y +C X +B Y +B X +C X +A X +A Z +C Y +C X +C Y +B Y +B Y +A X +A Y +B Y +A Y +C Y +C X +B Y +B Y +B Z +C X +C X +B Y +C X +B Z +C Y +A X +A Z +A Z +B Y +A Y +C Y +C X +C Y +C Y +B Y +B Y +A Z +C X +A X +B Y +B Y +B Y +B Z +A Z +B Y +B Y +A Z +B Y +A Z +C X +B Z +C Y +B Y +B Y +A X +B Y +A X +B Y +B Z +C X +B Z +B Y +C X +C Y +C Y +A X +A X +B Z +B Z +B Y +C X +A Z +C Y +C Y +C Y +B Z +B Z +B Y +A Z +C Y +A X +A Z +C Y +B Z +B Y +B Y +A Z +B Y +A Z +C X +A X +B Z +B Y +B Y +B Z +A Z +C X +B Y +C X +B Z +C X +A Z +B Y +A Z +A Z +B Y +C Y +C X +C Y +A X +C Y +B Y +B Z +C X +C Y +A X +B Z +B Y +C Y +A X +B Z +A Y +B Z +B Y +B Z +A X +A Z +A X +B Z +C Y +B Y +A Y +B Z +A Z +C Y +C X +B Z +B Y +C Y +B Z +C X +C Y +A X +B Z +B Z +B Z +B Z +B Y +C X +B Y +C X +A Z +A Z +C Y +A Y +B Y +C X +A Z +B Z +C X +C X +A X +B Y +C X +A Z +B Y +B Y +B Y +B Y +C X +C Y +C Y +B Y +A Z +B Y +B Z +B Z +B Y +A X +B Z +B Z +C X +C X +C Y +B Y +C Y +B Y +B Y +B Z +B X +C X +C Y +A Z +B Z +B Y +A X +B Z +A Z +B Z +B Y +B Y +A Z +C Y +B Y +C Y +B Z +B Y +C X +B Z +B Z +C Y +C Y +B Y +C Y +C X +B X +B Y +C Y +B Y +B X +C X +B Y +A Y +A Z +A Y +B Z +A Z +A Z +A Z +B Y +A Z +A Z +C Y +B Z +A Z +A X +B Y +C Y +C X +C X +A Z +B Z +B X +B Z +C X +B Z +C Y +C X +C Z +C X +B Z +B Z +B Z +B Z +A Z +A Z +C Y +C Z +C Y +A X +B Y +B Y +B Y +A Z +A Z +B Z +C Y +C X +B Y +C X +B Z +B Y +B Y +B Y +B Y +B Y +B X +A Z +A X +A Y +C X +B Z +B Y +B Z +C Y +A Z +B Z +B Z +C Y +B Z +B Z +C X +B Y +C X +B Z +C X +C Y +C Y +C X +A Z +A Z +B Z +B Y +C X +C X +A Y +A Z +C X +A X +A X +A Z +C Y +B Z +B Y +A Z +B Y +B Y +B Z +B Y +C Y +B Z +A X +B Y +A X +B Z +A Z +C X +A X +C Z +A Z +C Y +A X +B Y +B Z +B Z +A X +C Y +A Z +C X +A Y +C X +B Y +B Z +A X +B Y +B Y +A Y +A X +B Y +C X +A Y +B Y +B Y +C Y +A Z +B Z +A Z +B Y +A Z +C Y +C X +B Z +B Y +B Z +A X +C Y +C Z +A X +A X +C Y +C Y +A Z +C Y +C X +A Y +C Y +B Y +B X +B Y +A Z +C X +C X +B Y +A Z +A X +B Z +C X +B Y +B Y +C Z +A X +A X +B Z +C X +C Y +B Z +C Z +B Y +A Y +A Z +A Y +C Y +C Y +C Y +B Z +B Z +B Y +B Y +B Y +B Z +B Z +C X +A X +C X +B Y +B Y +B Y +C Y +B Y +B Y +C X +A Y +B Z +C X +B Z +B Y +A X +C Y +B Y +C Y +B Z +B Y +C Y +C Z +C Y +A Y +B Z +A X +B Z +A Z +A Z +A Z +B Y +A X +C Y +B Y +B Y +B Y +C X +B Y +A X +C X +B Y +C X +A Z +B Z +B Z +B Y +C Y +B Y +A Z +B Y +C Y +B Z +C X +B Y +B Y +B Z +C X +C Y +B Z +B Z +C Y +C X +C X +B Y +B Z +A X +C X +A Z +A Y +B Z +B Y +B Y +C Y +C X +B Y +B Z +C Y +C Y +C X +C X +B Z +A Z +B Z +B Y +C X +A X +C X +A Z +C X +B Z +C Z +B Y +C Y +B Y +C Z +A Z +B Y +C Z +A X +B Z +B X +C Y +C X +B Z +A Z +B Y +A X +B X +A Z +C Y +A Y +A Z +A X +C X +A Y +C X +B X +B Y +C Z +A Z +C X +B Y +C X +C X +B X +B Y +A Y +B Y +B Y +A Z +B Y +C Y +C X +B Y +B Y +B Z +C Y +B Z +A Z +A Z +A X +B Y +C Y +B Y +C Y +C Y +B Z +A X +C Y +B Z +C Y +A Y +B Y +B Y +B Y +C Y +A Z +A Z +B Z +A Z +C Y +C Y +B Y +C X +B Y +A Z +B Z +A X +B Z +B Y +B Z +A X +A X +C Y +A Z +B Z +C Y +B Z +C X +B Z +A X +B Z +B Z +C Y +B Y +B Y +C Y +B Y +A X +B Y +C Y +A Z +B Y +C X +A Z +B Z +A Z +B Z +C Y +B Y +B Y +B Y +C Y +B Y +B Y +A Z +B Y +B Z +C X +B Z +C X +C X +A X +B Z +C Z +B Z +A Y +C X +C X +A Z +A X +A Y +A X +B Y +B Y +C X +C Z +A Y +C Y +B Y +B Y +C X +C X +B Z +B Z +B Y +C Y +A Z +B Y +C X +C X +A X +A X +A Y +B Y +C X +A Z +C Z +C Y +C Y +C Y +B Y +C Y +A Y +A X +B X +B Y +B Y +B Y +B Y +A Z +B Z +B Y +B Y +C Y +A X +A Z +A Z +A Z +B Y +A X +C Y +C Y +B Y +B Y +C Y +A Z +C Y +A X +C X +B Z +B Y +C X +B Y +A X +A Z +C X +C Y +C Y +C X +C X +B Z +B Y +A Z +B Y +B Z +B Z +B Y +B Y +A X +C X +C Y +C X +A Z +B Z +B Y +B Y +C Y +A X +A X +C Y +C X +B Z +A Y +B Y +B Z +B Y +A X +C Y +B Y +A X +C X +B Y +B Y +A Z +A Z +A Z +B Y +B Y +C X +B Z +A Z +B Z +A Z +C X +B Y +C X +B Y +C X +C X +B Y +B Y +A Y +C Y +C Y +B Z +C X +B Y +B Y +A X +A Z +B Y +C Y +B Y +C Y +A X +C Y +C Y +B Z +C Y +A X +C X +A Z +C Y +A Z +C X +B Z +B Y +B Z +C Y +B X +A Z +C Y +C X +B Y +C X +B Z +A X +A Z +C X +B Z +C X +B Y +A Z +B Y +C Y +B Y +C X +C Y +B X +B X +B Y +B Y +B Y +B Z +B Y +C X +A Z +A Z +C X +B Y +B Y +B Y +A Y +C Y +B Z +C X +C Y +A X +C Y +B Z +C Y +B Y +B Y +B Z +A Z +A Z +B Y +A Y +B Z +A X +C Y +B Y +A X +C X +B Y +C Y +B Z +B Y +C X +A Z +C Y +A Z +B Y +C Y +B Y +C X +A Z +C Y +C Y +A Y +B Z +C X +C X +A Z +C Z +C X +B Y +C X +A X +C Y +C X +C X +A X +A Y +A X +C X +A X +A X +B X +B Y +C Y +A X +B Z +C X +C Y +B Y +B Z +C Y +B Z +B Y +C X +A X +B Y +B Z +C Y +A Z +C X +C Z +A X +A Z +A Z +B Z +A Z +B Y +C Y +C Y +B Z +C Y +C Y +C Y +C X +A X +B Y +A X +C X +C Z +B Y +A Z +B Y +C Y +C Y +B Z +C Y +C X +B Z +C Y +B Y +B Z +A Z +B Z +B Z +B Y +A Z +A Y +C X +B Y +A Z +C Y +B Z +A Z +B Y +B Y +C Y +B Y +B Y +B Y +C Y +B X +B Y +A X +A X +B Z +A X +C Y +A Z +B Y +B Y +B Z +A Z +C Y +C X +B Y +A Z +A X +B Y +C X +B Z +A X +C X +B Z +B Z +B Z +B X +A X +C Z +C X +C Z +B X +A Z +C X +B Y +C X +C Y +C Y +B Y +B Z +B Y +C Y +C X +A Z +C Y +C Y +C Y +B Z +A Z +A Y +C X +C Y +B Y +C Y +C Y +B Z +C Y +B Y +B Y +C X +B Z +B Y +A X +B Y +A Z +B Y +C X +B Y +C X +B Y +A Z +C X +B Y +C X +B Z +C X +B Y +A X +C X +C X +A X +C Y +A Z +C Y +B Z +A Z +A X +C X +A X +C Y +A X +A X +B Z +C X +C Y +A Y +B Z +B Y +C Y +B Y +A Y +C Y +C Y +B Y +B Y +B Z +B Z +C X +B Y +C X +A X +A Z +C Y +B Z +C Y +B Y +C X +C X +A Z +B Z +A Z +C X +B Y +B Z +C Y +B Y +A X +A X +B Y +B Y +B Y +A X +B Y +B Z +A Z +A X +A X +B Z +B Y +A X +B Z +A Z +B Y +B Z +B Z +B Z +C Y +C Y +A Z +B Y +C Y +A Z +C X +B Z +A X +B X +B Y +B Y +C Y +C Y +B Z +B Y +A Z +B Y +A X +B Z +B Y +C Z +B Y +B Y +C Y +B Y +B Y +A Y +C Y +A Z +A Y +B Z +C X +B Z +A X +A Z +A X +C Y +A Z +B Y +B Z +B Z +C Y +C Y +C Y +B X +B Y +B Z +A X +B Y +C Y +A X +A X +B Y +C Y +A Y +B Z +B Z +B Z +A Z +B Y +C X +A Z +C Y +C Y +B Y +C Y +C Y +C Y +C Y +B Y +B Z +A Z +B X +C Y +C X +C X +C Y +A Z +C Y +C X +B Z +B Y +A Y +C Z +B Y +B Y +B Y +B Y +C Y +B Y +C Y +A Z +B Y +C X +C Y +B Z +A X +C Y +B Y +B Y +B Y +A Z +A X +A X +C X +C Z +B Z +A X +A Z +A X +A Y +C Y +C Y +A Z +C X +C X +B X +B Y +A X +A Z +A X +C Y +B X +A X +A X +C X +A Y +B Z +A Z +B Y +A X +A Z +B Y +A Z +C Y +B Z +A Z +C Y +C X +B Z +C Y +B Y +C X +A Z +B Z +A X +A X +C Z +A X +C X +B Y +B Z +A X +A X +C Y +A Z +C Y +C X +C Y +B Z +B Y +C X +C X +B Z +B Z +C Y +A X +B X +C X +C Y +A X +A Z +B Y +C X +A Y +C X +C Y +A Z +B Y +B Z +B Y +C X +C Y +C X +C X +B Y +C X +C X +B Y +C Z +C Y +C Y +B Z +B Z +B Y +A X +B Y +A Z +A Y +B Y +C Y +B Z +B Z +A X +B Y +A X +B Y +A Z +B Y +C X +A Z +B Z +C Y +B Y +A Y +A X +C X +A X +B Y +B Z +B Z +C Y +A X +B Y +B Z +B Y +B X +C Z +B Z +C X +C Y +C X +B Z +C Y +A X +A X +C X +B Y +B X +B Y +A X +C Y +A Z +B Y +B Y +B Y +B Z +B Y +C X +A Z +C Y +A Z +B Z +C X +C Y +C X +C Y +A Y +B Z +B Y +B Z +C Y +A X +B Y +A X +C X +B X +C X +A Z +B Z +B Z +C Y +B Z diff --git a/inputs/day_03 b/inputs/day_03 new file mode 100644 index 0000000..fca63f0 --- /dev/null +++ b/inputs/day_03 @@ -0,0 +1,300 @@ +qFdBBvtHHfvRlfvsqldvqjPpQmnQmjnjjjTRTLGRNG +ZCWhhCsJCzSJzSbzgsmPTGNNPPNGjgLTLjgn +WJZsbJMwJcszJcScwhVltFwBFBlqddvFdHDfqq +crtTsGTtqFThGQGCrsjTwdNJwpRdnJJwffRClpSf +PWVBPVHLvHHVgvZWBzmPpnfRSJJRQnSRflRPSNSl +gmzBzDgzmZQWLDLLgVmDrqGhsscrqDMGhcqtqcFr +HsbcdVrsbVbcLfPqqQsqqtPj +mMBFzZRnmFMRBDnDFBGZDGdDqLjtdQtPtgfPfttgtqgq +BZvZZdJMBFdJhSvhbhchcHll +GNRSqRfcNTpfGCcqjfzBpDQPWBzgDpQsPWzW +rrSdnVHlbMdLdBDzgtBtBmQt +rbFwwnLFLFwlMLrFwFhMVLrGNSTfZTRhfTqjGJRRZTCNcf +QWTnQCnWNNWmTnSPQwmqDbcscbpcjPjVPbrjpq +vJhzZNlNNgdzgzJdlGzHHcHDpjsHqrvbVrbvrD +RzRdRlhLgtCwCWSLnN +SFTJFTTwTVVSJBnSTdvNNfWbZCZWNZCNNhBv +srLrcHDcsjtLcLLcrLctjlcvbDNhmWCvNhZWGZZhNvhZmb +rclgtMPrrSgVTgJCng +DbrhDzcDffbzNbZvZWSSqSTNSVWv +gCPltPmCPglFnPFwtGPhGPwTCTdZZWZVRvWqdRqVVdTdvR +hLBhlmlstcffBzrpfj +wFLLmhMfwZLDwmMNRhZwRLDvJgldbJHPdQvcQHHJQPgH +bjrVrTSSJdQHcVll +CGCSsCCBpspBrqbSttpbqWmWZRmfFRZhZMNNLFqFLm +zWGjjBHGjzzTWMjhtDDWtPPlJZPJpvqQrmZTqQQpmr +RFbVLcBVLRcRVcCsCCqvpCZqmplqQJmPrlvQ +FLNRRSSRgScSVLLLNdFdwjHjnftBtGMgMjzHgzjWjj +znVSqnqbqzSbzTHqDDZmlcFcnhDMnDmn +LtjsvdvLJdjfFwRRCCMlChwCpMcclCcZ +LgvjjfjFQVgNTgWq +SJRJRFFCMSsGRMMwtZJRCVTgqgTVgTBCVpjTjmmWlB +ccvnnpnDVqTcBVTV +vPHprdHdpnzHSMsSrMRZJGws +GddGrcGNHnGvnCHddvCSWqTSWsTwTWShbHlhhb +gDPzLRVZgQfpRRFQDDVFDfzhSzsTBqqqnqbhnWTSSlST +QVFfFgRQQgLtgffZRfpFPfntjrcrjCmtCdMMmjMdJJJNtm +jjmNcpGCNmDqqsBfnZnGGGRLsZ +lrmlVWlQQtWllgtbQVrWBnZsJgsRLfZLhZBBBffL +rWMVQtrFlbFlSSMHVSdHHNHdcdDcddzppzzm +bTpjpjcVTLmphbLppJwqzqwJLqqzzzgRLJ +sdHNbrvNHrqPvZZZPRww +bNQCrCNtNsSlhffhVhpVWFCW +lpNnpMMZZDbNbnBjcrbjvScFmbGj +wqhdqVqdscrjdLsv +HQftVqWCfhwqtCCjWwfqzzVPZRJQgMlggZMMMZTNMNTnNRTN +fvvGbFtVmtTwgtMT +WcCcClzPCCcczJJScPWWZzBDmwbhBBHSghgDDMTHMDBD +nWPljWzZWnbcbRsNFjFFdFdVjFsj +NQrcLNmQGRfGLHHLZgbbnpjZJJJndbgnlv +DWtThDWtzzhltWTwjbdpvjbgqjgg +VtSPFWtBPBFSFBWCStshWBmlRfHfMRcfQLQLLlmCrCcN +pbmwqJnqSJVwwDPCjZZzrZfD +QtssBTvNdNvNtQvQGpGhdjPjDjczZDfjhgPPDcgjgr +GltptQpMGNNpRWlWFVFHJFHLWH +ZLLsDGGVhZcQQLhrLshrVFwHnWqJnWMnJJJnqfWfGn +jMlPdTlPlgCgFpngFWFnJfpw +TlTNbdSSTSTmTjPMTCdBPjBMrLDczsZcNrDhRNDRQRLLRVVz +HDLpBqDVVTvwGDDNRT +PlVWjfhsPMMmWtlFNTrhrrvCCCTNNbvw +lsglfgVJmsfMjJfSqSzdZnLgqcnLnp +pfCDJWBpfDffpJLgQJzzVzNrgNgNgNhNzmVr +ZnnGZbGTPZnsnRFdTlbrwdrNzrrmmWwmwVwttH +GbPGRvTnZljWnpqSMMCjqJQSCf +ZgnFgwggznFrfrwfHhNMMr +pctLCLRhPHBLMLWfBL +JJcdJcQCCJmQJppmlgndnFslsVnsvghZ +WpMgTppWGSWWJmJDpJcJJhqm +zZzjZNHvNjPvNsbZLbRLzsPcqhVJSVttdwhwmdRhtdJRVd +sLbvvCZCPSSSbbPfNlQQTQGBllCTnMnWQn +fwbwswddwSbBfDBggMBPDPhHcPWDmhHhmWnWPC +FQFlzLCzQTlrTTzvltFqFrmhPHjnhhnnchcJWcRRmRRq +lpLzlFZzCltrTNlTztQLZfSMGBNdSBVwbBNVSMSbVs +FMmgbTFdgLSgFQdjrRPrQBPDdj +ZqqWRvsfGrrPvvPC +wZzwnqccRwRNNpRSMztSMMFbgzLTFS +qTwBPfTfqQDMDrssHdvtRHccHMjR +gWSZGWzGFhnFFgnhNsRHtRdsVjZcRjHs +jgplhpJJFgnDrrwfqprwDP +CWhMSRfWhVVnRSZnVVdsLQqQMzGqLBvGMQqczv +PHbpNwrjJplttvcclLlQzzDszc +NrJbJrFNNJNPrmwrtbjtNmCfSWfWhSZZfSWCsfShfFVR +VLhRPLGLRPRSStRRLwfGqfmDwbmqbqqDlD +rBSFvppnzTbwDwlDcFWm +MJrnJTMvMsrTsPtshRNPZdSLhL +BZBrRCrnCQBBnZfGqhGGMMRcthMhMG +TLjsCdDCPTvNssjdsPsDgsgqGcPHczchtHczWzPWzzlWhG +gsTpsdNbvNNjNSpsNDTsmCnSVQFmSFwZnQBnmnQQ +llbsNsWrmbrGbWCNtBjcCFBzQFZBCFjF +LdSpwgdqSgzwJdRdLMRHLjQQjHjFHctjHBDTZj +gSppgpSJMhpzwrhblfbhhlWlnW +DwhTvvsJZWsBnDzPpBLbFp +GHtNGRGNdzbMBBtmBt +NljlCSVSHdjGSQRGlCQSCswqfWzhZfTcfzcJvshJ +lmsGNFsDGqCbFQBbffjjwpzptw +hRQdvdrvrvSngWnvnHrTMfzfzRtftzwVTwwpzB +HnSSWrvLJvWJGFDsmFLPDFcQ +bwwpGphpLghpTvpWphvJlFLJqqltjSjVlSStSR +cmszZdDdBZzcNcDCDcNsmNMcqVjMJStFRJltVPVrlVPjVJll +HcdmcCzzzQcHNcsCdpnGnhwGgnRggHvbbR +CfMBbwBGbMbDCFrDvhFFDT +mjzRjjRdSmjPnzFZgnnrTT +cmSsVcHjLHTwMfLBpBpBwM +whqqfZzgHvhSzzVNVDbpDbmbVbNpJD +GcQFntGTCCcCTMCTGBlJsJsDDWpRbWBsJpNS +FnPcrGFFdddMnCnTqgqgqPHfLjLqgSzz +zMSzzjssFdGnszRtNftqqwFHbbZw +RRPLVrgrwHqBqgwt +rPWmLCTCQlCQQmmrWLrQShJshhzdhhJjcSjlzRds +lvgvCDfPqLHppqpCCDJncbntttbBtBBVHjwtrB +TdddszSQsWcngjzVbcVZ +hRWsTRTGQhNRGhRTFSWmlpgfqlvLmplPqvvGgv +LbWFLQdWWPwWSjSHPHRfppHHDRpggR +zmqqNNzlzmnzzNCmVCmtBzpfGsfpBgDgspprcfcfsrRB +qNNVNJtNmmmNzznVJzvCTDZWhvZZjZFbWQQhFhbZSw +DjdHqJVVhHVZjhDHPWtDtZLFBRBFmSRTFSbwmRRTffTTJf +NNznnGlgMQsnQzNclzpfSRSMRmfPMmFRwBwB +vzrcGcNcPPvHvHPt +wLCcmZwWTNtZNdMSMGSCnJGGMB +RFbHsPhVvFPRjlshhrnQnGjQGSdSqJfqnQBM +HhzVlFHhPwzScmSTgL +TNlBhDNvNBFpJgpPPpDQ +jjfCdCZZqsCZsbdqPgFGGMRzSFMqQMRS +jnWPtWssCtWcmZbbtstvnrrvhVBhTNNhBHlBlL +DZwNWPDzPVWbJngrQjrNnrQcMg +GRRfttLBhhvTvmLmFcFcgFFSnjWrnsrG +TLthBWtTRLHqhlLLfmhBqVPDJVdPwzJCPPZHwdDdVd +GGVhrVSMQwQqfVssVvnWFgvgWn +jtlcRBBtQRmpWsjzFCvzWnvF +QPcRbpppDmNDtPPblZMfhZdDwdMrqSSGrq +ZRrdtBdQvQsWnnfWFZsF +bJLcMzNDLbMgwfnGMWFv +lpvhmzNDmDmlNbzbmrVVPrHRCPHQBVCP +rZllQrsRWrlQswccMVbGbVbTdcQQ +NtJCntLSHCjznfLTcGGGqWMdWM +jCtzzSFthhSSSjPJrFDlvWrlDZRpwpRZ +mQmbLjbrLQjLmTtwwWBTTvWjtt +BHSqdHclHHNFlppNqWPwfwDvTfDPPtCw +ddSGMGHcdcMhMZnBbmbZmgGJJg +lvvBzvDnlzjfPnfjnQPlldRbVbRqbqqCgsqqVpQQgVqc +NNFtGNMtTNFmJNGNZtZMwVRTTcsCpVTbbgCbgRhscp +FGNGZMtNLWmmJWGFWJGLSNtPrPnBfDzzvjnDBzpnvDBLnv +fwvQRFQvQqwpwNJrwN +BstDnBjhjBhnshSptpJzWqNppbfr +CsDjCdZcBCDcjnfDHfhnfggZMGlgQVmgMTRmgVGMMl +MwlBVqVlsgnmzwJsvjhWZhGPvjvRRWzG +QNQpQpftHdHHCHGfSpCrQNdSrDRDhchhjvjcPrRRWrPvhZjv +LtLSCTSGfHGdGwswnqsggssTqV +qDDCHjzjznTvWshZQWfnZZ +PFFmmNMMtNMVFtczcFPJNrLhZwQZQsSvvSvWvGQQJQssss +tFzrrPPNNFlzVrpRTpblRDqjTpDC +DWDrrBdpmdpBrCgDthdtfcHsqJsCqscqwfsjzHcq +TNLNFNSTQNQTSnlMcczVJjVzsqLDDfJJ +TFPZQRvvlMSPPtRWDtmDRWrBGr +LWGVZdrvWdpLGWRsjPMsHmdHdHldlj +zJzznChzzzCSfTgMhCPDmlDCbmlsmjDDQj +nSTTJhJtnShNtzwhgNrGRRWZZRvMWMtVrqGp +PbPmtNmBbPlqBvqlDJBT +LpGVDzVpVZqqSTvq +pMnWGLRLRppnGpGndrGPtgDCjMPmbPgCQmPPNN +sqcZcbZZpcZspcCCRMmznWGWdLWhwDRGTTWggT +NjFSJgVHrvfVtrGzWdSznDwLSTLn +jFrBNVVjBFNvHrFHBlBFFpMslPgPcpMPmcQPPZCgpP +frddqsThtsTfTbPcvhsrbsRLpRBNRpmDpGmRGcRNLpGp +QWJHCJwWzlHZQZHQCJJRzRqnLDGRGpnGBRnNDN +CVwHCClJjQgWCZVZQgMwSdthjrqvrSPPhdbqtPhs +TvdphBBhhhCgdLNNJJJLWz +fVcsqRVrPcnJWgDnJN +JlqsRJtssZwqwVtPwltRPsHHbFTwTFbpjHhQjTQbvpTF +cQSnPDDQJGNzwnNpZb +RHDrssVRDHRgsRFHRlrVwzzpNGZlfZdppZdwGNZb +sHCHtDgtCjVVLFChqPMhBCMcSTqB +hdbQbqcCCQcqFbCbVdcWCQQlRMBtGlRHBtBMpHhpHThZMR +LLsSLLfgJPrgPnssnmlZtlZpHGHVGfZVtZpl +PvmvgmvvnzmrSsSLJDqDNzqFDQdDwzWWbV +HNNjnLbpLGHvWJDhdWWPpWDW +lVcSNgcSVclhRlPZPRCDCR +cqmSQrwwrrVSrtQFqVNmFwjQnvjHzBbLLGjfjzHTzvnH +QmvWVppPHQQvbbvmSHSpPzfzwnWMTZFFzwFMCzLnwT +jGBljlNNjgDtGDrNjjtjqqDRnMzRLnFzCFnMfRfMzCnttF +jqNrrGdJcdgLjqDqBrDQbbmhdQQmmpPbphmbVv +ZHQCggVHHRDWvbfjGptVtLvL +nnFwnwrDDMShnhFrFLLLpjvPlPGGtLGb +dcNSMhrrTDCBCsWgCTQW +HqDDLGtDdCnhfDnwnV +PmlJsJTPlbdBTzTnzhnnCCWWzV +lSPjMScggsScgjSMMbqHLFGrRLGHRZZtdrcG +ZVVtNNppdZSdLtCPqnHhqJJFtb +zgwwQBfwmGgSrDfgrrGBggzHCnbJbqbCJFnqhHBhnHHCqJ +rvrzfmlRrgDgmrzfggvwzvdjjcccLjMjVcVcsVLjVSZR +dppcLRHpphchhNhSddjzHzWQWQLtrMsrWQCWCsMZssCZ +JGfBfJJfBqvGVlVbDBwDBDBfZnrQsMQtssMttssDsQMWZncn +qPVwlgPBmjpPhcmS +zGPnzBgPzPnPlHZlDDHnZBNCvrtcjcjmMcFzNcNFmFdc +qQpfsLTTSspqTfJdmdCtMjdtjvJcmr +bfQqqSrswLLrfpLTqprfTnDVDVBBbgHPDHnhDPgDbV +JssTnsdFztZLdNJnNtTsLNZGqlbGFBqrGMHqHBcFBqMFMH +CCgSfgPSvSfhpShSRppCdfrlqGHGGcHmclmqbbqbqlPc +wvVSVjQSSQhRVvfQChvZZsdtJstjLNLZDJnLss +CmfNNNZNqDrnDjMhZM +gdczzGtdFcddtWQgGGMnVhnjJwnrJFDPTwMP +dlvcdzdHtzQSLRSfmhLSqv +ZpFFLcHFZZRRmJVZgD +PzhrtQntzcrjCRJtbtRgBsBRVR +zdzWfCzhQzlhWfWhlvpFNlpSqcMSHHMv +NrrMgMhNQhNjQrtqtPtwVtZpggPw +TfRLndnLFCRFTFbbRDHwpVqqBBwsHwZsfH +TJFRdLlRThrlcvZcvQ +scrwRVjbQvQBzsBC +gMfVqNnVmnCBQDTvdn +SMqhWqVlmWSmqMVRSJjjpcFrcLpJrR +HtSQHQntHsHMrtHnGfHQVVzLvSBSVvVVSFNJzzVN +cmPRmpqlpPmcgTlTpjJNjjVDvDRFNVVBFD +hlmCpmqmpgqpZTlcdQHFQfbHHZttwMQwtr +VpWgbgfwCjbftwVPPpGQFQhzTBQTBGPzqFTS +dbRbDcRrsnsRrLZmLRDZldDZqTNTGqqFFzGGhSTNTFTzNmNT +MlLdHlDDHrHclMMrCwgHCCwWwCbCCjjg +GGNLhfDMVcVrcGsT +jSJQFjHbwPFSvQSHwZFvHSHrqCCrrTsqBwNBrcBNsVTsqq +QjZSjZJZPvNRZJQPnSZbJZRWLfnmgDlmhdhWgWLdMdfmhM +CgGnzPNggCJtNTgTZTPZzZZvvcDcDDdqDFcJssJDHDqvHq +jhhrrLVlmLRRnRflfVbFHHHqdVsDqcvbHVDb +jWfWwrlmRRnQmPzZNGZPBNCQTB +NzDDhwNmhvtrGmNCvWRVbcRRVTcHHcVFTbwV +LgsPlLsQgQdJsLdldtpgFFTMbnFqTcMbHqFcPncq +dgsJsLLLggljrhtGNNtSjvGm +ptzSrZtzhsmmtPrhLFRFnjnnLMsnfLRL +HvwVDHwWWgGDGdHgqVDWDMnRnTjFNTNjfLJvRRRRRR +DwDgWgQbDDDHwBBBWdwQGVHhlhlZZSSmztfcppSBhzZcZp +CWmWRzlMJqWDWqCJbqDlCBBVLMQHVMGrfMVtQZrsLL +SnhPdFFPNZsBBdHtVQ +SSPcFFgnwnSpwvcSjwzCqRzTmJbpJCRBmbbD +wQbqGWWSqwrbGWWWGjbNMJPfgfnnDmPnPNLfjN +tJFztRZCvVRCztZFZRVgmMhmgNLfRfnmDPNPhm +BFCVZzpVFlHCdbQqcTcGlJbbSG +tttfLPZZQZTlZPHHPWgMVvBnjmvjnjgGBQ +FzcNDDDrNzprrrshprhFJtVGVnjtjGvnhvVnnjnjGM +RDqJNszDPfdqPtlT +QCJdMjCQbdBjSbTHDsbWDDwHTP +zlvlmqzqGfgdNzLldrHwwPGpWDrPGZWprr +gfVfRczVqcRzmdcSQMjQSQCSjQCQ +RhhCGhRBShjjRfpwppFTfFHZHZZD +qzdqzlnPPctPdmtPdTZbwQvvwqvHHvZpwZ +nVTVTcsWmWSRhhRVrGVB +GmshRMnzqRGsPNwMwcrrpcVV +CDCbFCLvCgfDSFLslgDpwpLtTwwcPtNNtTTprt +JvSFbSbbFllJlgDvlJbgdRhRdqzBGnzshZnRRRnHBZ +ShJhtcsvvvQbnnsccVTLVTppWqddpVnLWp +NdzPrPZgPMNNrmzpTzpTCjWfzCpzVL +dZgHmZRPPZRlZmrPDtDRccvbtQQbJbRS +wqjLjwhznhBLqLWGfvSlvcmlrJsqrtJTJJ +PwbpFPQDRCDrDJTrTmvs +gbZVFbZHgwHbCdpCRMnffNLhWnnzMdzLLW +RVVGSNTTRlNqHblBNB +JfwJMvLLZwLsMJwWMJfwLHBqzFlvzpBQcqzblFbBqblq +wMCZJsgJCCCnsMHrgLLjSPSVTgShtRjTPhRRmt +lmQSSWdMHHLWgWqD +ZZtVGGGJrJvGVCwfgHNLccmNFFcqtc +vrCGPhvrTPdRBnsRTmmp +dDMDDjzCQjwCCcDgjSLLLsLNlmpplN +FqrHFTFRLCLVFBmS +JhHJhHRThrfPZPvhnTZZbWdwdwDDWtDzJDtbMtCW +ghwDzJRDwHmPthncSPncLLsPcvnv +MWCrNTCHrMVjQQMQcSdnpTLnFFdTcnTc +qbWMfWfNrWVQWfbjVBbqMfwDtqzmhmRRzGhtHhHhRwZh +fmSmnjTjrlzGlTzJdH +BrhRRQMrgQvgFFhQQbwpFvGGdZqZJqpJqHVpJGJLHdLJ +ggbDwQMsvsMQrFMFcWSPSCPmSsPfnnmP +cmNVbMrrrjcHDRcvfW +wQGdFfSThFsLhhHWvDCWDCJRCCjd +LtpStGhqrrpnfnpp +bvcccTqbgvpGndJtgdsgNd +wDQwQhtQhQRmSmjsJndJdBBJBJnlLS +hwhmRrzFVjtwzDmrVFrvPCcCMVPPvfqpCCTVVb +jRrRNPNRWjPRWPRQNjQjThTCzBBzDCFBGzgDFGGQ +dnppLwmwCnvtlqltvtnTGBThGhdFZhgzDzGccD +MvnqpLlMqCqCHMjWPPHMSHSs +NNpNNvpvBdtTrMFFMhSSwzjzchzwhzwL +VVndHqflQZZZgHSLLhjzRSmZRhcR +glGgnqbQlngnWCGJpJprtrtFrdPPGs +WqwRjzGtRzZZRRGjWBJzjwmfMTHGGssTTDsrLmmmQLMD +SNdvSdFlSNNhSPFFcPFclbQQslHmfHTDsTQMLgDTmHQQ +CNcCFvpdnWpjWwJf +PVPnVHcnRncGZqbVzHVPnnLbSMjwrzWMjSwDtWwWtwWhwDWz +pTfsQCshCllpglWWSjBMSQSrMrjM +hvpvppggCpJTvTmshgfsmZRRHqbcLPHZmPLRnmPZ +LQbhVZZmZhZjBdbGmgHqnHTmvqgnnWHr +SzCfDFFNRfsSFFMFfvprvpWzqzgqTwHTvp +CDNDFJgMDSQhjVdPJLQG +plpdLdpjjrrHJJjLrrHLFdbzzCcvzgFgcwggzPMFvvcMhM +GRtSBQNsQlMPRzRlzw +ZSTtsmBlmjLLpnpH +hglGNVSdNSghzSgCBhDFLBMBtFMMFtHtbtLL +frQZccRcqGFmFHrJ +nvfGZwvTwGTfQwvfTwfgnCSlpdnzgzslppCsCV +snTSPbQnTTnQgbmsTJsLfZwjffhpLnGRjpGfjL +dcNWcNHHlNtWHHlCtltWNFNMLZwjpGfpmrZfrFprrRGpwZfp +HmdNWCmDMVvQPDgqJs +GGFtSngQLfnSnQffgPnRgFRGRwmRJvwbBbJDwjvTbjrwhJvJ +WHClslcNNWcqNWlCZdcHsVrThBwBjbhDTDBhrvDZJTwm +NWVqqcHHNpsNcNVdVlhCMlHQQMQQzLfzQPttFGPMLSLgtF diff --git a/inputs/day_04 b/inputs/day_04 new file mode 100644 index 0000000..cbdde37 --- /dev/null +++ b/inputs/day_04 @@ -0,0 +1,1000 @@ +16-80,80-87 +4-9,10-97 +6-94,93-93 +31-73,8-73 +4-72,5-73 +6-63,4-5 +3-44,4-45 +89-96,95-95 +56-95,29-95 +5-22,5-22 +49-63,48-63 +97-97,2-98 +1-13,3-63 +63-93,64-94 +41-63,64-76 +24-45,46-72 +28-94,29-78 +18-36,35-37 +83-85,8-84 +22-35,21-22 +18-48,18-18 +98-98,1-99 +88-94,94-96 +21-93,74-93 +63-83,62-82 +89-90,15-90 +63-80,61-79 +12-14,19-63 +30-30,31-78 +7-88,87-88 +27-41,27-27 +6-35,6-36 +3-78,77-79 +4-67,22-57 +19-82,65-87 +3-93,6-46 +18-30,31-41 +14-95,13-94 +33-59,17-33 +37-38,38-96 +1-5,4-90 +64-79,39-84 +59-62,1-37 +15-29,2-9 +38-44,37-43 +8-75,9-54 +77-89,7-77 +2-87,2-86 +7-81,6-6 +59-94,93-93 +27-75,9-27 +24-76,23-75 +2-10,28-63 +60-61,17-60 +76-76,2-75 +12-60,13-61 +39-96,95-95 +31-88,88-94 +6-79,35-66 +51-93,58-94 +40-74,23-40 +12-62,13-65 +30-49,49-69 +36-98,10-98 +29-95,9-95 +8-79,79-86 +1-73,2-19 +8-15,14-16 +6-34,1-5 +38-58,37-59 +58-84,62-84 +26-26,25-27 +5-89,47-88 +36-50,34-49 +59-94,58-95 +67-71,68-70 +3-64,3-65 +65-93,94-94 +38-91,75-95 +97-97,6-98 +32-78,33-79 +20-89,19-90 +34-95,35-95 +3-99,2-97 +29-90,89-89 +31-48,32-49 +63-81,51-72 +6-96,98-99 +8-94,27-94 +7-99,3-99 +19-90,18-91 +28-97,27-88 +76-86,40-75 +7-65,6-8 +2-12,13-26 +83-88,60-86 +54-99,54-97 +6-7,6-97 +11-78,77-77 +3-99,3-99 +21-21,21-88 +11-20,2-50 +53-88,89-98 +52-97,52-98 +8-29,4-32 +88-89,6-89 +7-62,6-7 +89-98,8-89 +32-91,3-91 +39-49,48-50 +8-63,9-64 +23-80,22-79 +44-66,16-65 +44-58,38-58 +71-98,70-97 +4-99,5-99 +8-90,5-73 +51-98,77-96 +26-89,25-25 +8-25,14-65 +39-64,45-65 +30-94,59-92 +37-96,3-38 +45-72,22-44 +2-95,98-98 +35-35,34-34 +16-82,14-44 +66-79,65-78 +71-72,72-94 +14-21,13-20 +14-92,1-14 +24-69,68-88 +21-80,79-81 +56-86,69-85 +48-85,49-85 +47-90,90-91 +7-22,11-27 +97-98,24-92 +7-91,90-91 +46-58,58-69 +83-92,91-98 +27-66,27-66 +13-92,12-97 +84-86,17-79 +55-91,54-56 +2-87,2-88 +46-46,46-78 +97-97,92-98 +24-47,25-46 +4-22,21-27 +76-87,11-77 +17-87,16-18 +50-81,49-87 +93-98,29-93 +19-44,20-43 +18-53,53-57 +9-45,9-46 +7-55,33-55 +22-25,25-81 +96-96,75-97 +9-11,10-99 +27-73,72-74 +10-72,71-71 +65-66,64-66 +27-81,86-96 +33-37,37-68 +26-90,46-90 +1-4,4-97 +9-95,10-95 +6-32,7-72 +68-89,12-95 +2-98,13-99 +89-91,55-90 +7-23,22-67 +11-11,11-68 +86-90,72-91 +33-53,29-29 +80-91,6-80 +15-87,27-73 +1-99,1-99 +68-69,64-95 +17-62,45-61 +7-26,26-30 +64-96,95-97 +17-18,18-58 +20-97,98-98 +4-87,5-87 +15-19,18-19 +66-67,23-66 +13-95,9-94 +14-81,82-85 +12-85,8-85 +4-91,3-4 +98-99,31-95 +3-77,2-76 +15-97,5-15 +45-72,71-73 +3-70,2-4 +81-97,18-95 +68-83,17-84 +1-3,4-77 +33-92,91-91 +31-91,30-32 +45-64,46-65 +23-94,89-95 +5-76,5-58 +5-86,3-86 +31-69,8-69 +66-69,66-68 +50-64,63-64 +1-97,99-99 +76-77,75-80 +90-97,88-97 +22-52,11-30 +40-70,40-98 +2-96,42-99 +4-49,1-59 +20-75,74-76 +23-52,42-66 +3-94,92-96 +4-93,2-3 +4-92,3-92 +57-75,70-76 +4-95,2-5 +1-41,2-8 +94-99,2-81 +45-63,10-63 +3-8,9-45 +17-50,17-49 +43-76,42-76 +2-86,85-87 +27-29,28-42 +74-80,37-53 +19-97,13-99 +9-31,9-31 +37-39,38-59 +26-79,15-91 +85-85,31-86 +99-99,5-96 +10-39,9-16 +22-60,22-59 +13-95,1-12 +91-93,23-93 +77-98,19-78 +53-93,93-98 +78-80,27-79 +23-25,23-24 +12-62,11-13 +4-48,1-73 +6-63,6-63 +35-86,34-36 +5-27,4-27 +23-73,5-83 +28-34,21-38 +36-93,93-97 +16-84,17-84 +12-99,11-80 +33-81,20-32 +76-93,50-98 +30-82,33-93 +1-99,1-99 +61-68,32-67 +20-84,20-83 +7-13,6-13 +51-52,7-52 +27-67,65-65 +1-91,90-91 +81-98,86-98 +93-97,48-93 +4-53,5-53 +68-76,18-74 +5-21,1-6 +19-97,18-98 +2-65,2-66 +4-72,4-73 +5-92,65-75 +9-77,23-76 +17-89,17-89 +57-60,55-59 +2-90,1-1 +28-81,28-81 +34-56,48-85 +2-97,97-99 +42-43,43-99 +17-60,15-19 +62-99,6-62 +32-41,25-44 +4-37,7-36 +22-72,71-73 +24-32,24-33 +44-78,44-44 +1-32,32-65 +47-95,14-95 +47-77,46-56 +5-97,3-99 +20-99,21-98 +9-65,8-65 +88-96,23-96 +15-64,9-64 +1-24,25-64 +71-91,90-91 +51-52,39-53 +10-57,9-19 +8-86,7-87 +3-7,8-78 +13-17,16-49 +6-90,7-72 +6-86,4-85 +17-93,16-94 +7-83,82-83 +33-81,32-62 +13-99,19-99 +26-98,88-96 +48-98,97-98 +36-50,49-50 +1-75,74-75 +15-95,2-15 +51-58,16-51 +1-98,6-98 +2-99,10-90 +13-97,96-96 +50-70,43-70 +15-33,14-16 +8-89,7-44 +44-91,40-44 +93-94,2-96 +4-88,5-89 +15-73,73-74 +96-97,97-98 +39-57,56-85 +65-67,47-66 +26-27,27-78 +57-80,57-80 +97-99,2-98 +18-18,18-18 +27-47,27-48 +86-93,90-97 +19-47,10-48 +62-78,28-78 +93-99,3-93 +55-59,55-78 +98-99,89-91 +34-35,7-35 +78-88,21-79 +26-92,15-33 +57-64,38-57 +47-92,91-91 +14-38,13-13 +96-99,40-96 +55-84,25-82 +56-76,73-86 +10-82,26-81 +30-89,31-89 +24-68,25-68 +11-44,12-45 +33-49,11-49 +58-58,18-57 +23-84,23-85 +3-31,2-2 +50-96,41-96 +5-98,1-6 +10-97,11-97 +36-91,38-91 +9-88,20-87 +6-96,6-97 +28-87,74-87 +6-77,1-78 +6-73,6-74 +66-93,18-85 +5-80,66-80 +12-95,8-95 +68-89,18-68 +6-15,14-16 +4-87,4-88 +50-50,24-54 +96-97,3-96 +3-46,12-50 +77-87,29-34 +32-53,52-91 +10-68,5-68 +40-54,47-54 +8-22,9-16 +96-99,2-97 +10-63,6-9 +22-65,64-65 +88-89,87-90 +15-99,98-98 +89-89,66-90 +9-65,4-10 +36-61,39-39 +78-99,70-78 +85-87,86-97 +3-73,67-82 +3-68,68-69 +14-15,15-90 +42-59,43-59 +15-60,3-4 +25-92,29-79 +19-99,18-18 +3-88,10-76 +61-98,97-98 +2-92,1-7 +24-86,17-24 +82-82,3-83 +23-25,20-26 +4-65,1-66 +68-72,34-76 +24-93,25-94 +17-47,18-48 +30-65,30-65 +71-77,75-76 +24-64,58-88 +4-30,31-31 +4-65,5-66 +12-65,64-64 +52-52,51-81 +67-69,2-68 +6-81,8-81 +53-88,52-53 +70-98,69-98 +13-15,14-79 +15-71,14-86 +31-65,31-64 +59-86,5-86 +8-9,8-15 +94-96,63-78 +28-49,27-82 +3-3,3-95 +74-74,75-96 +82-96,97-97 +18-83,6-98 +1-74,3-41 +25-87,24-88 +42-96,95-96 +25-89,26-35 +35-61,35-61 +20-39,22-35 +4-65,3-5 +48-97,46-67 +37-73,38-73 +42-45,42-43 +54-85,84-85 +23-61,20-23 +23-60,22-28 +41-63,23-41 +68-90,69-89 +12-97,2-33 +8-83,25-83 +6-12,5-15 +37-67,31-68 +1-2,5-81 +63-89,62-62 +63-90,4-63 +8-95,1-7 +47-72,41-44 +93-94,19-81 +86-88,25-87 +57-57,57-88 +13-94,13-93 +16-17,15-16 +61-80,58-81 +4-96,3-4 +12-28,31-54 +57-96,56-57 +16-89,17-19 +71-87,70-90 +79-93,78-92 +31-38,32-70 +16-17,17-75 +76-92,91-95 +77-77,56-76 +63-90,62-66 +6-86,2-81 +3-42,4-41 +38-94,93-98 +52-60,52-61 +17-84,16-84 +5-5,13-90 +25-25,25-39 +22-91,22-90 +11-76,10-11 +9-45,2-45 +70-77,69-76 +6-10,5-7 +36-36,37-42 +12-96,54-98 +2-96,1-1 +2-94,5-94 +32-84,83-88 +84-84,84-96 +17-54,53-54 +1-68,14-69 +9-98,8-97 +1-88,85-94 +40-69,39-39 +5-21,21-76 +27-28,5-28 +2-80,2-81 +15-96,9-15 +87-89,2-89 +19-84,33-92 +32-95,11-95 +38-53,17-37 +67-89,67-90 +4-5,5-60 +45-84,83-88 +9-32,77-86 +45-72,16-65 +23-24,23-92 +8-93,92-92 +7-91,7-90 +45-48,47-78 +58-58,4-59 +86-91,13-87 +79-85,28-79 +12-13,10-16 +62-99,98-98 +25-96,25-96 +16-57,56-79 +38-77,38-76 +82-97,68-83 +7-66,56-63 +5-7,6-95 +15-93,8-15 +9-93,10-93 +74-90,51-91 +69-75,63-80 +4-11,10-91 +36-99,33-53 +8-8,9-95 +94-96,95-96 +1-38,37-38 +66-77,67-78 +65-87,87-95 +35-37,36-48 +55-92,54-93 +20-21,19-21 +76-76,77-98 +39-69,44-57 +6-26,25-54 +18-37,36-37 +34-74,45-57 +60-83,98-99 +92-94,3-93 +13-59,12-72 +48-98,6-87 +17-88,8-87 +24-92,23-93 +98-98,4-94 +11-57,8-8 +65-87,12-87 +25-99,25-98 +18-88,18-87 +34-80,33-79 +45-96,5-97 +33-67,20-33 +2-98,97-98 +32-33,33-90 +85-90,85-91 +94-94,38-95 +93-93,42-92 +38-48,13-78 +3-95,25-89 +17-93,16-16 +57-70,39-53 +11-61,7-10 +39-89,6-39 +7-17,16-97 +30-95,56-94 +2-8,8-23 +4-17,17-45 +77-82,73-77 +21-84,8-29 +35-91,81-97 +5-54,3-9 +1-94,2-95 +7-66,67-96 +21-45,15-22 +6-45,11-44 +52-87,29-51 +15-82,46-81 +74-76,45-75 +95-99,20-93 +40-89,24-52 +20-99,20-99 +5-34,35-97 +27-45,44-62 +8-75,2-8 +50-55,43-49 +15-50,19-50 +13-71,10-71 +45-64,44-45 +88-92,47-88 +33-68,33-52 +39-79,31-88 +31-58,95-97 +22-31,2-31 +36-88,37-89 +45-93,44-92 +6-97,96-98 +34-72,10-82 +54-58,31-58 +96-98,6-96 +45-46,46-96 +56-69,55-68 +14-54,13-53 +25-45,18-81 +54-55,40-55 +94-98,72-94 +7-91,6-92 +69-96,68-95 +42-82,41-46 +64-94,13-91 +52-80,52-81 +39-69,15-73 +32-53,33-52 +11-22,11-21 +15-79,14-69 +44-65,51-66 +1-32,4-26 +36-36,6-35 +65-71,65-72 +49-74,23-74 +27-96,74-96 +12-70,13-71 +64-66,7-66 +17-97,18-99 +30-30,31-95 +94-96,90-94 +1-15,15-15 +11-45,7-10 +14-93,15-93 +19-47,20-44 +9-97,8-98 +6-62,61-63 +21-51,50-63 +4-95,2-95 +54-55,55-58 +4-62,4-63 +18-88,18-87 +4-79,5-79 +92-97,10-93 +9-79,20-78 +44-87,26-91 +7-51,10-51 +43-92,62-95 +16-44,16-45 +5-98,4-99 +20-64,19-63 +2-20,1-19 +12-96,12-95 +13-94,95-95 +16-46,8-87 +5-24,25-54 +4-12,6-18 +32-66,31-37 +24-76,56-96 +5-51,4-51 +55-60,54-55 +11-74,6-7 +6-99,53-68 +15-90,88-91 +27-84,28-83 +14-67,3-98 +41-56,30-54 +29-52,29-51 +83-89,12-85 +47-76,40-64 +18-70,18-18 +5-20,6-21 +26-53,25-53 +36-48,49-92 +48-80,47-48 +51-63,17-58 +9-79,47-80 +38-39,7-39 +38-58,23-51 +19-37,36-37 +1-61,1-60 +9-65,8-65 +15-17,16-95 +50-66,50-79 +18-39,17-18 +7-14,13-98 +5-80,5-80 +12-98,12-12 +5-6,6-99 +72-91,24-95 +46-92,20-96 +27-73,26-49 +7-52,52-98 +20-57,2-56 +1-69,6-68 +52-95,53-95 +58-71,58-65 +20-86,20-86 +50-71,49-49 +9-79,8-78 +45-62,25-45 +15-23,18-24 +4-96,4-95 +13-97,12-97 +1-99,15-96 +52-54,53-54 +7-10,9-42 +12-79,11-78 +1-88,1-89 +23-95,24-94 +5-96,5-96 +27-73,64-73 +31-97,74-97 +6-74,74-90 +29-91,14-30 +16-36,7-37 +70-83,69-82 +58-96,30-97 +9-89,51-64 +63-88,87-99 +9-22,9-21 +25-99,22-22 +60-60,21-61 +31-83,32-88 +31-65,64-97 +9-9,9-91 +10-47,9-21 +14-97,60-83 +5-74,5-73 +4-7,6-89 +1-94,50-92 +12-69,11-12 +75-84,80-85 +27-38,18-39 +11-27,4-12 +93-96,5-93 +56-88,88-97 +45-99,20-95 +21-93,94-94 +16-96,15-16 +86-92,6-84 +10-63,3-7 +23-59,58-69 +10-13,12-12 +15-97,14-86 +15-98,4-50 +30-30,22-29 +44-58,45-58 +85-87,42-86 +58-59,16-59 +14-63,8-14 +48-64,48-64 +1-34,1-33 +75-99,76-98 +8-60,1-8 +3-8,7-9 +22-70,1-71 +38-93,93-99 +91-93,62-92 +95-95,6-96 +4-92,4-92 +35-99,36-84 +53-94,51-51 +27-93,27-94 +3-5,4-55 +88-94,44-94 +79-95,85-94 +11-23,23-46 +62-88,89-89 +1-84,1-85 +84-86,85-89 +1-99,1-99 +64-81,46-64 +25-26,25-31 +17-92,3-4 +7-51,16-24 +17-97,85-99 +5-5,6-91 +73-91,90-91 +18-65,49-64 +1-93,92-92 +5-97,96-97 +7-14,13-14 +42-73,42-86 +40-48,34-48 +22-94,21-93 +5-71,70-70 +74-92,11-91 +90-92,5-91 +53-58,16-59 +20-78,8-78 +3-5,4-4 +48-50,49-95 +71-88,44-45 +30-39,7-30 +11-69,40-69 +7-85,82-90 +75-79,53-67 +6-84,83-83 +86-95,88-96 +3-46,2-47 +3-86,86-94 +50-98,46-50 +24-45,23-24 +44-52,4-91 +38-67,67-99 +70-93,34-94 +40-86,40-40 +5-71,9-58 +31-71,31-70 +11-50,49-64 +34-39,35-45 +45-72,38-44 +68-73,72-72 +63-64,15-64 +91-91,31-90 +15-86,10-85 +6-17,7-8 +7-96,53-99 +88-88,28-89 +22-65,18-22 +13-95,99-99 +23-99,22-99 +55-62,33-55 +8-85,47-84 +13-81,14-22 +7-90,92-99 +11-47,13-77 +38-64,20-65 +58-61,2-62 +19-27,11-27 +30-43,29-34 +74-95,93-95 +66-76,62-87 +88-88,89-89 +45-80,45-80 +31-76,31-87 +37-84,37-37 +81-81,66-80 +41-85,19-42 +19-47,5-18 +50-75,25-75 +91-92,46-91 +65-84,3-47 +32-34,32-33 +36-60,5-61 +11-98,12-99 +27-74,27-74 +4-41,31-93 +46-76,45-74 +12-38,26-38 +5-80,5-80 +5-99,6-99 +49-90,49-49 +5-85,1-4 +3-99,4-28 +21-39,1-21 +46-86,45-69 +73-92,73-91 +2-97,45-97 +1-81,3-60 +44-78,17-78 +11-78,77-79 +18-51,52-75 +20-82,20-82 +43-55,4-43 +2-33,3-33 +11-16,4-10 +26-34,27-34 +85-94,93-93 +20-30,13-31 +42-90,42-89 +30-45,46-93 +5-99,4-95 +51-51,51-52 +95-96,38-96 +20-72,19-98 +31-86,30-86 +42-82,43-83 +15-89,21-90 +5-98,5-98 +7-96,37-98 +28-29,28-62 +4-89,36-89 +2-98,71-97 +28-90,8-17 +72-73,45-73 +95-96,82-96 +4-60,59-77 +20-63,64-64 +2-24,2-46 +26-67,26-68 +52-53,32-53 +24-99,79-88 +60-62,23-61 +2-96,3-97 +13-92,29-71 +1-2,1-85 +9-77,44-99 +1-96,3-96 +1-68,4-67 +52-60,12-61 +10-90,10-90 +66-69,41-69 +99-99,35-97 +15-95,14-95 +93-95,80-92 +7-41,8-42 +1-94,95-95 +3-32,1-32 +80-83,17-84 +53-69,68-91 +86-90,2-87 +73-87,28-86 +8-35,7-34 +74-88,36-74 +45-45,44-68 +67-88,9-66 +54-90,29-91 +13-45,44-94 +70-71,24-71 +82-96,81-97 +43-73,42-73 +8-45,39-44 +5-42,6-43 +54-93,5-55 +75-96,75-96 +11-31,3-7 +82-90,81-82 +33-77,54-57 +77-79,73-79 +34-90,33-56 +4-13,13-49 +3-19,18-97 +3-97,2-99 +28-51,19-29 +77-78,5-94 +9-11,10-11 +51-69,51-68 +34-73,46-52 +25-96,96-98 +1-55,2-55 +20-81,26-70 +91-97,79-92 +22-74,9-22 +3-97,2-3 +39-94,32-93 +66-95,96-97 +10-10,9-11 +30-65,21-40 +2-94,4-93 +1-91,2-90 +31-84,84-99 +82-95,6-75 +67-91,90-91 +12-12,12-97 +7-75,6-7 +28-28,14-27 +45-50,35-49 +43-72,71-73 +59-73,21-73 +58-75,39-82 +96-97,96-98 +97-97,2-98 +6-92,3-7 +84-86,27-85 +39-95,31-45 +27-84,43-95 +48-95,33-95 +47-55,46-48 +42-82,41-69 +12-96,13-98 +6-99,1-4 +62-94,62-94 +64-82,4-83 +73-75,10-74 +11-24,10-12 +23-54,7-23 +48-53,18-69 +7-11,10-11 +87-87,11-88 +50-79,78-78 +4-52,51-53 +81-82,39-82 +94-97,1-95 +15-75,33-75 +40-52,33-38 +34-71,70-71 +37-38,38-66 +7-43,5-6 +11-20,10-31 +19-98,1-4 +19-87,18-88 +94-95,18-95 +5-13,7-98 +45-73,32-45 +18-95,94-94 +37-95,94-95 +41-42,26-43 +18-92,19-92 +70-90,19-79 +16-95,15-96 diff --git a/inputs/day_05 b/inputs/day_05 new file mode 100644 index 0000000..a572b71 --- /dev/null +++ b/inputs/day_05 @@ -0,0 +1,513 @@ +[G] [D] [R] +[W] [V] [C] [T] [M] +[L] [P] [Z] [Q] [F] [V] +[J] [S] [D] [J] [M] [T] [V] +[B] [M] [H] [L] [Z] [J] [B] [S] +[R] [C] [T] [C] [T] [R] [D] [R] [D] +[T] [W] [Z] [T] [P] [B] [B] [H] [P] +[D] [S] [R] [D] [G] [F] [S] [L] [Q] + 1 2 3 4 5 6 7 8 9 + +move 1 from 3 to 5 +move 5 from 5 to 4 +move 6 from 7 to 3 +move 6 from 1 to 3 +move 1 from 1 to 9 +move 1 from 1 to 4 +move 3 from 6 to 9 +move 2 from 7 to 5 +move 1 from 5 to 7 +move 1 from 7 to 2 +move 2 from 2 to 5 +move 2 from 6 to 3 +move 6 from 8 to 9 +move 7 from 3 to 9 +move 1 from 8 to 7 +move 8 from 9 to 7 +move 5 from 4 to 8 +move 1 from 6 to 2 +move 2 from 8 to 4 +move 9 from 9 to 1 +move 2 from 8 to 5 +move 1 from 8 to 5 +move 5 from 9 to 2 +move 1 from 6 to 8 +move 5 from 1 to 7 +move 1 from 8 to 2 +move 2 from 1 to 7 +move 1 from 2 to 6 +move 4 from 5 to 4 +move 2 from 1 to 4 +move 13 from 7 to 8 +move 3 from 8 to 6 +move 2 from 6 to 8 +move 10 from 3 to 5 +move 2 from 7 to 6 +move 3 from 5 to 6 +move 10 from 8 to 1 +move 1 from 8 to 6 +move 6 from 2 to 4 +move 1 from 5 to 8 +move 5 from 6 to 3 +move 2 from 8 to 6 +move 1 from 7 to 9 +move 2 from 2 to 7 +move 3 from 5 to 1 +move 2 from 7 to 2 +move 6 from 6 to 3 +move 7 from 5 to 6 +move 5 from 3 to 2 +move 10 from 1 to 8 +move 2 from 1 to 3 +move 8 from 3 to 7 +move 9 from 4 to 8 +move 1 from 9 to 2 +move 2 from 7 to 8 +move 4 from 6 to 9 +move 1 from 4 to 9 +move 5 from 7 to 4 +move 3 from 6 to 5 +move 1 from 1 to 5 +move 14 from 4 to 8 +move 3 from 9 to 7 +move 4 from 5 to 9 +move 2 from 4 to 1 +move 27 from 8 to 6 +move 2 from 7 to 2 +move 2 from 7 to 4 +move 4 from 2 to 9 +move 7 from 8 to 4 +move 10 from 4 to 1 +move 18 from 6 to 5 +move 6 from 9 to 2 +move 1 from 9 to 5 +move 11 from 2 to 6 +move 2 from 5 to 4 +move 1 from 2 to 8 +move 2 from 4 to 9 +move 2 from 8 to 3 +move 1 from 6 to 8 +move 4 from 9 to 7 +move 4 from 7 to 8 +move 7 from 5 to 1 +move 4 from 6 to 3 +move 2 from 3 to 7 +move 6 from 5 to 3 +move 2 from 8 to 2 +move 14 from 6 to 2 +move 3 from 8 to 1 +move 15 from 2 to 3 +move 1 from 6 to 1 +move 14 from 3 to 2 +move 2 from 2 to 5 +move 1 from 9 to 3 +move 13 from 1 to 3 +move 4 from 2 to 6 +move 10 from 1 to 3 +move 2 from 6 to 9 +move 6 from 2 to 9 +move 6 from 5 to 2 +move 2 from 6 to 8 +move 7 from 9 to 5 +move 1 from 5 to 8 +move 2 from 7 to 6 +move 34 from 3 to 6 +move 19 from 6 to 2 +move 12 from 6 to 9 +move 3 from 6 to 3 +move 2 from 3 to 2 +move 1 from 6 to 5 +move 17 from 2 to 8 +move 2 from 3 to 2 +move 8 from 9 to 4 +move 7 from 5 to 2 +move 5 from 4 to 1 +move 4 from 1 to 6 +move 1 from 1 to 6 +move 6 from 6 to 8 +move 2 from 8 to 4 +move 17 from 8 to 6 +move 2 from 4 to 5 +move 17 from 6 to 9 +move 22 from 9 to 7 +move 1 from 5 to 2 +move 20 from 2 to 7 +move 29 from 7 to 9 +move 1 from 4 to 7 +move 3 from 8 to 3 +move 1 from 8 to 5 +move 3 from 8 to 2 +move 2 from 2 to 4 +move 27 from 9 to 7 +move 2 from 3 to 2 +move 1 from 5 to 2 +move 18 from 7 to 5 +move 1 from 3 to 2 +move 1 from 5 to 6 +move 18 from 5 to 3 +move 1 from 6 to 3 +move 2 from 9 to 5 +move 10 from 3 to 5 +move 4 from 3 to 6 +move 1 from 7 to 1 +move 1 from 5 to 1 +move 6 from 7 to 6 +move 1 from 6 to 2 +move 4 from 4 to 8 +move 5 from 5 to 4 +move 1 from 3 to 8 +move 2 from 1 to 8 +move 2 from 2 to 5 +move 3 from 3 to 8 +move 6 from 8 to 2 +move 1 from 3 to 9 +move 1 from 6 to 3 +move 6 from 2 to 8 +move 7 from 8 to 4 +move 8 from 5 to 2 +move 5 from 4 to 6 +move 2 from 8 to 3 +move 2 from 3 to 9 +move 1 from 3 to 9 +move 2 from 7 to 1 +move 2 from 1 to 2 +move 12 from 2 to 4 +move 1 from 9 to 7 +move 1 from 6 to 2 +move 9 from 7 to 9 +move 1 from 8 to 2 +move 9 from 9 to 8 +move 6 from 7 to 8 +move 4 from 4 to 1 +move 6 from 2 to 5 +move 1 from 4 to 9 +move 3 from 1 to 9 +move 6 from 4 to 5 +move 5 from 8 to 9 +move 8 from 4 to 6 +move 3 from 9 to 8 +move 1 from 9 to 3 +move 3 from 8 to 3 +move 5 from 9 to 2 +move 3 from 2 to 6 +move 3 from 6 to 9 +move 3 from 6 to 2 +move 4 from 2 to 6 +move 6 from 9 to 7 +move 1 from 1 to 8 +move 8 from 8 to 5 +move 20 from 5 to 3 +move 2 from 2 to 8 +move 6 from 7 to 1 +move 10 from 6 to 3 +move 4 from 6 to 7 +move 4 from 1 to 9 +move 2 from 1 to 2 +move 3 from 6 to 9 +move 5 from 8 to 3 +move 3 from 7 to 9 +move 17 from 3 to 2 +move 1 from 6 to 2 +move 2 from 6 to 9 +move 1 from 6 to 4 +move 12 from 9 to 2 +move 1 from 4 to 7 +move 8 from 3 to 8 +move 8 from 8 to 9 +move 7 from 9 to 2 +move 1 from 9 to 7 +move 18 from 2 to 9 +move 1 from 7 to 2 +move 2 from 7 to 1 +move 1 from 1 to 2 +move 4 from 2 to 7 +move 15 from 9 to 3 +move 1 from 9 to 1 +move 2 from 1 to 8 +move 6 from 2 to 4 +move 8 from 2 to 1 +move 2 from 8 to 5 +move 2 from 9 to 3 +move 4 from 4 to 1 +move 2 from 5 to 8 +move 2 from 8 to 9 +move 14 from 3 to 1 +move 2 from 9 to 7 +move 2 from 4 to 3 +move 1 from 2 to 9 +move 5 from 7 to 9 +move 21 from 1 to 9 +move 2 from 1 to 6 +move 3 from 2 to 4 +move 1 from 7 to 3 +move 19 from 9 to 5 +move 1 from 2 to 7 +move 1 from 7 to 2 +move 3 from 4 to 2 +move 19 from 5 to 7 +move 2 from 2 to 5 +move 1 from 5 to 3 +move 1 from 3 to 4 +move 8 from 9 to 4 +move 1 from 6 to 3 +move 1 from 2 to 6 +move 1 from 2 to 1 +move 8 from 7 to 3 +move 5 from 4 to 7 +move 2 from 6 to 4 +move 1 from 5 to 9 +move 1 from 1 to 6 +move 1 from 1 to 2 +move 2 from 4 to 7 +move 1 from 4 to 2 +move 2 from 4 to 9 +move 1 from 6 to 8 +move 1 from 1 to 5 +move 1 from 8 to 6 +move 1 from 1 to 4 +move 25 from 3 to 1 +move 1 from 4 to 2 +move 2 from 3 to 6 +move 3 from 1 to 9 +move 6 from 9 to 8 +move 1 from 6 to 3 +move 1 from 2 to 9 +move 15 from 7 to 6 +move 2 from 2 to 6 +move 1 from 3 to 8 +move 1 from 1 to 4 +move 6 from 8 to 4 +move 1 from 3 to 8 +move 1 from 8 to 5 +move 2 from 5 to 2 +move 8 from 6 to 7 +move 1 from 8 to 7 +move 1 from 9 to 4 +move 9 from 4 to 5 +move 19 from 1 to 3 +move 9 from 3 to 5 +move 6 from 7 to 2 +move 2 from 1 to 7 +move 7 from 2 to 4 +move 7 from 5 to 6 +move 5 from 4 to 3 +move 3 from 5 to 8 +move 1 from 2 to 4 +move 2 from 4 to 8 +move 14 from 6 to 1 +move 6 from 5 to 6 +move 1 from 5 to 2 +move 7 from 1 to 6 +move 1 from 2 to 4 +move 4 from 6 to 4 +move 1 from 5 to 4 +move 2 from 1 to 9 +move 2 from 9 to 4 +move 2 from 1 to 8 +move 9 from 3 to 6 +move 3 from 7 to 4 +move 4 from 8 to 6 +move 3 from 7 to 6 +move 1 from 7 to 2 +move 1 from 7 to 5 +move 3 from 8 to 4 +move 26 from 6 to 1 +move 8 from 1 to 2 +move 1 from 6 to 4 +move 5 from 2 to 7 +move 2 from 2 to 4 +move 10 from 4 to 7 +move 1 from 6 to 1 +move 22 from 1 to 2 +move 1 from 6 to 1 +move 6 from 4 to 7 +move 1 from 5 to 1 +move 1 from 1 to 2 +move 21 from 7 to 2 +move 38 from 2 to 3 +move 8 from 2 to 6 +move 2 from 4 to 8 +move 2 from 8 to 2 +move 1 from 1 to 3 +move 1 from 2 to 8 +move 1 from 2 to 5 +move 6 from 6 to 4 +move 2 from 4 to 2 +move 2 from 2 to 6 +move 1 from 8 to 2 +move 28 from 3 to 1 +move 11 from 1 to 2 +move 8 from 1 to 7 +move 4 from 6 to 4 +move 8 from 3 to 1 +move 8 from 2 to 5 +move 6 from 5 to 4 +move 2 from 5 to 4 +move 8 from 3 to 4 +move 22 from 4 to 1 +move 2 from 3 to 5 +move 33 from 1 to 5 +move 26 from 5 to 6 +move 4 from 5 to 7 +move 2 from 2 to 7 +move 2 from 7 to 2 +move 2 from 7 to 8 +move 2 from 8 to 3 +move 6 from 1 to 3 +move 5 from 5 to 1 +move 1 from 5 to 7 +move 7 from 7 to 5 +move 4 from 5 to 6 +move 5 from 1 to 8 +move 4 from 2 to 4 +move 2 from 7 to 4 +move 2 from 7 to 3 +move 5 from 4 to 6 +move 1 from 8 to 2 +move 1 from 2 to 4 +move 10 from 3 to 6 +move 44 from 6 to 9 +move 2 from 5 to 7 +move 1 from 5 to 8 +move 41 from 9 to 1 +move 1 from 6 to 4 +move 2 from 8 to 1 +move 1 from 7 to 3 +move 1 from 3 to 8 +move 2 from 9 to 8 +move 29 from 1 to 9 +move 2 from 1 to 5 +move 2 from 8 to 3 +move 1 from 3 to 5 +move 2 from 5 to 9 +move 1 from 5 to 7 +move 25 from 9 to 2 +move 10 from 2 to 1 +move 1 from 7 to 8 +move 2 from 4 to 1 +move 2 from 8 to 9 +move 1 from 8 to 6 +move 4 from 2 to 4 +move 4 from 2 to 5 +move 1 from 6 to 5 +move 1 from 2 to 7 +move 2 from 4 to 1 +move 18 from 1 to 3 +move 8 from 9 to 4 +move 15 from 3 to 9 +move 3 from 4 to 8 +move 4 from 5 to 8 +move 4 from 2 to 4 +move 10 from 9 to 4 +move 4 from 8 to 5 +move 2 from 7 to 2 +move 11 from 4 to 9 +move 12 from 4 to 9 +move 2 from 5 to 7 +move 4 from 2 to 4 +move 5 from 8 to 1 +move 1 from 5 to 6 +move 1 from 4 to 6 +move 1 from 3 to 9 +move 1 from 5 to 7 +move 4 from 1 to 6 +move 6 from 1 to 5 +move 6 from 5 to 9 +move 3 from 7 to 6 +move 9 from 6 to 5 +move 8 from 5 to 2 +move 7 from 2 to 3 +move 1 from 3 to 1 +move 7 from 3 to 5 +move 2 from 4 to 1 +move 1 from 2 to 6 +move 2 from 1 to 3 +move 8 from 5 to 9 +move 3 from 1 to 3 +move 1 from 6 to 1 +move 2 from 4 to 1 +move 1 from 5 to 2 +move 2 from 1 to 6 +move 2 from 6 to 3 +move 2 from 3 to 2 +move 2 from 2 to 4 +move 1 from 2 to 6 +move 3 from 3 to 9 +move 2 from 4 to 8 +move 3 from 3 to 1 +move 4 from 1 to 7 +move 2 from 8 to 4 +move 7 from 9 to 6 +move 1 from 1 to 4 +move 11 from 9 to 7 +move 3 from 9 to 3 +move 14 from 9 to 5 +move 6 from 6 to 5 +move 4 from 5 to 9 +move 10 from 7 to 6 +move 1 from 3 to 7 +move 2 from 4 to 1 +move 4 from 7 to 9 +move 9 from 6 to 1 +move 3 from 6 to 5 +move 15 from 9 to 1 +move 1 from 4 to 7 +move 4 from 9 to 7 +move 12 from 5 to 1 +move 3 from 7 to 3 +move 4 from 7 to 2 +move 1 from 9 to 3 +move 22 from 1 to 2 +move 21 from 2 to 6 +move 3 from 1 to 9 +move 1 from 3 to 7 +move 1 from 7 to 3 +move 1 from 3 to 2 +move 8 from 1 to 4 +move 1 from 9 to 2 +move 7 from 4 to 8 +move 3 from 3 to 9 +move 3 from 3 to 5 +move 4 from 2 to 3 +move 1 from 1 to 3 +move 4 from 8 to 5 +move 2 from 8 to 3 +move 5 from 3 to 2 +move 6 from 5 to 3 +move 2 from 5 to 8 +move 2 from 1 to 7 +move 2 from 7 to 4 +move 15 from 6 to 9 +move 8 from 3 to 1 +move 3 from 5 to 9 +move 2 from 4 to 9 +move 8 from 1 to 3 +move 8 from 9 to 8 +move 1 from 1 to 4 +move 3 from 5 to 9 +move 4 from 8 to 1 +move 1 from 3 to 9 +move 2 from 4 to 3 +move 2 from 8 to 6 +move 3 from 8 to 7 +move 8 from 2 to 5 +move 3 from 5 to 2 +move 4 from 3 to 4 +move 3 from 6 to 1 +move 2 from 5 to 9 +move 4 from 4 to 1 +move 2 from 5 to 6 +move 1 from 5 to 4 +move 2 from 2 to 1 +move 4 from 3 to 9 +move 1 from 7 to 3 +move 2 from 7 to 4 +move 2 from 4 to 7 +move 1 from 6 to 7 +move 1 from 2 to 8 +move 2 from 3 to 9 +move 14 from 1 to 8 +move 1 from 6 to 2 +move 2 from 7 to 1 +move 3 from 8 to 3 +move 6 from 8 to 5 diff --git a/main.zig b/main.zig index 6609a2f..3d0ecb4 100644 --- a/main.zig +++ b/main.zig @@ -1,10 +1,72 @@ const std = @import("std"); +const Result = @import("util/aoc.zig").Result; + +const t = [_]struct { + day: type, + expect: []const Result, + input: []const u8, +}{ + .{ .day = @import("day_01.zig"), .input = @embedFile("inputs/day_01"), .expect = &[_]Result{ .{ .int = 69912 }, .{ .int = 208180 } } }, + .{ .day = @import("day_02.zig"), .input = @embedFile("inputs/day_02"), .expect = &[_]Result{ .{ .int = 12855 }, .{ .int = 13726 } } }, + .{ .day = @import("day_03.zig"), .input = @embedFile("inputs/day_03"), .expect = &[_]Result{ .{ .int = 8039 }, .{ .int = 2510 } } }, + .{ .day = @import("day_04.zig"), .input = @embedFile("inputs/day_04"), .expect = &[_]Result{ .{ .int = 483 }, .{ .int = 874 } } }, + .{ .day = @import("day_05.zig"), .input = @embedFile("inputs/day_05"), .expect = &[_]Result{ .{ .string = "SHMSDGZVC" }, .{ .string = "VRZGHDFBQ" } } }, +}; + +pub fn main() !void { + var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); + defer arena.deinit(); + const allocator = arena.allocator(); + return run_all(allocator); +} test { std.testing.refAllDecls(@This()); } -fn solve(allocator: std.mem.Allocator, puzzle: anytype, input: []const u8) !i32 { +fn run_all(allocator: std.mem.Allocator) !void { + inline for (t) |aoc_day, day| { + std.debug.print("\n", .{}); + inline for (aoc_day.expect) |expect, idx| { + const fn_name = comptimePrint("puzzle_{d}", .{idx + 1}); + const puzzle = @field(aoc_day.day, fn_name); + const start_time = try std.time.Instant.now(); + + const result = try solve( + allocator, + puzzle, + aoc_day.input[0 .. aoc_day.input.len - 1], // remove the last '^\n$' + ); + defer result.deinit(allocator); + + const end_time = try std.time.Instant.now(); + const elapsed_us = end_time.since(start_time) / std.time.ns_per_us; + + std.debug.print("day={d}, input_bytes={d}, time={d}µs, ", .{ + day + 1, + aoc_day.input.len, + elapsed_us, + }); + + switch (result) { + .string => |s| std.debug.print("puzzle_{d}={s}", .{ idx + 1, s }), + .int => |i| std.debug.print("puzzle_{d}={d}", .{ idx + 1, i }), + } + + if (!expect.cmp(result)) { + switch (expect) { + .string => |s| std.debug.print(", expected={s}\n", .{s}), + .int => |i| std.debug.print(", expected={d}\n", .{i}), + } + return error.UnexpectedValue; + } + + std.debug.print("\n", .{}); + } + } +} + +fn solve(allocator: std.mem.Allocator, puzzle: anytype, input: []const u8) !Result { return blk: { switch (@typeInfo(@TypeOf(puzzle))) { .Fn => |f| { @@ -39,56 +101,7 @@ inline fn comptimePrint(comptime fmt: []const u8, args: anytype) *const [std.fmt } test "test" { - const t = [_]struct { - day: type, - expect: []const i32, - input: []const u8, - }{ - .{ .day = @import("day-1/main.zig"), .input = @embedFile("day-1/input"), .expect = &[_]i32{ 69912, 208180 } }, - .{ .day = @import("day-2/main.zig"), .input = @embedFile("day-2/input"), .expect = &[_]i32{ 12855, 13726 } }, - .{ .day = @import("day-3/main.zig"), .input = @embedFile("day-3/input"), .expect = &[_]i32{ 8039, 2510 } }, - .{ .day = @import("day-4/main.zig"), .input = @embedFile("day-4/input"), .expect = &[_]i32{ 483, 874 } }, - }; - std.debug.print("\n", .{}); - - inline for (t) |aoc_day, day| { - std.debug.print("\n", .{}); - inline for (aoc_day.expect) |expected, idx| { - const fn_name = comptimePrint("puzzle_{d}", .{idx + 1}); - const puzzle = @field(aoc_day.day, fn_name); - const start_time = try std.time.Instant.now(); - - const result = try solve( - testing_allocator, - puzzle, - aoc_day.input[0 .. aoc_day.input.len - 1], // remove the last '^\n$' - ); - - const end_time = try std.time.Instant.now(); - const elapsed_us = end_time.since(start_time) / std.time.ns_per_us; - - if (result == expected) { - std.debug.print("day={d}, puzzle_{d}={d}, input_bytes={d}, time={d}µs\n", .{ - day + 1, - idx + 1, - result, - aoc_day.input.len, - elapsed_us, - }); - } else { - std.debug.print("day={d}, puzzle_{d}={d}, input_bytes={d}, time={d}µs, expected={d}\n", .{ - day + 1, - idx + 1, - result, - aoc_day.input.len, - elapsed_us, - expected, - }); - return error.UnexpectedValue; - } - } - } - + try run_all(testing_allocator); std.debug.print("\n", .{}); } diff --git a/util/aoc.zig b/util/aoc.zig new file mode 100644 index 0000000..0c3e668 --- /dev/null +++ b/util/aoc.zig @@ -0,0 +1,20 @@ +const std = @import("std"); + +pub const Result = union(enum) { + int: i32, + string: []const u8, + + pub fn cmp(self: Result, result: Result) bool { + switch (self) { + .int => |i| return i == result.int, + .string => |s| return std.mem.eql(u8, s, result.string), + } + } + + pub fn deinit(self: Result, allocator: std.mem.Allocator) void { + switch (self) { + .string => |s| return allocator.free(s), + else => {}, + } + } +}; diff --git a/util/mem.zig b/util/mem.zig deleted file mode 100644 index 728db44..0000000 --- a/util/mem.zig +++ /dev/null @@ -1,19 +0,0 @@ -const std = @import("std"); - -const math = std.math; -const testing_allocator = std.testing.allocator; - -/// Returns the position of the smallest number in a slice. -pub fn min_idx(comptime T: type, slice: []const T) usize { - var best = slice[0]; - var idx: usize = 0; - - for (slice[1..]) |item, i| { - const possible_best = math.min(best, item); - if (best > possible_best) { - best = possible_best; - idx = i + 1; - } - } - return idx; -} -- cgit v1.2.3