- 2022 - WIP
- 2021 - 50 stars
- 2020 - 50 stars
- 2019 - 50 stars
- 2018 - 50 stars
- 2017 - 50 stars
- 2016 - 50 stars
- 2015 - 50 stars
Day | Comment | Python | Go |
---|---|---|---|
Day 01 | Summing lists, max N | Python | Go |
Day 02 | Rock Paper Scissors | Python | |
Day 03 | Overlapping strings | Python | |
Day 04 | Overlapping ranges | Python | |
Day 05 | Stack Ops, Parsing | Python | |
Day 06 | Sliding Window | Python | |
Day 07 | Filesystem Size Calc | Python | |
Day 08 | Line of Sight Trees | Python | |
Day 09 | Rope, or Snake Game | Python | |
Day 10 | ASM and CRT Scanning | Python | |
Day 11 | Dealing w/ Large Numbers | Python | |
Day 12 | Maze with Height | Python | |
Day 13 | Sorting Nested Lists | Python | |
Day 14 | Flowing Sand | Python | |
Day 15 | Sensors and Beacons | Python | |
Day 16 | Opening Pipes Maze | Python | |
Day 17 | Tetris | Python | |
Day 18 | 3D Voxels Surface | Python | |
Day 19 | Optimize Build Order | Python |
- 16: Opening Pipes Maze
- 17: Tetris
- 19: Optimize Build Order
Day | Comment | Python | Elixir |
---|---|---|---|
Day 01 | Sliding range windows | Python | Elixir |
Day 02 | Position tracking | Python | Elixir |
Day 03 | Binary counting and filtering | Python | Elixir |
Day 04 | Bingo cards | Python | |
Day 05 | Line intersections | Python | |
Day 06 | Exponential fish growth | Python |
Day | Comment | Python | Elixir |
---|---|---|---|
Day 01 | 3SUM | Python | Elixir |
Day 02 | Password Rule Check | Python | Elixir |
Day 03 | Slope, Grid, Mod | Python | Elixir |
Day 04 | Parsing, Rule Checks | Python | Elixir |
Day 05 | Binary Conversion | Python | Elixir |
Day 06 | Grouping and Counting | Python | Elixir |
Day 07 | Recursive Bags | Python | Elixir |
Day 08 | Simple Computer | Python | Elixir |
Day 09 | Summing Ranges | Python | |
Day 10 | Dynamic Programming | Python | |
Day 11 | Cellular Automata | Python | |
Day 12 | Logo with 2 actors | Python | |
Day 13 | Rings and Modular Arithmetic | Python | |
Day 14 | Unstable Bit Masks | Python | |
Day 15 | Van Eck sequence | Python | |
Day 16 | Deduce correct fields | Python | |
Day 17 | 4d Game of Life | Python | |
Day 18 | Parsing Math Equations | Python | |
Day 19 | Grammar Rules | Python | |
Day 20 | Jigsaw Puzzle | Python | |
Day 21 | Ingredient Deduction | Python | |
Day 22 | Recursive Card Game | Python | |
Day 23 | Large Circular Linked List | Python | |
Day 24 | Hexagon Game of Life | Python | |
Day 25 | Diffie-Hellman | Python |
- 19 - Grammar Rules
- 20 - Jigsaw Puzzle
- 23 - Large Circular Linked List
- 20 - Jigsaw Puzzle
--------Part 1-------- --------Part 2--------
Day Time Rank Score Time Rank Score
25 00:12:13 538 0 00:12:18 430 0
24 00:16:03 725 0 00:33:29 744 0
23 00:31:06 1084 0 00:42:20 123 0
22 00:09:53 1063 0 00:47:12 1173 0
21 00:14:55 235 0 00:26:05 438 0
20 00:37:15 769 0 16:56:12 5223 0
19 00:52:56 1522 0 02:12:04 1839 0
18 19:59:59 18016 0 20:05:30 16137 0
17 00:26:21 952 0 00:32:27 906 0
16 00:24:11 2685 0 00:42:49 901 0
15 00:13:17 949 0 00:22:14 1076 0
14 00:48:41 4432 0 01:15:23 3140 0
13 00:12:15 2473 0 00:33:39 603 0
12 00:08:52 584 0 00:18:36 568 0
11 00:23:20 1508 0 01:03:53 3103 0
10 00:06:26 721 0 00:26:32 1167 0
9 00:12:14 2907 0 00:20:35 2376 0
8 00:08:01 1502 0 00:15:18 926 0
7 00:23:36 1591 0 00:44:23 2092 0
6 00:05:37 1403 0 00:12:05 1681 0
5 00:09:30 1101 0 00:11:45 748 0
4 00:12:24 2122 0 00:29:39 1234 0
3 00:15:47 3901 0 00:17:54 2655 0
2 00:12:22 2847 0 00:16:17 2313 0
1 00:09:02 1554 0 00:15:58 2241 0
This year was a little bit easier than the previous years. I believe the creator was trying to give us a break, but, I enjoy the difficult problems. Bring on the challenge in 2021.
However, I'm still thankful for the event, it still continues to be a favorite part of the holiday season for me.
Day | Intcode | Comment | Python | Elixir | Go | Others |
---|---|---|---|---|---|---|
Day 01 | Math and iteration | Python | Elixir (test) | Go (test) | See Below | |
Day 02 | ✅ | Simple VM | Python | Elixir | Go | React Ruby |
Day 03 | Wire intersection | Python | Elixir | Go | Ruby | |
Day 04 | Password rules | Python (test) | Elixir (test) | Go (test) | ||
Day 05 | ✅ | VM Parameter Mode, I/O, Flow | Python (test) | Elixir (test) | Go (test) | React |
Day 06 | Orbital Tree | Python | ||||
Day 07 | ✅ | Connecting 5 VMs | Python (test) | Elixir (test) | Go (test) | |
Day 08 | Decoding layered image format | Python | ||||
Day 09 | ✅ | VM Relative Mode | Python (test) | Elixir (test) | Go (test) | |
Day 10 | Line-of-sight asteroids | Python (test) | ||||
Day 11 | ✅ | Painting Robot on VM | Python (test) | Elixir (test) | Go (test) | |
Day 12 | Multi-dimensional Cycle detection | Python (test) | ||||
Day 13 | ✅ | Breakout game on VM | Python (test) | Elixir (test) | Go (test) | |
Day 14 | Resource manufacturing / dependency | Python (test) | ||||
Day 15 | ✅ | Mapping via limited sight droid on VM | Python (test) | |||
Day 16 | Discrete FFT | Python | ||||
Day 17 | ✅ | Mapping and compression algo | Python (test) | |||
Day 18 | Seemingly O(n!) maze with doors and keys | Python | ||||
Day 19 | ✅ | Mapping Tractor Beam | Python (test) | |||
Day 20 | Recursive maze with portals | Python (test) | ||||
Day 21 | ✅ | SpringScript assembly w/ registers | Python (test) | |||
Day 22 | Number Theory | Python (test) | ||||
Day 23 | ✅ | Networking 50 VMs | Python (test) | Elixir (test) | ||
Day 24 | Recursive/3d game of life | Python (test) | ||||
Day 25 | ✅ | Text Adventure on VM | Python |
- 18 - Seemingly O(n!) maze with doors and keys
- 22 - Number Theory (Shuffling a trillion card deck a trillion times)
- 16 - Discrete FFT over modulo
- 14 - Resource Chains
- 25 - Text Adventure on VM
- 23 - Networking 50 VMs
- 18 - Seemingly O(n!) maze with doors and keys
- IntCode in general
- React (Visualization only)
- Haskell Main Lib (test)
- Crystal Main Lib (test)
- Raku
- Ruby (Tests Embedded)
You have 31 points.
-------Part 1-------- -------Part 2--------
Day Time Rank Score Time Rank Score
25 01:40:11 560 0 01:40:20 422 0
24 00:18:26 298 0 01:02:55 257 0
23 01:02:09 671 0 01:48:33 734 0
22 00:27:41 437 0 15:47:20 1190 0
21 00:21:02 194 0 00:30:40 70 31
20 00:46:06 282 0 01:19:24 244 0
19 00:08:46 448 0 01:00:23 465 0
18 13:36:33 1268 0 14:08:27 905 0
17 00:11:49 276 0 01:31:57 496 0
16 00:26:09 627 0 11:52:37 2207 0
15 01:26:14 627 0 01:38:52 522 0
14 02:40:55 1201 0 03:10:35 1029 0
13 00:05:56 414 0 00:33:44 380 0
12 00:14:20 221 0 01:02:39 449 0
11 00:16:44 266 0 00:21:30 221 0
10 01:07:41 1359 0 01:50:30 814 0
9 00:46:35 962 0 00:47:09 917 0
8 00:23:33 1660 0 00:31:37 1090 0
7 00:16:31 415 0 00:45:54 288 0
6 00:11:41 461 0 00:18:11 319 0
5 00:24:13 369 0 01:07:37 1261 0
4 00:07:25 856 0 00:32:10 2060 0
3 00:36:22 1230 0 00:44:44 954 0
2 00:14:30 944 0 00:19:19 582 0
1 00:15:43 1660 0 00:15:53 1041 0
This was my second advent of code; I enjoyed it greatly and plan to continue with the event in the future. Some problems were difficult (18 and 22), but completing them means you learned something.
I loved the focus on IntCode: On days 2, 7, 5, and 9 we built a working Virtual Machine that ran problems in IntCode. Every other day after that, our challenge involved interacting with an IntCode program in one way or another. This creative approach leant to problems and inputs that we would not be able to see with basic text files (For example, exploring a maze by issuing commands to a robot.)
My primary language in 2018 was Ruby, in 2019 it was Python. I've been learning Python this year, and completing all 25 programs in it was a way for me to feel that I have a general grasp on the language. I think that it's a great language for these types of problems, with a rich set of data structures baked in. (Disappointly, the heap/priority queue does not allow for reassignment of priority for items already in the queue.) I did miss Ruby's allowances for functional-like programming, though. Since Python is the #2 language in the world currently, I feel like I'm speaking the same language as the rest of the world.
I also used Elixir and Go. Elixir continues to be the functional language that I know the best and I'm most productive with. However, with these sorts of problems, the functional approach is not always the easiest, in my opinion. Functional works well as another tool in my toolbox, and not "the best and only way" to program.
Go blew me away with its speed (regularly 40x faster than python), and it's
nowhere near as difficult to use as C, C++ or Rust. It's a fantastic "get
stuff done" language, with a distribution and deployment story much nicer than
Python's, and I'll be looking forward to use it more in the future. Of course,
I miss some constructs like map
, filter
, etc while using it.
Day | Comment | Ruby | Elixir | Others |
---|---|---|---|---|
Day 01 | Sum numbers, detect repeat | (Part 1) (Part 2) | ||
Day 02 | String comparison | Elixir | JavaScript | |
Day 03 | Overlapping grid squares | Ruby | Elixir | |
Day 04 | Time ranges | Elixir | ||
Day 05 | String "reaction", O() matters | Ruby | Elixir (test) | |
Day 06 | Grid, voronoi, manhattan | Ruby | Elixir | |
Day 07 | Task dependency and simulation | Ruby | Elixir | |
Day 08 | Recursive Parsing | Ruby | ||
Day 09 | Huge linked list | Ruby | ||
Day 10 | Collapsing stars form a message | Ruby | ||
Day 11 | Summed area table | Ruby | ||
Day 12 | Cellular Automata | Ruby | ||
Day 13 | Minecart grid collisions | Ruby | ||
Day 14 | Large array, modulo | Ruby | ||
Day 15 | Goblin vs Elves battle | Ruby | ||
Day 16 | VM, Reverse engineer opcodes | Ruby | ||
Day 17 | Flowing Water | Ruby | ||
Day 18 | Cellular automata, cycle detection | Ruby | ||
Day 19 | VM Disassembly | Ruby | ||
Day 20 | Regexp maze | Ruby | ||
Day 21 | VM Reverse engineering/hacking | Ruby | ||
Day 22 | Maze with changing tools | Ruby | ||
Day 23 | Nanobots, overlapping octohedrons | Ruby | ||
Day 24 | Virus Battle | Ruby | ||
Day 25 | Constellation groups | Ruby |
- 15: Goblins vs Elves
- 17: Flowing water
- 19: Disassembly
- 21: VM Reverse Engineering
- 23: Nanobots: octohedron vision range
- 24: Virus battle
- 15: Goblins vs Elves
- 17: Flowing water
- 24: Virus Battle
--------Part 1-------- --------Part 2--------
Day Time Rank Score Time Rank Score
25 00:37:43 459 0 00:38:20 337 0
24 01:58:24 326 0 02:15:09 281 0
23 10:19:13 2476 0 17:05:58 1131 0
22 00:50:38 561 0 12:42:24 1176 0
21 20:01:15 2302 0 20:37:18 2022 0
20 21:05:02 2080 0 21:05:59 1941 0
19 19:04:42 3334 0 21:56:49 2589 0
18 20:57:51 4123 0 22:07:21 3783 0
17 22:21:38 2259 0 22:23:48 2234 0
16 10:35:35 2642 0 11:30:16 2414 0
15 20:17:14 1888 0 20:41:13 1720 0
14 22:05:04 5787 0 22:44:50 5256 0
13 21:58:28 5329 0 22:32:23 4756 0
12 00:32:34 551 0 00:43:27 320 0
11 10:16:12 6233 0 10:29:15 5116 0
10 00:35:45 612 0 00:37:19 606 0
9 00:35:05 574 0 01:19:32 684 0
8 00:20:03 625 0 00:26:24 471 0
7 00:16:35 320 0 00:40:45 242 0
6 00:41:51 591 0 00:49:18 371 0
5 00:20:58 1184 0 00:32:13 1010 0
4 22:33:52 13220 0 22:48:37 12654 0
3 00:22:38 1080 0 00:31:53 1031 0
2 00:10:19 839 0 00:16:19 512 0
1 16:56:46 21119 0 17:59:18 17426 0
(Placeholder)
Day | Comment | Python | Elixir | Go | Others |
---|---|---|---|---|---|
Day 01 | String rotation, comparing | Python (test) | Elixir (test) | Go (test) | See below |
Day 02 | Basic Math | Go (test) | |||
Day 03 | 2d grid spiral | Python (test) | |||
Day 04 | Password Checking | Elixir | |||
Day 05 | VM-Like Jumps | Python | Elixir | Go (test) | Ruby |
Day 06 | ? | Go (test) | |||
Day 07 | Topological/Recursive Trees | Go | |||
Day 08 | Assembly and Registers | Go | |||
Day 09 | Recursive Character Parsing | Go (test) | |||
Day 10 | Hash Function | Python (test) | |||
Day 11 | Hex Grid | Elixir (test) | |||
Day 12 | Connected components | Go (test) | |||
Day 13 | Simulation / Modulo | Elixir (test) | |||
Day 14 | Hash, Grid, Connected Regions | Python (test) | |||
Day 15 | PRNG Generators, Bitwise Math | Elixir (test) | |||
Day 16 | Composing permutations | Go | |||
Day 17 | Ring, Modulo | Python | |||
Day 18 | 2 VMs Communicating | Elixir | |||
Day 19 | Navigating a simple maze | Python | |||
Day 20 | Stars moving with acceleration | Python | |||
Day 21 | Grid split, combine, rotation, flip | Python | |||
Day 22 | Cellular automata, direction | Python | |||
Day 23 | Disassembly, optimization | Elixir | |||
Day 24 | Recursion | Python | |||
Day 25 | Turing Machine | Python |
- 23: Disassembly
- 21: Grid split, combine, rotate, flip
- 18: 2 VMs Communicating
- 21: Grid split, combine, rotate, flip
--------Part 1-------- --------Part 2--------
Day Time Rank Score Time Rank Score
25 >24h 5805 0 >24h 4850 0
24 >24h 5517 0 >24h 5443 0
23 >24h 6296 0 >24h 5401 0
22 >24h 6253 0 >24h 6113 0
21 >24h 5909 0 >24h 5823 0
20 >24h 7667 0 >24h 7108 0
19 >24h 8121 0 >24h 8008 0
18 >24h 9005 0 >24h 7442 0
17 >24h 9542 0 >24h 8977 0
16 >24h 10226 0 >24h 9319 0
15 >24h 10426 0 >24h 10144 0
14 >24h 9792 0 >24h 9064 0
13 >24h 11755 0 >24h 10739 0
12 >24h 12663 0 >24h 12119 0
11 >24h 12945 0 >24h 12445 0
10 >24h 14074 0 >24h 12637 0
9 >24h 15631 0 >24h 15180 0
8 >24h 17907 0 >24h 17348 0
7 >24h 20687 0 >24h 15836 0
6 >24h 23000 0 >24h 21891 0
5 >24h 26443 0 >24h 24917 0
4 >24h 29919 0 >24h 26769 0
3 >24h 31602 0 >24h 23129 0
2 >24h 45282 0 >24h 38284 0
1 >24h 55024 0 >24h 45454 0
(Placeholder)
Missing Reflections: 4, 5, 6
Day | Comment | Python | Elixir |
---|---|---|---|
Day 01 | Turning, Stepping | Python | |
Day 02 | Keypad Navigation | Elixir | |
Day 03 | Column Processing | Elixir | |
Day 04 | Shift Chipher | Elixir | |
Day 05 | MD5 Cracking | Elixir | |
Day 06 | Repetition Code | Elixir | |
Day 07 | Adv string search | Elixir | |
Day 08 | Grid manipulation | Python | |
Day 09 | String Expansion | Elixir | |
Day 10 | Coordinating Agents | Elixir | |
Day 11 | Missionaries and cannibals | Elixir | |
Day 12 | Assembunny VM | Elixir | |
Day 13 | BFS through algo maze | Elixir | |
Day 14 | MD5 / One-time pad | Elixir | |
Day 15 | Modulo / Chinese Remainder | Elixir | |
Day 16 | Dragon Curve | Elixir | |
Day 17 | MD5 Maze, Longest Path | Elixir | |
Day 18 | 1d cellular automata | Elixir | |
Day 19 | Josephus Problem | Elixir | |
Day 20 | Overlapping IP ranges | Elixir | |
Day 21 | String manipulation | Elixir | |
Day 22 | Swap Position Maze | Elixir | |
Day 23 | VM Disassembly / Optimize | Elixir | |
Day 24 | Collecting items in maze | Elixir | |
Day 25 | VM Input/Output searching | Elixir |
- Day 11: Missionaries and Cannibals
- Day 19: Josephus Problem
- Day 22: Swap Position Maze
- Day 24: Collecting items in maze
--------Part 1-------- --------Part 2--------
Day Time Rank Score Time Rank Score
25 >24h 2431 0 >24h 2043 0
24 >24h 2397 0 >24h 2378 0
23 >24h 2861 0 >24h 2683 0
22 >24h 3379 0 >24h 2466 0
21 >24h 3529 0 >24h 3290 0
20 >24h 3938 0 >24h 3739 0
19 >24h 4144 0 >24h 3382 0
18 >24h 4023 0 >24h 3985 0
17 >24h 3676 0 >24h 3575 0
16 >24h 4391 0 >24h 4249 0
15 >24h 4294 0 >24h 4258 0
14 >24h 4443 0 >24h 4232 0
13 >24h 4506 0 >24h 4268 0
12 >24h 5377 0 >24h 5296 0
11 >24h 3703 0 >24h 3440 0
10 >24h 6168 0 >24h 6038 0
9 >24h 7930 0 >24h 6586 0
8 >24h 8633 0 >24h 8449 0
7 >24h 10048 0 >24h 8880 0
6 >24h 11636 0 >24h 11224 0
5 >24h 11479 0 >24h 10868 0
4 >24h 12360 0 >24h 11595 0
3 >24h 15685 0 >24h 13775 0
2 >24h 17004 0 >24h 14917 0
1 >24h 21727 0 >24h 16407 0
This was my 4th Advent of Code; after completing years 2018 and 2019 during the event, I went back to do 2017 and now 2016 as I'm attempting to get all stars.
Overall, the basic themes of Advent of Code are getting easier to me, which means I've grown as a programmer. Searching a graph with a special condition, implementing a VM, or knocking out some cellular automata doesn't really take much thinking anymore.
This was the first year I organized differently, by making a single program that can run all days instead of a program for each day. I prefer it this way, even if each day is no longer stand-alone. It makes for easier code reuse, and it's extremely satisfying to run several days worth of solutions at once.
I committed myself to doing all of the problems in Elixir. I thought it would be painful, but I started to prefer doing BFS in Elixir than say, Python, which I didn't expect at all! My functional programming chops definitely increased by doing this year in Elixir.
Day | Comment | Python | Elixir |
---|---|---|---|
Day 01 | Character Iteration | Python | Elixir |
Day 02 | Simple Arithmetic | Python | Elixir |
Day 03 | Grid Navigation | Python | Elixir |
Day 04 | MD5 Leading Zeros | Python | Elixir |
Day 05 | String Rules | Python | |
Day 06 | Subgrid manipulation | Python | |
Day 07 | Bitwise Logic, Ordering | Python | |
Day 08 | Escaping Strings | Python | |
Day 09 | Travelling Salesman | Python | |
Day 10 | Look-and-Say | Python | |
Day 11 | String incrementing, rules | Python | |
Day 12 | JSON Parsing | Python | |
Day 13 | Optimal Seating | Python | |
Day 14 | Racing Go-Rest Sequences | Python | |
Day 15 | Cookie Optimization | Python | |
Day 16 | Logical elimination | Python | |
Day 17 | Combinations of containers | Python | |
Day 18 | Game of Life | Python | |
Day 19 | String Expansion Search | Python | |
Day 20 | Number Theory, Divisors | Python | |
Day 21 | RPG Battle, Item optimization | Python | |
Day 22 | RPG Battle, Ongoing Spells, Minimize Mana | Python | |
Day 23 | Simple Assembly Language, Collatz | Python | |
Day 24 | Splitting numbers into equal groups | Python | |
Day 25 | Mathy increasing sequence | Python |
- 19 - String expansion search
- 22 - RPG Battle, Ongoing Spells, Minimize Mana
- 22 - RPG Battle, Ongoing Spells, Minimize Mana
--------Part 1-------- --------Part 2--------
Day Time Rank Score Time Rank Score
25 >24h 4044 0 >24h 2873 0
24 >24h 3422 0 >24h 3366 0
23 >24h 4123 0 >24h 4091 0
22 >24h 3338 0 >24h 3235 0
21 >24h 4570 0 >24h 4439 0
20 >24h 5088 0 >24h 4732 0
19 >24h 5576 0 >24h 4138 0
18 >24h 5899 0 >24h 5803 0
17 >24h 6266 0 >24h 6122 0
16 >24h 6956 0 >24h 6635 0
15 >24h 6516 0 >24h 6403 0
14 >24h 8203 0 >24h 7531 0
13 >24h 7501 0 >24h 7372 0
12 >24h 9175 0 >24h 7735 0
11 >24h 9010 0 >24h 8845 0
10 >24h 10652 0 >24h 10153 0
9 >24h 9678 0 >24h 9423 0
8 >24h 11345 0 >24h 10603 0
7 >24h 11946 0 >24h 11420 0
6 >24h 17431 0 >24h 16430 0
5 >24h 22127 0 >24h 18417 0
4 >24h 22867 0 >24h 21658 0
3 >24h 27322 0 >24h 24613 0
2 >24h 33816 0 >24h 29589 0
1 >24h 53186 0 >24h 41194 0
With 2015 complete, I've joined the 250 stars club! (All AoC stars available as of Jan 2020). I'll be ready for AoC 2020, but I'll enjoy the break for now.
- aocdl, a util for downloading input.txt
- Synacor challenge, another challenge by the same creator
- Solution time scatterplots
- High quality writeup about 2019 Day 21, Jumping Carts
Created: Mon 02 Dec 2019 05:12:40 PM CST
Last Modified: Wed 08 Feb 2023 10:39:30 PM CST