about summary refs log tree commit diff
path: root/Day2.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Day2.cs')
-rw-r--r--Day2.cs84
1 files changed, 84 insertions, 0 deletions
diff --git a/Day2.cs b/Day2.cs
new file mode 100644
index 0000000..b6be148
--- /dev/null
+++ b/Day2.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+
+namespace aoc2019
+{
+    public class Day2
+    {
+        private static IEnumerable<int> input = 
+            File.ReadLines("input/day2.in")
+            .First()
+            .Split(',')
+            .Select(num => int.Parse(num));
+
+        private static bool debug = false;
+
+        public static void Log(string log)
+        {
+            if (debug)
+                Console.WriteLine(log);
+        }
+
+        public static void RunIntCode(ref List<int> output)
+        {
+            for (var i = 0; i < output.Count(); i++)
+            {
+                if (output[i] == 1)
+                {
+                    var val = output[output[i + 1]] + output[output[i + 2]];
+                    Log($"saving {val} to {output[i + 3]}");
+                    output[output[i + 3]] = val;
+                    i += 3;
+                }
+                else if (output[i] == 2)
+                {
+                    var val = output[output[i + 1]] * output[output[i + 2]];
+                    Log($"saving {val} to {output[i + 3]}");
+                    output[output[i + 3]] = val;
+                    i += 3;
+                }
+                else
+                {
+                    Log($"invalid operation: found {output[i]} at {i}");
+                    break;
+                }
+                Log(string.Join(',', output));
+            }
+        }
+
+        public static void Part1()
+        {
+            List<int> output = input.ToList();
+            output[1] = 12;
+            output[2] = 2;
+
+            RunIntCode(ref output);
+
+            Console.WriteLine($"{output[0]}");
+        }
+
+        public static void Part2()
+        {
+            List<int> output;
+            for (var i = 0; i < 100; i++)
+            {
+                for (var j = 0; j < 100; j++)
+                {
+                    output = input.ToList();
+                    output[1] = i;
+                    output[2] = j;
+
+                    RunIntCode(ref output);
+
+                    if (output[0] == 19690720)
+                    {
+                        Console.WriteLine($"{100 * i + j}");
+                    }
+                }
+            }
+        }
+    }
+}
+