Watch
1
0
Fork
You've already forked advent-of-code
0
advent-of-code/2019/day02/part2.rb

41 lines
875 B
Ruby

# frozen_string_literal: true
def run(mem)
pc = 0
loop do
case mem[pc]
when 1
r1, r2, r3 = mem[pc+1], mem[pc+2], mem[pc+3]
mem[r3] = mem[r1] + mem[r2]
pc += 4
when 2
r1, r2, r3 = mem[pc+1], mem[pc+2], 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
def solve(program)
(0...99).each do |noun|
(0...99).each do |verb|
puts "Trying noun = #{noun}, verb = #{verb} ..."
mem = program.clone
mem[1] = noun
mem[2] = verb
output = run(mem)
puts "Output: #{output}"
if output == 19690720
return [noun, verb, 100*noun + verb]
end
end
end
end
input = File.read(File.join(__dir__, 'input'))
program = input.split(',').map(&:to_i)
puts solve(program)