Hide

Problem C
Interpreter

A certain computer has $10$ registers and $1000$ words of RAM. Each register or RAM location holds a $3$-digit integer between $0$ and $999$. Instructions are encoded as $3$-digit integers and stored in RAM. The encodings are as follows:

  • $1xy$ means halt (regardless of the values of $x$ and $y$)

  • $2dn$ means set register $d$ to $n$ (between $0$ and $9$)

  • $3dn$ means add $n$ to register $d$

  • $4dn$ means multiply register $d$ by $n$

  • $5ds$ means set register $d$ to the value of register $s$

  • $6ds$ means add the value of register $s$ to register $d$

  • $7ds$ means multiply register $d$ by the value of register $s$

  • $8da$ means set register $d$ to the value in RAM whose address is in register $a$

  • $9sa$ means set the value in RAM whose address is in register $a$ to the value of register $s$

  • $0ds$ means goto the location in register $d$ unless register $s$ contains $0$

All registers initially contain $000$. The first instruction to be executed is at RAM address $0$. All results of add/multiply instructions are reduced modulo $1000$.

Input

The initial content of the RAM is read from standard input. The input to your program consists of up to $1000$ $3$-digit unsigned integers, representing the contents of consecutive RAM locations starting at $0$. Unspecified RAM locations are initialized to $000$.

Output

The output from your program is a single integer: the number of instructions executed up to and including the halt instruction. You may assume that the program does halt and takes at most $10\, 000$ steps.

Sample Input 1 Sample Output 1
299
492
495
399
492
495
399
283
279
689
078
100
000
000
000
16

Please log in to submit a solution to this problem

Log in