├── 2015 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 23 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 24 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 25 │ ├── answer1.txt │ └── part1.js ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js └── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 2016 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── hash-generator.js │ ├── hashes-ihaygndm-1.txt │ ├── hashes-ihaygndm-2017.txt │ ├── part1-full.js │ ├── part1.js │ ├── part2-full.js │ ├── part2.js │ └── runner.js ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 23 │ ├── answer1.txt │ ├── answer2.txt │ ├── input-optimized.txt │ ├── part1.js │ └── part2.js ├── 24 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 25 │ ├── answer1.txt │ └── part1.js ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1-full.js │ ├── part1.js │ ├── part2-full.js │ ├── part2.js │ └── zero-hashes-ojvtpuvg.txt ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── letters.txt │ ├── part1.js │ └── part2.js └── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 2017 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 23 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 24 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 25 │ ├── answer1.txt │ └── part1.js ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js └── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 2018 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── letters.txt │ ├── part1.js │ └── part2.js ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── combatEngine.js │ ├── parser.js │ ├── part1.js │ ├── part2.js │ ├── sample.txt │ ├── sample2.txt │ ├── sample3.txt │ ├── sample4.txt │ ├── sample5.txt │ └── sample6.txt ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── input-annotated.txt │ ├── input-pseudocode.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── input-annotated.txt │ ├── input-pseudocode.txt │ ├── part1.js │ ├── part2-full.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 23 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ ├── sample.txt │ ├── sample2.txt │ └── sample3.txt ├── 24 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 25 │ ├── answer1.txt │ ├── part1.js │ └── sample.txt ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js └── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 2019 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ ├── sample1.txt │ └── sample2.txt ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ ├── sample1.txt │ └── sample2.txt ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample1.txt ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 23 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 24 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 25 │ ├── answer1.txt │ └── part1.js ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ ├── sample0.txt │ └── sample1.txt ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── extras │ ├── adventure-generator.js │ ├── adventure.ic │ ├── adventure.icpp │ ├── adventure.json │ ├── adventure.template │ ├── intcode-compiler.js │ └── intcode-console.js └── lib │ ├── intcodes.js │ ├── letters.txt │ └── parseLetters.js ├── 2020 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 23 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 24 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 25 │ ├── answer1.txt │ └── part1.js ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js └── lib │ └── assembly.js ├── 2021 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 23 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 24 │ ├── answer1.txt │ ├── answer2.txt │ ├── input_solved.txt │ ├── part1.js │ └── part2.js ├── 25 │ ├── answer1.txt │ └── part1.js ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js └── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 2022 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ ├── part2.js │ └── sample.txt ├── 23 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 24 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 25 │ ├── answer1.txt │ ├── part1.js │ └── sample.txt ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js └── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 2023 ├── 10 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 11 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 12 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 13 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 14 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 15 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 16 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 17 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 18 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 19 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 20 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 21 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 22 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 23 │ ├── part1.js │ └── part2_unfinished.js ├── 24 │ ├── part1.js │ └── part2_unfinished.js ├── 25 │ └── part1_unfinished.js ├── 01 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 02 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 03 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 04 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 05 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 06 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 07 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 08 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js └── 09 │ ├── answer1.txt │ ├── answer2.txt │ ├── part1.js │ └── part2.js ├── 2024 ├── 10 │ ├── part1.js │ └── part2.js ├── 11 │ ├── part1.js │ └── part2.js ├── 01 │ ├── part1.js │ └── part2.js ├── 02 │ ├── part1.js │ └── part2.js ├── 03 │ ├── part1.js │ └── part2.js ├── 04 │ ├── part1.js │ └── part2.js ├── 05 │ ├── part1.js │ └── part2.js ├── 06 │ ├── part1.js │ └── part2.js ├── 07 │ ├── part1.js │ └── part2.js ├── 08 │ ├── part1.js │ └── part2.js └── 09 │ ├── part1.js │ └── part2.js ├── .github └── workflows │ └── update-badges.yml ├── .gitignore ├── README.md ├── docs └── 2020 │ ├── 02 │ ├── index.html │ └── main.js │ ├── 05 │ ├── index.html │ └── main.js │ └── 07 │ ├── index.html │ └── main.js ├── init.js ├── lib ├── .gitignore ├── getInput.js ├── index.js ├── knotHash.js ├── lcm.js ├── linkedList.js ├── permutations.js └── setAuth.js ├── package-lock.json ├── package.json ├── skeleton.js └── test └── main.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vscode 3 | **/input.txt -------------------------------------------------------------------------------- /2015/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 138 -------------------------------------------------------------------------------- /2015/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 1771 -------------------------------------------------------------------------------- /2015/01/part1.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var floor = 0; 5 | 6 | for(var char of data) { 7 | if(char === '(') { 8 | floor ++; 9 | } 10 | else { 11 | floor --; 12 | } 13 | } 14 | 15 | console.log(floor); 16 | }); -------------------------------------------------------------------------------- /2015/01/part2.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var floor = 0; 5 | var position = 0; 6 | 7 | for(var char of data) { 8 | if(char === '(') { 9 | floor ++; 10 | } 11 | else { 12 | floor --; 13 | } 14 | position++; 15 | 16 | if(floor < 0) { 17 | console.log(position); 18 | break; 19 | } 20 | } 21 | }); -------------------------------------------------------------------------------- /2015/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 1606483 -------------------------------------------------------------------------------- /2015/02/answer2.txt: -------------------------------------------------------------------------------- 1 | 3842356 -------------------------------------------------------------------------------- /2015/02/part1.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var total = 0; 5 | 6 | for(var line of data.trim().split('\n')) { 7 | var measurements = line.split('x').map(x => parseInt(x, 10)); 8 | var sides = [measurements[0] * measurements[1], measurements[0] * measurements[2], measurements[1] * measurements[2]]; 9 | sides = sides.sort((a, b) => a - b); 10 | total += sides[0] * 3 + sides[1] * 2 + sides[2] * 2; 11 | } 12 | 13 | console.log(total); 14 | }); -------------------------------------------------------------------------------- /2015/02/part2.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var total = 0; 5 | 6 | for(var line of data.trim().split('\n')) { 7 | var measurements = line.split('x').map(x => parseInt(x, 10)); 8 | measurements.sort((a, b) => a - b); 9 | total += measurements[0] * 2 + measurements[1] * 2 + measurements[0] * measurements[1] * measurements[2]; 10 | } 11 | 12 | console.log(total); 13 | }); -------------------------------------------------------------------------------- /2015/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 2565 -------------------------------------------------------------------------------- /2015/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 2639 -------------------------------------------------------------------------------- /2015/03/part1.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | var houses = []; 4 | function addHouse(x, y) { 5 | if(!houses[x]) { 6 | houses[x] = []; 7 | } 8 | 9 | houses[x][y] = true; 10 | } 11 | 12 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 13 | var current = {x: 0, y:0}; 14 | var houseCount = 1; 15 | addHouse(0, 0); 16 | var delta = { 17 | '<': {x: -1, y: 0}, 18 | '>': {x: 1, y: 0}, 19 | '^': {x: 0, y: -1}, 20 | 'v': {x: 0, y: 1} 21 | } 22 | 23 | for(var direction of data) { 24 | var move = delta[direction]; 25 | current.x += move.x; 26 | current.y += move.y; 27 | 28 | if(!houses[current.x] || !houses[current.x][current.y]) { 29 | houseCount++; 30 | } 31 | addHouse(current.x, current.y); 32 | } 33 | 34 | console.log(houseCount); 35 | }); -------------------------------------------------------------------------------- /2015/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 254575 -------------------------------------------------------------------------------- /2015/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 1038736 -------------------------------------------------------------------------------- /2015/04/part1.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | const md5 = require('md5'); 3 | 4 | let day = 4; 5 | let year = 2015; 6 | 7 | lib.getInput(year, day).then((secret) => { 8 | var index = 1; 9 | 10 | while(true) { 11 | var result = md5(secret + index); 12 | if(/^00000/.test(result)) { 13 | console.log(index); 14 | break; 15 | } 16 | index++; 17 | } 18 | }); 19 | -------------------------------------------------------------------------------- /2015/04/part2.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | const md5 = require('md5'); 3 | 4 | let day = 4; 5 | let year = 2015; 6 | 7 | lib.getInput(year, day).then((secret) => { 8 | var index = 1; 9 | 10 | while(true) { 11 | var result = md5(secret + index); 12 | if(/^000000/.test(result)) { 13 | console.log(index); 14 | break; 15 | } 16 | index++; 17 | } 18 | }); -------------------------------------------------------------------------------- /2015/05/answer1.txt: -------------------------------------------------------------------------------- 1 | 238 -------------------------------------------------------------------------------- /2015/05/answer2.txt: -------------------------------------------------------------------------------- 1 | 69 -------------------------------------------------------------------------------- /2015/05/part1.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var count = 0; 5 | var doubleLetter = /(.)\1/; 6 | var threeVowels = /[aeiou].*[aeiou].*[aeiou]/; 7 | var disallowed = /(?:ab|cd|pq|xy)/; 8 | for(var line of data.trim().split('\n')) { 9 | if(doubleLetter.test(line) && threeVowels.test(line) && !disallowed.test(line)) { 10 | count++; 11 | } 12 | } 13 | console.log(count); 14 | }); -------------------------------------------------------------------------------- /2015/05/part2.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var count = 0; 5 | var alternate = /(.).\1/; 6 | var doublePair = /(..).*\1/; 7 | for(var line of data.trim().split('\n')) { 8 | if(alternate.test(line) && doublePair.test(line)) { 9 | count++; 10 | } 11 | } 12 | console.log(count); 13 | }); -------------------------------------------------------------------------------- /2015/06/answer1.txt: -------------------------------------------------------------------------------- 1 | 377891 -------------------------------------------------------------------------------- /2015/06/answer2.txt: -------------------------------------------------------------------------------- 1 | 14110788 -------------------------------------------------------------------------------- /2015/07/answer1.txt: -------------------------------------------------------------------------------- 1 | 956 -------------------------------------------------------------------------------- /2015/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 40149 -------------------------------------------------------------------------------- /2015/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 1371 -------------------------------------------------------------------------------- /2015/08/answer2.txt: -------------------------------------------------------------------------------- 1 | 2117 -------------------------------------------------------------------------------- /2015/08/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | lib.getInput(2015, 8).then((data) => { 4 | data = data.trim(); 5 | var codeChars = 0; 6 | var stringChars = 0; 7 | for(let line of data.split('\n')) { 8 | codeChars += line.length; 9 | line = line.replace(/\\x[a-f0-9][a-f0-9]/g, 'a').replace(/\\\"/g, '"').replace(/\\\\/g, '\\').replace(/^\"/, '').replace(/\"$/, ''); 10 | stringChars += line.length; 11 | } 12 | 13 | console.log(codeChars - stringChars); 14 | }); -------------------------------------------------------------------------------- /2015/08/part2.js: -------------------------------------------------------------------------------- 1 | let fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | data = data.trim(); 5 | var codeChars = 0; 6 | var stringChars = 0; 7 | for(let line of data.split('\n')) { 8 | stringChars += line.length; 9 | line = '"' + line.replace(/\\/g, '\\\\').replace(/\"/g, '\\"') + '"'; 10 | codeChars += line.length; 11 | } 12 | 13 | console.log(codeChars - stringChars); 14 | }); -------------------------------------------------------------------------------- /2015/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 117 -------------------------------------------------------------------------------- /2015/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 909 -------------------------------------------------------------------------------- /2015/10/answer1.txt: -------------------------------------------------------------------------------- 1 | 329356 -------------------------------------------------------------------------------- /2015/10/answer2.txt: -------------------------------------------------------------------------------- 1 | 4666278 -------------------------------------------------------------------------------- /2015/10/part1.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | 3 | lib.getInput(2015, 10).then((input) => { 4 | for(let count = 0; count < 40; count++) { 5 | let newVal = ''; 6 | 7 | let current = ''; 8 | let currentCount = 0; 9 | 10 | for(let char of input) { 11 | if(char === current) { 12 | currentCount++; 13 | } 14 | else { 15 | if(currentCount > 0) { 16 | newVal += currentCount + current; 17 | } 18 | currentCount = 1; 19 | current = char; 20 | } 21 | } 22 | newVal += currentCount + current; 23 | 24 | input = newVal; 25 | } 26 | 27 | console.log(input.length); 28 | }); -------------------------------------------------------------------------------- /2015/10/part2.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | 3 | lib.getInput(2015, 10).then((input) => { 4 | for(let count = 0; count < 50; count++) { 5 | let newVal = ''; 6 | 7 | let current = ''; 8 | let currentCount = 0; 9 | 10 | for(let char of input) { 11 | if(char === current) { 12 | currentCount++; 13 | } 14 | else { 15 | if(currentCount > 0) { 16 | newVal += currentCount + current; 17 | } 18 | currentCount = 1; 19 | current = char; 20 | } 21 | } 22 | newVal += currentCount + current; 23 | 24 | input = newVal; 25 | } 26 | 27 | console.log(input.length); 28 | }); -------------------------------------------------------------------------------- /2015/11/answer1.txt: -------------------------------------------------------------------------------- 1 | hepxxyzz -------------------------------------------------------------------------------- /2015/11/answer2.txt: -------------------------------------------------------------------------------- 1 | heqaabcc -------------------------------------------------------------------------------- /2015/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 156366 -------------------------------------------------------------------------------- /2015/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 96852 -------------------------------------------------------------------------------- /2015/12/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2015; 4 | let day = 12; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let parse = /-?\d+/g; 8 | let result = parse.exec(data); 9 | let total = 0; 10 | 11 | while(result) { 12 | total += parseInt(result, 10); 13 | result = parse.exec(data); 14 | } 15 | 16 | console.log(total); 17 | }); -------------------------------------------------------------------------------- /2015/12/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2015; 4 | let day = 12; 5 | 6 | function getValue(obj){ 7 | let total = 0; 8 | let isArray = Array.isArray(obj); 9 | 10 | if(typeof obj === 'object') { 11 | for(let key in obj) { 12 | let value = obj[key]; 13 | if(value === 'red' && !isArray) { 14 | return 0; 15 | } 16 | else if(typeof value === 'object') { 17 | total += getValue(value); 18 | } 19 | else { 20 | total += parseInt(value) || 0; 21 | } 22 | } 23 | } 24 | else { 25 | total += parseInt(obj, 10); 26 | } 27 | 28 | return total; 29 | } 30 | 31 | lib.getInput(year, day).then((data) => { 32 | var obj = JSON.parse(data); 33 | 34 | console.log(getValue(obj)); 35 | }); -------------------------------------------------------------------------------- /2015/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 733 -------------------------------------------------------------------------------- /2015/13/answer2.txt: -------------------------------------------------------------------------------- 1 | 725 -------------------------------------------------------------------------------- /2015/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 2660 -------------------------------------------------------------------------------- /2015/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 1256 -------------------------------------------------------------------------------- /2015/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 222870 -------------------------------------------------------------------------------- /2015/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 117936 -------------------------------------------------------------------------------- /2015/16/answer1.txt: -------------------------------------------------------------------------------- 1 | 213 -------------------------------------------------------------------------------- /2015/16/answer2.txt: -------------------------------------------------------------------------------- 1 | 323 -------------------------------------------------------------------------------- /2015/17/answer1.txt: -------------------------------------------------------------------------------- 1 | 654 -------------------------------------------------------------------------------- /2015/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 57 -------------------------------------------------------------------------------- /2015/17/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2015; 4 | let day = 17; 5 | 6 | 7 | function countCombinations(containers, remaining) { 8 | let count = 0; 9 | 10 | if(containers[0] === remaining) { 11 | count++; 12 | } 13 | 14 | if(containers.length > 1) { 15 | if(containers[0] < remaining) { 16 | count += countCombinations(containers.slice(1), remaining - containers[0]); 17 | } 18 | 19 | count += countCombinations(containers.slice(1), remaining); 20 | } 21 | 22 | return count; 23 | } 24 | 25 | lib.getInput(year, day).then((data) => { 26 | let containers = data.split('\n').map(x => parseInt(x, 10)); 27 | 28 | containers = containers.sort((a, b) => b - a); 29 | 30 | console.log(countCombinations(containers, 150)); 31 | }); -------------------------------------------------------------------------------- /2015/17/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2015; 4 | let day = 17; 5 | 6 | let minLength = Infinity; 7 | let count = 0; 8 | 9 | function countCombinations(containers, remaining, currentLength) { 10 | if(containers[0] === remaining) { 11 | if(currentLength < minLength) { 12 | minLength = currentLength; 13 | count = 1; 14 | } 15 | else if(currentLength === minLength) { 16 | count++; 17 | } 18 | } 19 | 20 | if(containers.length > 1) { 21 | if(containers[0] < remaining) { 22 | countCombinations(containers.slice(1), remaining - containers[0], currentLength + 1); 23 | } 24 | 25 | countCombinations(containers.slice(1), remaining, currentLength); 26 | } 27 | } 28 | 29 | lib.getInput(year, day).then((data) => { 30 | let containers = data.split('\n').map(x => parseInt(x, 10)); 31 | 32 | containers = containers.sort((a, b) => b - a); 33 | 34 | countCombinations(containers, 150, 0) 35 | 36 | console.log(count); 37 | }); -------------------------------------------------------------------------------- /2015/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 814 -------------------------------------------------------------------------------- /2015/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 924 -------------------------------------------------------------------------------- /2015/19/answer1.txt: -------------------------------------------------------------------------------- 1 | 518 -------------------------------------------------------------------------------- /2015/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 200 -------------------------------------------------------------------------------- /2015/19/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2015; 4 | let day = 19; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let subs = []; 8 | let target = ''; 9 | for(let line of data.split('\n')) { 10 | if(line.length) { 11 | let parts = line.split(' => '); 12 | if(parts.length > 1) { 13 | subs.push({start: parts[0], end: parts[1]}); 14 | } 15 | else { 16 | target = line; 17 | } 18 | } 19 | } 20 | 21 | let found = {}; 22 | let foundCount = 0; 23 | 24 | for(let sub of subs) { 25 | let parts = target.split(sub.start); 26 | for(let index = 0; index < parts.length - 1; index++) { 27 | let result = parts.slice(0, index + 1).join(sub.start) + sub.end + parts.slice(index + 1).join(sub.start); 28 | if(!found[result]) { 29 | found[result] = true; 30 | foundCount++; 31 | } 32 | } 33 | } 34 | 35 | console.log(foundCount); 36 | }); -------------------------------------------------------------------------------- /2015/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 665280 -------------------------------------------------------------------------------- /2015/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 705600 -------------------------------------------------------------------------------- /2015/20/part1.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | 3 | lib.getInput(2015, 20).then((data) => { 4 | let input = +data; 5 | 6 | let houseNum = 2; 7 | while(true) { 8 | let presents = houseNum * 10; 9 | let sqrt = Math.sqrt(houseNum); 10 | for(let target = 2; target <= sqrt; target++) { 11 | let result = houseNum / target; 12 | if(result === Math.floor(result)) { 13 | presents += result * 10; 14 | } 15 | } 16 | if(presents >= input) { 17 | console.log(houseNum); 18 | break; 19 | } 20 | houseNum ++; 21 | } 22 | }); -------------------------------------------------------------------------------- /2015/20/part2.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | 3 | lib.getInput(2015, 20).then((data) => { 4 | let input = +data; 5 | 6 | let houseNum = 2; 7 | while(true) { 8 | let presents = houseNum * 11; 9 | let sqrt = Math.sqrt(houseNum); 10 | for(let target = 2; target <= sqrt; target++) { 11 | let result = houseNum / target; 12 | if(result === Math.floor(result) && result * 50 >= houseNum) { 13 | presents += result * 11; 14 | } 15 | } 16 | if(presents >= input) { 17 | console.log(houseNum); 18 | break; 19 | } 20 | houseNum ++; 21 | } 22 | }); -------------------------------------------------------------------------------- /2015/21/answer1.txt: -------------------------------------------------------------------------------- 1 | 121 -------------------------------------------------------------------------------- /2015/21/answer2.txt: -------------------------------------------------------------------------------- 1 | 201 -------------------------------------------------------------------------------- /2015/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 953 -------------------------------------------------------------------------------- /2015/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 1289 -------------------------------------------------------------------------------- /2015/23/answer1.txt: -------------------------------------------------------------------------------- 1 | 184 -------------------------------------------------------------------------------- /2015/23/answer2.txt: -------------------------------------------------------------------------------- 1 | 231 -------------------------------------------------------------------------------- /2015/24/answer1.txt: -------------------------------------------------------------------------------- 1 | 11266889531 -------------------------------------------------------------------------------- /2015/24/answer2.txt: -------------------------------------------------------------------------------- 1 | 77387711 -------------------------------------------------------------------------------- /2015/25/answer1.txt: -------------------------------------------------------------------------------- 1 | 2650453 -------------------------------------------------------------------------------- /2015/25/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2015; 4 | let day = 25; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let row = parseInt(/row (\d+)/.exec(data)[1], 10); 8 | let column = parseInt(/column (\d+)/.exec(data)[1], 10); 9 | 10 | let currentCode = 20151125; 11 | let currentX = 1; 12 | let currentY = 1; 13 | 14 | while(currentX !== column || currentY !== row) { 15 | currentX++; 16 | currentY--; 17 | 18 | if(currentY === 0) { 19 | currentY = currentX; 20 | currentX = 1; 21 | } 22 | 23 | currentCode = (currentCode * 252533) % 33554393; 24 | 25 | } 26 | console.log(currentCode); 27 | }).catch((err) => { 28 | console.log(err.stack); 29 | }); -------------------------------------------------------------------------------- /2016/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 230 -------------------------------------------------------------------------------- /2016/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 154 -------------------------------------------------------------------------------- /2016/01/part1.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var facing = 'N'; 5 | 6 | var turns = { 7 | 'NL': 'W', 8 | 'NR': 'E', 9 | 'SL': 'E', 10 | 'SR': 'W', 11 | 'WR': 'N', 12 | 'WL': 'S', 13 | 'ER': 'S', 14 | 'EL': 'N' 15 | } 16 | 17 | var position = {x: 0, y:0}; 18 | 19 | var delta = { 20 | 'N': {x: 0, y: -1}, 21 | 'S': {x: 0, y: 1}, 22 | 'W': {x: -1, y: 0}, 23 | 'E': {x: 1, y:0} 24 | } 25 | 26 | for(var step of data.split(', ')) { 27 | facing = turns[facing + step[0]]; 28 | var distance = parseInt(step.substring(1), 10); 29 | currentDelta = delta[facing]; 30 | position.x += currentDelta.x * distance; 31 | position.y += currentDelta.y * distance; 32 | } 33 | 34 | console.log(position.x + position.y); 35 | }); -------------------------------------------------------------------------------- /2016/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 97289 -------------------------------------------------------------------------------- /2016/02/answer2.txt: -------------------------------------------------------------------------------- 1 | 9A7DC -------------------------------------------------------------------------------- /2016/02/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | lib.getInput(2016, 2).then((data) => { 4 | var current = {x: 1, y: 1}; 5 | var delta = { 6 | 'L': {x: -1, y: 0}, 7 | 'R': {x: 1, y: 0}, 8 | 'U': {x: 0, y: -1}, 9 | 'D': {x: 0, y: 1} 10 | } 11 | 12 | var code = ''; 13 | 14 | for(var line of data.trim().split('\n')) { 15 | for(var step of line) { 16 | var currentDelta = delta[step]; 17 | var target = { 18 | x: current.x + currentDelta.x, 19 | y: current.y + currentDelta.y 20 | }; 21 | 22 | if(target.x >=0 && target.x <= 2 && target.y >= 0 && target.y <= 2) { 23 | current = target; 24 | } 25 | } 26 | 27 | code += (current.x + current.y * 3 + 1); 28 | } 29 | 30 | console.log(code); 31 | }); -------------------------------------------------------------------------------- /2016/02/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | lib.getInput(2016, 2).then((data) => { 4 | var current = {x: 0, y: 2}; 5 | var keypad = [[,,1],[,2,3,4],[5,6,7,8,9],[,'A','B','C'],[,,'D']] 6 | var delta = { 7 | 'L': {x: -1, y: 0}, 8 | 'R': {x: 1, y: 0}, 9 | 'U': {x: 0, y: -1}, 10 | 'D': {x: 0, y: 1} 11 | } 12 | 13 | var code = ''; 14 | 15 | for(var line of data.trim().split('\n')) { 16 | for(var step of line) { 17 | var currentDelta = delta[step]; 18 | var target = { 19 | x: current.x + currentDelta.x, 20 | y: current.y + currentDelta.y 21 | }; 22 | 23 | if(keypad[target.y] && keypad[target.y][target.x]) { 24 | current = target; 25 | } 26 | } 27 | 28 | code += keypad[current.y][current.x]; 29 | } 30 | 31 | console.log(code); 32 | }); -------------------------------------------------------------------------------- /2016/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 983 -------------------------------------------------------------------------------- /2016/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 1836 -------------------------------------------------------------------------------- /2016/03/part1.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var parse = /(\d+)\s*(\d+)\s*(\d+)/; 5 | var count = 0; 6 | for(var line of data.trim().split('\n')) { 7 | var parsed = parse.exec(line); 8 | var sides = []; 9 | for(var index = 0; index < 3; index++) { 10 | sides[index] = parseInt(parsed[index + 1], 10); 11 | } 12 | sides = sides.sort((a, b) => a - b); 13 | if(sides[0] + sides[1] > sides[2]) { 14 | count++; 15 | } 16 | } 17 | console.log(count); 18 | }); -------------------------------------------------------------------------------- /2016/03/part2.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var parse = /(\d+)\s*(\d+)\s*(\d+)/; 5 | var count = 0; 6 | var triangles = [[], [], []]; 7 | for(var line of data.trim().split('\n')) { 8 | var parsed = parse.exec(line); 9 | var sides = []; 10 | for(var index = 0; index < 3; index++) { 11 | triangles[index].push(parseInt(parsed[index + 1], 10)); 12 | } 13 | 14 | if(triangles[0].length === 3) { 15 | for(var triangle of triangles) { 16 | triangle = triangle.sort((a, b) => a - b); 17 | if(triangle[0] + triangle[1] > triangle[2]) { 18 | count ++; 19 | } 20 | } 21 | triangles = [[], [], []]; 22 | } 23 | } 24 | console.log(count); 25 | }); -------------------------------------------------------------------------------- /2016/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 137896 -------------------------------------------------------------------------------- /2016/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 501 -------------------------------------------------------------------------------- /2016/05/answer1.txt: -------------------------------------------------------------------------------- 1 | 4543c154 -------------------------------------------------------------------------------- /2016/05/answer2.txt: -------------------------------------------------------------------------------- 1 | 1050cbbd -------------------------------------------------------------------------------- /2016/05/part1-full.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | let crypto = require('crypto'); 3 | 4 | function md5(data) { 5 | return crypto.createHash('md5').update(data).digest('hex'); 6 | } 7 | lib.getInput(2016, 5).then((input) => { 8 | var index = 0; 9 | 10 | var password = ''; 11 | 12 | while(password.length < 8) { 13 | var hash = md5(input + index); 14 | if(hash.startsWith('00000')) { 15 | password += hash[5]; 16 | } 17 | index++; 18 | } 19 | 20 | console.log(password); 21 | }); -------------------------------------------------------------------------------- /2016/05/part1.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | let fs = require('fs'); 3 | let path = require('path'); 4 | 5 | let hashes = {}; 6 | 7 | // Cheating and using a pre-computed list of hashes, since I can't find another way to make this fast 8 | // Only storing the hashes we actually care about (5 leading zeroes) since I don't want to save a file over a gig 9 | function md5(index) { 10 | return hashes[index] || ''; 11 | } 12 | 13 | lib.getInput(2016, 5).then((input) => { 14 | let hashLines = fs.readFileSync(path.resolve(__dirname, `zero-hashes-${input}.txt`), 'utf-8').replace(/\r\n/g, '\n').split('\n') 15 | for(let line of hashLines) { 16 | let parts = line.split(' '); 17 | hashes[parts[0]] = parts[1]; 18 | } 19 | 20 | var index = 0; 21 | 22 | var password = ''; 23 | 24 | while(password.length < 8) { 25 | var hash = md5(index); 26 | if(hash.startsWith('00000')) { 27 | password += hash[5]; 28 | } 29 | index++; 30 | } 31 | 32 | console.log(password); 33 | }); -------------------------------------------------------------------------------- /2016/05/part2-full.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | let crypto = require('crypto'); 3 | 4 | function md5(data) { 5 | return crypto.createHash('md5').update(data).digest('hex'); 6 | } 7 | lib.getInput(2016, 5).then((input) => { 8 | var index = 0; 9 | 10 | var password = []; 11 | var foundCount = 0; 12 | 13 | while(foundCount < 8) { 14 | var hash = md5(input + index); 15 | if(hash.startsWith('00000')) { 16 | var place = parseInt(hash[5], 10); 17 | if(place <= 7 && !password[place]) { 18 | password[place] = hash[6]; 19 | foundCount++; 20 | } 21 | } 22 | index++; 23 | } 24 | 25 | console.log(password.join('')); 26 | }); -------------------------------------------------------------------------------- /2016/06/answer1.txt: -------------------------------------------------------------------------------- 1 | dzqckwsd -------------------------------------------------------------------------------- /2016/06/answer2.txt: -------------------------------------------------------------------------------- 1 | lragovly -------------------------------------------------------------------------------- /2016/06/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | lib.getInput(2016, 6).then((data) => { 4 | data = data.trim(); 5 | let counts = [{},{},{},{},{},{},{},{}]; 6 | for(let line of data.split('\n')) { 7 | for(let index = 0; index < line.length; index++) { 8 | let char = line[index]; 9 | let count = counts[index]; 10 | count[char] = (count[char] || 0) + 1; 11 | } 12 | } 13 | 14 | let message = ''; 15 | 16 | for(let count of counts) { 17 | let letter = ''; 18 | let max = 0; 19 | for(let char in count) { 20 | if(count[char] > max) { 21 | letter = char; 22 | max = count[char]; 23 | } 24 | } 25 | 26 | message += letter; 27 | } 28 | 29 | console.log(message); 30 | }); -------------------------------------------------------------------------------- /2016/06/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | lib.getInput(2016, 6).then((data) => { 4 | data = data.trim(); 5 | let counts = [{},{},{},{},{},{},{},{}]; 6 | for(let line of data.split('\n')) { 7 | for(let index = 0; index < line.length; index++) { 8 | let char = line[index]; 9 | let count = counts[index]; 10 | count[char] = (count[char] || 0) + 1; 11 | } 12 | } 13 | 14 | let message = ''; 15 | 16 | for(let count of counts) { 17 | let letter = ''; 18 | let min = Infinity; 19 | for(let char in count) { 20 | if(count[char] < min) { 21 | letter = char; 22 | min = count[char]; 23 | } 24 | } 25 | 26 | message += letter; 27 | } 28 | 29 | console.log(message); 30 | }); -------------------------------------------------------------------------------- /2016/07/answer1.txt: -------------------------------------------------------------------------------- 1 | 118 -------------------------------------------------------------------------------- /2016/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 260 -------------------------------------------------------------------------------- /2016/07/part1.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | 3 | lib.getInput(2016, 7).then((data) => { 4 | let count = 0; 5 | main: 6 | for(let line of data.split('\n')) { 7 | let inBrackets = false; 8 | let found = false; 9 | for(let index = 0; index < line.length; index++) { 10 | if(line[index] === '[') { 11 | inBrackets = true; 12 | } 13 | else if(line[index] === ']') { 14 | inBrackets = false; 15 | } 16 | else if(line[index + 3] === line[index] && line[index + 1] === line[index + 2] && line[index + 1] !== line[index]) { 17 | if(inBrackets) { 18 | continue main; 19 | } 20 | found = true; 21 | } 22 | } 23 | if(found) { 24 | count++; 25 | } 26 | } 27 | console.log(count); 28 | }); -------------------------------------------------------------------------------- /2016/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 123 -------------------------------------------------------------------------------- /2016/08/answer2.txt: -------------------------------------------------------------------------------- 1 | AFBUPZBJPS -------------------------------------------------------------------------------- /2016/08/letters.txt: -------------------------------------------------------------------------------- 1 | A 2 | ## 3 | # # 4 | # # 5 | #### 6 | # # 7 | # # 8 | B 9 | ### 10 | # # 11 | ### 12 | # # 13 | # # 14 | ### 15 | F 16 | #### 17 | # 18 | ### 19 | # 20 | # 21 | # 22 | J 23 | ## 24 | # 25 | # 26 | # 27 | # # 28 | ## 29 | P 30 | ### 31 | # # 32 | # # 33 | ### 34 | # 35 | # 36 | S 37 | ### 38 | # 39 | # 40 | ## 41 | # 42 | ### 43 | U 44 | # # 45 | # # 46 | # # 47 | # # 48 | # # 49 | ## 50 | Z 51 | #### 52 | # 53 | # 54 | # 55 | # 56 | #### -------------------------------------------------------------------------------- /2016/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 70186 -------------------------------------------------------------------------------- /2016/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 10915059201 -------------------------------------------------------------------------------- /2016/09/part1.js: -------------------------------------------------------------------------------- 1 | let fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | data = data.trim(); 5 | let length = 0; 6 | let index = 0; 7 | 8 | while(index < data.length) { 9 | let char = data[index]; 10 | if(char === '(') { 11 | index++; 12 | let repeatCount = ''; 13 | while(data[index] !== 'x') { 14 | repeatCount += data[index]; 15 | index++; 16 | } 17 | repeatCount = parseInt(repeatCount, 10); 18 | let repeatTimes = ''; 19 | index++; 20 | while(data[index] !== ')') { 21 | repeatTimes += data[index]; 22 | index++; 23 | } 24 | index++; 25 | repeatTimes = parseInt(repeatTimes, 10); 26 | length += repeatTimes * repeatCount; 27 | index += repeatCount; 28 | } 29 | else { 30 | length++; 31 | index++; 32 | } 33 | } 34 | 35 | console.log(length); 36 | }); -------------------------------------------------------------------------------- /2016/10/answer1.txt: -------------------------------------------------------------------------------- 1 | 181 -------------------------------------------------------------------------------- /2016/10/answer2.txt: -------------------------------------------------------------------------------- 1 | 12567 -------------------------------------------------------------------------------- /2016/11/answer1.txt: -------------------------------------------------------------------------------- 1 | 47 -------------------------------------------------------------------------------- /2016/11/answer2.txt: -------------------------------------------------------------------------------- 1 | 71 -------------------------------------------------------------------------------- /2016/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 318020 -------------------------------------------------------------------------------- /2016/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 9227674 -------------------------------------------------------------------------------- /2016/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 90 -------------------------------------------------------------------------------- /2016/13/answer2.txt: -------------------------------------------------------------------------------- 1 | 135 -------------------------------------------------------------------------------- /2016/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 15035 -------------------------------------------------------------------------------- /2016/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 19968 -------------------------------------------------------------------------------- /2016/14/hash-generator.js: -------------------------------------------------------------------------------- 1 | let crypto = require('crypto'); 2 | let fs = require('fs'); 3 | let path = require('path'); 4 | let lib = require('../../lib'); 5 | 6 | function md5(data) { 7 | return crypto.createHash('md5').update(data).digest('hex'); 8 | } 9 | 10 | lib.getInput(2016, 14).then((input) => { 11 | let args = process.argv.slice(2); 12 | let numHashes = +args[0]; 13 | let iterations = +args[1] || 1; 14 | 15 | let stream = fs.createWriteStream(path.resolve(__dirname, `hashes-${input}-${iterations}.txt`)); 16 | 17 | for(let i = 0; i < numHashes; i++) { 18 | let value = input + i; 19 | for(let iter = 0; iter < iterations; iter++) { 20 | value = md5(value); 21 | } 22 | stream.write(value + '\n'); 23 | } 24 | 25 | stream.end(); 26 | }); -------------------------------------------------------------------------------- /2016/14/part1-full.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let runner = require('./runner'); 3 | let crypto = require('crypto'); 4 | 5 | function md5(data) { 6 | return crypto.createHash('md5').update(data).digest('hex'); 7 | } 8 | 9 | lib.getInput(2016, 14).then((input) => { 10 | let index = 0; 11 | 12 | console.log(runner(() => { 13 | let value = md5(input + index); 14 | index++; 15 | return value; 16 | })); 17 | }); -------------------------------------------------------------------------------- /2016/14/part1.js: -------------------------------------------------------------------------------- 1 | let fs = require('fs'); 2 | let path = require('path'); 3 | let lib = require('../../lib'); 4 | let runner = require('./runner'); 5 | 6 | lib.getInput(2016, 14).then((input) => { 7 | let index = 0; 8 | let hashes = fs.readFileSync(path.resolve(__dirname, `hashes-${input}-1.txt`), 'utf-8').replace(/\r\n/g, '\n').split('\n'); 9 | 10 | console.log(runner(() => { 11 | let value = hashes[index]; 12 | index++; 13 | return value; 14 | })); 15 | }); -------------------------------------------------------------------------------- /2016/14/part2-full.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let runner = require('./runner'); 3 | let crypto = require('crypto'); 4 | 5 | function md5(data) { 6 | return crypto.createHash('md5').update(data).digest('hex'); 7 | } 8 | 9 | lib.getInput(2016, 14).then((input) => { 10 | let index = 0; 11 | 12 | console.log(runner(() => { 13 | let value = input + index; 14 | 15 | for(let i = 0; i < 2017; i++) { 16 | value = md5(value); 17 | } 18 | index++; 19 | return value; 20 | })); 21 | }); -------------------------------------------------------------------------------- /2016/14/part2.js: -------------------------------------------------------------------------------- 1 | let fs = require('fs'); 2 | let path = require('path'); 3 | let lib = require('../../lib'); 4 | let runner = require('./runner'); 5 | 6 | lib.getInput(2016, 14).then((input) => { 7 | let index = 0; 8 | let hashes = fs.readFileSync(path.resolve(__dirname, `hashes-${input}-2017.txt`), 'utf-8').replace(/\r\n/g, '\n').split('\n'); 9 | 10 | console.log(runner(() => { 11 | let value = hashes[index]; 12 | index++; 13 | return value; 14 | })); 15 | }); -------------------------------------------------------------------------------- /2016/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 376777 -------------------------------------------------------------------------------- /2016/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 3903937 -------------------------------------------------------------------------------- /2016/15/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2016; 4 | let day = 15; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let parser = /^Disc #\d+ has (\d+) positions; at time=0, it is at position (\d+)\.$/; 8 | let discs = []; 9 | for(let line of data.split('\n')) { 10 | let parsed = parser.exec(line); 11 | discs.push({ 12 | positions: parseInt(parsed[1], 10), 13 | start: parseInt(parsed[2], 10) 14 | }); 15 | } 16 | 17 | let time = 0; 18 | 19 | main: 20 | while(true) { 21 | for(let discIndex = 0; discIndex < discs.length; discIndex++) { 22 | let disc = discs[discIndex]; 23 | if((disc.start + time + discIndex + 1) % disc.positions) { 24 | time++; 25 | continue main; 26 | } 27 | } 28 | break; 29 | } 30 | 31 | console.log(time); 32 | }); -------------------------------------------------------------------------------- /2016/15/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2016; 4 | let day = 15; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let parser = /^Disc #\d+ has (\d+) positions; at time=0, it is at position (\d+)\.$/; 8 | let discs = []; 9 | for(let line of data.split('\n')) { 10 | let parsed = parser.exec(line); 11 | discs.push({ 12 | positions: parseInt(parsed[1], 10), 13 | start: parseInt(parsed[2], 10) 14 | }); 15 | } 16 | 17 | discs.push({ 18 | positions: 11, 19 | start: 0 20 | }); 21 | 22 | let time = 0; 23 | 24 | main: 25 | while(true) { 26 | for(let discIndex = 0; discIndex < discs.length; discIndex++) { 27 | let disc = discs[discIndex]; 28 | if((disc.start + time + discIndex + 1) % disc.positions) { 29 | time++; 30 | continue main; 31 | } 32 | } 33 | break; 34 | } 35 | 36 | console.log(time); 37 | }); -------------------------------------------------------------------------------- /2016/16/answer1.txt: -------------------------------------------------------------------------------- 1 | 10010100110011100 -------------------------------------------------------------------------------- /2016/16/answer2.txt: -------------------------------------------------------------------------------- 1 | 01100100101101100 -------------------------------------------------------------------------------- /2016/16/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2016; 4 | let day = 16; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | while(data.length < 272) { 8 | let copy = data; 9 | copy = copy.split('').reverse().map((x) => x === '1' ? '0' : '1').join(''); 10 | data = data + '0' + copy; 11 | } 12 | data = data.substring(0, 272); 13 | 14 | let checksum = data; 15 | 16 | while(checksum.length % 2 === 0) { 17 | let newChecksum = []; 18 | for(let index = 0; index < checksum.length; index += 2) { 19 | if(checksum[index] === checksum[index + 1]) { 20 | newChecksum.push('1'); 21 | } 22 | else { 23 | newChecksum.push('0'); 24 | } 25 | } 26 | checksum = newChecksum.join(''); 27 | } 28 | 29 | console.log(checksum); 30 | }); -------------------------------------------------------------------------------- /2016/16/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2016; 4 | let day = 16; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | while(data.length < 35651584) { 8 | let copy = data; 9 | copy = copy.split('').reverse().map((x) => x === '1' ? '0' : '1').join(''); 10 | data = data + '0' + copy; 11 | } 12 | data = data.substring(0, 35651584); 13 | 14 | let checksum = data; 15 | 16 | while(checksum.length % 2 === 0) { 17 | let newChecksum = []; 18 | for(let index = 0; index < checksum.length; index += 2) { 19 | if(checksum[index] === checksum[index + 1]) { 20 | newChecksum.push('1'); 21 | } 22 | else { 23 | newChecksum.push('0'); 24 | } 25 | } 26 | checksum = newChecksum.join(''); 27 | } 28 | 29 | console.log(checksum); 30 | }); -------------------------------------------------------------------------------- /2016/17/answer1.txt: -------------------------------------------------------------------------------- 1 | RLDRUDRDDR -------------------------------------------------------------------------------- /2016/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 498 -------------------------------------------------------------------------------- /2016/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 2035 -------------------------------------------------------------------------------- /2016/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 20000577 -------------------------------------------------------------------------------- /2016/18/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2016; 4 | let day = 18; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let line = data.split('').map(x => x === '^'); 8 | let safe = line.reduce((a,b) => a + !b, 0); 9 | 10 | for(let step = 0; step < 39; step++) { 11 | let newLine = []; 12 | 13 | for(let x = 0; x < line.length; x++) { 14 | newLine.push(line[x - 1] ^ line[x + 1]); 15 | } 16 | 17 | line = newLine; 18 | safe += line.reduce((a,b) => a + !b, 0); 19 | } 20 | 21 | console.log(safe); 22 | }); -------------------------------------------------------------------------------- /2016/18/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2016; 4 | let day = 18; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let line = data.split('').map(x => x === '^'); 8 | let safe = line.reduce((a,b) => a + !b, 0); 9 | 10 | for(let step = 0; step < 399999; step++) { 11 | let newLine = []; 12 | 13 | for(let x = 0; x < line.length; x++) { 14 | newLine.push(line[x - 1] ^ line[x + 1]); 15 | } 16 | 17 | line = newLine; 18 | safe += line.reduce((a,b) => a + !b, 0); 19 | } 20 | 21 | console.log(safe); 22 | }); -------------------------------------------------------------------------------- /2016/19/answer1.txt: -------------------------------------------------------------------------------- 1 | 1834471 -------------------------------------------------------------------------------- /2016/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 1420064 -------------------------------------------------------------------------------- /2016/19/part1.js: -------------------------------------------------------------------------------- 1 | const lib = require('../../lib'); 2 | 3 | lib.getInput(2016, 19).then((data) => { 4 | let input = +data; 5 | let elves = []; 6 | 7 | for(let index = 0; index < input; index++) { 8 | elves.push(true); 9 | } 10 | 11 | let remainingElves = input; 12 | let target = 0; 13 | 14 | while(remainingElves > 1) { 15 | target = (target + 1) % input; 16 | 17 | while(!elves[target]) { 18 | target = (target + 1) % input; 19 | } 20 | elves[target] = false; 21 | remainingElves--; 22 | while(!elves[target]) { 23 | target = (target + 1) % input; 24 | } 25 | } 26 | 27 | for(let index = 0; index < elves.length; index++) { 28 | if(elves[index]) { 29 | console.log(index + 1); 30 | break; 31 | } 32 | } 33 | }); -------------------------------------------------------------------------------- /2016/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 19449262 -------------------------------------------------------------------------------- /2016/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 119 -------------------------------------------------------------------------------- /2016/20/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2016; 4 | let day = 20; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let ranges = []; 8 | 9 | for(let line of data.split('\n')) { 10 | let parts = line.split('-').map(x => parseInt(x, 10)); 11 | ranges.push({start: parts[0], end: parts[1]}); 12 | } 13 | 14 | ranges = ranges.sort((a, b) => a.start - b.start); 15 | 16 | let test = 0; 17 | let index = 0; 18 | let clear = false; 19 | 20 | while(ranges[index].start <= test) { 21 | test = Math.max(test, ranges[index].end + 1); 22 | index++; 23 | } 24 | 25 | console.log(test); 26 | }); -------------------------------------------------------------------------------- /2016/20/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2016; 4 | let day = 20; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let ranges = []; 8 | 9 | for(let line of data.split('\n')) { 10 | let parts = line.split('-').map(x => parseInt(x, 10)); 11 | ranges.push({start: parts[0], end: parts[1]}); 12 | } 13 | 14 | ranges = ranges.sort((a, b) => a.start - b.start); 15 | 16 | let test = 0; 17 | let index = 0; 18 | let clear = false; 19 | let count = 0; 20 | 21 | while(index < ranges.length) { 22 | while(index < ranges.length && ranges[index].start <= test) { 23 | test = Math.max(test, ranges[index].end + 1); 24 | index++; 25 | } 26 | if(index < ranges.length) { 27 | count++; 28 | } 29 | test++; 30 | } 31 | 32 | console.log(count); 33 | }); -------------------------------------------------------------------------------- /2016/21/answer1.txt: -------------------------------------------------------------------------------- 1 | gcedfahb -------------------------------------------------------------------------------- /2016/21/answer2.txt: -------------------------------------------------------------------------------- 1 | hegbdcfa -------------------------------------------------------------------------------- /2016/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 960 -------------------------------------------------------------------------------- /2016/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 225 -------------------------------------------------------------------------------- /2016/23/answer1.txt: -------------------------------------------------------------------------------- 1 | 11683 -------------------------------------------------------------------------------- /2016/23/answer2.txt: -------------------------------------------------------------------------------- 1 | 479008243 -------------------------------------------------------------------------------- /2016/23/input-optimized.txt: -------------------------------------------------------------------------------- 1 | cpy a b 2 | dec b 3 | cpy a d 4 | cpy b a 5 | mul a d 6 | cpy 0 d 7 | cpy 0 c 8 | nop 9 | nop 10 | nop 11 | dec b 12 | cpy b c 13 | cpy c d 14 | add c d 15 | cpy 0 d 16 | nop 17 | tgl c 18 | cpy -16 c 19 | jnz 1 c 20 | cpy 73 c 21 | jnz 91 d 22 | add a d 23 | cpy 0 d 24 | nop 25 | inc c 26 | jnz c -5 -------------------------------------------------------------------------------- /2016/24/answer1.txt: -------------------------------------------------------------------------------- 1 | 474 -------------------------------------------------------------------------------- /2016/24/answer2.txt: -------------------------------------------------------------------------------- 1 | 696 -------------------------------------------------------------------------------- /2016/25/answer1.txt: -------------------------------------------------------------------------------- 1 | 158 -------------------------------------------------------------------------------- /2017/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 1144 -------------------------------------------------------------------------------- /2017/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 1194 -------------------------------------------------------------------------------- /2017/01/part1.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var total = 0; 5 | data = data.trim(); 6 | for(var index = 0; index < data.length; index++) { 7 | if(data[index] === data[index + 1]) { 8 | total += parseInt(data[index], 10); 9 | } 10 | } 11 | if(data[0] === data[data.length - 1]) { 12 | total += parseInt(data[0], 10); 13 | } 14 | console.log(total); 15 | }); -------------------------------------------------------------------------------- /2017/01/part2.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | var total = 0; 5 | data = data.trim(); 6 | var length = data.length; 7 | for(var index = 0; index < data.length; index++) { 8 | var targetIndex = (index + length / 2) % length; 9 | if(data[index] === data[targetIndex]) { 10 | total += parseInt(data[index], 10); 11 | } 12 | } 13 | console.log(total); 14 | }); -------------------------------------------------------------------------------- /2017/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 41919 -------------------------------------------------------------------------------- /2017/02/answer2.txt: -------------------------------------------------------------------------------- 1 | 303 -------------------------------------------------------------------------------- /2017/02/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | lib.getInput(2017, 2).then((data) => { 4 | let total = 0; 5 | for(let line of data.split('\n')) { 6 | let nums = line.split(/\s+/).map(x => parseInt(x, 10)); 7 | 8 | total+= Math.max(...nums) - Math.min(...nums); 9 | } 10 | console.log(total); 11 | }); -------------------------------------------------------------------------------- /2017/02/part2.js: -------------------------------------------------------------------------------- 1 | let fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | data = data.trim(); 5 | let total = 0; 6 | for(let line of data.split('\n')) { 7 | let nums = line.split(/\s+/).map(x => parseInt(x, 10)); 8 | 9 | for(let index1 = 0; index1 < nums.length; index1++) { 10 | for(let index2 = index1 + 1; index2 < nums.length; index2++) { 11 | let num1 = nums[index1]; 12 | let num2 = nums[index2]; 13 | if(num1 % num2 === 0) 14 | { 15 | total += num1 / num2; 16 | } 17 | 18 | if(num2 % num1 === 0) { 19 | total += num2 / num1; 20 | } 21 | } 22 | } 23 | } 24 | console.log(total); 25 | }); -------------------------------------------------------------------------------- /2017/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 371 -------------------------------------------------------------------------------- /2017/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 369601 -------------------------------------------------------------------------------- /2017/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 451 -------------------------------------------------------------------------------- /2017/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 223 -------------------------------------------------------------------------------- /2017/04/part1.js: -------------------------------------------------------------------------------- 1 | let fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | data = data.trim(); 5 | 6 | let count = 0; 7 | 8 | for(let line of data.split('\n')) { 9 | var words = line.split(/\s/); 10 | 11 | words = words.sort(); 12 | 13 | let valid = true; 14 | for(let index = 0; index < words.length - 1; index++) { 15 | if(words[index] === words[index + 1]) { 16 | valid = false 17 | } 18 | } 19 | 20 | if(valid) { 21 | count++; 22 | } 23 | } 24 | 25 | console.log(count); 26 | }); -------------------------------------------------------------------------------- /2017/04/part2.js: -------------------------------------------------------------------------------- 1 | let fs = require('fs'); 2 | 3 | fs.readFile(__dirname + '\\input.txt', 'utf-8', (err, data) => { 4 | data = data.trim(); 5 | 6 | let count = 0; 7 | 8 | for(let line of data.split('\n')) { 9 | var words = line.split(/\s/); 10 | 11 | let newWords = []; 12 | for(let word of words) { 13 | let wordArray = word.split(''); 14 | wordArray = wordArray.sort(); 15 | word = wordArray.join(''); 16 | newWords.push(word); 17 | } 18 | 19 | words = newWords; 20 | words = words.sort(); 21 | 22 | let valid = true; 23 | for(let index = 0; index < words.length - 1; index++) { 24 | if(words[index] === words[index + 1]) { 25 | valid = false 26 | } 27 | } 28 | 29 | if(valid) { 30 | count++; 31 | } 32 | } 33 | 34 | console.log(count); 35 | }); -------------------------------------------------------------------------------- /2017/05/answer1.txt: -------------------------------------------------------------------------------- 1 | 342669 -------------------------------------------------------------------------------- /2017/05/answer2.txt: -------------------------------------------------------------------------------- 1 | 25136209 -------------------------------------------------------------------------------- /2017/05/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 05; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let jumps = []; 8 | for(var line of data.split('\n')) { 9 | jumps.push(parseInt(line, 10)); 10 | } 11 | 12 | let index = 0; 13 | let steps = 0; 14 | 15 | while(index >= 0 && index < jumps.length) { 16 | let jumpNum = jumps[index]; 17 | jumps[index]++; 18 | index += jumpNum; 19 | steps++; 20 | } 21 | console.log(steps); 22 | }); -------------------------------------------------------------------------------- /2017/05/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 05; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let jumps = []; 8 | for(var line of data.split('\n')) { 9 | jumps.push(parseInt(line, 10)); 10 | } 11 | 12 | let index = 0; 13 | let steps = 0; 14 | 15 | while(index >= 0 && index < jumps.length) { 16 | let jumpNum = jumps[index]; 17 | if(jumpNum >= 3) { 18 | jumps[index]--; 19 | } 20 | else { 21 | jumps[index]++; 22 | } 23 | index += jumpNum; 24 | steps++; 25 | } 26 | console.log(steps); 27 | }); -------------------------------------------------------------------------------- /2017/06/answer1.txt: -------------------------------------------------------------------------------- 1 | 11137 -------------------------------------------------------------------------------- /2017/06/answer2.txt: -------------------------------------------------------------------------------- 1 | 1037 -------------------------------------------------------------------------------- /2017/06/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let blocks = data.split(/\s/).map((s) => parseInt(s, 10)); 8 | let steps = 0; 9 | let visited = {}; 10 | 11 | while(true) { 12 | let state = blocks.join(','); 13 | if(visited[state]) { 14 | break; 15 | } 16 | steps++; 17 | visited[state] = true; 18 | 19 | let max = 0; 20 | let chosen = 0; 21 | 22 | for(let index = 0; index < blocks.length; index++) { 23 | if(blocks[index] > max) { 24 | max = blocks[index]; 25 | chosen = index; 26 | } 27 | } 28 | 29 | blocks[chosen] = 0; 30 | 31 | while(max > 0) { 32 | chosen = (chosen + 1) % blocks.length; 33 | max--; 34 | blocks[chosen]++; 35 | } 36 | } 37 | 38 | console.log(steps); 39 | }); -------------------------------------------------------------------------------- /2017/06/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let blocks = data.split(/\s/).map((s) => parseInt(s, 10)); 8 | let steps = 0; 9 | let visited = []; 10 | 11 | while(true) { 12 | let state = blocks.join(','); 13 | let stateIndex = visited.indexOf(state); 14 | if(stateIndex !== -1) { 15 | steps -= stateIndex; 16 | break; 17 | } 18 | steps++; 19 | visited.push(state); 20 | 21 | let max = 0; 22 | let chosen = 0; 23 | 24 | for(let index = 0; index < blocks.length; index++) { 25 | if(blocks[index] > max) { 26 | max = blocks[index]; 27 | chosen = index; 28 | } 29 | } 30 | 31 | blocks[chosen] = 0; 32 | 33 | while(max > 0) { 34 | chosen = (chosen + 1) % blocks.length; 35 | max--; 36 | blocks[chosen]++; 37 | } 38 | } 39 | 40 | console.log(steps); 41 | }); -------------------------------------------------------------------------------- /2017/07/answer1.txt: -------------------------------------------------------------------------------- 1 | fbgguv -------------------------------------------------------------------------------- /2017/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 1864 -------------------------------------------------------------------------------- /2017/07/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 7; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let isChild = {}; 8 | let candidates = []; 9 | for(let line of data.split('\n')) { 10 | if(line.indexOf('>') === -1) { 11 | continue; 12 | } 13 | 14 | let items = line.split('>'); 15 | items = items[1].split(',').map((x) => x.trim()); 16 | let current = line.split(' ')[0]; 17 | candidates.push(current); 18 | for(let item of items) { 19 | isChild[item] = true; 20 | } 21 | } 22 | 23 | for(let candidate of candidates) { 24 | if(!isChild[candidate]) { 25 | console.log(candidate); 26 | break; 27 | } 28 | } 29 | }); -------------------------------------------------------------------------------- /2017/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 7296 -------------------------------------------------------------------------------- /2017/08/answer2.txt: -------------------------------------------------------------------------------- 1 | 8186 -------------------------------------------------------------------------------- /2017/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 17537 -------------------------------------------------------------------------------- /2017/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 7539 -------------------------------------------------------------------------------- /2017/09/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 09; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let currentGroupScore = 0; 8 | let isGarbage = false; 9 | let isCancelled = false; 10 | let score = 0; 11 | 12 | for(let char of data) { 13 | if(isGarbage) { 14 | if(isCancelled) { 15 | isCancelled = false; 16 | } 17 | else { 18 | if(char === '>') { 19 | isGarbage = false; 20 | } 21 | else if(char === '!') { 22 | isCancelled = true; 23 | } 24 | } 25 | } 26 | else if(char === '<') { 27 | isGarbage = true; 28 | } 29 | else if(char === '{') { 30 | currentGroupScore++; 31 | } 32 | else if(char === '}') 33 | { 34 | score += currentGroupScore; 35 | currentGroupScore--; 36 | } 37 | } 38 | 39 | console.log(score); 40 | }); -------------------------------------------------------------------------------- /2017/09/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 09; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let isGarbage = false; 8 | let isCancelled = false; 9 | let score = 0; 10 | 11 | for(let char of data) { 12 | if(isGarbage) { 13 | if(isCancelled) { 14 | isCancelled = false; 15 | } 16 | else { 17 | if(char === '>') { 18 | isGarbage = false; 19 | } 20 | else if(char === '!') { 21 | isCancelled = true; 22 | } 23 | else { 24 | score++; 25 | } 26 | } 27 | } 28 | else if(char === '<') { 29 | isGarbage = true; 30 | } 31 | } 32 | 33 | console.log(score); 34 | }); -------------------------------------------------------------------------------- /2017/10/answer1.txt: -------------------------------------------------------------------------------- 1 | 15990 -------------------------------------------------------------------------------- /2017/10/answer2.txt: -------------------------------------------------------------------------------- 1 | 90adb097dd55dea8305c900372258ac6 -------------------------------------------------------------------------------- /2017/11/answer1.txt: -------------------------------------------------------------------------------- 1 | 687 -------------------------------------------------------------------------------- /2017/11/answer2.txt: -------------------------------------------------------------------------------- 1 | 1483 -------------------------------------------------------------------------------- /2017/11/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 11; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let current = {x: 0, y: 0, z: 0}; 8 | let deltas = { 9 | n: {y: 1, z: -1, x:0}, 10 | ne: {x: 1, z: -1, y: 0}, 11 | se: {x: 1, y: -1, z: 0}, 12 | s: {y: -1, z: 1, x: 0}, 13 | sw: {x: -1, z: 1, y: 0}, 14 | nw: {x: -1, y: 1, z: 0} 15 | 16 | } 17 | let path = data.split(','); 18 | for(let step of path) { 19 | let delta = deltas[step]; 20 | current.x += delta.x; 21 | current.y += delta.y; 22 | current.z += delta.z; 23 | } 24 | 25 | console.log((Math.abs(current.x) + Math.abs(current.y) + Math.abs(current.z)) / 2); 26 | }); -------------------------------------------------------------------------------- /2017/11/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 11; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let current = {x: 0, y: 0, z: 0}; 8 | let deltas = { 9 | n: {y: 1, z: -1, x:0}, 10 | ne: {x: 1, z: -1, y: 0}, 11 | se: {x: 1, y: -1, z: 0}, 12 | s: {y: -1, z: 1, x: 0}, 13 | sw: {x: -1, z: 1, y: 0}, 14 | nw: {x: -1, y: 1, z: 0} 15 | 16 | } 17 | let maxDistance = 0; 18 | let path = data.split(','); 19 | for(let step of path) { 20 | let delta = deltas[step]; 21 | current.x += delta.x; 22 | current.y += delta.y; 23 | current.z += delta.z; 24 | maxDistance = Math.max(maxDistance, (Math.abs(current.x) + Math.abs(current.y) + Math.abs(current.z)) / 2) 25 | } 26 | 27 | console.log(maxDistance); 28 | }); -------------------------------------------------------------------------------- /2017/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 130 -------------------------------------------------------------------------------- /2017/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 189 -------------------------------------------------------------------------------- /2017/12/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 12; 5 | 6 | let found = {0: true}; 7 | 8 | lib.getInput(year, day).then((data) => { 9 | let connections = {}; 10 | 11 | for(let line of data.split('\n')) { 12 | let parts = line.split(' <->'); 13 | let ends = parts[1].split(', ').map(x => parseInt(x)); 14 | let start = parseInt(parts[0], 10); 15 | 16 | connections[start] = ends; 17 | } 18 | 19 | let queue = []; 20 | queue.push(connections[0]); 21 | let count = 1; 22 | 23 | while(queue.length) { 24 | let current = queue.shift(); 25 | if(!found[current]) { 26 | found[current] = true; 27 | count++; 28 | queue.push(...connections[current]); 29 | } 30 | } 31 | 32 | console.log(count); 33 | }); -------------------------------------------------------------------------------- /2017/12/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 12; 5 | 6 | let remaining = []; 7 | 8 | lib.getInput(year, day).then((data) => { 9 | let connections = {}; 10 | 11 | for(let line of data.split('\n')) { 12 | let parts = line.split(' <->'); 13 | let ends = parts[1].split(', ').map(x => parseInt(x)); 14 | let start = parseInt(parts[0], 10); 15 | 16 | connections[start] = ends; 17 | 18 | remaining.push(start); 19 | } 20 | 21 | let count = 0; 22 | let found = {}; 23 | 24 | while(remaining.length) 25 | { 26 | let queue = []; 27 | queue.push(remaining[0]); 28 | while(queue.length) { 29 | let current = queue.shift(); 30 | if(!found[current]) { 31 | found[current] = true; 32 | queue.push(...connections[current]); 33 | remaining.splice(remaining.indexOf(current), 1); 34 | } 35 | } 36 | count++; 37 | } 38 | 39 | console.log(count); 40 | }); -------------------------------------------------------------------------------- /2017/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 2604 -------------------------------------------------------------------------------- /2017/13/answer2.txt: -------------------------------------------------------------------------------- 1 | 3941460 -------------------------------------------------------------------------------- /2017/13/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2017; 4 | let day = 13; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let scanners = {}; 8 | let maxDepth; 9 | for(let line of data.split('\n')) { 10 | let parts = line.split(': ').map(x => parseInt(x, 10)); 11 | scanners[parts[0]] = parts[1]; 12 | maxDepth = parts[0]; 13 | } 14 | 15 | let delay = 0; 16 | let found = true; 17 | 18 | while(found) 19 | { 20 | found = false; 21 | for(let depth in scanners) { 22 | if((parseInt(depth, 10) + delay) % ((scanners[depth] - 1) * 2) === 0) { 23 | found = true; 24 | break; 25 | } 26 | } 27 | if(found) { 28 | delay++; 29 | } 30 | } 31 | 32 | console.log(delay); 33 | }); -------------------------------------------------------------------------------- /2017/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 8194 -------------------------------------------------------------------------------- /2017/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 1141 -------------------------------------------------------------------------------- /2017/14/part1.js: -------------------------------------------------------------------------------- 1 | let knotHash = require('../../lib').knotHash; 2 | let lib = require('../../lib'); 3 | 4 | lib.getInput(2017, 14).then((input) => { 5 | let count = 0; 6 | 7 | for(let index = 0; index < 128; index++) { 8 | let hash = knotHash(input + '-' + index); 9 | for(let char of hash.split('')) { 10 | let bits = parseInt(char, 16).toString(2); 11 | for(let bit of bits.split('')) { 12 | if(bit === '1') { 13 | count++; 14 | } 15 | } 16 | } 17 | } 18 | 19 | console.log(count); 20 | }); -------------------------------------------------------------------------------- /2017/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 592 -------------------------------------------------------------------------------- /2017/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 320 -------------------------------------------------------------------------------- /2017/15/part1.js: -------------------------------------------------------------------------------- 1 | aStart = 277; 2 | bStart = 349; 3 | 4 | aFactor = 16807; 5 | bFactor = 48271; 6 | 7 | let count = 0; 8 | 9 | let aCurrent = aStart; 10 | let bCurrent = bStart; 11 | 12 | for(let index = 0; index < 40000000; index++) { 13 | aCurrent = (aCurrent * aFactor) % 2147483647; 14 | bCurrent = (bCurrent * bFactor) % 2147483647; 15 | 16 | if(aCurrent % 0x10000 === bCurrent % 0x10000) { 17 | count++; 18 | } 19 | } 20 | 21 | console.log(count); -------------------------------------------------------------------------------- /2017/15/part2.js: -------------------------------------------------------------------------------- 1 | aStart = 277; 2 | bStart = 349; 3 | 4 | aFactor = 16807; 5 | bFactor = 48271; 6 | 7 | let count = 0; 8 | 9 | let aCurrent = aStart; 10 | let bCurrent = bStart; 11 | 12 | for(let index = 0; index < 5000000; index++) { 13 | aCurrent = (aCurrent * aFactor) % 2147483647; 14 | while(aCurrent % 4 !== 0) { 15 | aCurrent = (aCurrent * aFactor) % 2147483647; 16 | } 17 | bCurrent = (bCurrent * bFactor) % 2147483647; 18 | while(bCurrent % 8 !== 0) { 19 | bCurrent = (bCurrent * bFactor) % 2147483647; 20 | } 21 | 22 | if(aCurrent % 0x10000 === bCurrent % 0x10000) { 23 | count++; 24 | } 25 | } 26 | 27 | console.log(count); -------------------------------------------------------------------------------- /2017/16/answer1.txt: -------------------------------------------------------------------------------- 1 | cgpfhdnambekjiol -------------------------------------------------------------------------------- /2017/16/answer2.txt: -------------------------------------------------------------------------------- 1 | gjmiofcnaehpdlbk -------------------------------------------------------------------------------- /2017/17/answer1.txt: -------------------------------------------------------------------------------- 1 | 777 -------------------------------------------------------------------------------- /2017/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 39289581 -------------------------------------------------------------------------------- /2017/17/part1.js: -------------------------------------------------------------------------------- 1 | let input = 376; 2 | let buffer = [0]; 3 | let next = 1; 4 | let index = 0; 5 | 6 | while(next <= 2017) { 7 | index = (index + input % buffer.length) % buffer.length; 8 | buffer.splice(index + 1, 0, next); 9 | next++; 10 | index = (index + 1) % buffer.length; 11 | } 12 | 13 | console.log(buffer[buffer.indexOf(2017) + 1]); -------------------------------------------------------------------------------- /2017/17/part2.js: -------------------------------------------------------------------------------- 1 | let input = 376; 2 | let next = 1; 3 | let index = 0; 4 | let zeroPos = 0; 5 | let afterZero = 0; 6 | 7 | while(next <= 50000000) { 8 | index = (index + input % next) % next; 9 | if(index === zeroPos) { 10 | afterZero = next; 11 | } 12 | next++; 13 | index = (index + 1) % next; 14 | } 15 | 16 | console.log(afterZero); -------------------------------------------------------------------------------- /2017/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 9423 -------------------------------------------------------------------------------- /2017/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 7620 -------------------------------------------------------------------------------- /2017/19/answer1.txt: -------------------------------------------------------------------------------- 1 | YOHREPXWN -------------------------------------------------------------------------------- /2017/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 16734 -------------------------------------------------------------------------------- /2017/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 170 -------------------------------------------------------------------------------- /2017/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 571 -------------------------------------------------------------------------------- /2017/21/answer1.txt: -------------------------------------------------------------------------------- 1 | 136 -------------------------------------------------------------------------------- /2017/21/answer2.txt: -------------------------------------------------------------------------------- 1 | 1911767 -------------------------------------------------------------------------------- /2017/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 5182 -------------------------------------------------------------------------------- /2017/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 2512008 -------------------------------------------------------------------------------- /2017/23/answer1.txt: -------------------------------------------------------------------------------- 1 | 3025 -------------------------------------------------------------------------------- /2017/23/answer2.txt: -------------------------------------------------------------------------------- 1 | 915 -------------------------------------------------------------------------------- /2017/23/part2.js: -------------------------------------------------------------------------------- 1 | //This is the input optimized and converted to JS 2 | let b = 105700; 3 | let c = 122700; 4 | let h = 0; 5 | 6 | while(true) { 7 | let f = 1; 8 | for(let d = 2; d < b; d++) { 9 | if(b % d === 0) { 10 | f = 0; 11 | break; 12 | } 13 | } 14 | if(f === 0) { 15 | h++; 16 | } 17 | if(b === c) { 18 | console.log(h); 19 | break; 20 | } 21 | b += 17; 22 | } 23 | -------------------------------------------------------------------------------- /2017/24/answer1.txt: -------------------------------------------------------------------------------- 1 | 1656 -------------------------------------------------------------------------------- /2017/24/answer2.txt: -------------------------------------------------------------------------------- 1 | 1642 -------------------------------------------------------------------------------- /2017/25/answer1.txt: -------------------------------------------------------------------------------- 1 | 2832 -------------------------------------------------------------------------------- /2018/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 587 -------------------------------------------------------------------------------- /2018/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 83130 -------------------------------------------------------------------------------- /2018/01/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2018; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | var val = 0; 8 | for(let line of data.split('\n')) { 9 | var change = parseInt(line, 10); 10 | val += change; 11 | } 12 | console.log(val); 13 | }).catch((err) => { 14 | console.log(err.stack); 15 | }); -------------------------------------------------------------------------------- /2018/01/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2018; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | var val = 0; 8 | var found = {}; 9 | var done = false; 10 | while(!done) { 11 | for(let line of data.split('\n')) { 12 | var change = parseInt(line, 10); 13 | val += change; 14 | if(found[val]) { 15 | console.log(val); 16 | done = true; 17 | break; 18 | } 19 | else { 20 | found[val] = true; 21 | } 22 | } 23 | } 24 | }).catch((err) => { 25 | console.log(err.stack); 26 | }); -------------------------------------------------------------------------------- /2018/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 5880 -------------------------------------------------------------------------------- /2018/02/answer2.txt: -------------------------------------------------------------------------------- 1 | tiwcdpbseqhxryfmgkvjujvza -------------------------------------------------------------------------------- /2018/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 113576 -------------------------------------------------------------------------------- /2018/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 825 -------------------------------------------------------------------------------- /2018/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 101262 -------------------------------------------------------------------------------- /2018/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 71976 -------------------------------------------------------------------------------- /2018/05/answer1.txt: -------------------------------------------------------------------------------- 1 | 9116 -------------------------------------------------------------------------------- /2018/05/answer2.txt: -------------------------------------------------------------------------------- 1 | 6890 -------------------------------------------------------------------------------- /2018/05/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2018; 4 | let day = 5; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let change = true; 8 | let oldLine = data; 9 | 10 | while(change) { 11 | change = false; 12 | let newLine = ''; 13 | 14 | let i = 0; 15 | while(i < oldLine.length) { 16 | let current = oldLine[i]; 17 | let next = oldLine[i + 1]; 18 | 19 | if(next && current !== next && current.toLowerCase() === next.toLowerCase()) { 20 | i+=2; 21 | change = true; 22 | } 23 | else { 24 | newLine += current; 25 | i++; 26 | } 27 | 28 | } 29 | 30 | oldLine = newLine; 31 | } 32 | 33 | console.log(oldLine.length); 34 | }).catch((err) => { 35 | console.log(err.stack); 36 | }); -------------------------------------------------------------------------------- /2018/05/sample.txt: -------------------------------------------------------------------------------- 1 | dabAcCaCBAcCcaDA -------------------------------------------------------------------------------- /2018/06/answer1.txt: -------------------------------------------------------------------------------- 1 | 3890 -------------------------------------------------------------------------------- /2018/06/answer2.txt: -------------------------------------------------------------------------------- 1 | 40284 -------------------------------------------------------------------------------- /2018/06/sample.txt: -------------------------------------------------------------------------------- 1 | 1, 1 2 | 1, 6 3 | 8, 3 4 | 3, 4 5 | 5, 5 6 | 8, 9 -------------------------------------------------------------------------------- /2018/07/answer1.txt: -------------------------------------------------------------------------------- 1 | ABGKCMVWYDEHFOPQUILSTNZRJX -------------------------------------------------------------------------------- /2018/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 898 -------------------------------------------------------------------------------- /2018/07/sample.txt: -------------------------------------------------------------------------------- 1 | Step C must be finished before step A can begin. 2 | Step C must be finished before step F can begin. 3 | Step A must be finished before step B can begin. 4 | Step A must be finished before step D can begin. 5 | Step B must be finished before step E can begin. 6 | Step D must be finished before step E can begin. 7 | Step F must be finished before step E can begin. -------------------------------------------------------------------------------- /2018/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 47464 -------------------------------------------------------------------------------- /2018/08/answer2.txt: -------------------------------------------------------------------------------- 1 | 23054 -------------------------------------------------------------------------------- /2018/08/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2018; 4 | let day = 8; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let items = data.split(' ').map(x => +x); 8 | 9 | let nodes = [{entries: items.shift(), meta: items.shift()}]; 10 | let total = 0; 11 | 12 | while(items.length) { 13 | let current = nodes[nodes.length - 1]; 14 | if(current.entries > 0) { 15 | current.entries--; 16 | nodes.push({entries: items.shift(), meta: items.shift()}); 17 | } 18 | else if(current.meta > 0) { 19 | total += items.shift(); 20 | current.meta--; 21 | } 22 | else { 23 | nodes.pop(); 24 | } 25 | } 26 | 27 | console.log(total); 28 | }).catch((err) => { 29 | console.log(err.stack); 30 | }); -------------------------------------------------------------------------------- /2018/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 436720 -------------------------------------------------------------------------------- /2018/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 3527845091 -------------------------------------------------------------------------------- /2018/10/answer1.txt: -------------------------------------------------------------------------------- 1 | XPFXXXKL -------------------------------------------------------------------------------- /2018/10/answer2.txt: -------------------------------------------------------------------------------- 1 | 10521 -------------------------------------------------------------------------------- /2018/11/answer1.txt: -------------------------------------------------------------------------------- 1 | 235,48 -------------------------------------------------------------------------------- /2018/11/answer2.txt: -------------------------------------------------------------------------------- 1 | 285,113,11 -------------------------------------------------------------------------------- /2018/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 2045 -------------------------------------------------------------------------------- /2018/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 2100000000428 -------------------------------------------------------------------------------- /2018/12/sample.txt: -------------------------------------------------------------------------------- 1 | initial state: #..#.#..##......###...### 2 | 3 | ...## => # 4 | ..#.. => # 5 | .#... => # 6 | .#.#. => # 7 | .#.## => # 8 | .##.. => # 9 | .#### => # 10 | #.#.# => # 11 | #.### => # 12 | ##.#. => # 13 | ##.## => # 14 | ###.. => # 15 | ###.# => # 16 | ####. => # 17 | -------------------------------------------------------------------------------- /2018/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 118,112 -------------------------------------------------------------------------------- /2018/13/answer2.txt: -------------------------------------------------------------------------------- 1 | 50,21 -------------------------------------------------------------------------------- /2018/13/sample.txt: -------------------------------------------------------------------------------- 1 | /->-\ 2 | | | /----\ 3 | | /-+--+-\ | 4 | | | | | v | 5 | \-+-/ \-+--/ 6 | \------/ 7 | -------------------------------------------------------------------------------- /2018/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 1115317115 -------------------------------------------------------------------------------- /2018/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 20229822 -------------------------------------------------------------------------------- /2018/14/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2018; 4 | let day = 14; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let target = +data; 8 | 9 | let scores = [3, 7]; 10 | let indexes = [0, 1]; 11 | 12 | while(scores.length < target + 10) { 13 | for(let elfNum = 0; elfNum < 2; elfNum++) { 14 | let currentIndex = indexes[elfNum]; 15 | let currentScore = scores[currentIndex]; 16 | currentIndex = (currentIndex + 1 + currentScore) % scores.length; 17 | indexes[elfNum] = currentIndex; 18 | } 19 | 20 | let totalScore = scores[indexes[0]] + scores[indexes[1]]; 21 | 22 | if(totalScore >= 10) { 23 | scores.push(1); 24 | } 25 | scores.push(totalScore % 10); 26 | } 27 | 28 | let result = ''; 29 | for(let i = target; i < target + 10; i++) { 30 | result += scores[i]; 31 | } 32 | 33 | console.log(result); 34 | }).catch((err) => { 35 | console.log(err.stack); 36 | }); -------------------------------------------------------------------------------- /2018/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 207059 -------------------------------------------------------------------------------- /2018/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 49120 -------------------------------------------------------------------------------- /2018/15/parser.js: -------------------------------------------------------------------------------- 1 | module.exports = function(data) { 2 | let lines = data.split('\n'); 3 | let grid = []; 4 | 5 | for(let x = 0; x < lines[0].length; x++) { 6 | grid.push([]); 7 | } 8 | 9 | let combatants = []; 10 | 11 | let y = 0; 12 | for(let line of lines) { 13 | 14 | for(let x = 0; x < line.length; x++) { 15 | grid[x][y] = (line[x] === '#'); 16 | 17 | if(line[x] === 'E') { 18 | combatants.push({ type: 'E', x, y, hp: 200}); 19 | } 20 | else if(line[x] === 'G') { 21 | combatants.push({ type: 'G', x, y, hp: 200}); 22 | } 23 | } 24 | 25 | y++ 26 | } 27 | 28 | return { 29 | combatants, 30 | grid, 31 | }; 32 | } -------------------------------------------------------------------------------- /2018/15/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let parser = require('./parser'); 3 | let combatEngine = require('./combatEngine'); 4 | 5 | let year = 2018; 6 | let day = 15; 7 | 8 | lib.getInput(year, day).then((data) => { 9 | let parsed = parser(data); 10 | 11 | let grid = parsed.grid; 12 | let combatants = parsed.combatants; 13 | 14 | let turnCount = combatEngine(grid, combatants, 3, false); 15 | 16 | console.log(turnCount * combatants.map(x => x.hp).reduce((a, b) => a + b)); 17 | }).catch((err) => { 18 | console.log(err.stack); 19 | }); -------------------------------------------------------------------------------- /2018/15/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let parser = require('./parser'); 3 | let combatEngine = require('./combatEngine'); 4 | 5 | let year = 2018; 6 | let day = 15; 7 | 8 | lib.getInput(year, day).then((data) => { 9 | let parsed = parser(data); 10 | 11 | let grid = parsed.grid; 12 | let originalCombatants = parsed.combatants; 13 | 14 | let elfAttack = 3; 15 | let turnCount = 0; 16 | let combatants; 17 | 18 | while(turnCount <= 0) { 19 | elfAttack++; 20 | 21 | combatants = []; 22 | for(let c of originalCombatants) { 23 | combatants.push({type: c.type, x: c.x, y: c.y, hp: c.hp}); 24 | } 25 | 26 | turnCount = combatEngine(grid, combatants, elfAttack, true); 27 | } 28 | 29 | console.log(turnCount * combatants.map(x => x.hp).reduce((a, b) => a + b)); 30 | }).catch((err) => { 31 | console.log(err.stack); 32 | }); -------------------------------------------------------------------------------- /2018/15/sample.txt: -------------------------------------------------------------------------------- 1 | ####### 2 | #.G...# 3 | #...EG# 4 | #.#.#G# 5 | #..G#E# 6 | #.....# 7 | ####### -------------------------------------------------------------------------------- /2018/15/sample2.txt: -------------------------------------------------------------------------------- 1 | ####### 2 | #G..#E# 3 | #E#E.E# 4 | #G.##.# 5 | #...#E# 6 | #...E.# 7 | ####### -------------------------------------------------------------------------------- /2018/15/sample3.txt: -------------------------------------------------------------------------------- 1 | ####### 2 | #E..EG# 3 | #.#G.E# 4 | #E.##E# 5 | #G..#.# 6 | #..E#.# 7 | ####### -------------------------------------------------------------------------------- /2018/15/sample4.txt: -------------------------------------------------------------------------------- 1 | ####### 2 | #E.G#.# 3 | #.#G..# 4 | #G.#.G# 5 | #G..#.# 6 | #...E.# 7 | ####### -------------------------------------------------------------------------------- /2018/15/sample5.txt: -------------------------------------------------------------------------------- 1 | ####### 2 | #.E...# 3 | #.#..G# 4 | #.###.# 5 | #E#G#G# 6 | #...#G# 7 | ####### -------------------------------------------------------------------------------- /2018/15/sample6.txt: -------------------------------------------------------------------------------- 1 | ######### 2 | #G......# 3 | #.E.#...# 4 | #..##..G# 5 | #...##..# 6 | #...#...# 7 | #.G...G.# 8 | #.....G.# 9 | ######### -------------------------------------------------------------------------------- /2018/16/answer1.txt: -------------------------------------------------------------------------------- 1 | 651 -------------------------------------------------------------------------------- /2018/16/answer2.txt: -------------------------------------------------------------------------------- 1 | 706 -------------------------------------------------------------------------------- /2018/16/sample.txt: -------------------------------------------------------------------------------- 1 | Before: [3, 2, 1, 1] 2 | 9 2 1 2 3 | After: [3, 2, 2, 1] -------------------------------------------------------------------------------- /2018/17/answer1.txt: -------------------------------------------------------------------------------- 1 | 39162 -------------------------------------------------------------------------------- /2018/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 32047 -------------------------------------------------------------------------------- /2018/17/sample.txt: -------------------------------------------------------------------------------- 1 | x=495, y=2..7 2 | y=7, x=495..501 3 | x=501, y=3..7 4 | x=498, y=2..4 5 | x=506, y=1..2 6 | x=498, y=10..13 7 | x=504, y=10..13 8 | y=13, x=498..504 9 | -------------------------------------------------------------------------------- /2018/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 539682 -------------------------------------------------------------------------------- /2018/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 226450 -------------------------------------------------------------------------------- /2018/18/sample.txt: -------------------------------------------------------------------------------- 1 | .#.#...|#. 2 | .....#|##| 3 | .|..|...#. 4 | ..|#.....# 5 | #.#|||#|#| 6 | ...#.||... 7 | .|....|... 8 | ||...#|.#| 9 | |.||||..|. 10 | ...#.|..|. -------------------------------------------------------------------------------- /2018/19/answer1.txt: -------------------------------------------------------------------------------- 1 | 1140 -------------------------------------------------------------------------------- /2018/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 12474720 -------------------------------------------------------------------------------- /2018/19/input-pseudocode.txt: -------------------------------------------------------------------------------- 1 | //initial state 2 | res = 1 3 | a = 0 4 | c = 0 5 | d = 0 6 | e = 0 7 | 8 | e += 2 9 | e = e * e 10 | e = e * 19 11 | e = e * 11 12 | c += 4 13 | c *= 22 14 | c += 7 15 | e += c 16 | c = 2 17 | c *= 28 18 | c += 29 19 | c *= 30 20 | c *= 14 21 | c *= 32 22 | e += c 23 | 24 | //above equates to 25 | e = 10551331 26 | 27 | res = 0 28 | for(let a = 1; a < e; a++) { 29 | for(let d = 1; d < e; d++) { 30 | c = a * d 31 | if(c === e) { 32 | res += a 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /2018/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 3839 -------------------------------------------------------------------------------- /2018/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 8407 -------------------------------------------------------------------------------- /2018/20/sample.txt: -------------------------------------------------------------------------------- 1 | ^WSSEESWWWNW(S|NENNEEEENN(ESSSSW(NWSW|SSEN)|WSWWN(E|WWS(E|SS))))$ -------------------------------------------------------------------------------- /2018/21/answer1.txt: -------------------------------------------------------------------------------- 1 | 5745418 -------------------------------------------------------------------------------- /2018/21/answer2.txt: -------------------------------------------------------------------------------- 1 | 5090905 -------------------------------------------------------------------------------- /2018/21/input-annotated.txt: -------------------------------------------------------------------------------- 1 | seti 123 * 4 -- e = 123 2 | bani 4 456 4 -- e = e & 456 3 | eqri 4 72 4 -- e = (e === 72) 4 | addr 4 5 5 -- jump if e !== 0 5 | seti 0 * 5 -- back to start 6 | seti 0 * 4 -- e = 0 7 | bori 4 65536 3 -- FOURTH: d = e | 65536 8 | seti 14464005 * 4 -- e = 14464005 9 | bani 3 255 2 -- THIRD: c = d & 255 10 | addr 4 2 4 -- e += c 11 | bani 4 16777215 4 -- e = e & 16777215 12 | muli 4 65899 4 -- e *= 65899 13 | bani 4 16777215 4 -- e = e & 16777215 14 | gtir 256 3 2 -- c = (d <= 256 ? 1 : 0) 15 | addr 2 5 5 -- jump if c !== 0 16 | addi 5 1 5 -- jump ahead 1 17 | seti 27 * 5 -- goto CHECKEND 18 | seti 0 * 2 -- c = 0 19 | addi 2 1 1 -- SECOND: b = c + 1 20 | muli 1 256 1 -- b *= 256 21 | gtrr 1 3 1 -- b = (b > d ? 1 : 0) 22 | addr 1 5 5 -- jump if b !== 0 23 | addi 5 1 5 -- skip next 24 | seti 25 * 5 -- goto FIRST 25 | addi 2 1 2 -- c++ 26 | seti 17 * 5 -- goto SECOND 27 | setr 2 * 3 -- FIRST: d = c 28 | seti 7 * 5 -- goto THIRD 29 | eqrr 4 0 2 -- CHECKEND: c = (input === e ? 1 : 0) 30 | addr 2 5 5 -- jump if c !== 0 (end) 31 | seti 5 * 5 -- goto FOURTH 32 | -------------------------------------------------------------------------------- /2018/21/input-pseudocode.txt: -------------------------------------------------------------------------------- 1 | main: do { 2 | d = e | 65536 -- 0x10000 3 | e = 14464005 -- 0xdcb405 4 | do { 5 | c = d & 255 -- 0xff 6 | e += c 7 | e = e & 16777215 -- 0xffffff 8 | e *= 65899 -- 0x1016b 9 | e = e & 16777215 -- 0xffffff 10 | if(d < 256) { 11 | continue main 12 | } 13 | else { 14 | d = d >> 8 15 | } 16 | } 17 | } while (e !== input) -------------------------------------------------------------------------------- /2018/21/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2018; 4 | let day = 21; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | 9 | let const1 = +(lines[8].split(' ')[1]); 10 | let const2 = +(lines[12].split(' ')[2]); 11 | 12 | let last = 0; 13 | let found = {}; 14 | 15 | let c, d, e = 0; 16 | 17 | while(true) { 18 | if(found[e]) { 19 | console.log(last); 20 | break; 21 | } 22 | else { 23 | found[e] = true; 24 | last = e; 25 | } 26 | 27 | d = e | 0x10000; 28 | e = const1; 29 | while(d > 0) { 30 | c = d & 0xff; 31 | e = ((e + c) & 0xffffff) * const2 & 0xffffff; 32 | d = d >> 8; 33 | } 34 | } 35 | }).catch((err) => { 36 | console.log(err.stack); 37 | }); -------------------------------------------------------------------------------- /2018/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 8735 -------------------------------------------------------------------------------- /2018/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 984 -------------------------------------------------------------------------------- /2018/22/sample.txt: -------------------------------------------------------------------------------- 1 | depth: 510 2 | target: 10,10 3 | -------------------------------------------------------------------------------- /2018/23/answer1.txt: -------------------------------------------------------------------------------- 1 | 253 -------------------------------------------------------------------------------- /2018/23/answer2.txt: -------------------------------------------------------------------------------- 1 | 108618801 -------------------------------------------------------------------------------- /2018/23/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2018; 4 | let day = 23; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let bots = []; 9 | let strongBot = {range:0}; 10 | for(let line of lines) { 11 | let parsed = /pos=<(-?\d+),(-?\d+),(-?\d+)>, r=(\d+)/.exec(line); 12 | let newBot = {x: +parsed[1], y: +parsed[2], z: +parsed[3], range: +parsed[4]}; 13 | bots.push(newBot); 14 | if(newBot.range > strongBot.range) { 15 | strongBot = newBot; 16 | } 17 | } 18 | 19 | let count = 0; 20 | for(let bot of bots) { 21 | let distance = Math.abs(bot.x - strongBot.x) + Math.abs(bot.y - strongBot.y) + Math.abs(bot.z - strongBot.z); 22 | if(distance <= strongBot.range) { 23 | count++; 24 | } 25 | } 26 | console.log(count); 27 | }).catch((err) => { 28 | console.log(err.stack); 29 | }); -------------------------------------------------------------------------------- /2018/23/sample.txt: -------------------------------------------------------------------------------- 1 | pos=<0,0,0>, r=4 2 | pos=<1,0,0>, r=1 3 | pos=<4,0,0>, r=3 4 | pos=<0,2,0>, r=1 5 | pos=<0,5,0>, r=3 6 | pos=<0,0,3>, r=1 7 | pos=<1,1,1>, r=1 8 | pos=<1,1,2>, r=1 9 | pos=<1,3,1>, r=1 -------------------------------------------------------------------------------- /2018/23/sample2.txt: -------------------------------------------------------------------------------- 1 | pos=<10,12,12>, r=2 2 | pos=<12,14,12>, r=2 3 | pos=<16,12,12>, r=4 4 | pos=<14,14,14>, r=6 5 | pos=<50,50,50>, r=200 6 | pos=<10,10,10>, r=5 -------------------------------------------------------------------------------- /2018/23/sample3.txt: -------------------------------------------------------------------------------- 1 | pos=<0,0,0>, r=2 2 | pos=<5,0,0>, r=2 3 | pos=<10,0,0>, r=2 4 | pos=<15,0,0>, r=2 5 | pos=<20,0,0>, r=2 6 | pos=<25,0,0>, r=2 7 | pos=<991,0,0>, r=10 8 | pos=<992,0,0>, r=10 9 | pos=<993,0,0>, r=10 10 | pos=<994,0,0>, r=10 -------------------------------------------------------------------------------- /2018/24/answer1.txt: -------------------------------------------------------------------------------- 1 | 25088 -------------------------------------------------------------------------------- /2018/24/answer2.txt: -------------------------------------------------------------------------------- 1 | 2002 -------------------------------------------------------------------------------- /2018/24/sample.txt: -------------------------------------------------------------------------------- 1 | Immune System: 2 | 17 units each with 5390 hit points (weak to radiation, bludgeoning) with an attack that does 4507 fire damage at initiative 2 3 | 989 units each with 1274 hit points (immune to fire; weak to bludgeoning, slashing) with an attack that does 25 slashing damage at initiative 3 4 | 5 | Infection: 6 | 801 units each with 4706 hit points (weak to radiation) with an attack that does 116 bludgeoning damage at initiative 1 7 | 4485 units each with 2961 hit points (immune to radiation; weak to fire, cold) with an attack that does 12 slashing damage at initiative 4 -------------------------------------------------------------------------------- /2018/25/answer1.txt: -------------------------------------------------------------------------------- 1 | 390 -------------------------------------------------------------------------------- /2018/25/sample.txt: -------------------------------------------------------------------------------- 1 | 0,0,0,0 2 | 3,0,0,0 3 | 0,3,0,0 4 | 0,0,3,0 5 | 0,0,0,3 6 | 0,0,0,6 7 | 9,0,0,0 8 | 12,0,0,0 -------------------------------------------------------------------------------- /2019/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 3296269 -------------------------------------------------------------------------------- /2019/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 4941547 -------------------------------------------------------------------------------- /2019/01/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2019; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let total = 0; 9 | for(let line of lines) { 10 | var mass = +line; 11 | var fuel = Math.floor(mass / 3) - 2; 12 | total += fuel; 13 | } 14 | 15 | console.log(total); 16 | }).catch((err) => { 17 | console.log(err, err.stack); 18 | }); -------------------------------------------------------------------------------- /2019/01/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2019; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let total = 0; 9 | for(let line of lines) { 10 | var mass = +line; 11 | var fuel = Math.floor(mass / 3) - 2; 12 | while(fuel > 0) { 13 | total += fuel; 14 | fuel = Math.floor(fuel / 3) - 2; 15 | } 16 | } 17 | 18 | console.log(total); 19 | }).catch((err) => { 20 | console.log(err, err.stack); 21 | }); -------------------------------------------------------------------------------- /2019/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 3267740 -------------------------------------------------------------------------------- /2019/02/answer2.txt: -------------------------------------------------------------------------------- 1 | 7870 -------------------------------------------------------------------------------- /2019/02/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intCodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 2; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let codes = intCodes.parse(data); 9 | codes[1] = 12; 10 | codes[2] = 2; 11 | 12 | let program = intCodes.compile(codes); 13 | program.run(); 14 | 15 | console.log(codes[0]); 16 | }).catch((err) => { 17 | console.log(err, err.stack); 18 | }); -------------------------------------------------------------------------------- /2019/02/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intCodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 2; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let originalCodes = intCodes.parse(data); 9 | 10 | for(let noun = 0; noun < 100; noun++) { 11 | for(let verb = 0; verb < 100; verb++) { 12 | let codes = originalCodes.slice(0); 13 | 14 | codes[1] = noun; 15 | codes[2] = verb; 16 | 17 | let program = intCodes.compile(codes); 18 | program.run(); 19 | 20 | if(codes[0] === 19690720) { 21 | console.log(100 * noun + verb); 22 | process.exit(0); 23 | } 24 | } 25 | } 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2019/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 248 -------------------------------------------------------------------------------- /2019/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 28580 -------------------------------------------------------------------------------- /2019/03/sample0.txt: -------------------------------------------------------------------------------- 1 | R8,U5,L5,D3 2 | U7,R6,D4,L4 -------------------------------------------------------------------------------- /2019/03/sample1.txt: -------------------------------------------------------------------------------- 1 | R75,D30,R83,U83,L12,D49,R71,U7,L72 2 | U62,R66,U55,R34,D71,R55,D58,R83 -------------------------------------------------------------------------------- /2019/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 1169 -------------------------------------------------------------------------------- /2019/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 757 -------------------------------------------------------------------------------- /2019/04/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2019; 4 | let day = 4; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let parts = data.split('-'); 8 | let min = +parts[0]; 9 | let max = +parts[1]; 10 | let count = 0; 11 | 12 | main: for(let i = min; i <= max; i++) { 13 | let str = i.toString(); 14 | if(!/(\d)\1/.test(str)) { 15 | continue main; 16 | } 17 | 18 | let value = 0; 19 | for(let char of str) { 20 | if(+char < value) { 21 | continue main; 22 | } 23 | value = +char; 24 | } 25 | 26 | count++; 27 | } 28 | console.log(count); 29 | }).catch((err) => { 30 | console.log(err, err.stack); 31 | }); -------------------------------------------------------------------------------- /2019/05/answer1.txt: -------------------------------------------------------------------------------- 1 | 13978427 -------------------------------------------------------------------------------- /2019/05/answer2.txt: -------------------------------------------------------------------------------- 1 | 11189491 -------------------------------------------------------------------------------- /2019/05/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intCodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 5; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let codes = intCodes.parse(data); 9 | 10 | let program = intCodes.compile(codes); 11 | let output = program.run(1); 12 | while(!output.value) { 13 | output = program.run(); 14 | } 15 | 16 | console.log(output.value); 17 | }).catch((err) => { 18 | console.log(err, err.stack); 19 | }); -------------------------------------------------------------------------------- /2019/05/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intCodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 5; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let codes = intCodes.parse(data); 9 | 10 | let program = intCodes.compile(codes); 11 | let output = program.run(5); 12 | 13 | while(!output.value) { 14 | output = program.run(); 15 | } 16 | 17 | console.log(output.value); 18 | }).catch((err) => { 19 | console.log(err, err.stack); 20 | }); -------------------------------------------------------------------------------- /2019/06/answer1.txt: -------------------------------------------------------------------------------- 1 | 314247 -------------------------------------------------------------------------------- /2019/06/answer2.txt: -------------------------------------------------------------------------------- 1 | 514 -------------------------------------------------------------------------------- /2019/07/answer1.txt: -------------------------------------------------------------------------------- 1 | 212460 -------------------------------------------------------------------------------- /2019/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 21844737 -------------------------------------------------------------------------------- /2019/07/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intCodes = require('../lib/intcodes'); 3 | let Combinatorics = require('js-combinatorics'); 4 | 5 | let year = 2019; 6 | let day = 7; 7 | 8 | lib.getInput(year, day).then((data) => { 9 | let codes = intCodes.parse(data); 10 | 11 | let cmb = Combinatorics.permutation([0,1,2,3,4]); 12 | let max = 0; 13 | 14 | while(currentList = cmb.next()) 15 | { 16 | let currentValue = 0; 17 | for(let amplifier = 0; amplifier < 5; amplifier++) { 18 | let program = intCodes.compile(codes.slice(0)); 19 | currentValue = program.run(currentList[amplifier], currentValue).value; 20 | } 21 | max = Math.max(max, currentValue); 22 | } 23 | 24 | console.log(max); 25 | 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2019/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 1584 -------------------------------------------------------------------------------- /2019/08/answer2.txt: -------------------------------------------------------------------------------- 1 | KCGEC -------------------------------------------------------------------------------- /2019/08/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2019; 4 | let day = 8; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let width = 25; 8 | let height = 6; 9 | 10 | let layers = []; 11 | let layerSize = width * height; 12 | 13 | for(let index in data) { 14 | let num = +data[index]; 15 | let layer = Math.floor(index / layerSize); 16 | 17 | layers[layer] = layers[layer] || []; 18 | 19 | layers[layer][num] = (layers[layer][num] || 0) + 1; 20 | } 21 | 22 | let minZeroes = Infinity; 23 | let score = 0; 24 | 25 | for(let layer of layers) { 26 | if(layer[0] < minZeroes) { 27 | minZeroes = layer[0]; 28 | score = layer[1] * layer[2]; 29 | } 30 | } 31 | 32 | console.log(score); 33 | }).catch((err) => { 34 | console.log(err, err.stack); 35 | }); -------------------------------------------------------------------------------- /2019/08/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let parseLetters = require('../lib/parseLetters'); 3 | 4 | let year = 2019; 5 | let day = 8; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let width = 25; 9 | let height = 6; 10 | 11 | let imageData = []; 12 | let layerSize = width * height; 13 | 14 | let numLayers = data.length / layerSize; 15 | let index = 0; 16 | 17 | for(let layer = 0; layer < numLayers; layer++) { 18 | for(let y = 0; y < height; y++) { 19 | for(let x = 0; x < width; x++) { 20 | imageData[x] = imageData[x] || []; 21 | let num = +data[index]; 22 | if(imageData[x][y] === undefined && num !== 2) { 23 | imageData[x][y] = num; 24 | } 25 | index++; 26 | } 27 | } 28 | } 29 | 30 | imageData = imageData.map(row => row.map(x => x === 1)); 31 | 32 | console.log(parseLetters(imageData)); 33 | }).catch((err) => { 34 | console.log(err, err.stack); 35 | }); -------------------------------------------------------------------------------- /2019/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 2453265701 -------------------------------------------------------------------------------- /2019/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 80805 -------------------------------------------------------------------------------- /2019/09/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intcodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 9; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let codes = intcodes.parse(data); 9 | let program = intcodes.compile(codes); 10 | console.log(program.run(1).value); 11 | }).catch((err) => { 12 | console.log(err, err.stack); 13 | }); -------------------------------------------------------------------------------- /2019/09/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intcodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 9; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let codes = intcodes.parse(data); 9 | let program = intcodes.compile(codes); 10 | console.log(program.run(2).value); 11 | }).catch((err) => { 12 | console.log(err, err.stack); 13 | }); -------------------------------------------------------------------------------- /2019/10/answer1.txt: -------------------------------------------------------------------------------- 1 | 278 -------------------------------------------------------------------------------- /2019/10/answer2.txt: -------------------------------------------------------------------------------- 1 | 1417 -------------------------------------------------------------------------------- /2019/10/sample1.txt: -------------------------------------------------------------------------------- 1 | ......#.#. 2 | #..#.#.... 3 | ..#######. 4 | .#.#.###.. 5 | .#..#..... 6 | ..#....#.# 7 | #..#....#. 8 | .##.#..### 9 | ##...#..#. 10 | .#....#### -------------------------------------------------------------------------------- /2019/10/sample2.txt: -------------------------------------------------------------------------------- 1 | .#..##.###...####### 2 | ##.############..##. 3 | .#.######.########.# 4 | .###.#######.####.#. 5 | #####.##.#.##.###.## 6 | ..#####..#.######### 7 | #################### 8 | #.####....###.#.#.## 9 | ##.################# 10 | #####.##.###..####.. 11 | ..######..##.####### 12 | ####.##.####...##..# 13 | .#####..#.######.### 14 | ##...#.##########... 15 | #.##########.####### 16 | .####.#.###.###.#.## 17 | ....##.##.###..##### 18 | .#.#.###########.### 19 | #.#.#.#####.####.### 20 | ###.##.####.##.#..## -------------------------------------------------------------------------------- /2019/11/answer1.txt: -------------------------------------------------------------------------------- 1 | 2211 -------------------------------------------------------------------------------- /2019/11/answer2.txt: -------------------------------------------------------------------------------- 1 | EFCKUEGC -------------------------------------------------------------------------------- /2019/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 7928 -------------------------------------------------------------------------------- /2019/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 518311327635164 -------------------------------------------------------------------------------- /2019/12/sample1.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /2019/12/sample2.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /2019/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 200 -------------------------------------------------------------------------------- /2019/13/answer2.txt: -------------------------------------------------------------------------------- 1 | 9803 -------------------------------------------------------------------------------- /2019/13/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intcodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 13; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let codes = intcodes.parse(data); 9 | let program = intcodes.compile(codes); 10 | 11 | let blocks = 0; 12 | 13 | while(true) { 14 | let output = program.run(); 15 | if(output.signal === 'end') { 16 | break; 17 | } 18 | output = program.run(); 19 | if(output.signal === 'end') { 20 | break; 21 | } 22 | output = program.run(); 23 | if(output.signal === 'end') { 24 | break; 25 | } 26 | if(output.value === 2) { 27 | blocks++; 28 | } 29 | } 30 | console.log(blocks); 31 | }).catch((err) => { 32 | console.log(err, err.stack); 33 | }); -------------------------------------------------------------------------------- /2019/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 1582325 -------------------------------------------------------------------------------- /2019/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 2267486 -------------------------------------------------------------------------------- /2019/14/sample1.txt: -------------------------------------------------------------------------------- 1 | 10 ORE => 10 A 2 | 1 ORE => 1 B 3 | 7 A, 1 B => 1 C 4 | 7 A, 1 C => 1 D 5 | 7 A, 1 D => 1 E 6 | 7 A, 1 E => 1 FUEL -------------------------------------------------------------------------------- /2019/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 242 -------------------------------------------------------------------------------- /2019/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 276 -------------------------------------------------------------------------------- /2019/16/answer1.txt: -------------------------------------------------------------------------------- 1 | 25131128 -------------------------------------------------------------------------------- /2019/16/answer2.txt: -------------------------------------------------------------------------------- 1 | 53201602 -------------------------------------------------------------------------------- /2019/16/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2019; 4 | let day = 16; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let input = ''; 8 | 9 | for(let i = 0; i < 10000; i++) { 10 | input += data; 11 | } 12 | 13 | let skipCount = data.substring(0, 7); 14 | input = input.substring(skipCount); 15 | let values = input.split('').map(x => +x); 16 | 17 | for(let phase = 0; phase < 100; phase++) { 18 | let newValues = []; 19 | for(let index = values.length - 1; index >= 0; index--) { 20 | newValues[index] = ((newValues[index + 1] || 0) + values[index]) % 10; 21 | } 22 | values = newValues; 23 | } 24 | 25 | console.log(values.slice(0,8).join('')); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2019/17/answer1.txt: -------------------------------------------------------------------------------- 1 | 2508 -------------------------------------------------------------------------------- /2019/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 799463 -------------------------------------------------------------------------------- /2019/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 4762 -------------------------------------------------------------------------------- /2019/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 1876 -------------------------------------------------------------------------------- /2019/19/answer1.txt: -------------------------------------------------------------------------------- 1 | 197 -------------------------------------------------------------------------------- /2019/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 9181022 -------------------------------------------------------------------------------- /2019/19/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intcodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 19; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let codes = intcodes.parse(data); 9 | let count = 0; 10 | 11 | for(let x = 0; x < 50; x++) { 12 | for(let y = 0; y < 50; y++) { 13 | let program = intcodes.compile(codes.slice(0)); 14 | let output = program.run(x, y); 15 | if(output.value === 1) { 16 | count++; 17 | } 18 | } 19 | } 20 | 21 | console.log(count); 22 | }).catch((err) => { 23 | console.log(err, err.stack); 24 | }); -------------------------------------------------------------------------------- /2019/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 458 -------------------------------------------------------------------------------- /2019/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 5502 -------------------------------------------------------------------------------- /2019/21/answer1.txt: -------------------------------------------------------------------------------- 1 | 19353565 -------------------------------------------------------------------------------- /2019/21/answer2.txt: -------------------------------------------------------------------------------- 1 | 1140612950 -------------------------------------------------------------------------------- /2019/21/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intcodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 21; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let program = intcodes.compile(intcodes.parse(data)); 9 | 10 | let output = program.run(); 11 | while(output.signal === 'output') { 12 | output = program.run(); 13 | } 14 | 15 | let commands = ['NOT A J', 'NOT B T', 'OR T J', 'NOT C T', 'OR T J', 'AND D J', 'WALK']; 16 | 17 | for(let command of commands) { 18 | output = program.run(command, 10); 19 | } 20 | 21 | output = program.readString(); 22 | //console.log(output.str) 23 | console.log(output.value); 24 | }).catch((err) => { 25 | console.log(err, err.stack); 26 | }); -------------------------------------------------------------------------------- /2019/21/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let intcodes = require('../lib/intcodes'); 3 | 4 | let year = 2019; 5 | let day = 21; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let program = intcodes.compile(intcodes.parse(data)); 9 | 10 | let output = program.run(); 11 | while(output.signal === 'output') { 12 | output = program.run(); 13 | } 14 | 15 | let commands = ['NOT A J', 'NOT B T', 'OR T J', 'NOT C T', 'OR T J', 'NOT E T', 'NOT T T', 'OR H T', 'AND T J', 'AND D J', 'RUN']; 16 | 17 | for(let command of commands) { 18 | output = program.run(command, 10); 19 | } 20 | 21 | output = program.readString(); 22 | //console.log(output.str); 23 | console.log(output.value); 24 | }).catch((err) => { 25 | console.log(err, err.stack); 26 | }); -------------------------------------------------------------------------------- /2019/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 4284 -------------------------------------------------------------------------------- /2019/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 96797432275571 -------------------------------------------------------------------------------- /2019/23/answer1.txt: -------------------------------------------------------------------------------- 1 | 17286 -------------------------------------------------------------------------------- /2019/23/answer2.txt: -------------------------------------------------------------------------------- 1 | 11249 -------------------------------------------------------------------------------- /2019/24/answer1.txt: -------------------------------------------------------------------------------- 1 | 18370591 -------------------------------------------------------------------------------- /2019/24/answer2.txt: -------------------------------------------------------------------------------- 1 | 2040 -------------------------------------------------------------------------------- /2019/24/sample.txt: -------------------------------------------------------------------------------- 1 | ....# 2 | #..#. 3 | #..## 4 | ..#.. 5 | #.... -------------------------------------------------------------------------------- /2019/25/answer1.txt: -------------------------------------------------------------------------------- 1 | 1073815584 -------------------------------------------------------------------------------- /2020/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 545379 -------------------------------------------------------------------------------- /2020/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 257778836 -------------------------------------------------------------------------------- /2020/01/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let nums = []; 9 | for(let line of lines) { 10 | nums.push(+line); 11 | } 12 | 13 | for(let index = 0; index < nums.length; index++) { 14 | for(let index2 = index + 1; index2 < nums.length; index2++) { 15 | if(nums[index] + nums[index2] === 2020) { 16 | console.log(nums[index] * nums[index2]); 17 | } 18 | } 19 | } 20 | }).catch((err) => { 21 | console.log(err, err.stack); 22 | }); -------------------------------------------------------------------------------- /2020/01/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let nums = []; 9 | for(let line of lines) { 10 | nums.push(+line); 11 | } 12 | 13 | for(let index = 0; index < nums.length; index++) { 14 | for(let index2 = index + 1; index2 < nums.length; index2++) { 15 | for(let index3 = index2 + 1; index3 < nums.length; index3++) { 16 | if(nums[index] + nums[index2] + nums[index3] === 2020) { 17 | console.log(nums[index] * nums[index2] * nums[index3]); 18 | } 19 | } 20 | } 21 | } 22 | }).catch((err) => { 23 | console.log(err, err.stack); 24 | }); -------------------------------------------------------------------------------- /2020/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 607 -------------------------------------------------------------------------------- /2020/02/answer2.txt: -------------------------------------------------------------------------------- 1 | 321 -------------------------------------------------------------------------------- /2020/02/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 2; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let valid = 0; 9 | for(let line of lines) { 10 | let parts = line.split(':'); 11 | let policyParts = parts[0].split(' '); 12 | let numParts = policyParts[0].split('-'); 13 | let min = +numParts[0]; 14 | let max = +numParts[1]; 15 | let letter = policyParts[1]; 16 | let password = parts[1]; 17 | let count = 0; 18 | for(let char of password) { 19 | if(char === letter) { 20 | count++; 21 | } 22 | } 23 | if(count >= min && count <= max) { 24 | valid++; 25 | } 26 | } 27 | console.log(valid); 28 | }).catch((err) => { 29 | console.log(err, err.stack); 30 | }); -------------------------------------------------------------------------------- /2020/02/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 2; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let valid = 0; 9 | for(let line of lines) { 10 | let parts = line.split(':'); 11 | let policyParts = parts[0].split(' '); 12 | let numParts = policyParts[0].split('-'); 13 | let letter = policyParts[1]; 14 | let password = parts[1].trim(); 15 | let first = (password[+numParts[0]-1] === letter); 16 | let second = (password[+numParts[1]-1] === letter); 17 | 18 | if(first ^ second) { 19 | valid++; 20 | } 21 | } 22 | console.log(valid); 23 | }).catch((err) => { 24 | console.log(err, err.stack); 25 | }); -------------------------------------------------------------------------------- /2020/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 178 -------------------------------------------------------------------------------- /2020/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 3492520200 -------------------------------------------------------------------------------- /2020/03/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 3; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let rows = []; 9 | for(let line of lines) { 10 | let row = []; 11 | for(let char of line) { 12 | if(char === '#') { 13 | row.push(false); 14 | } 15 | else { 16 | row.push(true); 17 | } 18 | } 19 | rows.push(row) 20 | } 21 | let x = 0; 22 | let y = 0; 23 | let width = rows[0].length; 24 | 25 | let trees = 0; 26 | while(y < rows.length) { 27 | if(!rows[y][x % width]) { 28 | trees++; 29 | } 30 | x += 3; 31 | y++; 32 | } 33 | console.log(trees); 34 | }).catch((err) => { 35 | console.log(err, err.stack); 36 | }); -------------------------------------------------------------------------------- /2020/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 202 -------------------------------------------------------------------------------- /2020/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 137 -------------------------------------------------------------------------------- /2020/04/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 4; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let foundFields = []; 9 | let valid = 0; 10 | for(let line of lines) { 11 | if(!line.trim()) { 12 | if(foundFields.length === 8 || (foundFields.length === 7 && foundFields.indexOf('cid') === -1)) { 13 | valid++; 14 | } 15 | foundFields = []; 16 | } 17 | else { 18 | let parts = line.split(' '); 19 | for(let part of parts) { 20 | foundFields.push(part.split(':')[0]); 21 | } 22 | } 23 | } 24 | 25 | console.log(valid); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2020/05/answer1.txt: -------------------------------------------------------------------------------- 1 | 832 -------------------------------------------------------------------------------- /2020/05/answer2.txt: -------------------------------------------------------------------------------- 1 | 517 -------------------------------------------------------------------------------- /2020/06/answer1.txt: -------------------------------------------------------------------------------- 1 | 6291 -------------------------------------------------------------------------------- /2020/06/answer2.txt: -------------------------------------------------------------------------------- 1 | 3052 -------------------------------------------------------------------------------- /2020/06/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let total = 0; 9 | let groupLetters = []; 10 | for(let line of lines) { 11 | if(!line) { 12 | total += groupLetters.length; 13 | groupLetters = []; 14 | } 15 | else { 16 | for(let char of line) { 17 | if(groupLetters.indexOf(char) === -1) { 18 | groupLetters.push(char); 19 | } 20 | } 21 | } 22 | } 23 | 24 | total += groupLetters.length; 25 | console.log(total); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2020/06/sample.txt: -------------------------------------------------------------------------------- 1 | abc 2 | 3 | a 4 | b 5 | c 6 | 7 | ab 8 | ac 9 | 10 | a 11 | a 12 | a 13 | a 14 | 15 | b -------------------------------------------------------------------------------- /2020/07/answer1.txt: -------------------------------------------------------------------------------- 1 | 128 -------------------------------------------------------------------------------- /2020/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 20189 -------------------------------------------------------------------------------- /2020/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 1553 -------------------------------------------------------------------------------- /2020/08/answer2.txt: -------------------------------------------------------------------------------- 1 | 1877 -------------------------------------------------------------------------------- /2020/08/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | let assembly = require('../lib/assembly'); 3 | 4 | let year = 2020; 5 | let day = 8; 6 | 7 | lib.getInput(year, day).then((data) => { 8 | let program = assembly.parse(data); 9 | 10 | let visited = {}; 11 | 12 | while(true) { 13 | let state = program.getState(); 14 | if(visited[state.pointer]) { 15 | console.log(state.accumulator); 16 | process.exit(0); 17 | } 18 | visited[state.pointer] = true; 19 | program.step(); 20 | } 21 | }).catch((err) => { 22 | console.log(err, err.stack); 23 | }); -------------------------------------------------------------------------------- /2020/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 373803594 -------------------------------------------------------------------------------- /2020/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 51152360 -------------------------------------------------------------------------------- /2020/09/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 9; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let nums = []; 9 | for(let line of lines) { 10 | nums.push(+line); 11 | } 12 | 13 | for(let i = 25; i < nums.length; i++) { 14 | let compare = nums.slice(i - 25, i); 15 | let found = false; 16 | for(let j = 0; j < 25; j++) { 17 | for(let k = j + 1; k < 25; k++) { 18 | if(compare[j] + compare[k] === nums[i]) { 19 | found = true; 20 | } 21 | } 22 | } 23 | 24 | if(!found) { 25 | console.log(nums[i]); 26 | } 27 | } 28 | }).catch((err) => { 29 | console.log(err, err.stack); 30 | }); -------------------------------------------------------------------------------- /2020/09/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 9; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let target = 373803594; 9 | let nums = []; 10 | for(let line of lines) { 11 | nums.push(+line); 12 | } 13 | 14 | for(let i = 0; i < nums.length; i++) { 15 | let sum = 0; 16 | let j = i; 17 | let max = 0; 18 | let min = Infinity; 19 | while(j < nums.length && sum < target) { 20 | sum += nums[j]; 21 | max = Math.max(max, nums[j]); 22 | min = Math.min(min, nums[j]); 23 | j++; 24 | } 25 | if(sum === target) { 26 | console.log(max + min); 27 | process.exit(0); 28 | } 29 | } 30 | }).catch((err) => { 31 | console.log(err, err.stack); 32 | }); -------------------------------------------------------------------------------- /2020/10/answer1.txt: -------------------------------------------------------------------------------- 1 | 1700 -------------------------------------------------------------------------------- /2020/10/answer2.txt: -------------------------------------------------------------------------------- 1 | 12401793332096 -------------------------------------------------------------------------------- /2020/10/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 10; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let nums = []; 9 | for(let line of lines) { 10 | nums.push(+line); 11 | } 12 | nums = nums.sort((a, b) => a - b); 13 | nums.unshift(0); 14 | 15 | let ones = 0; 16 | let threes = 0; 17 | for(let i = 0; i < nums.length - 1; i++) { 18 | if(nums[i+1] - nums[i] === 1) { 19 | ones++; 20 | } 21 | if(nums[i+1] - nums[i] === 3) { 22 | threes++; 23 | } 24 | } 25 | threes++; 26 | console.log(ones * threes); 27 | }).catch((err) => { 28 | console.log(err, err.stack); 29 | }); -------------------------------------------------------------------------------- /2020/11/answer1.txt: -------------------------------------------------------------------------------- 1 | 2424 -------------------------------------------------------------------------------- /2020/11/answer2.txt: -------------------------------------------------------------------------------- 1 | 2208 -------------------------------------------------------------------------------- /2020/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 2270 -------------------------------------------------------------------------------- /2020/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 138669 -------------------------------------------------------------------------------- /2020/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 3035 -------------------------------------------------------------------------------- /2020/13/answer2.txt: -------------------------------------------------------------------------------- 1 | 725169163285238 -------------------------------------------------------------------------------- /2020/13/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 13; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let startTime = +lines[0]; 9 | let buses = lines[1].split(',').filter(x => x !== 'x').map(x => +x); 10 | 11 | let nextBus = 0; 12 | let waitTime = Infinity; 13 | for(let bus of buses) { 14 | let currentTime = 0; 15 | while(currentTime < startTime) { 16 | currentTime += bus; 17 | } 18 | let time = currentTime - startTime; 19 | if(time < waitTime) { 20 | waitTime = time; 21 | nextBus = bus; 22 | } 23 | } 24 | 25 | console.log(nextBus * waitTime); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2020/13/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 13; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let buses = []; 9 | let chars = lines[1].split(','); 10 | 11 | for(let i = 0; i < chars.length; i++) { 12 | if(chars[i] !== 'x') { 13 | buses.push({num: +chars[i], index: i}); 14 | } 15 | } 16 | 17 | buses = buses.sort((a, b) => a.num - b.num); 18 | 19 | let current = buses[0].num - buses[0].index; 20 | let increment = buses[0].num; 21 | 22 | for(let i = 1; i < buses.length; i++) { 23 | while((current + buses[i].index) % buses[i].num !== 0) { 24 | current += increment; 25 | } 26 | increment *= buses[i].num; 27 | } 28 | 29 | console.log(current); 30 | }).catch((err) => { 31 | console.log(err, err.stack); 32 | }); -------------------------------------------------------------------------------- /2020/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 11501064782628 -------------------------------------------------------------------------------- /2020/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 5142195937660 -------------------------------------------------------------------------------- /2020/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 496 -------------------------------------------------------------------------------- /2020/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 883 -------------------------------------------------------------------------------- /2020/15/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 15; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let nums = data.split(',').map(x => +x); 8 | while(nums.length < 2020) { 9 | let target = nums[nums.length - 1]; 10 | let lastIndex = -1; 11 | let newIndex = -1; 12 | while(newIndex < nums.length - 1) { 13 | lastIndex = newIndex; 14 | newIndex = nums.indexOf(target, lastIndex + 1); 15 | } 16 | if(lastIndex === -1) { 17 | nums.push(0); 18 | } 19 | else { 20 | nums.push(nums.length - lastIndex - 1); 21 | } 22 | } 23 | console.log(nums[2019]); 24 | }).catch((err) => { 25 | console.log(err, err.stack); 26 | }); -------------------------------------------------------------------------------- /2020/15/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 15; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let nums = data.split(',').map(x => +x); 8 | 9 | let last = new Map(); 10 | for(let i = 0; i < nums.length - 1; i++) { 11 | last.set(nums[i], i); 12 | } 13 | let current = nums[nums.length - 1]; 14 | let index = nums.length - 1; 15 | 16 | while(index < 30000000 - 1) { 17 | let lastIndex = last.get(current); 18 | last.set(current, index); 19 | if(lastIndex !== undefined) { 20 | current = index - lastIndex; 21 | } 22 | else { 23 | current = 0; 24 | } 25 | index++; 26 | } 27 | console.log(current); 28 | }).catch((err) => { 29 | console.log(err, err.stack); 30 | }); -------------------------------------------------------------------------------- /2020/16/answer1.txt: -------------------------------------------------------------------------------- 1 | 26053 -------------------------------------------------------------------------------- /2020/16/answer2.txt: -------------------------------------------------------------------------------- 1 | 1515506256421 -------------------------------------------------------------------------------- /2020/17/answer1.txt: -------------------------------------------------------------------------------- 1 | 324 -------------------------------------------------------------------------------- /2020/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 1836 -------------------------------------------------------------------------------- /2020/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 24650385570008 -------------------------------------------------------------------------------- /2020/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 158183007916215 -------------------------------------------------------------------------------- /2020/19/answer1.txt: -------------------------------------------------------------------------------- 1 | 124 -------------------------------------------------------------------------------- /2020/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 228 -------------------------------------------------------------------------------- /2020/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 14986175499719 -------------------------------------------------------------------------------- /2020/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 2161 -------------------------------------------------------------------------------- /2020/21/answer1.txt: -------------------------------------------------------------------------------- 1 | 1885 -------------------------------------------------------------------------------- /2020/21/answer2.txt: -------------------------------------------------------------------------------- 1 | fllssz,kgbzf,zcdcdf,pzmg,kpsdtv,fvvrc,dqbjj,qpxhfp -------------------------------------------------------------------------------- /2020/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 33925 -------------------------------------------------------------------------------- /2020/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 33441 -------------------------------------------------------------------------------- /2020/23/answer1.txt: -------------------------------------------------------------------------------- 1 | 24987653 -------------------------------------------------------------------------------- /2020/23/answer2.txt: -------------------------------------------------------------------------------- 1 | 442938711161 -------------------------------------------------------------------------------- /2020/24/answer1.txt: -------------------------------------------------------------------------------- 1 | 341 -------------------------------------------------------------------------------- /2020/24/answer2.txt: -------------------------------------------------------------------------------- 1 | 3700 -------------------------------------------------------------------------------- /2020/25/answer1.txt: -------------------------------------------------------------------------------- 1 | 12285001 -------------------------------------------------------------------------------- /2020/25/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2020; 4 | let day = 25; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let div = 20201227; 9 | let keys = lines.map(x => +x); 10 | 11 | let value = 1; 12 | let subject = 7; 13 | let loops = 0; 14 | while(value !== keys[0]) { 15 | value = (value * subject) % div; 16 | loops++; 17 | } 18 | 19 | subject = keys[1]; 20 | value = 1; 21 | for(let i = 0; i < loops; i++) { 22 | value = (value * subject) % div; 23 | } 24 | 25 | console.log(value); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2021/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 1228 -------------------------------------------------------------------------------- /2021/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 1257 -------------------------------------------------------------------------------- /2021/01/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let prev = Infinity; 9 | let count = 0; 10 | for(let line of lines) { 11 | let val = +line; 12 | if(val > prev) { 13 | count++; 14 | } 15 | prev = val; 16 | } 17 | console.log(count); 18 | }).catch((err) => { 19 | console.log(err, err.stack); 20 | }); -------------------------------------------------------------------------------- /2021/01/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | lines = lines.map(x => +x); 9 | let prev = Infinity; 10 | let count = 0; 11 | for(let i = 2; i < lines.length; i++) { 12 | let val = lines[i - 2] + lines[i - 1] + lines[i]; 13 | if(val > prev) { 14 | count++; 15 | } 16 | prev = val; 17 | } 18 | console.log(count); 19 | }).catch((err) => { 20 | console.log(err, err.stack); 21 | }); -------------------------------------------------------------------------------- /2021/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 2215080 -------------------------------------------------------------------------------- /2021/02/answer2.txt: -------------------------------------------------------------------------------- 1 | 1864715580 -------------------------------------------------------------------------------- /2021/02/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 2; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let depth = 0; 9 | let position = 0; 10 | for(let line of lines) { 11 | let parts = line.split(' '); 12 | let amount = +parts[1]; 13 | switch(parts[0]) { 14 | case 'forward': 15 | position += amount; 16 | break; 17 | case 'up': 18 | depth -= amount; 19 | break; 20 | case 'down': 21 | depth += amount; 22 | break; 23 | } 24 | } 25 | console.log(depth * position); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2021/02/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 2; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let depth = 0; 9 | let position = 0; 10 | let aim = 0; 11 | for(let line of lines) { 12 | let parts = line.split(' '); 13 | let amount = +parts[1]; 14 | switch(parts[0]) { 15 | case 'forward': 16 | position += amount; 17 | depth += aim * amount; 18 | break; 19 | case 'up': 20 | aim -= amount; 21 | break; 22 | case 'down': 23 | aim += amount; 24 | break; 25 | } 26 | } 27 | console.log(depth * position); 28 | }).catch((err) => { 29 | console.log(err, err.stack); 30 | }); -------------------------------------------------------------------------------- /2021/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 3148794 -------------------------------------------------------------------------------- /2021/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 2795310 -------------------------------------------------------------------------------- /2021/03/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 3; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let num = lines.length; 9 | let counts = []; 10 | 11 | for(let line of lines) { 12 | for(let charIndex = 0; charIndex < line.length; charIndex++) { 13 | let char = line[charIndex]; 14 | if(char === '1') { 15 | counts[charIndex] = (counts[charIndex] || 0) + 1; 16 | } 17 | } 18 | } 19 | 20 | let epsilon = ''; 21 | let gamma = ''; 22 | 23 | for(let count of counts) { 24 | if(count > num / 2) { 25 | epsilon += '0'; 26 | gamma += '1'; 27 | } 28 | else { 29 | epsilon += '1'; 30 | gamma += '0'; 31 | } 32 | } 33 | 34 | console.log(parseInt(epsilon, 2) * parseInt(gamma, 2)); 35 | }).catch((err) => { 36 | console.log(err, err.stack); 37 | }); -------------------------------------------------------------------------------- /2021/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 41668 -------------------------------------------------------------------------------- /2021/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 10478 -------------------------------------------------------------------------------- /2021/05/answer1.txt: -------------------------------------------------------------------------------- 1 | 5608 -------------------------------------------------------------------------------- /2021/05/answer2.txt: -------------------------------------------------------------------------------- 1 | 20299 -------------------------------------------------------------------------------- /2021/06/answer1.txt: -------------------------------------------------------------------------------- 1 | 387413 -------------------------------------------------------------------------------- /2021/06/answer2.txt: -------------------------------------------------------------------------------- 1 | 1738377086345 -------------------------------------------------------------------------------- /2021/06/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let fishes = data.split(',').map(x => +x); 8 | for(let day = 0; day < 80; day++) { 9 | let length = fishes.length; 10 | for(let i = 0; i < length; i++) { 11 | let fish = fishes[i] 12 | if(fish === 0) { 13 | fishes[i] = 6; 14 | fishes.push(8); 15 | } 16 | else 17 | { 18 | fishes[i] = fish - 1; 19 | } 20 | } 21 | } 22 | 23 | console.log(fishes.length); 24 | }).catch((err) => { 25 | console.log(err, err.stack); 26 | }); -------------------------------------------------------------------------------- /2021/06/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let fishes = data.split(',').map(x => +x); 8 | let nums = [0, 0, 0, 0, 0, 0, 0, 0, 0]; 9 | 10 | for(let fish of fishes) { 11 | nums[fish]++; 12 | } 13 | 14 | for(let day = 0; day < 256; day++) { 15 | let newFish = nums[0]; 16 | 17 | for(let i = 0; i < 8; i++) { 18 | nums[i] = nums[i + 1]; 19 | } 20 | 21 | nums[8] = newFish; 22 | nums[6] += newFish; 23 | } 24 | 25 | console.log(nums.reduce((a, b) => a + b)); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2021/07/answer1.txt: -------------------------------------------------------------------------------- 1 | 336721 -------------------------------------------------------------------------------- /2021/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 91638945 -------------------------------------------------------------------------------- /2021/07/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 7; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let crabs = data.split(',').map(x => +x); 8 | let min = Math.min(...crabs); 9 | let max = Math.max(...crabs); 10 | 11 | let smallest = Infinity; 12 | for(let i = min; i <= max; i++) { 13 | let total = 0; 14 | for(let crab of crabs) { 15 | total += Math.abs(crab - i); 16 | } 17 | 18 | if(total < smallest) { 19 | smallest = total; 20 | } 21 | } 22 | 23 | console.log(smallest); 24 | }).catch((err) => { 25 | console.log(err, err.stack); 26 | }); -------------------------------------------------------------------------------- /2021/07/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 7; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let crabs = data.split(',').map(x => +x); 8 | let min = Math.min(...crabs); 9 | let max = Math.max(...crabs); 10 | 11 | let smallest = Infinity; 12 | for(let i = min; i <= max; i++) { 13 | let total = 0; 14 | for(let crab of crabs) { 15 | distance = Math.abs(crab - i); 16 | total += distance * (distance + 1) / 2; 17 | } 18 | 19 | if(total < smallest) { 20 | smallest = total; 21 | } 22 | } 23 | 24 | console.log(smallest); 25 | }).catch((err) => { 26 | console.log(err, err.stack); 27 | }); -------------------------------------------------------------------------------- /2021/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 521 -------------------------------------------------------------------------------- /2021/08/answer2.txt: -------------------------------------------------------------------------------- 1 | 1016804 -------------------------------------------------------------------------------- /2021/08/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 8; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let samples = []; 9 | let outputs = []; 10 | for(let line of lines) { 11 | let parts = line.split(' | '); 12 | samples.push(parts[0].split(' ')); 13 | outputs.push(parts[1].split(' ')); 14 | } 15 | 16 | let count = 0; 17 | for(let output of outputs) { 18 | for(let item of output) { 19 | if(item.length === 2 || item.length === 3 || item.length === 4 || item.length === 7) { 20 | count++; 21 | } 22 | } 23 | } 24 | 25 | console.log(count); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2021/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 489 -------------------------------------------------------------------------------- /2021/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 1056330 -------------------------------------------------------------------------------- /2021/09/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2021; 4 | let day = 9; 5 | 6 | function get(lines, x, y) { 7 | if(!lines[x]) { 8 | return Infinity; 9 | } 10 | if(lines[x][y] === undefined) { 11 | return Infinity 12 | } 13 | return +lines[x][y]; 14 | } 15 | 16 | lib.getInput(year, day).then((data) => { 17 | let lines = data.split('\n'); 18 | let total = 0; 19 | for(let i = 0; i < lines.length; i++) { 20 | let line = lines[i]; 21 | for(let j = 0; j < line.length; j++) { 22 | let val = +line[j]; 23 | if(get(lines, i-1, j) > val && get(lines, i+1, j) > val && get(lines, i, j-1) > val && get(lines, i, j+1) > val) { 24 | total += val + 1; 25 | } 26 | } 27 | } 28 | console.log(total); 29 | }).catch((err) => { 30 | console.log(err, err.stack); 31 | }); -------------------------------------------------------------------------------- /2021/10/answer1.txt: -------------------------------------------------------------------------------- 1 | 168417 -------------------------------------------------------------------------------- /2021/10/answer2.txt: -------------------------------------------------------------------------------- 1 | 2802519786 -------------------------------------------------------------------------------- /2021/11/answer1.txt: -------------------------------------------------------------------------------- 1 | 1615 -------------------------------------------------------------------------------- /2021/11/answer2.txt: -------------------------------------------------------------------------------- 1 | 249 -------------------------------------------------------------------------------- /2021/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 3802 -------------------------------------------------------------------------------- /2021/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 99448 -------------------------------------------------------------------------------- /2021/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 618 -------------------------------------------------------------------------------- /2021/13/answer2.txt: -------------------------------------------------------------------------------- 1 | ALREKFKU -------------------------------------------------------------------------------- /2021/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 3143 -------------------------------------------------------------------------------- /2021/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 4110215602456 -------------------------------------------------------------------------------- /2021/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 613 -------------------------------------------------------------------------------- /2021/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 2899 -------------------------------------------------------------------------------- /2021/16/answer1.txt: -------------------------------------------------------------------------------- 1 | 967 -------------------------------------------------------------------------------- /2021/16/answer2.txt: -------------------------------------------------------------------------------- 1 | 12883091136209 -------------------------------------------------------------------------------- /2021/17/answer1.txt: -------------------------------------------------------------------------------- 1 | 4851 -------------------------------------------------------------------------------- /2021/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 1739 -------------------------------------------------------------------------------- /2021/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 3675 -------------------------------------------------------------------------------- /2021/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 4650 -------------------------------------------------------------------------------- /2021/19/answer1.txt: -------------------------------------------------------------------------------- 1 | 365 -------------------------------------------------------------------------------- /2021/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 11060 -------------------------------------------------------------------------------- /2021/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 4968 -------------------------------------------------------------------------------- /2021/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 16793 -------------------------------------------------------------------------------- /2021/21/answer1.txt: -------------------------------------------------------------------------------- 1 | 998088 -------------------------------------------------------------------------------- /2021/21/answer2.txt: -------------------------------------------------------------------------------- 1 | 306621346123766 -------------------------------------------------------------------------------- /2021/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 547648 -------------------------------------------------------------------------------- /2021/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 1206644425246111 -------------------------------------------------------------------------------- /2021/23/answer1.txt: -------------------------------------------------------------------------------- 1 | 18170 -------------------------------------------------------------------------------- /2021/23/answer2.txt: -------------------------------------------------------------------------------- 1 | 50208 -------------------------------------------------------------------------------- /2021/24/answer1.txt: -------------------------------------------------------------------------------- 1 | 92915979999498 -------------------------------------------------------------------------------- /2021/24/answer2.txt: -------------------------------------------------------------------------------- 1 | 21611513911181 -------------------------------------------------------------------------------- /2021/25/answer1.txt: -------------------------------------------------------------------------------- 1 | 351 -------------------------------------------------------------------------------- /2022/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 74711 -------------------------------------------------------------------------------- /2022/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 209481 -------------------------------------------------------------------------------- /2022/01/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2022; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let max = 0; 9 | let current = 0; 10 | for(let line of lines) { 11 | if(line) { 12 | current += +line; 13 | } 14 | else { 15 | max = Math.max(max, current); 16 | current = 0; 17 | } 18 | } 19 | 20 | console.log(max); 21 | }).catch((err) => { 22 | console.log(err, err.stack); 23 | }); -------------------------------------------------------------------------------- /2022/01/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2022; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let max = [0, 0, 0]; 9 | let current = 0; 10 | for(let line of lines) { 11 | if(line) { 12 | current += +line; 13 | } 14 | else { 15 | max[0] = Math.max(max[0], current); 16 | current = 0; 17 | max.sort((a, b) => a - b); 18 | } 19 | } 20 | 21 | console.log(max.reduce((a, b) => a + b)); 22 | }).catch((err) => { 23 | console.log(err, err.stack); 24 | }); -------------------------------------------------------------------------------- /2022/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 10595 -------------------------------------------------------------------------------- /2022/02/answer2.txt: -------------------------------------------------------------------------------- 1 | 9541 -------------------------------------------------------------------------------- /2022/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 7917 -------------------------------------------------------------------------------- /2022/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 2585 -------------------------------------------------------------------------------- /2022/03/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2022; 4 | let day = 3; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let total = 0; 9 | for(let line of lines) { 10 | let found = {}; 11 | for(let i = 0; i < line.length / 2; i++) { 12 | found[line[i]] = true; 13 | } 14 | 15 | for(let i = line.length / 2; i < line.length; i++) { 16 | let char = line[i]; 17 | if(found[char]) { 18 | if(/[A-Z]/.test(char)) { 19 | total += char.charCodeAt(0) - 38; 20 | } 21 | else { 22 | total += char.charCodeAt(0) - 96; 23 | } 24 | break; 25 | } 26 | } 27 | } 28 | console.log(total); 29 | }).catch((err) => { 30 | console.log(err, err.stack); 31 | }); -------------------------------------------------------------------------------- /2022/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 540 -------------------------------------------------------------------------------- /2022/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 872 -------------------------------------------------------------------------------- /2022/04/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2022; 4 | let day = 4; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let count = 0; 9 | for(let line of lines) { 10 | let elves = line.split(','); 11 | let first = elves[0].split('-'); 12 | let second = elves[1].split('-'); 13 | if((+first[0] <= +second[0] && +first[1] >= +second[1]) || +second[0] <= +first[0] && +second[1] >= +first[1]) { 14 | count++; 15 | } 16 | } 17 | console.log(count); 18 | }).catch((err) => { 19 | console.log(err, err.stack); 20 | }); -------------------------------------------------------------------------------- /2022/04/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2022; 4 | let day = 4; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let count = 0; 9 | for(let line of lines) { 10 | let elves = line.split(','); 11 | let first = elves[0].split('-'); 12 | let second = elves[1].split('-'); 13 | if((+first[0] <= +second[0] && +first[1] >= +second[0]) || +second[0] <= +first[0] && +second[1] >= +first[0]) { 14 | count++; 15 | } 16 | } 17 | console.log(count); 18 | }).catch((err) => { 19 | console.log(err, err.stack); 20 | }); -------------------------------------------------------------------------------- /2022/05/answer1.txt: -------------------------------------------------------------------------------- 1 | JRVNHHCSJ -------------------------------------------------------------------------------- /2022/05/answer2.txt: -------------------------------------------------------------------------------- 1 | GNFBSBJLH -------------------------------------------------------------------------------- /2022/06/answer1.txt: -------------------------------------------------------------------------------- 1 | 1262 -------------------------------------------------------------------------------- /2022/06/answer2.txt: -------------------------------------------------------------------------------- 1 | 3444 -------------------------------------------------------------------------------- /2022/06/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2022; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let last = data.split('').slice(0, 4); 8 | for(let i = 4; i < data.length; i++) { 9 | let found = false; 10 | for(let j = 0; j < 4; j++) { 11 | for(let k = j + 1; k < 4; k++) { 12 | if(last[j] === last[k]) { 13 | found = true; 14 | } 15 | } 16 | } 17 | if(!found) { 18 | console.log(i); 19 | break; 20 | } 21 | last.push(data[i]); 22 | last.shift(); 23 | } 24 | }).catch((err) => { 25 | console.log(err, err.stack); 26 | }); -------------------------------------------------------------------------------- /2022/06/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2022; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let last = data.split('').slice(0, 14); 8 | for(let i = 14; i < data.length; i++) { 9 | let found = false; 10 | for(let j = 0; j < 14; j++) { 11 | for(let k = j + 1; k < 14; k++) { 12 | if(last[j] === last[k]) { 13 | found = true; 14 | } 15 | } 16 | } 17 | if(!found) { 18 | console.log(i); 19 | break; 20 | } 21 | last.push(data[i]); 22 | last.shift(); 23 | } 24 | }).catch((err) => { 25 | console.log(err, err.stack); 26 | }); -------------------------------------------------------------------------------- /2022/07/answer1.txt: -------------------------------------------------------------------------------- 1 | 1743217 -------------------------------------------------------------------------------- /2022/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 8319096 -------------------------------------------------------------------------------- /2022/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 1789 -------------------------------------------------------------------------------- /2022/08/answer2.txt: -------------------------------------------------------------------------------- 1 | 314820 -------------------------------------------------------------------------------- /2022/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 6332 -------------------------------------------------------------------------------- /2022/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 2511 -------------------------------------------------------------------------------- /2022/10/answer1.txt: -------------------------------------------------------------------------------- 1 | 15360 -------------------------------------------------------------------------------- /2022/10/answer2.txt: -------------------------------------------------------------------------------- 1 | PHLHJGZA -------------------------------------------------------------------------------- /2022/10/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2022; 4 | let day = 10; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let x = 1; 9 | let strength = 0; 10 | let cycle = 0; 11 | let lineNum = 0; 12 | let addPending = null; 13 | while(cycle <= 220) { 14 | cycle++; 15 | if((cycle + 20) % 40 === 0) { 16 | strength += cycle * x; 17 | } 18 | if(addPending !== null) { 19 | x += addPending; 20 | addPending = null; 21 | lineNum++; 22 | } 23 | else if(lines[lineNum].startsWith('addx')) { 24 | addPending = +(lines[lineNum].split(' ')[1]) 25 | } 26 | else { 27 | lineNum++; 28 | } 29 | } 30 | 31 | console.log(strength); 32 | }).catch((err) => { 33 | console.log(err, err.stack); 34 | }); -------------------------------------------------------------------------------- /2022/11/answer1.txt: -------------------------------------------------------------------------------- 1 | 111210 -------------------------------------------------------------------------------- /2022/11/answer2.txt: -------------------------------------------------------------------------------- 1 | 15447387620 -------------------------------------------------------------------------------- /2022/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 423 -------------------------------------------------------------------------------- /2022/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 416 -------------------------------------------------------------------------------- /2022/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 6076 -------------------------------------------------------------------------------- /2022/13/answer2.txt: -------------------------------------------------------------------------------- 1 | 24805 -------------------------------------------------------------------------------- /2022/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 665 -------------------------------------------------------------------------------- /2022/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 25434 -------------------------------------------------------------------------------- /2022/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 5166077 -------------------------------------------------------------------------------- /2022/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 13071206703981 -------------------------------------------------------------------------------- /2022/16/answer1.txt: -------------------------------------------------------------------------------- 1 | 1659 -------------------------------------------------------------------------------- /2022/16/answer2.txt: -------------------------------------------------------------------------------- 1 | 2382 -------------------------------------------------------------------------------- /2022/17/answer1.txt: -------------------------------------------------------------------------------- 1 | 3211 -------------------------------------------------------------------------------- /2022/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 1589142857183 -------------------------------------------------------------------------------- /2022/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 3448 -------------------------------------------------------------------------------- /2022/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 2052 -------------------------------------------------------------------------------- /2022/19/answer1.txt: -------------------------------------------------------------------------------- 1 | 1081 -------------------------------------------------------------------------------- /2022/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 2415 -------------------------------------------------------------------------------- /2022/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 15297 -------------------------------------------------------------------------------- /2022/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 2897373276210 -------------------------------------------------------------------------------- /2022/21/answer1.txt: -------------------------------------------------------------------------------- 1 | 142707821472432 -------------------------------------------------------------------------------- /2022/21/answer2.txt: -------------------------------------------------------------------------------- 1 | 3587647562851 -------------------------------------------------------------------------------- /2022/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 189140 -------------------------------------------------------------------------------- /2022/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 115063 -------------------------------------------------------------------------------- /2022/22/sample.txt: -------------------------------------------------------------------------------- 1 | ...# 2 | .#.. 3 | #... 4 | .... 5 | ...#.......# 6 | ........#... 7 | ..#....#.... 8 | ..........#. 9 | ...#.... 10 | .....#.. 11 | .#...... 12 | ......#. 13 | 14 | 10R5L5R10L4R5L5 -------------------------------------------------------------------------------- /2022/23/answer1.txt: -------------------------------------------------------------------------------- 1 | 4045 -------------------------------------------------------------------------------- /2022/23/answer2.txt: -------------------------------------------------------------------------------- 1 | 963 -------------------------------------------------------------------------------- /2022/24/answer1.txt: -------------------------------------------------------------------------------- 1 | 292 -------------------------------------------------------------------------------- /2022/24/answer2.txt: -------------------------------------------------------------------------------- 1 | 816 -------------------------------------------------------------------------------- /2022/25/answer1.txt: -------------------------------------------------------------------------------- 1 | 2=0=02-0----2-=02-10 -------------------------------------------------------------------------------- /2022/25/sample.txt: -------------------------------------------------------------------------------- 1 | 1=-0-2 2 | 12111 3 | 2=0= 4 | 21 5 | 2=01 6 | 111 7 | 20012 8 | 112 9 | 1=-1= 10 | 1-12 11 | 12 12 | 1= 13 | 122 -------------------------------------------------------------------------------- /2023/01/answer1.txt: -------------------------------------------------------------------------------- 1 | 54331 -------------------------------------------------------------------------------- /2023/01/answer2.txt: -------------------------------------------------------------------------------- 1 | 54518 -------------------------------------------------------------------------------- /2023/01/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let sum = 0; 9 | for(let line of lines) { 10 | let i = 0; 11 | while(isNaN(line[i])) { 12 | i++; 13 | } 14 | let first = line[i]; 15 | i = line.length - 1; 16 | while(isNaN(line[i])) { 17 | i--; 18 | } 19 | let num = first + line[i]; 20 | sum += +num; 21 | } 22 | console.log(sum); 23 | }).catch((err) => { 24 | console.log(err, err.stack); 25 | }); -------------------------------------------------------------------------------- /2023/02/answer1.txt: -------------------------------------------------------------------------------- 1 | 2632 -------------------------------------------------------------------------------- /2023/02/answer2.txt: -------------------------------------------------------------------------------- 1 | 69629 -------------------------------------------------------------------------------- /2023/02/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 2; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let max = { red: 12, green: 13, blue: 14 }; 9 | let sum = 0; 10 | for(let line of lines) { 11 | let gameSplit = line.split(': '); 12 | let gameId = +(gameSplit[0].split(' ')[1]); 13 | let pulls = gameSplit[1].split('; '); 14 | let possible = true; 15 | for(let pull of pulls) { 16 | let items = pull.split(', '); 17 | for(let item of items) { 18 | let split = item.split(' '); 19 | let num = +split[0]; 20 | let colour = split[1]; 21 | if(num > max[colour]) { 22 | possible = false; 23 | } 24 | } 25 | } 26 | if(possible) { 27 | sum += gameId; 28 | } 29 | } 30 | console.log(sum); 31 | }).catch((err) => { 32 | console.log(err, err.stack); 33 | }); -------------------------------------------------------------------------------- /2023/02/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 2; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let max = { red: 12, green: 13, blue: 14 }; 9 | let sum = 0; 10 | for(let line of lines) { 11 | let gameSplit = line.split(': '); 12 | let pulls = gameSplit[1].split('; '); 13 | let mins = { red: 0, blue: 0, green: 0 }; 14 | for(let pull of pulls) { 15 | let items = pull.split(', '); 16 | for(let item of items) { 17 | let split = item.split(' '); 18 | let num = +split[0]; 19 | let colour = split[1]; 20 | mins[colour] = Math.max(mins[colour], num); 21 | } 22 | } 23 | sum += mins.red * mins.green * mins.blue; 24 | } 25 | console.log(sum); 26 | }).catch((err) => { 27 | console.log(err, err.stack); 28 | }); -------------------------------------------------------------------------------- /2023/03/answer1.txt: -------------------------------------------------------------------------------- 1 | 520135 -------------------------------------------------------------------------------- /2023/03/answer2.txt: -------------------------------------------------------------------------------- 1 | 72514855 -------------------------------------------------------------------------------- /2023/04/answer1.txt: -------------------------------------------------------------------------------- 1 | 21558 -------------------------------------------------------------------------------- /2023/04/answer2.txt: -------------------------------------------------------------------------------- 1 | 10425665 -------------------------------------------------------------------------------- /2023/04/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 4; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let sum = 0; 9 | for(let line of lines) { 10 | let split1 = line.split(': '); 11 | let split2 = split1[1].split(' | '); 12 | let winning = split2[0].split(' '); 13 | let nums = split2[1].split(' '); 14 | let score = 0; 15 | for(let num of nums) { 16 | if(num && winning.indexOf(num) !== -1) { 17 | if(score === 0) { 18 | score =1; 19 | } 20 | else { 21 | score *= 2; 22 | } 23 | } 24 | } 25 | sum += score; 26 | } 27 | console.log(sum); 28 | }).catch((err) => { 29 | console.log(err, err.stack); 30 | }); -------------------------------------------------------------------------------- /2023/05/answer1.txt: -------------------------------------------------------------------------------- 1 | 825516882 -------------------------------------------------------------------------------- /2023/05/answer2.txt: -------------------------------------------------------------------------------- 1 | 136096660 -------------------------------------------------------------------------------- /2023/05/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 5; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let seeds = lines[0].split(' ').map(x => +x); 9 | seeds.shift(); 10 | let current = seeds; 11 | let i = 1; 12 | while(i < lines.length) { 13 | let next = []; 14 | i += 2; 15 | while(lines[i]) { 16 | let parts = lines[i].split(' '); 17 | let destStart = +parts[0]; 18 | let sourceStart = +parts[1]; 19 | let range = +parts[2]; 20 | 21 | for(let curr of current) { 22 | if(curr >= sourceStart && curr <= sourceStart + range) { 23 | next.push((curr - sourceStart) + destStart ); 24 | } 25 | } 26 | i++; 27 | } 28 | current = next; 29 | } 30 | console.log(Math.min(...current)); 31 | }).catch((err) => { 32 | console.log(err, err.stack); 33 | }); -------------------------------------------------------------------------------- /2023/06/answer1.txt: -------------------------------------------------------------------------------- 1 | 211904 -------------------------------------------------------------------------------- /2023/06/answer2.txt: -------------------------------------------------------------------------------- 1 | 43364472 -------------------------------------------------------------------------------- /2023/06/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let times = lines[0].split(/\s+/).map(x => +x); 9 | times.shift(); 10 | let distances = lines[1].split(/\s+/).map(x => +x); 11 | distances.shift(); 12 | 13 | let total = 1; 14 | 15 | for(let i = 0; i < times.length; i++) { 16 | let time = times[i]; 17 | let distance = distances[i]; 18 | let count = 0; 19 | for(let hold = 1; hold < time; hold++) { 20 | let raceDistance = (time - hold) * hold; 21 | if(raceDistance > distance) { 22 | count++; 23 | } 24 | } 25 | total *= count; 26 | } 27 | 28 | console.log(total); 29 | }).catch((err) => { 30 | console.log(err, err.stack); 31 | }); -------------------------------------------------------------------------------- /2023/06/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 6; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let time = +(lines[0].replace(/[^0-9]/g, '')); 9 | let distance = +(lines[1].replace(/[^0-9]/g, '')); 10 | let count = 0; 11 | for(let hold = 1; hold < time; hold++) { 12 | let raceDistance = (time - hold) * hold; 13 | if(raceDistance > distance) { 14 | count++; 15 | } 16 | } 17 | console.log(count); 18 | }).catch((err) => { 19 | console.log(err, err.stack); 20 | }); -------------------------------------------------------------------------------- /2023/07/answer1.txt: -------------------------------------------------------------------------------- 1 | 246163188 -------------------------------------------------------------------------------- /2023/07/answer2.txt: -------------------------------------------------------------------------------- 1 | 245794069 -------------------------------------------------------------------------------- /2023/08/answer1.txt: -------------------------------------------------------------------------------- 1 | 19783 -------------------------------------------------------------------------------- /2023/08/answer2.txt: -------------------------------------------------------------------------------- 1 | 9177460370549 -------------------------------------------------------------------------------- /2023/08/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 8; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let steps = lines[0]; 9 | let nodes = {}; 10 | lines.shift(); 11 | lines.shift(); 12 | for(let line of lines) { 13 | let parsed = /(...) = \((...), (...)\)/.exec(line); 14 | nodes[parsed[1]] = {L: parsed[2], R: parsed[3]} 15 | } 16 | 17 | let current = 'AAA'; 18 | let count = 0; 19 | let index = 0; 20 | while(current !== 'ZZZ') { 21 | let step = steps[index]; 22 | current = nodes[current][step]; 23 | count++; 24 | index = (index + 1) % steps.length; 25 | } 26 | console.log(count); 27 | }).catch((err) => { 28 | console.log(err, err.stack); 29 | }); -------------------------------------------------------------------------------- /2023/09/answer1.txt: -------------------------------------------------------------------------------- 1 | 1992273652 -------------------------------------------------------------------------------- /2023/09/answer2.txt: -------------------------------------------------------------------------------- 1 | 1012 -------------------------------------------------------------------------------- /2023/09/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 9; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let sum = 0; 9 | for(let line of lines) { 10 | let values = line.split(' ').map(x => +x); 11 | let sequences = [values]; 12 | while(values.some(x => x !== 0)) { 13 | let newSequence = []; 14 | for(let i = 1; i < values.length; i++) { 15 | newSequence.push(values[i] - values[i - 1]); 16 | } 17 | sequences.push(newSequence); 18 | values = newSequence; 19 | } 20 | 21 | for(let i = sequences.length - 1; i > 0; i--) { 22 | let current = sequences[i]; 23 | let prev = sequences[i - 1]; 24 | prev.unshift(prev[0] - current[0]); 25 | } 26 | 27 | sum += sequences[0][0]; 28 | } 29 | console.log(sum); 30 | }).catch((err) => { 31 | console.log(err, err.stack); 32 | }); -------------------------------------------------------------------------------- /2023/10/answer1.txt: -------------------------------------------------------------------------------- 1 | 6690 -------------------------------------------------------------------------------- /2023/10/answer2.txt: -------------------------------------------------------------------------------- 1 | 525 -------------------------------------------------------------------------------- /2023/11/answer1.txt: -------------------------------------------------------------------------------- 1 | 9556896 -------------------------------------------------------------------------------- /2023/11/answer2.txt: -------------------------------------------------------------------------------- 1 | 685038186836 -------------------------------------------------------------------------------- /2023/12/answer1.txt: -------------------------------------------------------------------------------- 1 | 7460 -------------------------------------------------------------------------------- /2023/12/answer2.txt: -------------------------------------------------------------------------------- 1 | 6720660274964 -------------------------------------------------------------------------------- /2023/13/answer1.txt: -------------------------------------------------------------------------------- 1 | 30705 -------------------------------------------------------------------------------- /2023/13/answer2.txt: -------------------------------------------------------------------------------- 1 | 44615 -------------------------------------------------------------------------------- /2023/14/answer1.txt: -------------------------------------------------------------------------------- 1 | 107142 -------------------------------------------------------------------------------- /2023/14/answer2.txt: -------------------------------------------------------------------------------- 1 | 104815 -------------------------------------------------------------------------------- /2023/15/answer1.txt: -------------------------------------------------------------------------------- 1 | 511215 -------------------------------------------------------------------------------- /2023/15/answer2.txt: -------------------------------------------------------------------------------- 1 | 236057 -------------------------------------------------------------------------------- /2023/15/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 15; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let steps = data.split(','); 8 | 9 | let sum = 0; 10 | for(let step of steps) { 11 | let value = 0; 12 | for(let char of step) { 13 | value += char.charCodeAt(0); 14 | value *= 17; 15 | value %= 256; 16 | } 17 | sum += value; 18 | } 19 | console.log(sum); 20 | }).catch((err) => { 21 | console.log(err, err.stack); 22 | }); -------------------------------------------------------------------------------- /2023/16/answer1.txt: -------------------------------------------------------------------------------- 1 | 8125 -------------------------------------------------------------------------------- /2023/16/answer2.txt: -------------------------------------------------------------------------------- 1 | 8489 -------------------------------------------------------------------------------- /2023/17/answer1.txt: -------------------------------------------------------------------------------- 1 | 916 -------------------------------------------------------------------------------- /2023/17/answer2.txt: -------------------------------------------------------------------------------- 1 | 1067 -------------------------------------------------------------------------------- /2023/18/answer1.txt: -------------------------------------------------------------------------------- 1 | 42317 -------------------------------------------------------------------------------- /2023/18/answer2.txt: -------------------------------------------------------------------------------- 1 | 83605563360288 -------------------------------------------------------------------------------- /2023/19/answer1.txt: -------------------------------------------------------------------------------- 1 | 319062 -------------------------------------------------------------------------------- /2023/19/answer2.txt: -------------------------------------------------------------------------------- 1 | 118638369682135 -------------------------------------------------------------------------------- /2023/20/answer1.txt: -------------------------------------------------------------------------------- 1 | 747304011 -------------------------------------------------------------------------------- /2023/20/answer2.txt: -------------------------------------------------------------------------------- 1 | 220366255099387 -------------------------------------------------------------------------------- /2023/21/answer1.txt: -------------------------------------------------------------------------------- 1 | 3598 -------------------------------------------------------------------------------- /2023/21/answer2.txt: -------------------------------------------------------------------------------- 1 | 601441063166538 -------------------------------------------------------------------------------- /2023/22/answer1.txt: -------------------------------------------------------------------------------- 1 | 418 -------------------------------------------------------------------------------- /2023/22/answer2.txt: -------------------------------------------------------------------------------- 1 | 70702 -------------------------------------------------------------------------------- /2023/25/part1_unfinished.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2023; 4 | let day = 25; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let graph = {}; 9 | for(let line of lines) { 10 | let [node, targets] = line.split(': '); 11 | targets = targets.split(' '); 12 | graph[node] = [...(graph[node] || []), ...targets]; 13 | for(let target of targets) { 14 | graph[target] ||= []; 15 | graph[target].push[node]; 16 | } 17 | } 18 | }).catch((err) => { 19 | console.log(err, err.stack); 20 | }); -------------------------------------------------------------------------------- /2024/01/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2024; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let list1 = []; 9 | let list2 = []; 10 | for(let line of lines) { 11 | let parts = line.split(/\s+/).map(x => +x); 12 | list1.push(parts[0]); 13 | list2.push(parts[1]); 14 | } 15 | 16 | list1 = list1.sort((a, b) => a - b); 17 | list2 = list2.sort((a, b) => a - b); 18 | 19 | 20 | let sum = 0; 21 | for(let i = 0; i < list1.length; i++) 22 | { 23 | sum += Math.abs(list1[i] - list2[i]); 24 | } 25 | 26 | console.log(sum); 27 | }).catch((err) => { 28 | console.log(err, err.stack); 29 | }); -------------------------------------------------------------------------------- /2024/01/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2024; 4 | let day = 1; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let list1 = []; 9 | let list2 = []; 10 | for(let line of lines) { 11 | let parts = line.split(/\s+/).map(x => +x); 12 | list1.push(parts[0]); 13 | list2.push(parts[1]); 14 | } 15 | 16 | let sum = 0; 17 | 18 | for(let item of list1) 19 | { 20 | let count2 = list2.filter(i => i === item).length; 21 | sum += item * count2; 22 | } 23 | 24 | console.log(sum); 25 | }).catch((err) => { 26 | console.log(err, err.stack); 27 | }); -------------------------------------------------------------------------------- /2024/03/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2024; 4 | let day = 3; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let regex = /mul\((\d+),(\d+)\)/g; 9 | let sum = 0; 10 | for(let line of lines) { 11 | while(result = regex.exec(line)) 12 | { 13 | let product = (+result[1]) * (+result[2]); 14 | sum += product; 15 | } 16 | } 17 | console.log(sum); 18 | }).catch((err) => { 19 | console.log(err, err.stack); 20 | }); -------------------------------------------------------------------------------- /2024/03/part2.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2024; 4 | let day = 3; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | let regex = /(?:(do)\(\))|(?:(don\'t)\(\))|(?:(mul)\((\d+),(\d+)\))/g; 9 | let sum = 0; 10 | let enabled = true; 11 | for(let line of lines) { 12 | while(result = regex.exec(line)) 13 | { 14 | if(result[1]) 15 | { 16 | enabled =true; 17 | } 18 | else if(result[2]) 19 | { 20 | enabled = false; 21 | } 22 | else if(enabled) 23 | { 24 | let product = (+result[4]) * (+result[5]); 25 | sum += product; 26 | } 27 | } 28 | } 29 | console.log(sum); 30 | }).catch((err) => { 31 | console.log(err, err.stack); 32 | }); -------------------------------------------------------------------------------- /2024/11/part1.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = 2024; 4 | let day = 11; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let stones = data.split(' '); 8 | 9 | for(let i = 0; i < 25; i++) 10 | { 11 | let newStones = []; 12 | for(let stone of stones) 13 | { 14 | if(stone === '0') 15 | { 16 | newStones.push('1'); 17 | } 18 | else if(stone.length % 2 === 0) 19 | { 20 | let parts = [stone.substring(0, stone.length / 2), stone.substring(stone.length / 2)]; 21 | for(let part of parts) 22 | { 23 | newStones.push((+part).toString()); 24 | } 25 | } 26 | else 27 | { 28 | newStones.push((+stone * 2024).toString()) 29 | } 30 | } 31 | stones = newStones; 32 | } 33 | 34 | console.log(stones.length); 35 | }).catch((err) => { 36 | console.log(err, err.stack); 37 | }); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Advent of Code soltuions 2 | 3 | Solutions (node.js) for [Advent of Code](https://adventofcode.com/) 4 | 5 | ## Stars 6 | 7 | * 2024 ![2024 Stars](https://img.shields.io/badge/stars%20⭐-24-yellow) 8 | * 2023 ![2023 Stars](https://img.shields.io/badge/stars%20⭐-46-yellow) 9 | * 2022 ![2022 Stars](https://img.shields.io/badge/stars%20⭐-50-yellow) 10 | * 2021 ![2021 Stars](https://img.shields.io/badge/stars%20⭐-50-yellow) 11 | * 2020 ![2020 Stars](https://img.shields.io/badge/stars%20⭐-50-yellow) 12 | * 2019 ![2019 Stars](https://img.shields.io/badge/stars%20⭐-50-yellow) 13 | * 2018 ![2018 Stars](https://img.shields.io/badge/stars%20⭐-50-yellow) 14 | * 2017 ![2017 Stars](https://img.shields.io/badge/stars%20⭐-50-yellow) 15 | * 2016 ![2016 Stars](https://img.shields.io/badge/stars%20⭐-50-yellow) 16 | * 2015 ![2015 Stars](https://img.shields.io/badge/stars%20⭐-50-yellow) 17 | 18 | Badges courtesy of [J0B10/aoc-badges-action](https://github.com/J0B10/aoc-badges-action) -------------------------------------------------------------------------------- /docs/2020/05/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Plane boarding 6 | 7 | 8 | 9 | 10 |
11 | 12 |
13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /lib/.gitignore: -------------------------------------------------------------------------------- 1 | auth_cookie.txt 2 | creator_email.txt -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | const { pairLcm } = require('./lcm'); 2 | 3 | module.exports = { 4 | getInput: require('./getInput'), 5 | permutations: require('./permutations'), 6 | knotHash: require('./knotHash'), 7 | linkedList: require('./linkedList'), 8 | lcm: require('./lcm').lcm, 9 | pairLcm: require('./lcm').pairLcm, 10 | gcd: require('./lcm').gcd, 11 | } -------------------------------------------------------------------------------- /lib/lcm.js: -------------------------------------------------------------------------------- 1 | // https://stackoverflow.com/a/31302607 2 | 3 | function gcd(a, b) { 4 | return !b ? a : gcd(b, a % b); 5 | } 6 | 7 | function pairLcm(a, b) { 8 | return (a * b) / gcd(a, b); 9 | } 10 | 11 | function lcm(...nums) { 12 | let multiple = nums[0]; 13 | nums.forEach(n => multiple = pairLcm(multiple, n)); 14 | return multiple; 15 | } 16 | 17 | module.exports = { gcd, lcm, pairLcm } -------------------------------------------------------------------------------- /lib/permutations.js: -------------------------------------------------------------------------------- 1 | //https://stackoverflow.com/a/43260158 2 | function permutations(a) { 3 | let res = []; 4 | for(let i=0; i { 11 | let outputPath = path.resolve(__dirname, 'auth_cookie.txt'); 12 | fs.writeFileSync(outputPath, cookie, (err) => { 13 | console.log('Could not write cookie, error ' + err); 14 | }); 15 | rl.close(); 16 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aoc-sguest", 3 | "version": "1.0.0", 4 | "description": "", 5 | "private": true, 6 | "main": "init.js", 7 | "scripts": { 8 | "init": "node init", 9 | "test": "node test/main.js", 10 | "set-auth": "node lib/setAuth.js" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/sguest/advent-of-code.git" 15 | }, 16 | "author": "Spencer Guest", 17 | "license": "ISC", 18 | "bugs": { 19 | "url": "https://github.com/sguest/advent-of-code/issues" 20 | }, 21 | "homepage": "https://github.com/sguest/advent-of-code#readme", 22 | "dependencies": { 23 | "@datastructures-js/priority-queue": "^6.1.1", 24 | "bigint-crypto-utils": "^2.4.2", 25 | "chalk": "^2.4.1", 26 | "js-combinatorics": "^0.5.4", 27 | "md5": "^2.2.1" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /skeleton.js: -------------------------------------------------------------------------------- 1 | let lib = require('../../lib'); 2 | 3 | let year = {{year}}; 4 | let day = {{day}}; 5 | 6 | lib.getInput(year, day).then((data) => { 7 | let lines = data.split('\n'); 8 | for(let line of lines) { 9 | 10 | } 11 | }).catch((err) => { 12 | console.log(err, err.stack); 13 | }); --------------------------------------------------------------------------------