From b87fb990016cfe969e1ad025878d851870f266b0 Mon Sep 17 00:00:00 2001 From: Eric Woodward Date: Wed, 3 Dec 2025 00:04:09 -0500 Subject: [PATCH] first commit --- .editorconfig | 8 + README.md | 8 + day01/input.txt | 4531 ++++++++++++++++++++++++++++++++++++++++++++ day01/js/day01a.js | 88 + day01/js/day01b.js | 103 + day01/notes.md | 11 + day02/input.txt | 1 + day02/js/day02a.js | 45 + day02/js/day02b.js | 59 + day02/notes.md | 13 + 10 files changed, 4867 insertions(+) create mode 100644 .editorconfig create mode 100644 README.md create mode 100644 day01/input.txt create mode 100644 day01/js/day01a.js create mode 100644 day01/js/day01b.js create mode 100644 day01/notes.md create mode 100644 day02/input.txt create mode 100644 day02/js/day02a.js create mode 100644 day02/js/day02b.js create mode 100644 day02/notes.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7929358 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +# EditorConfig is awesome: https://editorconfig.org + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true diff --git a/README.md b/README.md new file mode 100644 index 0000000..83870ca --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +## Advent of Code 2025 + +At the suggestion of a co-worker, I'm participating in the Advent of Code for 2025, and thiss repo will have my solutions. + +While I plan to do some of these in different languages, I'm 2 days in and so far, it's 100% JavaScript (my preferred language over the decade or so, and the one I work in the most). + +Each day should have instructions for running it. Fopr the JS stuff, it's node 22 with no special packages. + diff --git a/day01/input.txt b/day01/input.txt new file mode 100644 index 0000000..65933e4 --- /dev/null +++ b/day01/input.txt @@ -0,0 +1,4531 @@ +R8 +R28 +R43 +L29 +L3 +R29 +L24 +L12 +R22 +R5 +L5 +R43 +L8 +R30 +L32 +L40 +L14 +R39 +R3 +L23 +L9 +L33 +L1 +R21 +R36 +L5 +R44 +L1 +L8 +L4 +R24 +R31 +R3 +R38 +R10 +L34 +L20 +R6 +L14 +L31 +R50 +L43 +R16 +R18 +L8 +L8 +R21 +L24 +L37 +R39 +R78 +L79 +L6 +R20 +L78 +R7 +L12 +L17 +L3 +L97 +L17 +R65 +R2 +L56 +L1 +L93 +L61 +L39 +L65 +L53 +L82 +R33 +L33 +R41 +L41 +R2 +R98 +L63 +R55 +L15 +R55 +R68 +R13 +R13 +L77 +R65 +L14 +L40 +R83 +R57 +L81 +L67 +L52 +R86 +L86 +L49 +L51 +R14 +R60 +R26 +L7 +R91 +R91 +R78 +L1 +L52 +R46 +R54 +L26 +R19 +R15 +L339 +L65 +R96 +L49 +R69 +R51 +R29 +L456 +L357 +R135 +R78 +L86 +R72 +L86 +L70 +R63 +R7 +R92 +R8 +L87 +R19 +L21 +L74 +R85 +R65 +R19 +L11 +L95 +L654 +L38 +R39 +L94 +R47 +L92 +R92 +R20 +L53 +L67 +R6 +R94 +L24 +R63 +R261 +R291 +L97 +R10 +R27 +R69 +R817 +L81 +R5 +L73 +L94 +L98 +L733 +R96 +L63 +L806 +R40 +R39 +L70 +L66 +L47 +R9 +R44 +L19 +R370 +L470 +R68 +L87 +R90 +R72 +L328 +R24 +R64 +L183 +L46 +L90 +L84 +R87 +R64 +L45 +R94 +L81 +R13 +L32 +L6 +L594 +R56 +R72 +R111 +R57 +R4 +L69 +R98 +L52 +R295 +R128 +R57 +R843 +L860 +L40 +R90 +L6 +R19 +R440 +L43 +R33 +R99 +L32 +L167 +L13 +L20 +R4 +L49 +L48 +R83 +L90 +R75 +R97 +R28 +R345 +L90 +L21 +L34 +L93 +L7 +R661 +L18 +L43 +R91 +R57 +L52 +R4 +R292 +L92 +R488 +L46 +L476 +R90 +L8 +L48 +L17 +L370 +L22 +L93 +R2 +L661 +L39 +L12 +R12 +R50 +R9 +L48 +L593 +R9 +L70 +R43 +L63 +L15 +L27 +L96 +L706 +L93 +R67 +R695 +R38 +R9 +L54 +R8 +R44 +L207 +R413 +L25 +R12 +L52 +L452 +L10 +L86 +L35 +L574 +L91 +R48 +R339 +L872 +R85 +L54 +L67 +L62 +R68 +L85 +R43 +R953 +R41 +L36 +L489 +L12 +L76 +R77 +R99 +R73 +L97 +L176 +L195 +R98 +R68 +R76 +L39 +R438 +L7 +L51 +R492 +R220 +L388 +R759 +R29 +L181 +R161 +L80 +R48 +L348 +R17 +R9 +R74 +R21 +R19 +L155 +L85 +R50 +R59 +R91 +R710 +L40 +L70 +R272 +L72 +L28 +L72 +R804 +R96 +R14 +L14 +L95 +R92 +L9 +L74 +L14 +L56 +R25 +R50 +R55 +L27 +R17 +L64 +L43 +R16 +L873 +R82 +R1 +R65 +R52 +R68 +R73 +L80 +L99 +L62 +R53 +L47 +L6 +L66 +L641 +R7 +L45 +R69 +L96 +L138 +L12 +L18 +L81 +L75 +L504 +R38 +L26 +R12 +L573 +L68 +R11 +L94 +R58 +R42 +R621 +L81 +R660 +L38 +R30 +L10 +R70 +R86 +R77 +R39 +L8 +R754 +R2 +L18 +L393 +R9 +L73 +L8 +R76 +L89 +L50 +L56 +L19 +R19 +L97 +L53 +L11 +L39 +R15 +L63 +L87 +R63 +R44 +R23 +L95 +L395 +R95 +L66 +L71 +R986 +R51 +R5 +R95 +L98 +R15 +L217 +R95 +L70 +L986 +R86 +R714 +L441 +R943 +R59 +L359 +R537 +R76 +R346 +R27 +R51 +R69 +R21 +L22 +L52 +L10 +R98 +L82 +L47 +L53 +L58 +R84 +R57 +L1 +L82 +L53 +R453 +L35 +R35 +L88 +L991 +L21 +R46 +R1 +R53 +L90 +L66 +R84 +R76 +L759 +R312 +L57 +R8 +L18 +R54 +R94 +L138 +R65 +R885 +L15 +L835 +L16 +L13 +R29 +L78 +L704 +R515 +L113 +L170 +R50 +R685 +R233 +L32 +R4 +R94 +R97 +R919 +R49 +R983 +R68 +R3 +L84 +R23 +R58 +R70 +L96 +R17 +R37 +R849 +R65 +L70 +L72 +R441 +R926 +R312 +R83 +L62 +L30 +R85 +L549 +R94 +R94 +R67 +L861 +L21 +L79 +L95 +L53 +R48 +L316 +L34 +L999 +L97 +R36 +L790 +L84 +L99 +L317 +R27 +L74 +L54 +L15 +R79 +L54 +R691 +R53 +R74 +R53 +L2 +L57 +R79 +R22 +R78 +L31 +L69 +R8 +L23 +R15 +L1 +R71 +R39 +R14 +R88 +R89 +L66 +R46 +L3 +L73 +R169 +R59 +R68 +L610 +L83 +R92 +R1 +R547 +R53 +L80 +R795 +L32 +R51 +L91 +L13 +R34 +R36 +L51 +L97 +L91 +R39 +L46 +L28 +R6 +R68 +R32 +L33 +L699 +L21 +R21 +R71 +R26 +R303 +R9 +R99 +R21 +R71 +L25 +R80 +R217 +L64 +L60 +L33 +R485 +L42 +R83 +R66 +L46 +L64 +R702 +R40 +L60 +R87 +R34 +L67 +R795 +L583 +R755 +R66 +R37 +L67 +L11 +L25 +L590 +L55 +L55 +R962 +L62 +L77 +L94 +R571 +L43 +L257 +L72 +L28 +L10 +L42 +R6 +R660 +R86 +L387 +L830 +L83 +R45 +R54 +L99 +L44 +R44 +R99 +R1 +L85 +R332 +R82 +R309 +L62 +L56 +R53 +L73 +L9 +L560 +R822 +R67 +R81 +R29 +R470 +R49 +R54 +R41 +R32 +R8 +L17 +R38 +L89 +R27 +R54 +R42 +L87 +R59 +L11 +R55 +R21 +R72 +L61 +L94 +L35 +L29 +L652 +L163 +L6 +R95 +R376 +R21 +R89 +L89 +R66 +R260 +L52 +L74 +L69 +R351 +L49 +R867 +L37 +R37 +R68 +L68 +L87 +L77 +L36 +R61 +L24 +L52 +R15 +R86 +L86 +L7 +L67 +R96 +R91 +L13 +L35 +L53 +R14 +L77 +L32 +R83 +L84 +L60 +R34 +R36 +R87 +R58 +L85 +L957 +L794 +R77 +L512 +L9 +L91 +R42 +R86 +L28 +L997 +L3 +L702 +R90 +R58 +L8 +L77 +L9 +R548 +L772 +R2 +L38 +R31 +R216 +L40 +L491 +R82 +L604 +L80 +L49 +R89 +R498 +L44 +L31 +L463 +L96 +L17 +R66 +L59 +R30 +L30 +L281 +R970 +L15 +R2 +R41 +L62 +L73 +R20 +L633 +R31 +L458 +R57 +L47 +L52 +L97 +R58 +L22 +L90 +R51 +R22 +R22 +R806 +L487 +L363 +L14 +L77 +R8 +L17 +L75 +R75 +R44 +R836 +L839 +L41 +L14 +L42 +R86 +R68 +L65 +R67 +L4 +R4 +R45 +R31 +R740 +L16 +R24 +R34 +R16 +R56 +R34 +L50 +R96 +L10 +R971 +R81 +L52 +R241 +R59 +L1 +L660 +L39 +L83 +R83 +L68 +L32 +L58 +R73 +L548 +L10 +L656 +R57 +R91 +R494 +R57 +L866 +L15 +R81 +L16 +L84 +L17 +L60 +R77 +R68 +L29 +L39 +L6 +L794 +L21 +L374 +L780 +L25 +L7 +L60 +R75 +L8 +L16 +L75 +L53 +R44 +L98 +L11 +R33 +R76 +L79 +L57 +L7 +L57 +R75 +L61 +L244 +L299 +L91 +R20 +R17 +R78 +L904 +L91 +L84 +L83 +L33 +R70 +R30 +R67 +L67 +R19 +R81 +L69 +L33 +R5 +R44 +L81 +R973 +R38 +R36 +L57 +R146 +L30 +L54 +R40 +L63 +R780 +R72 +R53 +L967 +R71 +R64 +R32 +L87 +R30 +R57 +L96 +R81 +L285 +R8 +R889 +L67 +L399 +L31 +L55 +R58 +R78 +L7 +L21 +R930 +R17 +R222 +L68 +L54 +R88 +R96 +L36 +L48 +L840 +R97 +R71 +R70 +L80 +L68 +L664 +R56 +L78 +L464 +R785 +L94 +R9 +L8 +R4 +L96 +L543 +R3 +L60 +R6 +L6 +L45 +R978 +L529 +R96 +L79 +R18 +L39 +R89 +L69 +L868 +R48 +L73 +R92 +R81 +R24 +R69 +R7 +R15 +L32 +L83 +L203 +L77 +L20 +R88 +L52 +R201 +L90 +L26 +R17 +R62 +L983 +L17 +R583 +R19 +R47 +L49 +R1 +R69 +L670 +R36 +R65 +R20 +R47 +L813 +R21 +R10 +L575 +L47 +L2 +R15 +R61 +R253 +R37 +L677 +L51 +R20 +L20 +R29 +R83 +L89 +R824 +R99 +R99 +R83 +L16 +L316 +R318 +R86 +R375 +L75 +L72 +L328 +R21 +R23 +R83 +L64 +R237 +R71 +R429 +L70 +R11 +R33 +L74 +L77 +L23 +R31 +L31 +R78 +L985 +L293 +L67 +R273 +R89 +L29 +L30 +R36 +R176 +R92 +R15 +R80 +R21 +R96 +R48 +R427 +L37 +R90 +R720 +L631 +L669 +L88 +L812 +L59 +L96 +R55 +R671 +R33 +L4 +L992 +R92 +R52 +L52 +R60 +R49 +L94 +L259 +R79 +R50 +L985 +L31 +L645 +L32 +R8 +R56 +R44 +R56 +L409 +R53 +R810 +R90 +L67 +R32 +R935 +R41 +R80 +R15 +R54 +L48 +L69 +R68 +R59 +R71 +R87 +R42 +R63 +L49 +R86 +R51 +R49 +L32 +L60 +R92 +R36 +R64 +L19 +R24 +R52 +R43 +L75 +R75 +R53 +R14 +R33 +L8 +L71 +R79 +L93 +R93 +R24 +R76 +L55 +L18 +R73 +R72 +L72 +R594 +L41 +L52 +R99 +R83 +L25 +L69 +R31 +L20 +R91 +R9 +L61 +L339 +R63 +L41 +R78 +L85 +L34 +R25 +L65 +R59 +R15 +R12 +L29 +R55 +L76 +L63 +R59 +L45 +L28 +R1 +L992 +L84 +L23 +R45 +R99 +L91 +R345 +L17 +L83 +L18 +L60 +R51 +R27 +R69 +L20 +R51 +R547 +L47 +R889 +R63 +L817 +R81 +L33 +L883 +L46 +R95 +L9 +L40 +L467 +R367 +R7 +L407 +R13 +R87 +L83 +L17 +R771 +R16 +R181 +R32 +L63 +R88 +L25 +R23 +R41 +L64 +R40 +R79 +L63 +L68 +R12 +R47 +L47 +R20 +L20 +L54 +L46 +L40 +R44 +R96 +L26 +R26 +R16 +R14 +L33 +R93 +L34 +R76 +L782 +L50 +R29 +R57 +R8 +L94 +R576 +R317 +L93 +R12 +R81 +R95 +R12 +L23 +L77 +R86 +R433 +R381 +R170 +L70 +L950 +L93 +L253 +L404 +R75 +R26 +R99 +L14 +R14 +L73 +L267 +L560 +L37 +L3 +L860 +L11 +L56 +L26 +R32 +R86 +L708 +R59 +R44 +L20 +L41 +R52 +L173 +R20 +R48 +R22 +R23 +R49 +R94 +L94 +L93 +L28 +R736 +R85 +R2 +R6 +R92 +L36 +R39 +L83 +R83 +L3 +R11 +R189 +R209 +R63 +R6 +L69 +R49 +R51 +R49 +R42 +R4 +L4 +L88 +R88 +L24 +L576 +L65 +R660 +L3 +L31 +R939 +R74 +R945 +R38 +L157 +L50 +R50 +R11 +R44 +L55 +L15 +L885 +L12 +L466 +L22 +R34 +L20 +L43 +R54 +L8 +L62 +L9 +R5 +R49 +L64 +R64 +R98 +L17 +L69 +L712 +L52 +R96 +R74 +L418 +R23 +L517 +R65 +R729 +L9 +R69 +L32 +R85 +L15 +R2 +L80 +L20 +R89 +R86 +L1 +R826 +L863 +L37 +L68 +R85 +R62 +R77 +R167 +L10 +L59 +R57 +R89 +R48 +R12 +R42 +R98 +R46 +R54 +L796 +L704 +L78 +L58 +R67 +L91 +L40 +R7 +L54 +L87 +R59 +R91 +L616 +L641 +R941 +L51 +L65 +L87 +R3 +L430 +R80 +R99 +R79 +L828 +L3 +R37 +R1 +R53 +L42 +R954 +R949 +R251 +R259 +R65 +R633 +L96 +R8 +L82 +L87 +L70 +L20 +R123 +R91 +R21 +L45 +R435 +R58 +R152 +R68 +L7 +R694 +R80 +L67 +R21 +L34 +L8 +L74 +L817 +R28 +L629 +R70 +L57 +L41 +L718 +R53 +L445 +L62 +L69 +R66 +L71 +L86 +R36 +L896 +R536 +L35 +L73 +R48 +R44 +L796 +L14 +R10 +L92 +R330 +L58 +R20 +L25 +R37 +R10 +R78 +L30 +R141 +R22 +L33 +R74 +L93 +R909 +L630 +R53 +R67 +L80 +R96 +R4 +L709 +R86 +R15 +L2 +R610 +R652 +R40 +R8 +L16 +L684 +R8 +R484 +R57 +R29 +L421 +R582 +R61 +R225 +R58 +R17 +L44 +L93 +L62 +R366 +R33 +R96 +R5 +R69 +L186 +R81 +R35 +R63 +L63 +R247 +L21 +L26 +L35 +R35 +R588 +R12 +L94 +R255 +R916 +R141 +R92 +L61 +R51 +R223 +R464 +R12 +L79 +R80 +L8 +L50 +L842 +R461 +L52 +L91 +R2 +R80 +L540 +L60 +R875 +R43 +L91 +L527 +L220 +R20 +R341 +L441 +L99 +L46 +L55 +R59 +L121 +R50 +R79 +L167 +L75 +L425 +L5 +R5 +L48 +R74 +R674 +L61 +L39 +R308 +L508 +R95 +R360 +R96 +L81 +R38 +R792 +L15 +L85 +R28 +L28 +R20 +R980 +R42 +L242 +R92 +L71 +L21 +R9 +L51 +R96 +L54 +R515 +L15 +L43 +L57 +L91 +L98 +R889 +R73 +L70 +R97 +L52 +L87 +L61 +L47 +R47 +L53 +L398 +R655 +R896 +R51 +L96 +L75 +R57 +R753 +R4 +R6 +R67 +R33 +L73 +R21 +L427 +L18 +R97 +L32 +R32 +L69 +R8 +L62 +L77 +R96 +L67 +L5 +L33 +L91 +R776 +L876 +L152 +L48 +R45 +R540 +L41 +L44 +L674 +L19 +R93 +R44 +R32 +L76 +L23 +R83 +L80 +R20 +L68 +R68 +R65 +L29 +L536 +R72 +L3 +L498 +R471 +R36 +R9 +L87 +L99 +R99 +L70 +R182 +R84 +R934 +L30 +L3 +R3 +L32 +R455 +L47 +R5 +L992 +L89 +L29 +R20 +R809 +L73 +L27 +L71 +L67 +R45 +L7 +L24 +L842 +L34 +R79 +L756 +L10 +R3 +R1 +R7 +R272 +R4 +L580 +R76 +R420 +R84 +L97 +L3 +R83 +R17 +R64 +L64 +R55 +R378 +R74 +L36 +R57 +L84 +L84 +R85 +R86 +R14 +R55 +R476 +L76 +L22 +R22 +R17 +L49 +R32 +L6 +R60 +L54 +L24 +L377 +L12 +L87 +R77 +L77 +R12 +L160 +R46 +L70 +R72 +R40 +L82 +L58 +L29 +R29 +R63 +R21 +L884 +R713 +R89 +R998 +R17 +L17 +L47 +L53 +R42 +R58 +L60 +R60 +R79 +L279 +R88 +R33 +R549 +L58 +R188 +R835 +R82 +L70 +L247 +R74 +L771 +R97 +R61 +R39 +R38 +R350 +L44 +L15 +R335 +R536 +L25 +L160 +R85 +R103 +R97 +R79 +R21 +L4 +R7 +L93 +R8 +L95 +R77 +L953 +R39 +L87 +L17 +R31 +R37 +R50 +L12 +L688 +R21 +R6 +L27 +L361 +L39 +L38 +R46 +R48 +R44 +L75 +L25 +R22 +L84 +L28 +R176 +L72 +L393 +L49 +R404 +L76 +R15 +L15 +L854 +L76 +R5 +R25 +L7 +L1 +L50 +L92 +R350 +L68 +L32 +L618 +R98 +L56 +R724 +R9 +R98 +R45 +L90 +L794 +R53 +L269 +L6 +R84 +R828 +L91 +L76 +L39 +R10 +R14 +L15 +R44 +R547 +R67 +L2 +R839 +L804 +R17 +L25 +R38 +R36 +L53 +R284 +R577 +R26 +L80 +L843 +R23 +L1 +R306 +L5 +R98 +R33 +R69 +L41 +R55 +R16 +L278 +R648 +R30 +R14 +L13 +R69 +R80 +L397 +L91 +L492 +L795 +L60 +R27 +R62 +L34 +R350 +L50 +L10 +L130 +R68 +L28 +R424 +L424 +L92 +R492 +L98 +R98 +L97 +R11 +R47 +R13 +R217 +R9 +R17 +R683 +R37 +L37 +R69 +L69 +L99 +R65 +R41 +L83 +R87 +R31 +R58 +R949 +R10 +R38 +R487 +L54 +L30 +L17 +L34 +L49 +L704 +L27 +L39 +R96 +R8 +L270 +R90 +L74 +R5 +L11 +R966 +R4 +L55 +R68 +L80 +L11 +R634 +R990 +L90 +L27 +L572 +R3 +R53 +R90 +R453 +L72 +R23 +R49 +L29 +L88 +R17 +L9 +L91 +L849 +L51 +L363 +R31 +R81 +L49 +L28 +R69 +L41 +L92 +L4 +L8 +R85 +L348 +L33 +R19 +R81 +L71 +R71 +R567 +R93 +L58 +L582 +L420 +L96 +L62 +R58 +R14 +R4 +L17 +L95 +L6 +L69 +R18 +R51 +L155 +L58 +R24 +L3 +R92 +R74 +R13 +L2 +R546 +L64 +R933 +L74 +L31 +L95 +R70 +L21 +R85 +L66 +R80 +R52 +R44 +R47 +R85 +L35 +R76 +L17 +R562 +R30 +R8 +R30 +R70 +R74 +L18 +R744 +R265 +L85 +R270 +L92 +L458 +L67 +R21 +L54 +L12 +L88 +R5 +R644 +L7 +R50 +R16 +R92 +R34 +L88 +L46 +L54 +L46 +L84 +R84 +L92 +L708 +L10 +R110 +L43 +L57 +L99 +L1 +R73 +L86 +R13 +L35 +L33 +R68 +R4 +R96 +L29 +R898 +L76 +R39 +R96 +R71 +L99 +L586 +R150 +R36 +R26 +R52 +L13 +R845 +L10 +L4 +R17 +L13 +L91 +L509 +R39 +R61 +L98 +R91 +L30 +L63 +R73 +L34 +L31 +L8 +R47 +R253 +R57 +L54 +R756 +R53 +R587 +R99 +L630 +R63 +R66 +R45 +L42 +R61 +L92 +R82 +L33 +L10 +L69 +L91 +R352 +R687 +R11 +L11 +L87 +R73 +R27 +R101 +L11 +L90 +L40 +R267 +R870 +L97 +L82 +L88 +L56 +R26 +R52 +R95 +L47 +R90 +R810 +L28 +L972 +R12 +L87 +R82 +R516 +R86 +R91 +L21 +L79 +L387 +L837 +L99 +L5 +L72 +L28 +L972 +L92 +R92 +R83 +R17 +L88 +R88 +R39 +R77 +L72 +R556 +R129 +L140 +R71 +R66 +L23 +L3 +L83 +L77 +L92 +R46 +L94 +R94 +L94 +R861 +L34 +R40 +R25 +R708 +L35 +R80 +L13 +L350 +L82 +L5 +L20 +L22 +L18 +R29 +L59 +R869 +R75 +R17 +R77 +R7 +L78 +L11 +L629 +R68 +L68 +R40 +L13 +R732 +R9 +L73 +R4 +L17 +R23 +L56 +L81 +L121 +L468 +R338 +R51 +L506 +L94 +L77 +L528 +L95 +L43 +L14 +L16 +L27 +L418 +R85 +L211 +L44 +L612 +L6 +R224 +R38 +L83 +L58 +L716 +R1 +R3 +L87 +R97 +L225 +R585 +L73 +L23 +R23 +L564 +L836 +R56 +L12 +L44 +R310 +L33 +R246 +L87 +R64 +L674 +R276 +R98 +R84 +L42 +L237 +L41 +R983 +R15 +R38 +L73 +R73 +L11 +R18 +R93 +L30 +L70 +R82 +R16 +R602 +L12 +R61 +L49 +L257 +R57 +L39 +R39 +L8 +R42 +L34 +L62 +L696 +L714 +L70 +R142 +R981 +R58 +R61 +R638 +R28 +L42 +R76 +R87 +R13 +L88 +L162 +L439 +L11 +R25 +L99 +R3 +R72 +R74 +R303 +R22 +R14 +L614 +R40 +R860 +R24 +R332 +L14 +R58 +L57 +R43 +R14 +R69 +R17 +L86 +L88 +L415 +L74 +L23 +R48 +L53 +R2 +L92 +R40 +L445 +L22 +L28 +R33 +R69 +R748 +L994 +L6 +L76 +R89 +R348 +R39 +R84 +L36 +L194 +R46 +L450 +L60 +R10 +L99 +R71 +L43 +L872 +R970 +L15 +L58 +L333 +L63 +L58 +R2 +L85 +L17 +R66 +L91 +L77 +R302 +R25 +L71 +R83 +R99 +L36 +R86 +L86 +L15 +R15 +R27 +R53 +L86 +R694 +L77 +L19 +L44 +R362 +L75 +L35 +L66 +R10 +L44 +L383 +L17 +R922 +R788 +R58 +L548 +L15 +R8 +L56 +L957 +R69 +R78 +R17 +L64 +L39 +L61 +L987 +L74 +L142 +L813 +R21 +R21 +R79 +L5 +L62 +R97 +L7 +R81 +R191 +L461 +L24 +L6 +R5 +R86 +R372 +L18 +L54 +R66 +R366 +R8 +L63 +L877 +L50 +L50 +R22 +R5 +R71 +R108 +R594 +L30 +L926 +L44 +R27 +L71 +L78 +R22 +L82 +R82 +R22 +L22 +L38 +L62 +L92 +L8 +L84 +R82 +R619 +L40 +L18 +L10 +R51 +L16 +L35 +L67 +R46 +L28 +R195 +R519 +R86 +R24 +L24 +R932 +R72 +L4 +R70 +R13 +R97 +R92 +R105 +R23 +R94 +R14 +R10 +L18 +R234 +R17 +L51 +R923 +R64 +L87 +L837 +L63 +L19 +L83 +L98 +R905 +L9 +R304 +R509 +L73 +L36 +L24 +R74 +R50 +L280 +L79 +R25 +L66 +R72 +R13 +R15 +R853 +R29 +R40 +L822 +L97 +R64 +R86 +L99 +L98 +L59 +R303 +R51 +L44 +L7 +R87 +R37 +L70 +R20 +R26 +L804 +R4 +R88 +L88 +L749 +R68 +R40 +R49 +L8 +R208 +R25 +R57 +R64 +R38 +L85 +R166 +L73 +R3 +L80 +R77 +L90 +R48 +R17 +L41 +R39 +L73 +R72 +R2 +R24 +L698 +R62 +L16 +L63 +L36 +L81 +L47 +L319 +R18 +R59 +R31 +R92 +R60 +R443 +R97 +L96 +R42 +L46 +R37 +R47 +L474 +R90 +R43 +R28 +R5 +L76 +L2 +L24 +R55 +R51 +L807 +R97 +R30 +R47 +L47 +L16 +L2 +R63 +L43 +L2 +R709 +R91 +L3 +R10 +R63 +L70 +L80 +L42 +R91 +L27 +L768 +L956 +L29 +R911 +R107 +R352 +L59 +R959 +R41 +R256 +L556 +R50 +L25 +L316 +R61 +R30 +R21 +L846 +R25 +R692 +R963 +R38 +L459 +L34 +R39 +R96 +R65 +L22 +R22 +L235 +R35 +R425 +L25 +R76 +L576 +R464 +L78 +L85 +L30 +L63 +R97 +L74 +L31 +L60 +L58 +L24 +R19 +L74 +R56 +L459 +L222 +L21 +R99 +R39 +R505 +R90 +R31 +R24 +R68 +L13 +R99 +L80 +L94 +R40 +L7 +R42 +L8 +L692 +R58 +R42 +R994 +R2 +R81 +L77 +R66 +R98 +R36 +L66 +L172 +L683 +L79 +R90 +R35 +L42 +L26 +R43 +L18 +L62 +R80 +L28 +R86 +R40 +L59 +L39 +R39 +R61 +L30 +R23 +R19 +L12 +R92 +R462 +L68 +R114 +R54 +R46 +R31 +L87 +L30 +R992 +L6 +R71 +R429 +L377 +L13 +R99 +L9 +L239 +L87 +R44 +L18 +L91 +R66 +R73 +L48 +L988 +R88 +R28 +L28 +R86 +R190 +L76 +R23 +L423 +R16 +L16 +R83 +L78 +R95 +L5 +R31 +L38 +R412 +L44 +L56 +L581 +R63 +R7 +L70 +R81 +R578 +L64 +L11 +R28 +R73 +R96 +L1 +R875 +R28 +R59 +L13 +R52 +L18 +R15 +L23 +L477 +L97 +L471 +L28 +R99 +L52 +L48 +R987 +R51 +L38 +L82 +L18 +L66 +L480 +R63 +L19 +L98 +L35 +R3 +L68 +R5 +R2 +R53 +L712 +L48 +L19 +R29 +R73 +L83 +L32 +R32 +L51 +L89 +L5 +L11 +L52 +L92 +L18 +L182 +L59 +R59 +R81 +R60 +L41 +L671 +L72 +R43 +L42 +L91 +R34 +R99 +R35 +L35 +L22 +L8 +L28 +R58 +R61 +R22 +R936 +L10 +L80 +L29 +R67 +L38 +R497 +L50 +R66 +R39 +L90 +R9 +L90 +L70 +R25 +L65 +L87 +R47 +L70 +L41 +L77 +L72 +L36 +L64 +R83 +L12 +L65 +R94 +R725 +R75 +R21 +L490 +R69 +R54 +L454 +L331 +L69 +R834 +R66 +R335 +R65 +L18 +R705 +R32 +R81 +R821 +L21 +L637 +R183 +L83 +R37 +R22 +R78 +R18 +L18 +R3 +R43 +R514 +L655 +R95 +R31 +L531 +L16 +L211 +R21 +R5 +R46 +L28 +R77 +R6 +R54 +L70 +L69 +L38 +L13 +L4 +R16 +L31 +L263 +L14 +L63 +R95 +L659 +L5 +R195 +L31 +L34 +R551 +R923 +L240 +R53 +R347 +R73 +L57 +L16 +R90 +R10 +L453 +R53 +R7 +L77 +R79 +R91 +R13 +R487 +R81 +L77 +R1 +R95 +L66 +R295 +L29 +R84 +L84 +L689 +R36 +L68 +R91 +L99 +L71 +R49 +R50 +R82 +L781 +L269 +L53 +L136 +L704 +R83 +L47 +R797 +L71 +R46 +L28 +L42 +L88 +L288 +L64 +R79 +L605 +L635 +R44 +L58 +R448 +R58 +L967 +L472 +R25 +R48 +L718 +R23 +R145 +R260 +L39 +R628 +R53 +L28 +R47 +R88 +R54 +R86 +R16 +L16 +L11 +R48 +R63 +L21 +L64 +L793 +R80 +R63 +R335 +L81 +L503 +R84 +L11 +R14 +L89 +R748 +L6 +L45 +R89 +R45 +L64 +R52 +L33 +R179 +R555 +L34 +R19 +R678 +R3 +L30 +L70 +L346 +R63 +L30 +L35 +R46 +L98 +R30 +L62 +R10 +L10 +R17 +R753 +R30 +R32 +L666 +L946 +L58 +R883 +R77 +L67 +R877 +R47 +L104 +R1 +R32 +R47 +L15 +L8 +L70 +R80 +L56 +L52 +L89 +L13 +R33 +L38 +R78 +R8 +R50 +R979 +L905 +R22 +R473 +L5 +R605 +L3 +L619 +R97 +L48 +L674 +L16 +R63 +L2 +R2 +R98 +L1 +R33 +L91 +L49 +L97 +L19 +L90 +R42 +R74 +L55 +L89 +L59 +L926 +R50 +L99 +L65 +R543 +R93 +R607 +L52 +L515 +R67 +L13 +L787 +R34 +R60 +R25 +R81 +L51 +L49 +L54 +L18 +R83 +R289 +R43 +L43 +R6 +L33 +R60 +R91 +R76 +R430 +L30 +R154 +R485 +L106 +L974 +L73 +R14 +R95 +R73 +R92 +R540 +L15 +L75 +L89 +R197 +L12 +R894 +L25 +R25 +L76 +L10 +L14 +R23 +L10 +R87 +L92 +R41 +L49 +R923 +L50 +R68 +L40 +L1 +R37 +L96 +R55 +R133 +L29 +R30 +R70 +R28 +L23 +L322 +R715 +L32 +R34 +L40 +R40 +L89 +R18 +L29 +R9 +L16 +R2 +R38 +L38 +R30 +L195 +R70 +L930 +R16 +R48 +R819 +R47 +R54 +R360 +L37 +R65 +R11 +R92 +R45 +L34 +L57 +L24 +R25 +R4 +L71 +L30 +L33 +R47 +L17 +R33 +L802 +L43 +L84 +L4 +R1 +L72 +R44 +R99 +R28 +L87 +R787 +L919 +L4 +L77 +L11 +L89 +L42 +R42 +L30 +L69 +R74 +L609 +R529 +R323 +R82 +L23 +R465 +L42 +R59 +R41 +R5 +R75 +L295 +L11 +L69 +R278 +L527 +R14 +L545 +R75 +R20 +R86 +L6 +L32 +R73 +L258 +R17 +R65 +R63 +R72 +R25 +L48 +R23 +L895 +L24 +R19 +L66 +L28 +R94 +L60 +R60 +L56 +R56 +L393 +R93 +R60 +L91 +R31 +L84 +R413 +L229 +R70 +R30 +R79 +R21 +L95 +R95 +R86 +R97 +L83 +R6 +R186 +L92 +R17 +L13 +R96 +L88 +R288 +R76 +R28 +R20 +R976 +L39 +L638 +L96 +L2 +L58 +L54 +R987 +R74 +L74 +L75 +L55 +L12 +R42 +R14 +L58 +L56 +R62 +L30 +R568 +L27 +L4 +L25 +R29 +R177 +R389 +L65 +R83 +R934 +L41 +L50 +L5 +L74 +R6 +L43 +L373 +R89 +R49 +R51 +L52 +R20 +R32 +R57 +L53 +L204 +L72 +L7 +L49 +R97 +R69 +L187 +R91 +R51 +R16 +L9 +L633 +R626 +L518 +R14 +R11 +R87 +R16 +L3 +L48 +R21 +R39 +R45 +R43 +R60 +L60 +R99 +R1 +L32 +L668 +R9 +L57 +L43 +R53 +R38 +R940 +L77 +R85 +R6 +R4 +L89 +R131 +R24 +L24 +R52 +L75 +L77 +R68 +R32 +R25 +R92 +R52 +R333 +R198 +R13 +L62 +R49 +L92 +R54 +L62 +R85 +L72 +R43 +R244 +L12 +R9 +R46 +R75 +L18 +L1 +R84 +R67 +R150 +L91 +L96 +L13 +R826 +R74 +L95 +L74 +L60 +L71 +R980 +L722 +R23 +R72 +R75 +R27 +L82 +R30 +L43 +L64 +R219 +R66 +L81 +L113 +R53 +L79 +L61 +L71 +R71 +L45 +R504 +L47 +L493 +L87 +R36 +L68 +L39 +L21 +L75 +R35 +L57 +R19 +L962 +R39 +L39 +R88 +R12 +R72 +R61 +L33 +L171 +L60 +R63 +L921 +L27 +L97 +L73 +L14 +R71 +R29 +L94 +L98 +L16 +L19 +L73 +L83 +R83 +R240 +R69 +L648 +R50 +L11 +R835 +R25 +L360 +R74 +R21 +R578 +R27 +L54 +L46 +L66 +R941 +R25 +L35 +R76 +L41 +R38 +L38 +R739 +R418 +L16 +R91 +R68 +R15 +L515 +L14 +L57 +R64 +L93 +L40 +R60 +R80 +R51 +R81 +L23 +L89 +L20 +R71 +R29 +L59 +R64 +L393 +L112 +L87 +L52 +R753 +L39 +R703 +R11 +L89 +R82 +R18 +L56 +L87 +L41 +R1 +R283 +R42 +R558 +R86 +R14 +L50 +L49 +L1 +R11 +R389 +L244 +L268 +R52 +L78 +L20 +L83 +L30 +L169 +R83 +R57 +L223 +L83 +L59 +L83 +L152 +R906 +L73 +L54 +R766 +R95 +L22 +R12 +L42 +R12 +R588 +L88 +L59 +R44 +R84 +L69 +R48 +R98 +R42 +L37 +R72 +L623 +R33 +L44 +L89 +R83 +L58 +R75 +R38 +L59 +L79 +L446 +R723 +R23 +L10 +R99 +L22 +R53 +L43 +L77 +L40 +R80 +L28 +L987 +R71 +L389 +L7 +R92 +R41 +R99 +R71 +R40 +R184 +R918 +R85 +L30 +L56 +R123 +L22 +R22 +L767 +L89 +L11 +R627 +L24 +L82 +R71 +L48 +R87 +L20 +L48 +L31 +R68 +L9 +R139 +L46 +L95 +R78 +R33 +R39 +L985 +L54 +L52 +R52 +L681 +R57 +R98 +L47 +R659 +L77 +L50 +L1 +R40 +R2 +L14 +L30 +R98 +L31 +L23 +L44 +R44 +R40 +L40 +R226 +R5 +R569 +R26 +R74 +L82 +R82 +L61 +L73 +L78 +L2 +L86 +R522 +R18 +L48 +L92 +L7 +L14 +R121 +R24 +L29 +L63 +R63 +L1 +L39 +L67 +R79 +L67 +L39 +L67 +R921 +R41 +L456 +L964 +R57 +L85 +L94 +R1 +R68 +L52 +L31 +R66 +L66 +L53 +L747 +R43 +R57 +R838 +R98 +R35 +R9 +L80 +L67 +L70 +R426 +R497 +R55 +R59 +L86 +R15 +L939 +R10 +L493 +L7 +L16 +L40 +L199 +L45 +R84 +R16 +L102 +L38 +R140 +L771 +L47 +R19 +R99 +R27 +L40 +L86 +L39 +R2 +L64 +L572 +L21 +L63 +R3 +R30 +R547 +R630 +L54 +R45 +L45 +L35 +R35 +R93 +R2 +R62 +R13 +L95 +R25 +R29 +R95 +L99 +R98 +L213 +L76 +R95 +L77 +L52 +L8 +L64 +R72 +L16 +R16 +L591 +L9 +L66 +L34 +R4 +R50 +R994 +R44 +R36 +L28 +L33 +L47 +L20 +R10 +L6 +L37 +L89 +L78 +L643 +R67 +R76 +L930 +R643 +L13 +L37 +L63 +R51 +R88 +R33 +L54 +L18 +R31 +R69 +L718 +L46 +R279 +R29 +R53 +L92 +L5 +R780 +R520 +L5 +R56 +R12 +L63 +L533 +R730 +R3 +L960 +L262 +R872 +R71 +R40 +R96 +L23 +L864 +R7 +R12 +L85 +L54 +R99 +L49 +L13 +L87 +R55 +R1 +L875 +L981 +L45 +L14 +L71 +R30 +L53 +L47 +L6 +L94 +L339 +L4 +L86 +R417 +L388 +R37 +L37 +R99 +R51 +L533 +L951 +R34 +L18 +R87 +L69 +R77 +L77 +L70 +R70 +L17 +R517 +R15 +L10 +R495 +R884 +R48 +R75 +L7 +L791 +R43 +L76 +L43 +L33 +R123 +R77 +L20 +L52 +L749 +R78 +R43 +L66 +L27 +R93 +L2 +R2 +R308 +R899 +L207 +R89 +R99 +L216 +R828 +L350 +R50 +R10 +R90 +R97 +R802 +L608 +R36 +L59 +L54 +R86 +R71 +R869 +L40 +R45 +L45 +R11 +R40 +L197 +R94 +R46 +R6 +L65 +L35 +L82 +R82 +R839 +L70 +L544 +R769 +L87 +R52 +R41 +R75 +L22 +L53 +L68 +L32 +R846 +L38 +L99 +L21 +R33 +L18 +L3 +L33 +L67 +R42 +R733 +L775 +R9 +L9 +L96 +R69 +L323 +L41 +R479 +L41 +L15 +R8 +L675 +R70 +L77 +L46 +R33 +L45 +R498 +L73 +L14 +L79 +L31 +L560 +R59 +L51 +R41 +R48 +L718 +R80 +R23 +R80 +R67 +R797 +L4 +L63 +L64 +L705 +R55 +L65 +R85 +R357 +R1 +R8 +R62 +L34 +R77 +R305 +R18 +R62 +L72 +L75 +R85 +L73 +R88 +L55 +L388 +R23 +L32 +R37 +L51 +L6 +L843 +L74 +R25 +R43 +L94 +R68 +L539 +R71 +L92 +R92 +R80 +L60 +R880 +R88 +R26 +R81 +L95 +L67 +L73 +R40 +R2 +R523 +L37 +L688 +L99 +L80 +L21 +L723 +R195 +L5 +R7 +R26 +L281 +L69 +R94 +R180 +R76 +L588 +L512 +R46 +R54 +R8 +R586 +R2 +L96 +L36 +R91 +R23 +L83 +L17 +R22 +R730 +L93 +L91 +R34 +L566 +L14 +L87 +L17 +L719 +R23 +L76 +L24 +L24 +L76 +R97 +R33 +L30 +R68 +R32 +L15 +L34 +R49 +L1 +L90 +R91 +R15 +R25 +R60 +R79 +R31 +L63 +L54 +R31 +R861 +R14 +L99 +R28 +R80 +R27 +R82 +R83 +L23 +L562 +L29 +R46 +R80 +R88 +L27 +L57 +R81 +R32 +R228 +R93 +L77 +L50 +L23 +R40 +R79 +L19 +R30 +L30 +R60 +R60 +R505 +L26 +R90 +L17 +R28 +R66 +L66 +L644 +L239 +L833 +R17 +R99 +R90 +L48 +L72 +R942 +R93 +L48 +L429 +R72 +R54 +R53 +R93 +L29 +R29 +L90 +R9 +R85 +L4 +L20 +R20 +L624 +L76 +R273 +L195 +L63 +L15 +L85 +L5 +R11 +L85 +R81 +R55 +L30 +R93 +L62 +L96 +R49 +L63 +R66 +L73 +L334 +L22 +R8 +L8 +L28 +R91 +R30 +R7 +L12 +R68 +R544 +R56 +L795 +L61 +L236 +L64 +L75 +R62 +L787 +L81 +L275 +R784 +L70 +L58 +L27 +L64 +R991 +L42 +R42 +R1 +L52 +L49 +L74 +R74 +L557 +R57 +L44 +R44 +L748 +R748 +L75 +L5 +L75 +L45 +L870 +L9 +R40 +L274 +L287 +L312 +L888 +L53 +R53 +R425 +R139 +R79 +L53 +L84 +L562 +L18 +L26 +L98 +L17 +L85 +R15 +L15 +L46 +R46 +R79 +R74 +L21 +L34 +L98 +L169 +L12 +L42 +L477 +R4 +R61 +R58 +R77 +L54 +R54 +R577 +L39 +R61 +L23 +R28 +R996 +L41 +L19 +R47 +L355 +L32 +R89 +R98 +R13 +R55 +R33 +L88 +L79 +R79 +R8 +L8 +R26 +R74 +R52 +L85 +L44 +L23 +L927 +R27 +R81 +L944 +R42 +R58 +L37 +R65 +L19 +R79 +L51 +R19 +R820 +R487 +L39 +R14 +L75 +R60 +R91 +R549 +L75 +L28 +R3 +L58 +R49 +L48 +R16 +L77 +L82 +L79 +L21 +L88 +L33 +L79 +R31 +R69 +R92 +L92 +R45 +R55 +R86 +L791 +R5 +L639 +L48 +R63 +L32 +R56 +L81 +R32 +L531 +L155 +L86 +R46 +R39 +L764 +R93 +L34 +L89 +R30 +R32 +R468 +R296 +R4 +L54 +R97 +R31 +L12 +R38 +L3 +L85 +L12 +L21 +L79 +L25 +R82 +L93 +R53 +R83 +R93 +L52 +L4 +R63 +L86 +R83 +L88 +R68 +R1 +R22 +L80 +R86 +R7 +R78 +L53 +R62 +R96 +R11 +R38 +R81 +R61 +R52 +L85 +L54 +R71 +L71 +R61 +R69 +L57 +L26 +L33 +L14 +R73 +L62 +R44 +R31 +R41 +R2 +R18 +L29 +L7 +L31 +L26 +L37 +L4 +L41 +R25 +L22 +L26 +R44 +L30 +R14 +R2 +L13 +L19 +L27 +L23 +L5 +R11 +R2 +R45 +R42 +R49 +R22 +L47 +R12 +R5 +L49 +L33 +R42 +L4 +R48 +R48 +R7 +L12 +L27 +R46 +R39 +R50 +L23 +L36 +R22 +L25 +L39 +R36 +R26 diff --git a/day01/js/day01a.js b/day01/js/day01a.js new file mode 100644 index 0000000..60aa513 --- /dev/null +++ b/day01/js/day01a.js @@ -0,0 +1,88 @@ +import { promises as fsPromises } from "fs"; + +async function asyncReadFile(filename) { + try { + const contents = await fsPromises.readFile(filename, "utf-8"); + + const arr = contents.split(/\r?\n/); + + return arr; + } catch (err) { + console.error(err); + } +} + +// dial 0-99 + +const DIAL_START = 50; + +const Dial = (start = DIAL_START) => { + let countZero = 0, + current = start; + const getCountZero = () => countZero, + reset = () => { + countZero = 0; + current = start; + }, + rotate = (initialVal = "") => { + const val = initialVal.trim(), + dir = val.length ? val.substring(0, 1).toUpperCase() : "", + amount = val.length ? (val.substring(1) * 1) % 100 : 0; + + if (!dir) { + console.log(`${val} => invalid value!`); + } + + const initial = current; + + if (dir === "R") { + current = (current + amount) % 100; + } else if (dir === "L") { + current = + (current - amount + (current - amount < 0 ? 100 : 0)) % 100; + } + console.log( + `${val} => rotating ${ + dir === "R" ? "RIGHT" : "LEFT" + } ${amount} from ${initial} to ${current}` + ); + + if (current === 0) { + countZero++; + console.log("CountZero!"); + } + }; + + return { + getCountZero, + reset, + rotate, + }; +}; + +const dial = Dial(); + +/* +// Test Data + +const dataToParse = [ + "L68", + "L30", + "R48", + "L5", + "R60", + "L55", + "L1", + "L99", + "R14", + "L82", +]; +*/ + +const dataToParse = await asyncReadFile("../input.txt"); + +dataToParse.forEach((val) => { + if (val.trim()) dial.rotate(val); +}); + +console.log(`Final countZero is ${dial.getCountZero()}`); diff --git a/day01/js/day01b.js b/day01/js/day01b.js new file mode 100644 index 0000000..23d0f04 --- /dev/null +++ b/day01/js/day01b.js @@ -0,0 +1,103 @@ +import { readFileSync, promises as fsPromises } from "fs"; + +async function asyncReadFile(filename) { + try { + const contents = await fsPromises.readFile(filename, "utf-8"); + + const arr = contents.split(/\r?\n/); + + // console.log(arr); // 👉️ ['One', 'Two', 'Three', 'Four'] + + return arr; + } catch (err) { + console.error(err); + } +} + +// dial 0-99 + +const DIAL_START = 50; + +const Dial = (start = DIAL_START) => { + let countZero = 0, + current = start; + const getCountZero = () => countZero, + reset = () => { + countZero = 0; + current = start; + }, + rotate = (initialVal = "") => { + const val = initialVal.trim(), + dir = val.length ? val.substring(0, 1).toUpperCase() : "", + originalAmount = val.length ? val.substring(1) * 1 : 0, + amount = originalAmount % 100, + hundreds = Math.floor(originalAmount / 100); + + if (!dir) { + console.log(`${val} => invalid value!`); + } + + const initial = current; + + if (hundreds) { + countZero += hundreds; + console.log(`${val} => has hundreds: ${hundreds} x CountZero!`); + } + + if (dir === "R") { + if (current + amount > 100) { + countZero++; + console.log(`${val} => passing 0: CountZero!`); + } + current = (current + amount) % 100; + } else if (dir === "L") { + if (current && current - amount < 0) { + countZero++; + console.log(`${val} => passing 0: CountZero!`); + } + current = (100 + current - amount) % 100; + } + console.log( + `${val} => rotating ${ + dir === "R" ? "RIGHT" : "LEFT" + } ${amount} from ${initial} to ${current}` + ); + + if (current === 0) { + countZero++; + console.log("CountZero!"); + } + }; + + return { + getCountZero, + reset, + rotate, + }; +}; + +const dial = Dial(); + +// Test Data +/* +const dataToParse = [ + "L68", + "L30", + "R48", + "L5", + "R60", + "L55", + "L1", + "L99", + "R14", + "L82", +]; +*/ + +const dataToParse = await asyncReadFile("../input.txt"); + +dataToParse.forEach((val) => { + if (val.trim()) dial.rotate(val); +}); + +console.log(`Final countZero is ${dial.getCountZero()}`); diff --git a/day01/notes.md b/day01/notes.md new file mode 100644 index 0000000..bf3c46e --- /dev/null +++ b/day01/notes.md @@ -0,0 +1,11 @@ +## Day 1: Secret Entrance + +This was fun, took about 90 minutes to get first two solutions (in JS). + +### JS Solutions + +``` +cd js +node day01a.js +node day01b.js +``` diff --git a/day02/input.txt b/day02/input.txt new file mode 100644 index 0000000..1681ec6 --- /dev/null +++ b/day02/input.txt @@ -0,0 +1 @@ +3335355312-3335478020,62597156-62638027,94888325-95016472,4653-6357,54-79,1-19,314-423,472-650,217886-298699,58843645-58909745,2799-3721,150748-178674,9084373-9176707,1744-2691,17039821-17193560,2140045-2264792,743-1030,6666577818-6666739950,22946-32222,58933-81008,714665437-714803123,9972438-10023331,120068-142180,101-120,726684-913526,7575737649-7575766026,8200-11903,81-96,540949-687222,35704-54213,991404-1009392,335082-425865,196-268,3278941-3383621,915593-991111,32-47,431725-452205 diff --git a/day02/js/day02a.js b/day02/js/day02a.js new file mode 100644 index 0000000..aa6b17a --- /dev/null +++ b/day02/js/day02a.js @@ -0,0 +1,45 @@ +import { promises as fsp } from "node:fs"; + +async function asyncReadFile(filename) { + try { + const contents = await fsp.readFile(filename, "utf-8"); + + return contents.trim(); + } catch (err) { + console.error(err); + } +} + +/* +const dataToParse = + "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124"; +*/ + +const dataToParse = await asyncReadFile("../input.txt"); + +const isDuplicate = (val = "") => { + const strVal = `${val}`, + strLen = strVal.length; + if (!strLen || strLen % 2 === 1) return false; + + return strVal.substring(0, strLen / 2) === strVal.substring(strLen / 2); +}; + +const ranges = dataToParse.split(","); +let total = 0; + +ranges.forEach((range) => { + console.log(`> running range ${range}`); + const [start, end] = range.split("-"), + last = end * 1; + let curr = start * 1; + while (curr <= last) { + if (isDuplicate(curr)) { + total += curr; + console.log(`>> found duplicate: ${curr} / ${total}`); + } + curr++; + } +}); + +console.log(`> FINAL: ${total}`); diff --git a/day02/js/day02b.js b/day02/js/day02b.js new file mode 100644 index 0000000..2323819 --- /dev/null +++ b/day02/js/day02b.js @@ -0,0 +1,59 @@ +import { promises as fsp } from "node:fs"; + +async function asyncReadFile(filename) { + try { + const contents = await fsp.readFile(filename, "utf-8"); + + return contents.trim(); + } catch (err) { + console.error(err); + } +} + +/* +const dataToParse = + "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124"; +*/ + +const dataToParse = await asyncReadFile("../input.txt"); + +const isDuplicateOld = (val = "") => { + const strVal = `${val}`, + strLen = strVal.length; + if (!strLen || strLen % 2 === 1) return false; + + return strVal.substring(0, strLen / 2) === strVal.substring(strLen / 2); +}; + +const duplicateRE = /^(\d+)\1+$/; +const isDuplicate = (val = "") => { + // new process - runa regex that looks for repeats from start to end + const strVal = `${val}`, + strLen = strVal.length; + if (!strLen) return false; + + const matches = strVal.match(duplicateRE); + + if (matches === null) return false; + + return matches.length >= 1 && matches[0] === strVal; +}; + +const ranges = dataToParse.split(","); +let total = 0; + +ranges.forEach((range) => { + console.log(`> running range ${range}`); + const [start, end] = range.split("-"), + last = end * 1; + let curr = start * 1; + while (curr <= last) { + if (isDuplicate(curr)) { + total += curr; + console.log(`>> found duplicate: ${curr} / ${total}`); + } + curr++; + } +}); + +console.log(`> FINAL: ${total}`); diff --git a/day02/notes.md b/day02/notes.md new file mode 100644 index 0000000..5e90841 --- /dev/null +++ b/day02/notes.md @@ -0,0 +1,13 @@ +## Day 2: Gift Shop + +This got a bit frustrating with the regex in the second part. + +It only took about 30 minutes to solve first part, but my answer involved literally splitting strings, so it didn't work for arbitrary matches and had to be replaced by a regex solution. After struggling with the regex for another 30 minutes, I put it away until the next day, when a 5-minute web search lead me to the fix for my bad regex. + +### JS Solutions + +``` +cd js +node day01a.js +node day01b.js +```