Commit Graph

8 Commits

Author SHA1 Message Date
b5202b28c5 Allow intcode programs to be halted externally
This is simplest to do during an input or output callback, but could potentially also be done to a program running on a goroutine.
2022-06-12 23:49:13 -05:00
3ca7312e2c Day 9 solution
This day showed me that when the input instruction was introduced and said "write addresses will never be in immediate mode", that didn't mean "so don't bother handling modes for input addresses", it meant "handle the mode, but assert if it's immediate mode". It was super helpful that this program contained a bootstrap sequence to validate each instruction.

Memory expansion came with a few caveats: obviously reads and writes needed to handle expanding the memory space, but a Reset also can no longer get away with simply copying the program into memory again because we need to ensure that any additional memory is cut off (or at least zeroed), so the quickest way to handle that in Go is to simply allocate a new buffer; I'd rather manipulate the existing buffer, but I'm having a hard time finding the best way to do that.

And finally, make sure you reset your relativeBase when resetting the program...that one was ugly to track down.
2022-06-12 13:37:37 -05:00
870abdf579 Day 5 solution
This required an overhaul of the intcode machine to actually be its own type that could operate on its own memory and stuff. So I had to touch day 2 to make it adhere to the new API.

Feeling good about this foundation now. Until I get gobsmacked at some point later, which I expect to happen.
2022-06-12 13:37:36 -05:00
2a8384949f I kinda like this Run method on the receiver 2022-06-07 22:54:57 -05:00
e8e9eeee02 Remove unnecessary breaks
I forgot that Go doesn't require these.
2022-06-07 20:41:41 -05:00
8cd4994300 More slight streamlining 2022-06-07 10:01:29 -05:00
dd5c072730 Make opcode constants
Just planning for the future...
2022-06-07 09:54:40 -05:00
93c9bc7d6f Day 2 initial solution
There's room to optimize part 2, but I wanted to commit my original brute-force solution first.
2022-06-07 09:26:21 -05:00