|
| 1 | +# Day 23: Opening the Turing Lock |
| 2 | +Little Jane Marie just got her very first computer for Christmas from some unknown benefactor. It comes with |
| 3 | +instructions and an example program, but the computer itself seems to be malfunctioning. She's curious what the program |
| 4 | +does, and would like you to help her run it. |
| 5 | + |
| 6 | +The manual explains that the computer supports two [registers](https://en.wikipedia.org/wiki/Processor_register) and |
| 7 | +six [instructions](https://en.wikipedia.org/wiki/Instruction_set) (truly, it goes on to remind the reader, a |
| 8 | +state-of-the-art technology). The registers are named `a` and `b`, can hold any |
| 9 | +[non-negative integer](https://en.wikipedia.org/wiki/Natural_number), and begin with a value of `0`. The instructions |
| 10 | +are as follows: |
| 11 | +* `hlf r` sets register `r` to half its current value, then continues with the next instruction. |
| 12 | +* `tpl r` sets register `r` to triple its current value, then continues with the next instruction. |
| 13 | +* `inc r` **increments** register `r`, adding `1` to it, then continues with the next instruction. |
| 14 | +* `jmp offset` is a **jump**; it continues with the instruction `offset` away **relative to itself**. |
| 15 | +* `jie r, offset` is like `jmp`, but only jumps if register `r` is **even** ("jump if even"). |
| 16 | +* `jio r, offset` is like `jmp`, but only jumps if register `r` is `1` ("jump if **one**", not odd). |
| 17 | + |
| 18 | +All three jump instructions work with an **offset** relative to that instruction. The offset is always written with a |
| 19 | +prefix `+` or `-` to indicate the direction of the jump (forward or backward, respectively). For example, `jmp +1` |
| 20 | +would simply continue with the next instruction, while `jmp +0` would continuously jump back to itself forever. |
| 21 | + |
| 22 | +The program exits when it tries to run an instruction beyond the ones defined. |
| 23 | + |
| 24 | +For example, this program sets `a` to `2`, because the `jio` instruction causes it to skip the `tpl` instruction: |
| 25 | +``` |
| 26 | +inc a |
| 27 | +jio a, +2 |
| 28 | +tpl a |
| 29 | +inc a |
| 30 | +``` |
| 31 | +What is **the value in register `b`** when the program in your puzzle input is finished executing? |
0 commit comments