about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Day2.cs84
-rw-r--r--Program.cs3
-rw-r--r--input/day2.in1
3 files changed, 88 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}");
+                    }
+                }
+            }
+        }
+    }
+}
+
diff --git a/Program.cs b/Program.cs
index a88bd9d..62d0cb1 100644
--- a/Program.cs
+++ b/Program.cs
@@ -10,6 +10,9 @@ namespace aoc2019
         {

             Day1.Part1();

             Day1.Part2();

+

+            Day2.Part1();

+            Day2.Part2();

         }

     }

 }

diff --git a/input/day2.in b/input/day2.in
new file mode 100644
index 0000000..c3ac93e
--- /dev/null
+++ b/input/day2.in
@@ -0,0 +1 @@
+1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,10,1,19,1,19,9,23,1,23,13,27,1,10,27,31,2,31,13,35,1,10,35,39,2,9,39,43,2,43,9,47,1,6,47,51,1,10,51,55,2,55,13,59,1,59,10,63,2,63,13,67,2,67,9,71,1,6,71,75,2,75,9,79,1,79,5,83,2,83,13,87,1,9,87,91,1,13,91,95,1,2,95,99,1,99,6,0,99,2,14,0,0