diff --git a/2019/day2/part2.rb b/2019/day2/part2.rb new file mode 100644 index 0000000..6e43145 --- /dev/null +++ b/2019/day2/part2.rb @@ -0,0 +1,41 @@ +# 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)