Advertisement
desrtfx

Aoc2019Day05

Dec 5th, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.71 KB | None | 0 0
  1.  
  2. public class Day05 {
  3.     static int[] data;
  4.  
  5.     static {
  6.         String fileName = "Input\\Input_Day05.txt";
  7.  
  8.         String rawData = FileIO.getFileAsString(fileName);
  9.         String[] rawArray = rawData.split(",");
  10.         data = new int[rawArray.length];
  11.         System.out.println(rawArray.length);
  12.         for (int i = 0; i < rawArray.length; i++) {
  13.             data[i] = Integer.parseInt(rawArray[i]);
  14.         }
  15.     }
  16.  
  17.     public static int compute(int[] data, int input) {
  18.         int[] myData = new int[data.length];
  19.         for (int i = 0; i < data.length; i++) {
  20.             myData[i] = data[i];
  21.         }
  22.         int ip = 0;
  23.         int opMode = myData[ip];
  24.         while (opMode != 99) {
  25.             int op = opMode % 100; // lowest two digits
  26.             opMode = opMode / 100;
  27.             int modeP1 = opMode % 10; // 0 positional, 1 direct
  28.             opMode = opMode / 10;
  29.             int modeP2 = opMode % 10;
  30.             switch (op) {
  31.             case 1: // add
  32.                 myData[myData[ip + 3]] = myData[(modeP1 == 0) ? myData[ip + 1] : ip + 1]
  33.                         + myData[(modeP2 == 0) ? myData[ip + 2] : ip + 2];
  34.                 ip += 4;
  35.                 break;
  36.             case 2: // mul
  37.                 myData[myData[ip + 3]] = myData[(modeP1 == 0) ? myData[ip + 1] : ip + 1]
  38.                         * myData[(modeP2 == 0) ? myData[ip + 2] : ip + 2];
  39.                 ip += 4;
  40.                 break;
  41.             case 3: // input
  42.                 myData[myData[ip + 1]] = input; // Data input
  43.                 ip += 2;
  44.                 break;
  45.             case 4: // output
  46.                 System.out.println(myData[myData[ip + 1]]); // data output
  47.                 ip += 2;
  48.                 break;
  49.             case 5: // JT
  50.                 if (myData[(modeP1 == 0) ? myData[ip + 1] : ip + 1] != 0) {
  51.                     ip = myData[(modeP2 == 0) ? myData[ip + 2] : ip + 2];
  52.                 } else {
  53.                     ip += 3;
  54.                 }
  55.                 break;
  56.             case 6: // JF
  57.                 if (myData[(modeP1 == 0) ? myData[ip + 1] : ip + 1] == 0) {
  58.                     ip = myData[(modeP2 == 0) ? myData[ip + 2] : ip + 2];
  59.                 } else {
  60.                     ip += 3;
  61.                 }
  62.                 break;
  63.             case 7: // LT
  64.                 if (myData[(modeP1 == 0) ? myData[ip + 1] : ip + 1] < myData[(modeP2 == 0) ? myData[ip + 2] : ip + 2]) {
  65.                     myData[myData[ip + 3]] = 1;
  66.                 } else {
  67.                     myData[myData[ip + 3]] = 0;
  68.                 }
  69.                 ip += 4;
  70.                 break;
  71.             case 8: // EQ
  72.                 if (myData[(modeP1 == 0) ? myData[ip + 1] : ip + 1] == myData[(modeP2 == 0) ? myData[ip + 2]
  73.                         : ip + 2]) {
  74.                     myData[myData[ip + 3]] = 1;
  75.                 } else {
  76.                     myData[myData[ip + 3]] = 0;
  77.                 }
  78.                 ip += 4;
  79.                 break;
  80.             default:
  81.                 System.err.print("Something went seriously wrong!");
  82.                 break;
  83.             }
  84.             opMode = myData[ip];
  85.         }
  86.         return myData[0];
  87.     }
  88.  
  89.     public static int part01(int[] data) {
  90.         return compute(data, 1);
  91.     }
  92.  
  93.     public static int part02(int[] data) {
  94.         return compute(data, 5);
  95.     }
  96.  
  97.     public static void main(String[] args) {
  98.         // TODO Auto-generated method stub
  99.         System.out.printf("Part 1 result: %d%n", part01(data));
  100.  
  101.         System.out.printf("Part 2 result: %d%n", part02(data));
  102.  
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement