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

Create Intcode module

This commit is contained in:
Jeremy Kaplan 2019-12-05 09:10:50 -08:00
commit 02849a6af9

41
2019/day5/intcode.rb Normal file
View file

@ -0,0 +1,41 @@
# frozen_string_literal: true
module Intcode
def self.read(filename)
Program.new File.read(filename).split(',').map(&:to_i)
end
class Program
attr_reader :mem
def initialize(mem)
@mem = mem
end
def run(noun, verb)
mem = @mem.clone
mem[1] = noun
mem[2] = verb
pc = 0
loop do
case mem[pc]
when 1
r1 = mem[pc + 1]
r2 = mem[pc + 2]
r3 = mem[pc + 3]
mem[r3] = mem[r1] + mem[r2]
pc += 4
when 2
r1 = mem[pc + 1]
r2 = mem[pc + 2]
r3 = mem[pc + 3]
mem[r3] = mem[r1] * mem[r2]
pc += 4
when 99
return mem[0]
else
raise StandardError, "unexpected opcode: #{opcode}"
end
end
end
end
end