Watch
1
0
Fork
You've already forked advent-of-code
0

Rename pc to ip to match instructions

This commit is contained in:
Jeremy Kaplan 2019-12-05 23:03:18 -08:00
commit 28d32820fc

View file

@ -39,83 +39,83 @@ module Intcode
def run def run
@mem = Memory.new(@initial_state.clone) @mem = Memory.new(@initial_state.clone)
pc = 0 ip = 0
loop do loop do
opcode = operation(mem[pc]) opcode = operation(mem[ip])
mode = modes(mem[pc]) mode = modes(mem[ip])
case opcode case opcode
when 1 when 1
r1 = mem[pc + 1] r1 = mem[ip + 1]
r2 = mem[pc + 2] r2 = mem[ip + 2]
r3 = mem[pc + 3] r3 = mem[ip + 3]
a = param(r1, mode[0]) a = param(r1, mode[0])
b = param(r2, mode[1]) b = param(r2, mode[1])
raise StandardError, "unexpected mode: #{mode[2]}" if mode[2] != 0 raise StandardError, "unexpected mode: #{mode[2]}" if mode[2] != 0
mem[r3] = a + b mem[r3] = a + b
pc += 4 ip += 4
when 2 when 2
r1 = mem[pc + 1] r1 = mem[ip + 1]
r2 = mem[pc + 2] r2 = mem[ip + 2]
r3 = mem[pc + 3] r3 = mem[ip + 3]
a = param(r1, mode[0]) a = param(r1, mode[0])
b = param(r2, mode[1]) b = param(r2, mode[1])
raise StandardError, "unexpected mode: #{mode[2]}" if mode[2] != 0 raise StandardError, "unexpected mode: #{mode[2]}" if mode[2] != 0
mem[r3] = a * b mem[r3] = a * b
pc += 4 ip += 4
when 3 when 3
r1 = mem[pc + 1] r1 = mem[ip + 1]
raise StandardError, "unexpected mode: #{mode[0]}" if mode[0] != 0 raise StandardError, "unexpected mode: #{mode[0]}" if mode[0] != 0
mem[r1] = input mem[r1] = input
pc += 2 ip += 2
when 4 when 4
r1 = mem[pc + 1] r1 = mem[ip + 1]
output = param(r1, mode[0]) output = param(r1, mode[0])
puts "output: #{output}" puts "output: #{output}"
pc += 2 ip += 2
when 5 when 5
r1 = mem[pc + 1] r1 = mem[ip + 1]
r2 = mem[pc + 2] r2 = mem[ip + 2]
a = param(r1, mode[0]) a = param(r1, mode[0])
b = param(r2, mode[1]) b = param(r2, mode[1])
if !a.zero? if !a.zero?
pc = b ip = b
else else
pc += 3 ip += 3
end end
when 6 when 6
r1 = mem[pc + 1] r1 = mem[ip + 1]
r2 = mem[pc + 2] r2 = mem[ip + 2]
a = param(r1, mode[0]) a = param(r1, mode[0])
b = param(r2, mode[1]) b = param(r2, mode[1])
if a.zero? if a.zero?
pc = b ip = b
else else
pc += 3 ip += 3
end end
when 7 when 7
r1 = mem[pc + 1] r1 = mem[ip + 1]
r2 = mem[pc + 2] r2 = mem[ip + 2]
r3 = mem[pc + 3] r3 = mem[ip + 3]
a = param(r1, mode[0]) a = param(r1, mode[0])
b = param(r2, mode[1]) b = param(r2, mode[1])
raise StandardError, "unexpected mode: #{mode[2]}" if mode[2] != 0 raise StandardError, "unexpected mode: #{mode[2]}" if mode[2] != 0
mem[r3] = a < b ? 1 : 0 mem[r3] = a < b ? 1 : 0
pc += 4 ip += 4
when 8 when 8
r1 = mem[pc + 1] r1 = mem[ip + 1]
r2 = mem[pc + 2] r2 = mem[ip + 2]
r3 = mem[pc + 3] r3 = mem[ip + 3]
a = param(r1, mode[0]) a = param(r1, mode[0])
b = param(r2, mode[1]) b = param(r2, mode[1])
raise StandardError, "unexpected mode: #{mode[2]}" if mode[2] != 0 raise StandardError, "unexpected mode: #{mode[2]}" if mode[2] != 0
mem[r3] = a == b ? 1 : 0 mem[r3] = a == b ? 1 : 0
pc += 4 ip += 4
when 99 when 99
return mem[0] return mem[0]
else else