From 7bfbe15b08ff2133aefc6d3f32dd78b26600a8d5 Mon Sep 17 00:00:00 2001
From: Guillaume Dott <guillaume+github@dott.fr>
Date: Wed, 11 Dec 2019 22:18:08 +0100
Subject: [PATCH] feat: add code for day 2

---
 2/input     |  1 +
 2/script.rb | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 2/input
 create mode 100755 2/script.rb

diff --git a/2/input b/2/input
new file mode 100644
index 0000000..d58f471
--- /dev/null
+++ b/2/input
@@ -0,0 +1 @@
+1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,13,19,2,9,19,23,1,23,6,27,1,13,27,31,1,31,10,35,1,9,35,39,1,39,9,43,2,6,43,47,1,47,5,51,2,10,51,55,1,6,55,59,2,13,59,63,2,13,63,67,1,6,67,71,1,71,5,75,2,75,6,79,1,5,79,83,1,83,6,87,2,10,87,91,1,9,91,95,1,6,95,99,1,99,6,103,2,103,9,107,2,107,10,111,1,5,111,115,1,115,6,119,2,6,119,123,1,10,123,127,1,127,5,131,1,131,2,135,1,135,5,0,99,2,0,14,0
diff --git a/2/script.rb b/2/script.rb
new file mode 100755
index 0000000..2c05457
--- /dev/null
+++ b/2/script.rb
@@ -0,0 +1,57 @@
+#!/usr/bin/env ruby
+
+INPUT = __dir__ + '/input'
+OUTPUT = 19690720
+
+def part1
+  File.readlines(INPUT).map { |line| execute(correct(to_opcode(line))).join(',') }
+end
+
+def part2
+  File.readlines(INPUT).map do |line|
+    opcodes = to_opcode(line)
+    (0..99).each do |i|
+      (0..99).each do |j|
+        opcodes[1] = i
+        opcodes[2] = j
+        result = execute(opcodes.dup)
+        return 100 * i + j if result[0] == OUTPUT
+      end
+    end
+  end
+  return nil
+end
+
+def to_opcode(line)
+  line.chomp.split(',').map(&:to_i)
+end
+
+def correct(opcodes)
+  opcodes[1] = 12
+  opcodes[2] = 2
+  opcodes
+end
+
+def execute(opcodes)
+  i = 0
+  while i < opcodes.size
+    opcode = opcodes[i]
+
+    if opcode == 1
+      opcodes[opcodes[i + 3]] = opcodes[opcodes[i + 1]] + opcodes[opcodes[i + 2]]
+    elsif opcode == 2
+      opcodes[opcodes[i + 3]] = opcodes[opcodes[i + 1]] * opcodes[opcodes[i + 2]]
+    else
+      break
+    end
+
+    i += 4
+  end
+
+  opcodes
+end
+
+puts "=== Part 1 ==="
+puts part1
+puts "=== Part 2 ==="
+puts part2