pastebin

AdventOfCode
  1. using system.Collections.Generic;
  2. using system.IO;
  3. using system.Linq;
  4.  
  5. namespace AdventOfCode
  6. {
  7.     public static class DayFive
  8.     {
  9.         private static int[] Data;
  10.  
  11.         static DayFive()
  12.         {
  13.             var file = Path.Combine(Directory.GetCurrentDirectory(), "data", "5.txt");
  14.             Data = File.ReadAllText(file).Split(',').Select(int.Parse).ToArray();
  15.         }
  16.  
  17.         public static int Problem(int input = 5) //5 for problem B
  18.         {
  19.             var inst = Data.ToArray();
  20.             var n = inst.Length;
  21.  
  22.             var outputs = new List<int>();
  23.  
  24.             for (int ip = 0; ip < n;)
  25.             {
  26.                 var op = inst[ip];
  27.                 var i1 = (op / 100) % 10 == 1;
  28.                 var i2 = (op / 1000) % 10 == 1;
  29.                 var i3 = (op / 10000) % 10 == 1;
  30.                 op = op % 100;
  31.  
  32.                 ip++;
  33.  
  34.                 if (op == 1)
  35.                 {
  36.                     ref var p1 = ref inst[i1 ? ip++ : inst[ip++]];
  37.                     ref var p2 = ref inst[i2 ? ip++ : inst[ip++]];
  38.                     ref var p3 = ref inst[i3 ? ip++ : inst[ip++]];
  39.  
  40.                     p3 = p1 + p2;
  41.                 }
  42.                 else if (op == 2)
  43.                 {
  44.                     ref var p1 = ref inst[i1 ? ip++ : inst[ip++]];
  45.                     ref var p2 = ref inst[i2 ? ip++ : inst[ip++]];
  46.                     ref var p3 = ref inst[i3 ? ip++ : inst[ip++]];
  47.  
  48.                     p3 = p1 * p2;
  49.                 }
  50.                 else if (op == 3)
  51.                 {
  52.                     ref var p1 = ref inst[i1 ? ip++ : inst[ip++]];
  53.  
  54.                     p1 = input;
  55.                 }
  56.                 else if (op == 4)
  57.                 {
  58.                     ref var p1 = ref inst[i1 ? ip++ : inst[ip++]];
  59.  
  60.                     outputs.Add(p1);
  61.                 }
  62.                 else if (op == 5)
  63.                 {
  64.                     ref var p1 = ref inst[i1 ? ip++ : inst[ip++]];
  65.                     ref var p2 = ref inst[i2 ? ip++ : inst[ip++]];
  66.  
  67.                     ip = p1 > 0 ? p2 : ip;
  68.                 }
  69.                 else if (op == 6)
  70.                 {
  71.                     ref var p1 = ref inst[i1 ? ip++ : inst[ip++]];
  72.                     ref var p2 = ref inst[i2 ? ip++ : inst[ip++]];
  73.  
  74.                     ip = p1 == 0 ? p2 : ip;
  75.                 }
  76.                 else if (op == 7)
  77.                 {
  78.                     ref var p1 = ref inst[i1 ? ip++ : inst[ip++]];
  79.                     ref var p2 = ref inst[i2 ? ip++ : inst[ip++]];
  80.                     ref var p3 = ref inst[i3 ? ip++ : inst[ip++]];
  81.  
  82.                     p3 = (p1 < p2) ? 1 : 0;
  83.                 }
  84.                 else if (op == 8)
  85.                 {
  86.                     ref var p1 = ref inst[i1 ? ip++ : inst[ip++]];
  87.                     ref var p2 = ref inst[i2 ? ip++ : inst[ip++]];
  88.                     ref var p3 = ref inst[i3 ? ip++ : inst[ip++]];
  89.  
  90.                     p3 = (p1 == p2) ? 1 : 0;
  91.                 }
  92.                 else if (op == 99)
  93.                 {
  94.                     break;
  95.                 }
  96.             }
  97.  
  98.             return outputs.Last();
  99.         }
  100.     }
  101. }
Parsed in 0.027 seconds