From a67e150d0fe47fc90eb48fbba2428578d897c520 Mon Sep 17 00:00:00 2001 From: Daniel Ledda Date: Thu, 25 Dec 2025 14:05:36 +0100 Subject: [PATCH] update --- .clangd | 5 + .gitmodules | 3 + app.c | 1 + build | 7 + day1-input | 4543 +++++++++++++++++++++++++++++++++++++++++++++++++++ day1.c | 60 + day2-input | 1 + day2.c | 54 + day3-input | 200 +++ day3.c | 38 + djstdlib | 1 + target/app | Bin 0 -> 90032 bytes 12 files changed, 4913 insertions(+) create mode 100644 .clangd create mode 100644 .gitmodules create mode 100644 app.c create mode 100755 build create mode 100644 day1-input create mode 100644 day1.c create mode 100644 day2-input create mode 100644 day2.c create mode 100644 day3-input create mode 100644 day3.c create mode 160000 djstdlib create mode 100755 target/app diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..65215ff --- /dev/null +++ b/.clangd @@ -0,0 +1,5 @@ +CompileFlags: + Add: + - -std=c99 + - -xc + - -DOS_LINUX diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..06e6a8e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "djstdlib"] + path = djstdlib + url = https://git.djledda.net/Ledda/djstdlib.git diff --git a/app.c b/app.c new file mode 100644 index 0000000..d5b5c95 --- /dev/null +++ b/app.c @@ -0,0 +1 @@ +#include "./day3.c" diff --git a/build b/build new file mode 100755 index 0000000..fb7fa2f --- /dev/null +++ b/build @@ -0,0 +1,7 @@ +#!/bin/bash + +clang -g -g3 -lm -DOS_LINUX=1 -DENABLE_ASSERT=1 ./app.c -o ./target/app + +if [[ $1 == "run" ]] then + ./target/app +fi diff --git a/day1-input b/day1-input new file mode 100644 index 0000000..2de2b86 --- /dev/null +++ b/day1-input @@ -0,0 +1,4543 @@ +R20 +R10 +L11 +R45 +R13 +R32 +R46 +L20 +L1 +L26 +L33 +L6 +L34 +R50 +L41 +L8 +R16 +L20 +L39 +R40 +R30 +R47 +R20 +L44 +R16 +L1 +R50 +L23 +R32 +L2 +L1 +L10 +L28 +R13 +R46 +R39 +L17 +R44 +R24 +R32 +R18 +L41 +R11 +L48 +R7 +R1 +L21 +R37 +L43 +L71 +L50 +R84 +L36 +R66 +L64 +L5 +R34 +R32 +L61 +L14 +R83 +L69 +R94 +R17 +L11 +L63 +L37 +L25 +R70 +R48 +L1 +R5 +R29 +R87 +L49 +L96 +R88 +L56 +L76 +R37 +L73 +R49 +L93 +R56 +R79 +L79 +R85 +L79 +R70 +R24 +R38 +L88 +R46 +R76 +L72 +R64 +R83 +R53 +L36 +R38 +R41 +L60 +L234 +L35 +R948 +L176 +L86 +R97 +L52 +L31 +R65 +L513 +R234 +L47 +L84 +R38 +R93 +R43 +L43 +R36 +R64 +R47 +L84 +R637 +L39 +L528 +L48 +R54 +R21 +L431 +R371 +R92 +L601 +R65 +R44 +L401 +R57 +L320 +L924 +R88 +L2 +R2 +R52 +R45 +R12 +L9 +R26 +R937 +R74 +R63 +R44 +L86 +R342 +R72 +R438 +R41 +R20 +L71 +L64 +R44 +R27 +R10 +R83 +L96 +L501 +L303 +R83 +L83 +R57 +L89 +R60 +L10 +L18 +L78 +R23 +L819 +R18 +L68 +R93 +L65 +L22 +R64 +L346 +R74 +L97 +L77 +R90 +R99 +L89 +L358 +L24 +L18 +R19 +R902 +R18 +R42 +L16 +L67 +R7 +L61 +L44 +R58 +R56 +R86 +R77 +L197 +L48 +R276 +L82 +L65 +L45 +L44 +R12 +R835 +L719 +R47 +L35 +R988 +R6 +L92 +L196 +R82 +R36 +R95 +R69 +L52 +L17 +L531 +R13 +R87 +L69 +L31 +L17 +L66 +R83 +R10 +R85 +R5 +R543 +L1 +R55 +L646 +L47 +L50 +R7 +L719 +R673 +R85 +R399 +L13 +R86 +L60 +R788 +L605 +R5 +R872 +R24 +R54 +R86 +L47 +R74 +L63 +L72 +L28 +L579 +R81 +R98 +R79 +L1 +R722 +L48 +R6 +R41 +L99 +L26 +R26 +R64 +R50 +R88 +R520 +R57 +L779 +R83 +L71 +R399 +R89 +R92 +R68 +R940 +L44 +R44 +L151 +R15 +R70 +R566 +R79 +R6 +L85 +R958 +R79 +L54 +L42 +L159 +R52 +L93 +R50 +R48 +R83 +R78 +L36 +R36 +L77 +R77 +R24 +L61 +L12 +L19 +L232 +R36 +L36 +R12 +L85 +L27 +R65 +L65 +L16 +L51 +R67 +L78 +L87 +R71 +R94 +L217 +R11 +R779 +L98 +L68 +R14 +R16 +L95 +L42 +R80 +L830 +R50 +L51 +R51 +R93 +L438 +L783 +L28 +L44 +L64 +L45 +R809 +L26 +L274 +L56 +R97 +L88 +R75 +R4 +R3 +L27 +L12 +R4 +R41 +R8 +L46 +R85 +L888 +R47 +L8 +R824 +L67 +R58 +L177 +R723 +R44 +R56 +R70 +R30 +R97 +R43 +L39 +R99 +L78 +L196 +L87 +L39 +R42 +L528 +R86 +R20 +L920 +R916 +L16 +L19 +L92 +L17 +R38 +R43 +R90 +L57 +L58 +R72 +L54 +L26 +L9 +R66 +R41 +R74 +L86 +L6 +L39 +L72 +L5 +R17 +R99 +L3 +L50 +R7 +L56 +R2 +R15 +R18 +L60 +L73 +L980 +L20 +L69 +L31 +L998 +L16 +R29 +L15 +L136 +L71 +R7 +R59 +L19 +L40 +L56 +R60 +L97 +R93 +R87 +L587 +L1 +R1 +R99 +R5 +L4 +L89 +L70 +L62 +L559 +L50 +R88 +L58 +R23 +R77 +R406 +R22 +L28 +L455 +R55 +R15 +R43 +R62 +R686 +L6 +R19 +L19 +R44 +R34 +R40 +L348 +L294 +R92 +L342 +L92 +R918 +R48 +L24 +L76 +L865 +L59 +R13 +L89 +L6 +L79 +L105 +L71 +L39 +R226 +R274 +L35 +R61 +R33 +R5 +L64 +L88 +R24 +L731 +R53 +L58 +L87 +L85 +R72 +R67 +R4 +R86 +L288 +R721 +R87 +L77 +R88 +R14 +R98 +L744 +L656 +R81 +L81 +L93 +L974 +L25 +L453 +R31 +L14 +L72 +R43 +R45 +R18 +L881 +L25 +R82 +L184 +R99 +L181 +L55 +R39 +R80 +R320 +R686 +R6 +R64 +R483 +R22 +R19 +R88 +R73 +L33 +L8 +R89 +L89 +R13 +R32 +L45 +L72 +L93 +L535 +R36 +R24 +R47 +R593 +R25 +L72 +R447 +R17 +L17 +R23 +R1 +R53 +R23 +L75 +L95 +L13 +R5 +R18 +L13 +L6 +L21 +R64 +L304 +L160 +L509 +R509 +L98 +R579 +R19 +R76 +L7 +R331 +L99 +L1 +L222 +R72 +R50 +L8 +L88 +R96 +L84 +R84 +R690 +R37 +L27 +R452 +R80 +L43 +L85 +R96 +R10 +R33 +R57 +L70 +L30 +R19 +L183 +R52 +L349 +R888 +L27 +L821 +L18 +L66 +L95 +R23 +R977 +L18 +L811 +R47 +L18 +L76 +L24 +L78 +L22 +L29 +R29 +L42 +R22 +R96 +L76 +L47 +R47 +R128 +L28 +L56 +R56 +L82 +L48 +L50 +R88 +L916 +L9 +R1 +L32 +R48 +L356 +L85 +R51 +L70 +R24 +L98 +R34 +R124 +L58 +R60 +R526 +R948 +L90 +L68 +L42 +R972 +R28 +R23 +R77 +L83 +L637 +R52 +L132 +R57 +L957 +L88 +R88 +L179 +L921 +R10 +R90 +L12 +L88 +R2 +R98 +R956 +R44 +L4 +R59 +L55 +R89 +L51 +L41 +R54 +R55 +L6 +L27 +R27 +L53 +L47 +L98 +L228 +R35 +R11 +R35 +R33 +R12 +R39 +L238 +L1 +L94 +R51 +R543 +R15 +L937 +R92 +R20 +L12 +R21 +R87 +R14 +R45 +L745 +R70 +R59 +L52 +R31 +L8 +L7 +L898 +L78 +R83 +L6 +L88 +L260 +L413 +L76 +L98 +L359 +R19 +L51 +L68 +R76 +R424 +L23 +R75 +L249 +L3 +R63 +L263 +L21 +R21 +R75 +L915 +L60 +R147 +L63 +R48 +L95 +L931 +R94 +L86 +R32 +L46 +L26 +R43 +R813 +L30 +R71 +L70 +L1 +L51 +R16 +L855 +L360 +R60 +L26 +L8 +L559 +R183 +L21 +L72 +L7 +L195 +L72 +R67 +L63 +R63 +L7 +L66 +L727 +R55 +L66 +L889 +L68 +R25 +L321 +R7 +R48 +R59 +R60 +L72 +R19 +L57 +R59 +L56 +L28 +L186 +R11 +L53 +L342 +L50 +R4 +R41 +R2 +L8 +R906 +R6 +R42 +R60 +L90 +R82 +R24 +L60 +L64 +R50 +L50 +L3 +R85 +R68 +L850 +R74 +L93 +L614 +R55 +L22 +L52 +L2 +R6 +L201 +L18 +R81 +L514 +R61 +L77 +L955 +R71 +R47 +R78 +R375 +L760 +R60 +R54 +R395 +L55 +L94 +R794 +L94 +R47 +R44 +R402 +L42 +R564 +R85 +L18 +L99 +R12 +R63 +R7 +L65 +R83 +L36 +L47 +R267 +L58 +L9 +L97 +R41 +L44 +L55 +R55 +L58 +R6 +L61 +L187 +R66 +R41 +L64 +L88 +R5 +R63 +R42 +R509 +R77 +R540 +R98 +L51 +R99 +R63 +L62 +L66 +R28 +L96 +R56 +L20 +L40 +R17 +L282 +R65 +L8 +R8 +L15 +R15 +R38 +R84 +R78 +R73 +R27 +R32 +R59 +L10 +R19 +R49 +R51 +R89 +L55 +L65 +R76 +L6 +R11 +R50 +R99 +L36 +R37 +L7 +L614 +L25 +R31 +L585 +R56 +R36 +L92 +L56 +L383 +L79 +R55 +R63 +L52 +L748 +L41 +R860 +R82 +L98 +R897 +R75 +R26 +R1 +L81 +R17 +R760 +R31 +R9 +R62 +R43 +R43 +L82 +R96 +R3 +R76 +L79 +R87 +L334 +R84 +R14 +R30 +L81 +R2 +L788 +R86 +R74 +R26 +L941 +L4 +L55 +R8 +L478 +R20 +R83 +R19 +R48 +R69 +L488 +L44 +R55 +L92 +L78 +L75 +L47 +L95 +R62 +L234 +R67 +R70 +L35 +L40 +L13 +L32 +L950 +R59 +R62 +R275 +R4 +R672 +R93 +L6 +R23 +L382 +L278 +R110 +R68 +R35 +R43 +R96 +R604 +R408 +R14 +R108 +R33 +R59 +L19 +R19 +R85 +R24 +R15 +R14 +R62 +L49 +R83 +L551 +R17 +L4 +L63 +R38 +R95 +R34 +R59 +L695 +R636 +R19 +L98 +L30 +L691 +L147 +R8 +R9 +R732 +L2 +L47 +L53 +L64 +L36 +R24 +R40 +R99 +R27 +R410 +R83 +R14 +L524 +R27 +R72 +L64 +R92 +R69 +R323 +R49 +R56 +R3 +L54 +L81 +R82 +L47 +R28 +R96 +L6 +L653 +L36 +R413 +L19 +R15 +L352 +L26 +L63 +R622 +R13 +L51 +L81 +L68 +L32 +L55 +R55 +L98 +R49 +L54 +R48 +R46 +R9 +L34 +L15 +L19 +R273 +R695 +R43 +R492 +R38 +L473 +L13 +L89 +L83 +L5 +R90 +R68 +L706 +R106 +R8 +R84 +R30 +L190 +R91 +L55 +R64 +R85 +L85 +L57 +L17 +R74 +L82 +R82 +R826 +L37 +L32 +L36 +L66 +L21 +R82 +L16 +L27 +R77 +R46 +L989 +R9 +L63 +R47 +L89 +L76 +L740 +L49 +L46 +L52 +R86 +R8 +L85 +L27 +L430 +R40 +L40 +R34 +L34 +L89 +L41 +R98 +R32 +R31 +L13 +R553 +L71 +R20 +L948 +R28 +L86 +R186 +R5 +L5 +R96 +R59 +L55 +L32 +R26 +L70 +L24 +L677 +L244 +R13 +L92 +L999 +L97 +R96 +L606 +R6 +R4 +L4 +R47 +L30 +R83 +L141 +R947 +L78 +L913 +L15 +R68 +R7 +L75 +L18 +L82 +R15 +L73 +L42 +L13 +L684 +R97 +R47 +R53 +R24 +R38 +R23 +L51 +R39 +L73 +R35 +R22 +R14 +L71 +L47 +R58 +L30 +L81 +R28 +R731 +L27 +L38 +R6 +R96 +L51 +R55 +R65 +L49 +L1 +L95 +L534 +L86 +L40 +L42 +L70 +R50 +L98 +L59 +L95 +L35 +L9 +R16 +R682 +L997 +R218 +R530 +L48 +L551 +R48 +L43 +R43 +L80 +L792 +R29 +L22 +L82 +L76 +L52 +R75 +L29 +R71 +R593 +L39 +L596 +R71 +R89 +L27 +L33 +L77 +R59 +L76 +R67 +L426 +L389 +R90 +R74 +L22 +L49 +R101 +L52 +R34 +L69 +L13 +R92 +R810 +R688 +R58 +R614 +L14 +R77 +L47 +R70 +L40 +R840 +R91 +R54 +R14 +L258 +R99 +R84 +R67 +R62 +L64 +R48 +L197 +L20 +L74 +R74 +L880 +R10 +R55 +R35 +R68 +L774 +L44 +R875 +R63 +R807 +R13 +R92 +L392 +L74 +L34 +L66 +R44 +R120 +R802 +L29 +R6 +R23 +L492 +L8 +R83 +R80 +L5 +R42 +R92 +R77 +R24 +R77 +L2 +R32 +L12 +L88 +R97 +L85 +R88 +R57 +L957 +L68 +L40 +R56 +R452 +R47 +L47 +L610 +L90 +L92 +L808 +L62 +R94 +L20 +L68 +L17 +L177 +R563 +L13 +L89 +R71 +L282 +L41 +R548 +R87 +R26 +L92 +R695 +R67 +L10 +R20 +L81 +R37 +R44 +R317 +R83 +R39 +R168 +R93 +R89 +L26 +R19 +L19 +L44 +L19 +R227 +R30 +L79 +R5 +L83 +R9 +L19 +L90 +R525 +L42 +R65 +R87 +L35 +L68 +L119 +L53 +R40 +L47 +L453 +L71 +L29 +R1 +R80 +L25 +R9 +R24 +L89 +R12 +R88 +R44 +L44 +L36 +R80 +R32 +R24 +R86 +R6 +R11 +L66 +R63 +L110 +L90 +L69 +R369 +R49 +R65 +R82 +L96 +R85 +R15 +L10 +R210 +L355 +R55 +R51 +R31 +R30 +L64 +R752 +R17 +L87 +L30 +R79 +R718 +L897 +L66 +L634 +R138 +R62 +R96 +L96 +L122 +R18 +R88 +L29 +R44 +R430 +L45 +L97 +L51 +L76 +L60 +L66 +L34 +R992 +R25 +R69 +L52 +L534 +R72 +L71 +L1 +L30 +L70 +R55 +R45 +R1 +L19 +R3 +R53 +L15 +R94 +L391 +L84 +L20 +L408 +L14 +R19 +L29 +L60 +R46 +L76 +R26 +L785 +R59 +L45 +R13 +R32 +R71 +L23 +L9 +R61 +R414 +R22 +L24 +R104 +L5 +L311 +L14 +L750 +L36 +L755 +R55 +L95 +L39 +R46 +L40 +R28 +R5 +R77 +R18 +R11 +R60 +L71 +R13 +R32 +R55 +R823 +R89 +R88 +R49 +L65 +R3 +L87 +R98 +L32 +R86 +R87 +R57 +L71 +R44 +R99 +R364 +L49 +R20 +L8 +R9 +R607 +L62 +R51 +R923 +L41 +L99 +L953 +L8 +R52 +R426 +L48 +R303 +R45 +L49 +L51 +L22 +L3 +L10 +R11 +L81 +L471 +R76 +R50 +R750 +L41 +L79 +L23 +R13 +L4 +L57 +R91 +L89 +L369 +L42 +L39 +L86 +L56 +L719 +R345 +L45 +R28 +R72 +L92 +L47 +R85 +L49 +L97 +L78 +L822 +R11 +L63 +L48 +R11 +R544 +L55 +L24 +R62 +L38 +R50 +R50 +L46 +L32 +L21 +L74 +L35 +L10 +R43 +L84 +L8 +L833 +R40 +L82 +L78 +L16 +L73 +R9 +R965 +L65 +R41 +L941 +L77 +L76 +R53 +L37 +R1 +R36 +L41 +L281 +R22 +R911 +L11 +R822 +R460 +R18 +L70 +L74 +L443 +R922 +R65 +R34 +L34 +L544 +R84 +R80 +L120 +L543 +R49 +L99 +R42 +R751 +L25 +R825 +R48 +L97 +L60 +R28 +R81 +L43 +L818 +L25 +R86 +L21 +L547 +R71 +L3 +R54 +L54 +R8 +R692 +R85 +L85 +R629 +R86 +L79 +R6 +L626 +R3 +R97 +L16 +R84 +R87 +L471 +L96 +L704 +L31 +L33 +R13 +L77 +R28 +R57 +R67 +L974 +R38 +R8 +R17 +L336 +L77 +L75 +R61 +R14 +R34 +R19 +L52 +R27 +L228 +L605 +R73 +R32 +R90 +R10 +R34 +R48 +R18 +L59 +R789 +R70 +R7 +R83 +L7 +R17 +R54 +R42 +R363 +R793 +R48 +L91 +L9 +R49 +L28 +R79 +R43 +R28 +L62 +L80 +R4 +L33 +R59 +L19 +L232 +R192 +R47 +R17 +R36 +L24 +R18 +R6 +L286 +L25 +R11 +L67 +L79 +L1 +L19 +R66 +R26 +R423 +L205 +L92 +R448 +L33 +R41 +R12 +L60 +L43 +L95 +L795 +L36 +L20 +L69 +R72 +L74 +L95 +L79 +R80 +R94 +R95 +L13 +R78 +R19 +R21 +R43 +R17 +L27 +R66 +R50 +R370 +R34 +L53 +L60 +L93 +L47 +L14 +R2 +L88 +L33 +L354 +R48 +R59 +L20 +L96 +L36 +R60 +R72 +L287 +L1 +R94 +L99 +R29 +L36 +L2 +L998 +L39 +L78 +L51 +L39 +L9 +R51 +R51 +R88 +R422 +L120 +R3 +R21 +R84 +R75 +R83 +R468 +R90 +R30 +R593 +R77 +L71 +R71 +L61 +L39 +L491 +R54 +L76 +L383 +L4 +R42 +R58 +L70 +L98 +R12 +L44 +R12 +R88 +R731 +L94 +R912 +L81 +R372 +L40 +R82 +R45 +R62 +R11 +L195 +L31 +R26 +R80 +R20 +L176 +R76 +R96 +L96 +L58 +L12 +L558 +R28 +R91 +L91 +R65 +L34 +L52 +R21 +R64 +R96 +R28 +L88 +R93 +L33 +L53 +R93 +L390 +R44 +L92 +R65 +R39 +R34 +R56 +L62 +L78 +L28 +L32 +R2 +L347 +R58 +L990 +R21 +L78 +L50 +R28 +L80 +L70 +R50 +R4 +L282 +R78 +R41 +L70 +R342 +R18 +R69 +L55 +R55 +L51 +R12 +R839 +R51 +L782 +L69 +R86 +L78 +R921 +L43 +L74 +R88 +L655 +L80 +R231 +L59 +L925 +L39 +R981 +L79 +R76 +R949 +R99 +L63 +L36 +R25 +R93 +R297 +L79 +R22 +L58 +R162 +L73 +L789 +R665 +L93 +R37 +R12 +R88 +R4 +L621 +L92 +R86 +R14 +R31 +R409 +R60 +R43 +L90 +R47 +L56 +R556 +L22 +R64 +L50 +R66 +L58 +R584 +R14 +R2 +R21 +R79 +L134 +L66 +L93 +R23 +L52 +R87 +L49 +L916 +L47 +L766 +R72 +L9 +R57 +L5 +R198 +L69 +R59 +R10 +L79 +R33 +R46 +L58 +R83 +L49 +L98 +L43 +L51 +R76 +R929 +R85 +R26 +L16 +L253 +L31 +R18 +L732 +L86 +L68 +L69 +L58 +L5 +L82 +R31 +L835 +L14 +L19 +R919 +R860 +L660 +L20 +L50 +L30 +L28 +L674 +R47 +L45 +L71 +L37 +R78 +L70 +R92 +R8 +L46 +L35 +L19 +L44 +L46 +L878 +L95 +L37 +L31 +L34 +R78 +R61 +R26 +L57 +L57 +L124 +L10 +R48 +L81 +L1 +L42 +L16 +R61 +R4 +R11 +L936 +L67 +R905 +R62 +L64 +L498 +R85 +L231 +R62 +R87 +L363 +R741 +R11 +L133 +L290 +R396 +R45 +R71 +L25 +R6 +R115 +L15 +R16 +L78 +L50 +L72 +L99 +R60 +R23 +L42 +R43 +R39 +L91 +R552 +L630 +L80 +L921 +R22 +L62 +R36 +R99 +L65 +R32 +R68 +R17 +L560 +L16 +R64 +R56 +L34 +L91 +R529 +R48 +R42 +L43 +L53 +L94 +R96 +L63 +L284 +R86 +R16 +L16 +L57 +R23 +L66 +R40 +L40 +R145 +R59 +L304 +L196 +R21 +R193 +L98 +L820 +L93 +L632 +L75 +R33 +L33 +R74 +R1 +L75 +L872 +R72 +L61 +L94 +L64 +L81 +L96 +L4 +R3 +R97 +R17 +L40 +L877 +R81 +R99 +R14 +R37 +L63 +L86 +L33 +R46 +L95 +L81 +R81 +L50 +R50 +R38 +L68 +L298 +R6 +L812 +L77 +L64 +R75 +L23 +R723 +R36 +R64 +L29 +R988 +L59 +L20 +R103 +L83 +L14 +R74 +R44 +L95 +R689 +R29 +R16 +R57 +R15 +R985 +L22 +R66 +L58 +L16 +R30 +R764 +L59 +L71 +L273 +L59 +L73 +L42 +L674 +R27 +L940 +L24 +L415 +R39 +L319 +L281 +L82 +L53 +R333 +R2 +R1 +R99 +L50 +R886 +R18 +R89 +R57 +L859 +L20 +R79 +R21 +R79 +R8 +L780 +L28 +R572 +L72 +R32 +L870 +R91 +R45 +R965 +R99 +L62 +L417 +L73 +R90 +L697 +R270 +R812 +L94 +R54 +R99 +L44 +L53 +L66 +L81 +R80 +R20 +R94 +L72 +R78 +R35 +R565 +L64 +R98 +L34 +L246 +L10 +L46 +L5 +L486 +R93 +R96 +L14 +L82 +L46 +R78 +L54 +R97 +R41 +L19 +L97 +L832 +L862 +L85 +L8 +R87 +L54 +R992 +R62 +L681 +R85 +R98 +L743 +R10 +R31 +L6 +R87 +R58 +R87 +R92 +L87 +R53 +L134 +R50 +R528 +L53 +L53 +R78 +R716 +R81 +L97 +L593 +L62 +L396 +L70 +R3 +R41 +L23 +R85 +L57 +L13 +L38 +R71 +R28 +L876 +R297 +R73 +L806 +L632 +L32 +L14 +L69 +R83 +R63 +L676 +R13 +L76 +R713 +R13 +R83 +L15 +R531 +L27 +L84 +L17 +L121 +L909 +R9 +R27 +L28 +R960 +R183 +L42 +R50 +R50 +L7 +L87 +L62 +R26 +R30 +L28 +R28 +R81 +R42 +R56 +L28 +L814 +L74 +R37 +L97 +L203 +L70 +R57 +R413 +L658 +R208 +L50 +R72 +L816 +R967 +L38 +R315 +R646 +R27 +L82 +L22 +L33 +R638 +L8 +L24 +L42 +R85 +R16 +L921 +L280 +L59 +R46 +L61 +R227 +L23 +L28 +L2 +L49 +L77 +R8 +L81 +R52 +R29 +L282 +R349 +L28 +R86 +R880 +L87 +R591 +L37 +L738 +R9 +R75 +R37 +R63 +L287 +L13 +L2 +L98 +R64 +L64 +L89 +L60 +L51 +R82 +R18 +L45 +L13 +R17 +R4 +L84 +L86 +L12 +R46 +L27 +L6 +R98 +L73 +R2 +L62 +R10 +L328 +L85 +L45 +L680 +R35 +R825 +R17 +L850 +L34 +L56 +L311 +R43 +R60 +L382 +R11 +L89 +R511 +R60 +R29 +R54 +L54 +L50 +L34 +R25 +L30 +L11 +L57 +L48 +L50 +R12 +R77 +R66 +R311 +R89 +L92 +L8 +R9 +L9 +L857 +R57 +R45 +L90 +R14 +L269 +L47 +R147 +L40 +R40 +R64 +R58 +R1 +L23 +L68 +L24 +R392 +L511 +L89 +L877 +L82 +L44 +R75 +L18 +L72 +R418 +R77 +L68 +R49 +R42 +L84 +L16 +R94 +R6 +L72 +L10 +R82 +R32 +R368 +R73 +L44 +L29 +R220 +R80 +R45 +L45 +L530 +R30 +L62 +R7 +R355 +R84 +L388 +L96 +R45 +L32 +L313 +R40 +R50 +R56 +R27 +L73 +R12 +R18 +L287 +L95 +L48 +L80 +L778 +R5 +L47 +R25 +R33 +R3 +L10 +L39 +L567 +R72 +R58 +L95 +R6 +L86 +L93 +R93 +L31 +R31 +R86 +L86 +L92 +L3 +R77 +R37 +L865 +R46 +L44 +R39 +L95 +R82 +L6 +R24 +L279 +R22 +R26 +R431 +L68 +R68 +L865 +R65 +L393 +R894 +R23 +R76 +R35 +R20 +R43 +R79 +L36 +R60 +L52 +L91 +R42 +R97 +L697 +R550 +R82 +R68 +L98 +R98 +L8 +L59 +L51 +L78 +R10 +L31 +R917 +L508 +L92 +R63 +R19 +R93 +R25 +L20 +R88 +L68 +L2 +R702 +L69 +R69 +R34 +L34 +R8 +L8 +L15 +R53 +R62 +R85 +R815 +L62 +R93 +L76 +L65 +L67 +L123 +L18 +L82 +L22 +L577 +L42 +L57 +R73 +L75 +L25 +R25 +R171 +R29 +R87 +R56 +R57 +L11 +L89 +R55 +R38 +R68 +R965 +L19 +L32 +R466 +L15 +L16 +L69 +R59 +L53 +L90 +R1 +R99 +L16 +R24 +R93 +R62 +L6 +R86 +R15 +R85 +R399 +L60 +R38 +L56 +R620 +R59 +L673 +L613 +R843 +L57 +R20 +L10 +L10 +R663 +L11 +L52 +R156 +R44 +L23 +L42 +L22 +L213 +R7 +L7 +L19 +L632 +R51 +R71 +L71 +R91 +L97 +L94 +L70 +L6 +R76 +R71 +L43 +L34 +L1 +L93 +L91 +R33 +R30 +R28 +L14 +R91 +L319 +L87 +L71 +R86 +R997 +L83 +L289 +L68 +R73 +L16 +R69 +R51 +R17 +R63 +R656 +L5 +L2 +R48 +L81 +R77 +L70 +L423 +L57 +L43 +L35 +R98 +R77 +L86 +R2 +R44 +L56 +R356 +L16 +R363 +R98 +R55 +L17 +R28 +L564 +L4 +L743 +R2 +L2 +L9 +L21 +R897 +R353 +L27 +L83 +L440 +L70 +R155 +R53 +R292 +L56 +R56 +R76 +R224 +R63 +R937 +L13 +R13 +R79 +L79 +L89 +L19 +R48 +L40 +R32 +R37 +R31 +L8 +R875 +L67 +R27 +L9 +R92 +L883 +R224 +R75 +L26 +R74 +R90 +L16 +R874 +R99 +L21 +L840 +L60 +L71 +L15 +R86 +R445 +R55 +R94 +L7 +L50 +R80 +L87 +R70 +L79 +L17 +R996 +R86 +R214 +R29 +R71 +R63 +L63 +L22 +R2 +R50 +R69 +R86 +L585 +L28 +L52 +L418 +R2 +R750 +L645 +L72 +L848 +L428 +L61 +L16 +L84 +R16 +R261 +R530 +L75 +R625 +L3 +R46 +L31 +R39 +L723 +L85 +L56 +R21 +R35 +R83 +R90 +L86 +L33 +L54 +R77 +L865 +R114 +L293 +L39 +R88 +L81 +R59 +R740 +L64 +L30 +L7 +L99 +R695 +R61 +R88 +L99 +L96 +L892 +R10 +R33 +R25 +L25 +L147 +R47 +L76 +R83 +R93 +L36 +L846 +L618 +L59 +L32 +L20 +R11 +R95 +L83 +L110 +L96 +L6 +R189 +R6 +R17 +L12 +L80 +L20 +R49 +L67 +L82 +R167 +R33 +R3 +L3 +L12 +R15 +L26 +L97 +R20 +R74 +L74 +R73 +R27 +L47 +L153 +L502 +L13 +L95 +R10 +R63 +L63 +R92 +R8 +R708 +R89 +R546 +R357 +L474 +R89 +R85 +L18 +R82 +L664 +R712 +L28 +R98 +L5 +R11 +L62 +R674 +R63 +L63 +L263 +R5 +L6 +L55 +L63 +L18 +L20 +L743 +L89 +R52 +L99 +L1 +R65 +R82 +R81 +R72 +R56 +L454 +L627 +R25 +L75 +R80 +R814 +R81 +L263 +R61 +R2 +R31 +L18 +R48 +R36 +R96 +L8 +R115 +L77 +R855 +L578 +L69 +L31 +L14 +R14 +R96 +L196 +R96 +L396 +L11 +L78 +L11 +L74 +R441 +R27 +R6 +L84 +L33 +L83 +L32 +R68 +L851 +R58 +R30 +R94 +L934 +L269 +R737 +R15 +L16 +L122 +L94 +R16 +R34 +R2 +R64 +R81 +R91 +R87 +L105 +R46 +L618 +R62 +R780 +L24 +L61 +L86 +L73 +L80 +L99 +L1 +L81 +R81 +L60 +R60 +L66 +R10 +R56 +L84 +R84 +L605 +R27 +R78 +L333 +R133 +L395 +R95 +L11 +R146 +R91 +R74 +L82 +L18 +R83 +L71 +L845 +R59 +L37 +L28 +L27 +L34 +L76 +R54 +R15 +R63 +R20 +R18 +R87 +L64 +R99 +L16 +L3 +L28 +R502 +L71 +L55 +L57 +R19 +L7 +R32 +L2 +L24 +L6 +R8 +R92 +L11 +L89 +L16 +R692 +R50 +R73 +R11 +R187 +L63 +R63 +R3 +R83 +L83 +R98 +R778 +L2 +L86 +R35 +R57 +L85 +L95 +L2 +L61 +R63 +R94 +R6 +R142 +R24 +R11 +L57 +R60 +L80 +R886 +R151 +R16 +R47 +L975 +R75 +R98 +R82 +L31 +R49 +R2 +L89 +L11 +R62 +R38 +L27 +R21 +R406 +L342 +R53 +R18 +L113 +R23 +R77 +R84 +L64 +R64 +R325 +R84 +R91 +L36 +R76 +L49 +L91 +L74 +R3 +R71 +L25 +L42 +L833 +L197 +L47 +R44 +R88 +L7 +R372 +R19 +L72 +R54 +R50 +R67 +R579 +R50 +L219 +R19 +R65 +L94 +L16 +L63 +R89 +R19 +R432 +R2 +L34 +R90 +L889 +L361 +R635 +L75 +R44 +L251 +L38 +L67 +L24 +L86 +R41 +L4 +L23 +L92 +L35 +R590 +R45 +R61 +L99 +L601 +L438 +L29 +L16 +R34 +R88 +R30 +R492 +L292 +R26 +L88 +R17 +L85 +R67 +L976 +L41 +R479 +L629 +L391 +L21 +L34 +R46 +L511 +R50 +L44 +L617 +R22 +L401 +L50 +R51 +R20 +L536 +L73 +L36 +L675 +L42 +R87 +R255 +L35 +L20 +L445 +R22 +L69 +L175 +R22 +L12 +R86 +R26 +L79 +R314 +R38 +R28 +R899 +L88 +L62 +R50 +L86 +L486 +L79 +R50 +L875 +L59 +L65 +R27 +R53 +R20 +L28 +L72 +L98 +R7 +L30 +R21 +L821 +L79 +R503 +L83 +L10 +R35 +L8 +R366 +L43 +L36 +L24 +L115 +L85 +L30 +R69 +R21 +L60 +L30 +L99 +L21 +R50 +L35 +L65 +L647 +L113 +L120 +L20 +L34 +R84 +R3 +L53 +L743 +L751 +R694 +L342 +L87 +R11 +L82 +R36 +R34 +L75 +L5 +L73 +L17 +L88 +R39 +L49 +L2 +L9 +L891 +L43 +R760 +R83 +L388 +L12 +L1 +L72 +L18 +R34 +L26 +L17 +R16 +R998 +L14 +R48 +R52 +L21 +L56 +L27 +R86 +R45 +R73 +L27 +L56 +R83 +L13 +R13 +L20 +L241 +L439 +L814 +R35 +R79 +R12 +L99 +L94 +R51 +R353 +L753 +R30 +L45 +R45 +L41 +L78 +R19 +R4 +L4 +L6 +R70 +R12 +R425 +R85 +R67 +L51 +L757 +R55 +R95 +R38 +R67 +R65 +L99 +L111 +L49 +L6 +L52 +L3 +R35 +R26 +R97 +L3 +L143 +R43 +L44 +R44 +R37 +R35 +L72 +L59 +L860 +R19 +R38 +R62 +R97 +L53 +L544 +L57 +R57 +L89 +L97 +R786 +L82 +L99 +L23 +R569 +L76 +L55 +R97 +R17 +L48 +L316 +R8 +L60 +R60 +R15 +R93 +L53 +L23 +R36 +L60 +R94 +L369 +R383 +R92 +L132 +R80 +L762 +R57 +R34 +L77 +R74 +L21 +L14 +L10 +R71 +L36 +L8 +L77 +L979 +R21 +R979 +R280 +L91 +R11 +R79 +R21 +R54 +L67 +L21 +R66 +L32 +R24 +L313 +R136 +L52 +R777 +L72 +L80 +L40 +R44 +L813 +R6 +L56 +L50 +R55 +L66 +R710 +L430 +L5 +L66 +R262 +L682 +R87 +R643 +R19 +R80 +R467 +R15 +R773 +L55 +L18 +R58 +L427 +L61 +L229 +R59 +L18 +L20 +R20 +R14 +R4 +L97 +R34 +L268 +L69 +L45 +R88 +R392 +L35 +L41 +L59 +R526 +R1 +L11 +L515 +R29 +R75 +R94 +L99 +L69 +L33 +R2 +L63 +R1 +L38 +R28 +R53 +L72 +R8 +R54 +L51 +R71 +L61 +R84 +R86 +L37 +L29 +L54 +R620 +L5 +R5 +R69 +R831 +L36 +L31 +L33 +R1 +R29 +R70 +L15 +R78 +R79 +R58 +L555 +L59 +L46 +L40 +R47 +R53 +R66 +R34 +R89 +L769 +R19 +R8 +L47 +L5 +L495 +L49 +R46 +R3 +R58 +R42 +R89 +L60 +R65 +L250 +L44 +L26 +L43 +R69 +R49 +R23 +L72 +L11 +L89 +R882 +R3 +L35 +L612 +L38 +L876 +R17 +L420 +R73 +L98 +L51 +L82 +R40 +R39 +R53 +R5 +L58 +L642 +L1 +L299 +L814 +L86 +R59 +L71 +L489 +L99 +R55 +L55 +R91 +L63 +L14 +L71 +R70 +L190 +L23 +L28 +L72 +R33 +L69 +L64 +R3 +R35 +R19 +L540 +L51 +L18 +R52 +R6 +L247 +R73 +R733 +R80 +L45 +L329 +R48 +L97 +L22 +R59 +R41 +R1 +L14 +R44 +R56 +L87 +R965 +R51 +L6 +R5 +R79 +L93 +R51 +R50 +L2 +R628 +L88 +R60 +R34 +L915 +L19 +R55 +R745 +R67 +L75 +L92 +L98 +R871 +L75 +R3 +L19 +R18 +R62 +L92 +L32 +R85 +L23 +L92 +L26 +R18 +L40 +R40 +L86 +R86 +L59 +R32 +L93 +L32 +R78 +L45 +L70 +R89 +R908 +L45 +R68 +L26 +R63 +R32 +R58 +R86 +L46 +R2 +L19 +R19 +R847 +R59 +L5 +R90 +R72 +L63 +L19 +R19 +L859 +L16 +L25 +R59 +L59 +R39 +L39 +R431 +L58 +R27 +L49 +L29 +R78 +L42 +L91 +L67 +R86 +L786 +L50 +R570 +L42 +R5 +R984 +L76 +L60 +L25 +R56 +R98 +R55 +R85 +R677 +R93 +L70 +R83 +R317 +L471 +R55 +R16 +L448 +L155 +R64 +R339 +L41 +R173 +L20 +L72 +L20 +L520 +L24 +L76 +R89 +R35 +R13 +L759 +R624 +R98 +R37 +R563 +R99 +L99 +L703 +L57 +L32 +R61 +R31 +L630 +L70 +R60 +L91 +R250 +R6 +L25 +R30 +L69 +R38 +L42 +R43 +L9 +R9 +L927 +R40 +L76 +R253 +L619 +L271 +L425 +R21 +R99 +R76 +L71 +R284 +R93 +R311 +R790 +L32 +L46 +R90 +L52 +R62 +L45 +L76 +R21 +L91 +L30 +R221 +L787 +R81 +R59 +L53 +L39 +R12 +L573 +L27 +L873 +R87 +L587 +R8 +L240 +R431 +R617 +R92 +L8 +R7 +R93 +R57 +R58 +L41 +R16 +L78 +R80 +L92 +R36 +L536 +L80 +L70 +L27 +L74 +L82 +L18 +R51 +L576 +R7 +L14 +R83 +R522 +R878 +L55 +L60 +R15 +L79 +R75 +R4 +L44 +L1 +L13 +L8 +L94 +L13 +L727 +R40 +R10 +R91 +R59 +R19 +L63 +L56 +L93 +R93 +L99 +R56 +R31 +L51 +L37 +L30 +R290 +R40 +R94 +R254 +L48 +L15 +L95 +R86 +L41 +R35 +R45 +R19 +R66 +R532 +L738 +L50 +L18 +R89 +L15 +L22 +R79 +R90 +L18 +R953 +L49 +R83 +R84 +R357 +L540 +R37 +R246 +L70 +R48 +L78 +L11 +L77 +R59 +L71 +R30 +L77 +R47 +R61 +R36 +R68 +R35 +L64 +R64 +L76 +L79 +R55 +L95 +L76 +R671 +L21 +L28 +R1 +L452 +R47 +R85 +L731 +R99 +R88 +L569 +R50 +R40 +L9 +L31 +R17 +R57 +R651 +L27 +R33 +R40 +L51 +R43 +R12 +R56 +R93 +L789 +L79 +L12 +L13 +L263 +L937 +R653 +R39 +L43 +L49 +R23 +L23 +L42 +R789 +R2 +R251 +R70 +R99 +L658 +R89 +R691 +L427 +R36 +L57 +L50 +R75 +R332 +R33 +L1 +R168 +L929 +R29 +R53 +L2 +L51 +L52 +R52 +R89 +L24 +L65 +R65 +R35 +R822 +L87 +L75 +L32 +L668 +L408 +R114 +L366 +L27 +R15 +L46 +L42 +R14 +L52 +R90 +L52 +L83 +R16 +L906 +L25 +L97 +L205 +L27 +L121 +L52 +L99 +L1 +R310 +R90 +L61 +L39 +R4 +R81 +R15 +R187 +R13 +L84 +R66 +R51 +R67 +L656 +R35 +L48 +R89 +L606 +R786 +R73 +L14 +R41 +L18 +R818 +L73 +R73 +R14 +R18 +R27 +L81 +R49 +R1 +L93 +L33 +L8 +L694 +L31 +L83 +R414 +R60 +R40 +R88 +R46 +L34 +L451 +L5 +L86 +R90 +R52 +L61 +R47 +L86 +R5 +L953 +R418 +L70 +R696 +R1 +R69 +R296 +R38 +L69 +R69 +R89 +L989 +R173 +R42 +R585 +L638 +L54 +L29 +L569 +L10 +R14 +R47 +R95 +R99 +L62 +R807 +R27 +L24 +L94 +R63 +L72 +L74 +R74 +R458 +R89 +R953 +R25 +R89 +L77 +L47 +R36 +L133 +L93 +R21 +L21 +L397 +L3 +R25 +L340 +R94 +R7 +R45 +L31 +R85 +R88 +R94 +R933 +L59 +L292 +L449 +R28 +L28 +L163 +R645 +R18 +R11 +R89 +L4 +R760 +R79 +L35 +R55 +L55 +L10 +R5 +R809 +L4 +L51 +R18 +R28 +R29 +L24 +L53 +R176 +R25 +L48 +R41 +L62 +L74 +R357 +L84 +R3 +R29 +L10 +L71 +L65 +L26 +L37 +R56 +R74 +R16 +L47 +L4 +L226 +L60 +L3 +R27 +R66 +L81 +R781 +L61 +R567 +L673 +R367 +R22 +R78 +L955 +L207 +L85 +R768 +L5 +L37 +L79 +L60 +R960 +L93 +L1 +R47 +R47 +R43 +L43 +L62 +R192 +L85 +R55 +R36 +R433 +R731 +L576 +L824 +L860 +R162 +L30 +R46 +R28 +L46 +R724 +R48 +R18 +L790 +L85 +L15 +R50 +R50 +R97 +L10 +L87 +R93 +L46 +R53 +R82 +R39 +R79 +R96 +L96 +L30 +R84 +L54 +L2 +L16 +R60 +L42 +R88 +L888 +R63 +R919 +L82 +L34 +L64 +L2 +R4 +L504 +R66 +L66 +R73 +L4 +R72 +R59 +L74 +L26 +L87 +L210 +L49 +R66 +L22 +L98 +L45 +R64 +L19 +L64 +L36 +R94 +L874 +R880 +R9 +L44 +L291 +R26 +R53 +R47 +R86 +R38 +R97 +L484 +L145 +L48 +R31 +R66 +L41 +L44 +L44 +R55 +R10 +L77 +R594 +L94 +L32 +R24 +R81 +R192 +R87 +L952 +R73 +R73 +L83 +R37 +L83 +R83 +R818 +R82 +L62 +R62 +L99 +R42 +R46 +R2 +L91 +L18 +R77 +R41 +R27 +L27 +R25 +L25 +L84 +R80 +L96 +L117 +R17 +L329 +L71 +L689 +R89 +R66 +R352 +R74 +L60 +R15 +R53 +R33 +L33 +L3 +L95 +R98 +R53 +R91 +R1 +L70 +R91 +L66 +L30 +L10 +R79 +L3 +L27 +L35 +R26 +R94 +L94 +L88 +L29 +R83 +L66 +R50 +L50 +R26 +R75 +L1 +L84 +L28 +R84 +L56 +L16 +R55 +R22 +R23 +R95 +R15 +R90 +L64 +R64 +L90 +L93 +R87 +L4 +R3 +L63 +R69 +L9 +L37 +L2 +R10 +R22 +R39 +R49 +R33 +L13 +R36 +R44 +R13 +L42 +R2 +L23 +R36 +R13 +R35 +L32 +R48 +R3 +R28 +R20 +R2 +L12 +R44 +L35 +L34 +L25 +L36 +L5 +R42 +R4 +R3 +R24 +L2 +R38 +L9 +R43 +L13 +L32 +R15 +R8 +L27 +R7 +R40 +R13 +L22 +L22 +L34 +R36 diff --git a/day1.c b/day1.c new file mode 100644 index 0000000..d33e384 --- /dev/null +++ b/day1.c @@ -0,0 +1,60 @@ +#define DJSTD_BASIC_ENTRY +#include "./djstdlib/core.c" + +int djstd_entry(Arena *arena, StringList args) { + string input = os_readEntireFile(arena, s("./day1-input")); + + int64 dial = 50; + int64 lineNo = 0; + StringList split = strSplit(arena, s("\n"), input); + + int32 password = 0; + + for (EachEl(split, string, line)) { + if (!strEql(*line, s(""))) { + bool lineValid = false; + if (line->length > 1) { + char dir = line->str[0]; + Int32Result numStrParsed = parsePositiveInt32(strChopStart(*line, 1)); + if (numStrParsed.valid) { + lineValid = true; + + int32 dialPrev = dial; + int32 pwPrev = password; + + int32 turns = (+numStrParsed.result)/100; + password += turns; + + int32 remainder = numStrParsed.result - (numStrParsed.result/100)*100; + + if (dir == 'L') { + dial -= remainder; + } else if (dir == 'R') { + dial += remainder; + } + + if (dialPrev != 0 && (dial >= 100 || dial <= 0)) { + password += 1; + } + + println("turn: %S, %d => %d, %d", *line, dialPrev, dial, password - pwPrev); + + dial %= 100; + if (dial < 0) { + dial += 100; + } + } + } + if (!lineValid) { + println("Input corrupted at line %d", lineNo); + return 1; + } + } + lineNo++; + } + + println("%d", password); + + return 0; +} + diff --git a/day2-input b/day2-input new file mode 100644 index 0000000..4de7d32 --- /dev/null +++ b/day2-input @@ -0,0 +1 @@ +1-14,46452718-46482242,16-35,92506028-92574540,1515128146-1515174322,56453-79759,74-94,798-971,49-66,601-752,3428-4981,511505-565011,421819-510058,877942-901121,39978-50500,9494916094-9494978970,7432846301-7432888696,204-252,908772-990423,21425-25165,1030-1285,7685-9644,419-568,474396757-474518094,5252506279-5252546898,4399342-4505058,311262290-311393585,1895-2772,110695-150992,567521-773338,277531-375437,284-364,217936-270837,3365257-3426031,29828-36350 diff --git a/day2.c b/day2.c new file mode 100644 index 0000000..37ebf38 --- /dev/null +++ b/day2.c @@ -0,0 +1,54 @@ +#define DJSTD_BASIC_ENTRY +#include "./djstdlib/core.c" + +int djstd_entry(Arena *arena, StringList args) { + string input = os_readEntireFile(arena, s("./day2-input")); + + StringList ranges = strSplit(arena, s(","), input); + + int64 result = 0; + + for (EachEl(ranges, string, range)) { + if (range->length) { + StringList startStop = strSplit(arena, s("-"), *range); + if (startStop.length == 2) { + Int64Result start = parsePositiveInt64(startStop.data[0]); + Int64Result stop = parsePositiveInt64(startStop.data[1]); + if (start.valid && stop.valid) { + for (int64 i = start.result; i <= stop.result; i++) { + Scratch scratch = scratchStart(0, 0); + string asStr = strPrintf(scratch.arena, "%zu", i); + for (int j = 1; j <= asStr.length/2; j++) { + if (asStr.length/j*j == asStr.length) { + StringList list = PushList(scratch.arena, StringList, asStr.length/j); + for (int k = 0; k < asStr.length/j; k++) { + ListAppend(list, strSlice(asStr, j * k, j*k + j)); + } + string firstChunk = list.data[0]; + bool matched = true; + for (EachEl(list, string, chunk)) { + if (!strEql(firstChunk, *chunk)) { + matched = false; + break; + } + } + if (matched) { + printStrList(list); + result += i; + i++; + break; + } + } + } + scratchEnd(scratch); + } + } + } + } + } + + println("%zu", result); + + return 0; +} + diff --git a/day3-input b/day3-input new file mode 100644 index 0000000..0970814 --- /dev/null +++ b/day3-input @@ -0,0 +1,200 @@ +3223323232423342133321323321133325222233342332323323343713331321434231231232333333232334233323322122 +3422323123349134332433333333432333313333323413433133433343234433433334323333452433843344143323335344 +3323113221321312236523622222221222225424323212132242333365351332221432232235143422248222121121832228 +3463333333523444333334433344544335323235227453444243335438244443585333243345323433342343323423544343 +4233366944836552382823534346549355354476555367335594833663342368343653554644862935563623533154857355 +1332332433331354333343732343231333333333333244331233163343322313323333333342353333433313332343313344 +2323333333132333133423233333532331333334313243333333432343123323232442532313323213333333223533324332 +5312224222713236213232382221222222216232352633323322223233232333323422323225662322323723232222222232 +2243331332223333322421433342323323331333332213223332233332153332433342223233221232112323323334332332 +3156557564452635362717784672442615553635257743349535442676644432474552623544224472653952463455546442 +1312431342342824244214465334554334223332235314353232153332244574432234522234334345234413323433435332 +3554245243536264333644415362575554525424533152554425565554435225545754365521344355555155556554244433 +3353433343933436853333343334433544533333353523333323331553333462333433233452343223323433553333333534 +7336455237364265332533353534645233452333753233274646144545334553331347633135465814457336666374354374 +2433722533332321213232333323222232322233342222371243322432283314643332334143336933224322221331822363 +2247224633427672333417546743363394719333635395533333441323733426343643343694333454335345367755643335 +2243232372672232322322321215224746323615328472712261262632721421227121452562656223322437218572422221 +1222929212582422112521233212223222234234242267327154222384122121223122512222523922212956222222252226 +3122322435422357222233333223232234352422221333433322342832323122234243231745124324563425262224222212 +1321332222443232432355222422425222244535264454241322322422345333244431431322113412444229424432364133 +1212211124122213456255217441532222222725521322332233213222221332222222331222522232142283122212112121 +1221222142222133332341312333325237232223222244224227223222113232232634322322222232323273223434131332 +5438843322344249174483324441333413342444444434313423752414444443442232434241744241444444333413444444 +2231336232333236334112243332332341353232312512325222263432225332633322235632375232223315283333433363 +1233232232244732342232235233433333134123235541423222432442243435221242423434242223322334433434343534 +2312422514215411132514322222222222222223235322134223312222221142221213222214314222122211213144122472 +2352312236346345122352672524653136221643242523462324342566643556212133253226462645113375562465463463 +2252285215225322621451522125151253218241242222322242421513142213122213274723222222122122212212242622 +4764556435435474434364374545434435645236634745385365324363447564667544243444254647645664366435256446 +2824332112222121122241422243122211121322131212222342523222233232222222122132221321211233223212242222 +1222322226122232414323112322352321231332324222222212212232243242322235213322222222322223222323222125 +2252722221562224322233133222324333222431232222232332122212212283223222235313323222321222263422212225 +3225322333142232533532322223341246336436425354236552512341262222442442432424316254235423242422424431 +1229234225411352533231233325262212262424612324412432524244236611122332236543432356222256232952224223 +4422322225363423225135213321451642433226538122141642663126542212332323422221342331242252432422222321 +4662664565466353654667543463541541665663656552266564563364254245666465446455433446366683366354765935 +8112122265252322231255272221125322122133222332245342272259236322132232234219412242132223323213224323 +4324545423224241227583333327531422243651534442323374373723223267428526133225253163132824362447344627 +1873223364414122262223231362223512323215135752522222734422222232212231222721127222262123742126233273 +2222222232222221212222211332112222311222111122232212223231322221122222222113422312422211221222221122 +6515552226443442213243133322422152331233434354121421266462313324312444525221525635242234252313112554 +2222223313344213211222422221252212321227222252322221425222221421222322222323332221423322222223243212 +3322352323333353343333333144233223226632532233333132133232322373233333433231243323133323363262322133 +1334333384313212233263453263443134334542743232641425424243735343422256314524379414634432354365527544 +2222122222122222232235222222222222323222211222222222221222222222222222223222223222238223222132112222 +4552545432554471442435255334542432343233452454373464454247443423525434455545443443545522253444253434 +2295142423439123226532549221326257642473736734226243554156257523327813952236236373774524212322953292 +6244442442833334532829613842222423522322338315233322255442882222783429222223272245232322442432445282 +2223281222122322425123122325432223222221231423221422223222352213222122222324122222254223212125222222 +4424433234542223532234133312344242223261233264433212442333234342234445123232234125135124322342223215 +3321444232221444232243522321232343434246434634325422431432452732234232342217314324414312252342131422 +4222445346344244345463442445444423442454352143434333444443353434236443445442344345444343422434444423 +7445335355442547323942325424544342334544545134465255335334523554434234624285444374443344455232725354 +6662469465375473453283843715347366454456464744242897948347645557473738466479664648345568563543338562 +3413332432331224232321343113423313124414141122312422131143212412143243221443322142222431112231356789 +4214514253524332351123524241342444644324422532442535662142332142423422322324342455541551561232442442 +1252555353483543522442375222325465493151255532427344524824242548554533654314332823448245125448973335 +3343353332423434432357344244332322345473752733743623253234344323353733563438364635433334363233353522 +4481475443864865466663533753723433263738268884757523682775288884487347484537562245448287533854845335 +2283214222572422472292362124185482222421528232637272162222421216223326222232322222122323112662222251 +3322123122222252214216221233333231532222212222523332422324122223222332113225227423275142352322812232 +2122255524233332323141342322365426641312343232525215312133422433431435222512532421153342412622412265 +4322333321433452432114212422222241244242232121244322242338222432342132722243242283444223443412426222 +2686481452258352754854574561574766144245484684536194922243385338627468565255352555437323339672423363 +1512123243234132232133124432222472421461652222346228249225222542231432532112315523336523213754323431 +2333221223222122392221223212213232222423132223334312122234323222211313242534322221224222222322233331 +2423143222321313224212232212221421231245322412232422113222245343432231342344413332121234212122432322 +5442623431233335321453824421252232355952141522433545543539332335311722233143332383725343442562123323 +4221221222122221241232222321323222252323226212221222222222221222222122421128222632321222132322122422 +2425957221421122363222228632835265272254223922243713292442232584413234282222222228223946421632156433 +2334313352234233444434474442432342455339475628455436233334243333444454472923441724248233274444144933 +1522122621421834525224232222117228283782114644247574537427343251232114632224436232222312132122332444 +2222323813234423333232323344324323313233224123343232323233542523322414233332223733231443245334326222 +2212311222211222222262232222233231324123222121122232212222322232332222232232221221221222222282121222 +6446555567535466665998357435643445437644844342775443548435536556654763995236662635659544948533464655 +5555555645569655663523984432435935347685533255235633344358886535634465343443534535566633715553544874 +2223642272622224221226212325212321232213222622321222325227222423127222232231622222242522321612232231 +2496484462443135438653377563534444657376332434415777934547754544584252525522367928355656352624353245 +2212122212231222211322212232212222263222222223222221222222222224123131222123242223282212273222121242 +4554475645355358566552555545455545864555435533456467357552458357789556143315353426543345644476644555 +5134335453346453622442534252724124434414324146262511242446444264242232752516413335453447442422256322 +8553685876753576369998575836755786969767886966796423549848793898689987896697887879864874974433698684 +3222221212433223229321122342423213211223141222324922213223412223522935613123272223824242726231274133 +2323214223322522212142232432421443422332332221222222424212432233113322625224233543322232222333442332 +1221332242334224512242343232434244233322411431122212133442112222122433423124423224285123324324422432 +3366435344323232643422212253242435322453143543135334442252422132533353345222473345344251424223333344 +5577695784874427654465756434554854566476757655434446776634753864496554464687473687744697477557496744 +2223331223122231238412212831223232322322212222122221222122222222221222252112422232122214223223122223 +2227576456152577554153253435177341723712527161376724362342426213664663134124547466564665756352111689 +5335337643654473353237332235453355166334545466422334734736326554332364443221164555535734523223763333 +1344466459323423455113777375337223859383757333338384523593433243747981433467243637342557221538535533 +7582359387865258737443328653655389875433894548344445667743258486498794928645678369824848385534734776 +2332322322342342412234222222123242322323433221333223322422225132333224332123221343213233322333223335 +1222212339322122758223313222222412234122252233631244134342224222122222223327233224222433319335255325 +6333333432353233327325334333323333274233333373223333337313333233353533323323353333332333333433223233 +2222231213132221223322123412222323242231322222422221123124312224211232331236231113222223242212222222 +6211221233212246222221221723221232332221222252212222122242232221211221222229233224323232222323634222 +4352121222222321222222929223222422223722623222225222222412282122222222222242422212222693244181222222 +8913337637249265653436452735736242455355355265685536925394769886566866374777555685751454834945789964 +6752637474433657857283376566544626855476477675654588677482837533623665555466364457344273957332432598 +4222413233422323343452222422233472623325342313333233232332524234234232143323733334434344324325327224 +8143572574121427425454114554163292434837485274446547432448523464544552394756325354741544552749493125 +2324242332224222222222222222322342426222122244332322222212222222223221222212232222222231222432223522 +2425251321241127455322154425742233534241444318282344443465142233458442232313443422323121526223256242 +5233541533952725232533434244442434334242514243352523321432353334334324654448344357263457437323422233 +1222222132122222224422244224221235421422122212343322242321222233222222222242212423224222222221232212 +4373334332463466333442362333753332443524543247336343243645323237488441333343346333295132124373733633 +2523534431224324414345482234444221454423424224333422322243448324312322434234442114435244442243441234 +5216772222555212556333333872237834577173233119353423313212327282523773262236416443872322221322534422 +4424454444342444524324435443234344844393334425484234434665336524452442786454756352213845227724656132 +3363354538235285633244636333445633466653126532211425338682456273436424254761431546225362531484356752 +3244434526534332442451233526275445263746427475576222343244732416444254472234325468473423233327523324 +2422544121232544222161323122663663125363226431332142232152243452376322341323334243243446643226633222 +2556357124477356153352651364546654358344426375261446425545358346436237863435535732553326661872325464 +5313342221214324343222333354423244423232415434421125243142423242452344323234424343233213432336333321 +2222222415222333212233322232232823223323532222223322234341323213222225132513233233144422241322323143 +2435536564346557977472363654558672655363255424452352727654342526452266662643477554244247634427452527 +2412313223331213327313121133331232322213221333333232231232222223452122132323126333523223212333232111 +3231332352212234212242355842132211432322343525228242534152254224252644227822521152241233542151273151 +1242242354442274547635266524274258756466558575646635642155345536824686545243645535452346434554656564 +6355664686264756488437865667634746736655788584654552586677568753312538543555254569657737547457458648 +3433333423124316324444328434113632222233763435842543934312343143673636821751634121614222233313442742 +2222422122222142252221232135222222325222244213424123245231122141312212221322221222121425222122122231 +4421273146345347671635465533646555455635434456635447367357366473634464635723765465847646573444674556 +8632543245483535984557352533562435234658334546456423545573444857755938555768254565451952547643543775 +3333333332333433543233332432433323323633133233233513335333433323432533333213334323333334434323233333 +3233333213323323313321331112423352233223333363332323322223225313335653333435322353221323233333233226 +3542224325544323334223433232434114234432125224324433142342313214416885443227423223233335124443443243 +5332424223422323232331421332142224234133323132312632224342362235122233232523311431244322126332325322 +3222323323312231332344313274322343223361261283233235222241251333332233123623322112244313232131231326 +3553546227454236346375443545175372962433445723533766777317531733331642245574676774264732264697226946 +2435643136269525431345566244444444225443349535623455444342423624564425263416364322344336355223562544 +5465346325726225434122422274252322744424443525523241734151312624357524433134543352446424544444254232 +1222232123121325324231422232221222322322222222222422433322222222224944125182233332122322122422222232 +2323423225235522223424422232612132311521844152232226655722121542532222142512472334432244213422312526 +5433221213531231256242366438214111642244562263723315543556223353574322732164154234244571947254521372 +4423444256245575277454484449462255466372224484443365354543562747423333494445434422443478532288535643 +7212212423321242211212221221222221222622921222662422614216245222324222251137525442122222222422532232 +3866324425639525332338773332267343827345232373334433521425625823323364613333729547256235334362325342 +3956721534132232125232223354253319653232234334419473243332814423252224323234341322431441435278353522 +6217536363656322526322115145666764366246463924636664266333265321456389562886565673152312236666533235 +2222245723222542322215462532312222252224331222122222216244622139221232245226732222225252322222232411 +2322543139452322455421152531422225323453243313452454242242151713542324264543313333713931223423342228 +3221312232421323282233234237522182224452253425262523326521312325322322162331221425332373123155232222 +2746432442536455442925944435593977235762735556344345555295341845842826452232744332536933645365525654 +2441574333821246122228322222312142252223248422252122432445221245132292339822481342645252222434225143 +2232222318242253123348232333344332226324544434534253222244322443222272822112142124233447132324441413 +2241442454535543312521314131131112335315542251251413111433321452321523234322331555423531515213426789 +2421866322223443213424411342422221235322434155242342122323443332862323334333223133323221232323212264 +4722432322464532321414334423442423222342212342124343424224224244443434442442312432312121412343262442 +7232221322321522232326122212222342222322222212312222323242222222122222353332122223122112131233222222 +2643222121222222322322422222222123223122243232324222142233112211223151322222212212232223422224342313 +3442333385524542324324223132392421244233363233622433141237435232425524131382333933335432333133587443 +4331133222243432515443224333732243383832244133237352433333264644322723221373325733371283342362332353 +2332332334232123233313332132122463332332122233223332332233512283342443333133633323321123362232323312 +2322323212232342232222232121232222131222122232233233122223221323233342222422222422212342221323231233 +4398433487689256957736447448958955647985575694458686573584458446529576886544765828746538614956782733 +5342265323223554344222423442443442244621452444334535623444364234751623434213245225222261231422234426 +3333222325132222521222231353123353122343112333353522222252252222131422235532213223231231323222525515 +1628322332616133411672142534245323296324442522322323333123232614218315222212122272229542333532312335 +4486646549621254343552376335367338931262676565364546652367262516243571456385522267463567256716552425 +3132342252574332243325555411453232224222542352542443223554226142523546322425433154312255325532432424 +3464267693574476953135666243136766777645656548444662243226644544487953443548557477854339565338341666 +4314322222132224222221232222222223222222221222122225422211222223523222231321322212252322222522213222 +8745345432452732543532735233374423435438343323453534332478358443637444436533235335315734845423235822 +2373227776462391365224136636227272715323636285134733342825834238571243345753251263333742335753333763 +6236531553554154255644321211121223122244435453611521363315445223336111124466261146114553363516454789 +2141132231122222128231324232242223212124232222531422221312221242422234223122222212222542422344222321 +5695222952453322424522524329243556774533752455554522244442365425913434264444322544692448456424433324 +2222412222322542232222321332222211332122221454432312321322242223222212422242242111232231324232212223 +1222262425251422221421121212622235222422222241533212232612522422162224642322213161325525522311233221 +2357329192452425321496232348725343236257672366346176324732582263123357855556254537754544333427777296 +4122365247223133236225133223821321627528418255422292622234621243613323235262236695346315222412823215 +8232327686335213853635467688643854864565678246571456562298523736225424931483345863684647465533884763 +5433644333734433692878966464333565342355277374345773865533443553344433483941615253737584393333253359 +2623182117312236223223229122232923282623243321226112232224293123133222127211521213222222127322222224 +4515355464345435252553259327524365344535354453245547753457653474554755537357543549834754544354454257 +4343242444454244355441446534224434653463254664462422444444454634424542754642545446454456443345236244 +6252564353123123234553322165573813992576675563459842432346475523255223746632435673632324542622232743 +3683762484734182117162245181271658436561472683238836883216376187475754326856275132257561553873514879 +8322422233253425332533442132461642333455462342214353436112244432434223443313413233444116359358325357 +2122231223214232212133332132222233931212222232322222122223221322223221227222122222223222222252212122 +2133522334323313232222243543222432433463536553452323324245443343254241133533234353342343255461321231 +4122333122212322225322231334325214312232223232222412212214232124422231324324242122124222322242232333 +2217222478253322421552352224222221422282251262322324321327622222623326421343522112272721225413222522 +4324333333323335332243333323654533332333343333342233442234332433134323213236333443231334333342313423 +4455855445424555743549549446445444185464658743359464455555473834547337497954564438854556355578864554 +4635155355543423242435552564645777735354562584442545334445744343552455484475445234235895615335665432 +3522213332223422221352222333332315223232321223112223132232223223343313337221335322113113312322321322 +2462451864722242312529223247244228744625352215342742231553326545451872824234526145272226523759472552 +3241433223333432443242352432251433253342224423323342235233224434235223342321431436384243233223323633 +2144222234232524322112262213224424242243432232442213442112222211362412221421223222233421212343242432 +5546565255544585455857545954555633553553535926559748584756454463543565551595454257455555595555855744 +4632332242242234293772618826288172757372366734632738945845236752479947259285477278212467375386832853 +2343553276363356535522332242643945654352263332355665563332352434334538634333234323524532646666532373 +6642233412433362523333233544252325392143222451732233234252432221136443244543244155633432322432142312 +6645513635553536456434465554555532563634624843245574253462583453246844857313433341876266423526473852 +1113233522332432321212222313412315521343627282223261232234221222322442422324222532621323222434113195 +2221255122222112321232232225222222242222221523222213222222221121122123224312322231221223212222222224 +1112121122222223222222222222112242222232323212322222213112322622222132213212123253423222223242122232 diff --git a/day3.c b/day3.c new file mode 100644 index 0000000..30aa2e6 --- /dev/null +++ b/day3.c @@ -0,0 +1,38 @@ +#define DJSTD_BASIC_ENTRY +#include "./djstdlib/core.c" + +int djstd_entry(Arena *arena, StringList args) { + string input = os_readEntireFile(arena, s("./day3-input")); + + StringList split = strSplit(arena, s("\n"), input); + + int32 maxJoltage = 0; + + for (EachEl(split, string, line)) { + if (strEql(*line, s(""))) { + break; + } + int32 firstDigit = 0; + int32 secondDigit = 0; + int32 secondDigStart = 0; + for (int32 i = 0; i < line->length - 1; i++) { + int32 currDigit = line->str[i] - '0'; + if (firstDigit < currDigit) { + firstDigit = currDigit; + secondDigStart = i + 1; + } + } + for (int i = secondDigStart; i < line->length; i++) { + int32 currDigit = line->str[i] - '0'; + if (secondDigit < currDigit) { + secondDigit = currDigit; + } + } + maxJoltage += firstDigit * 10 + secondDigit; + } + + println("%d", maxJoltage); + + return 0; +} + diff --git a/djstdlib b/djstdlib new file mode 160000 index 0000000..3f3ef53 --- /dev/null +++ b/djstdlib @@ -0,0 +1 @@ +Subproject commit 3f3ef5351fa083095984642bc408850deb23f7f1 diff --git a/target/app b/target/app new file mode 100755 index 0000000000000000000000000000000000000000..d463035e1623a661e0c27658028dfb650a0aa203 GIT binary patch literal 90032 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