41 lines
1.2 KiB
Text
41 lines
1.2 KiB
Text
Day 8 Notes
|
|
|
|
+--------+
|
|
| Part 1 |
|
|
+--------+
|
|
|
|
$ elixir day8part1.exs
|
|
1528
|
|
|
|
Thoughts:
|
|
|
|
Loop detection. Have a feeling I'm supposed to detect patterns, but I decided to just store the
|
|
index of every instruction executed, and stop as soon as we visit a previously-seen instruction.
|
|
|
|
A little bit annoyed about using an if/else statement for the terminating condition. I would have
|
|
preferred to use pattern matching, but I'm not sure that's possible with a MapSet.
|
|
|
|
|
|
+--------+
|
|
| Part 2 |
|
|
+--------+
|
|
|
|
$ elixir day8part2.exs
|
|
640
|
|
|
|
Thoughts:
|
|
|
|
Adapt the algorithm from part 1 to also detect when the last command has been executed (when the
|
|
0-based index is the same as the number of commands). Renamed run_until_loop → try_boot
|
|
|
|
Iterate through all the commands, toggling each one and try executing the program to see if it completes.
|
|
Could technically skip the acc commands, but decided to just leave them in to keep the code simpler.
|
|
|
|
|
|
+------------------+
|
|
| Overall Thoughts |
|
|
+------------------+
|
|
|
|
I was a little concerned that this would be slow, due to it being O(n²) - togging each instruction in turn,
|
|
then executing the full instruction set, however there are only ~600 instructions, so it completes
|
|
pretty quickly.
|