NilsKirchhoff icon

AoC 2019 - Day 2 - ProcessingSketch

NilsKirchhoff | PRO | 12/02/19 05:46:23 AM UTC | 0 ⭐ | 787 👁️ | Never ⏰ | []
Java |

2.46 KB

|

None

|

0 👍

/

0 👎

String fileName = "input.txt";
//String fileName = "testdata.txt";
BufferedReader reader;
String line;
IntList values;
 
void setup() {
  reader = createReader(fileName);
  try {
        line = reader.readLine();
      }
      catch (IOException e) {
        line = null;
      }
     
  values = new IntList();
  String[] listSplit = split(line, ',');
  for( int value : int(listSplit) ) {
    values.append(value);
  }
    
  /* day 2 _ 1 -   answer 4138658
  values.set(1, 12);
  values.set(2, 2);
  int i = 0;
  int Opcode = values.get(i);
  while(Opcode != 99) {
    switch(Opcode) {
      case 1:
      values.set(values.get(i+3), operation(values.get(i+1), values.get(i+2), Opcode));
      i = i+4;
      Opcode = values.get(i);
      break;
      case 2: 
      values.set(values.get(i+3), operation(values.get(i+1), values.get(i+2), Opcode));
      i = i+4;
      Opcode  = values.get(i);
      break;
      }
  }
  println(values.get(0));
  */
  
  // day 2 _ 2 input answer 7264
  
  boolean stop = false;
  int noun = 0;
  int verb = 0;
  int output = 0;
  int expectedOutput = 19690720;
  int result = 0;
  int Opcode = 0;
    while(output  != expectedOutput && !stop ) {
      IntList copyOfValues = new IntList();
      for( int value : values) {
         copyOfValues.append(value);
      }
      int i = 0;
      Opcode = copyOfValues.get(i);
      copyOfValues.set(1, noun);
      copyOfValues.set(2, verb);
      while(Opcode != 99) {
        switch(Opcode) {
          case 1:
          copyOfValues.set(copyOfValues.get(i+3), copyOfValues.get(copyOfValues.get(i+1)) + copyOfValues.get(copyOfValues.get(i+2)));
          i = i+4;
          Opcode = copyOfValues.get(i);
          break;
          case 2: 
          copyOfValues.set(copyOfValues.get(i+3), copyOfValues.get(copyOfValues.get(i+1)) * copyOfValues.get(copyOfValues.get(i+2)));
          i = i+4;
          Opcode  = copyOfValues.get(i);
          break;
          }
      }
      result = 100*noun+verb;
      if(noun < 99)  {
        noun++;
      } else {
         verb++;
         noun = 0;
      } 
      if (verb > 99)  {
        stop = true;
      }
      output = copyOfValues.get(0);
    }
    println(result);
}
 
int operation(int pos1, int pos2, int Opcode){
  switch(Opcode) {
      case 1:
        return values.get(pos1) + values.get(pos2);
      case 2: 
        return values.get(pos1) * values.get(pos2);
  }
  return 0;
}

Comments