Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2019
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.14 KB | None | 0 0
  1. package adventofcode;
  2.  
  3. import adventofcode.utils.Utils;
  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6. import java.util.List;
  7. import java.util.stream.Collectors;
  8.  
  9. public class Day2 {
  10.     public static void solve() {
  11.         String input = Utils.getInput(2).get(0);
  12.  
  13.         List<Integer> program = Arrays.stream(input.split(","))
  14.                 .map(Integer::valueOf).collect(Collectors.toList());
  15.  
  16.         System.out.println(part1(program));
  17.         System.out.println(part2(program, 19690720));
  18.     }
  19.  
  20.     private static int part1(List<Integer> originalProgram) {
  21.         List<Integer> program = new ArrayList<>(originalProgram);
  22.  
  23.         run(program, 12, 2);
  24.  
  25.         return program.get(0);
  26.     }
  27.  
  28.     private static int part2(List<Integer> originalProgram, int expectedOutput) {
  29.         for(int noun = 0 ; noun <= 99 ; noun++) {
  30.             for(int verb = 0 ; verb <= 99 ; verb++) {
  31.                 List<Integer> program = new ArrayList<>(originalProgram);
  32.  
  33.                 run(program, noun, verb);
  34.  
  35.                 if(program.get(0) == expectedOutput) {
  36.                     return 100 * noun + verb;
  37.                 }
  38.             }
  39.         }
  40.  
  41.         throw new IllegalStateException("HCF");
  42.     }
  43.  
  44.     private static void run(List<Integer> program, int noun, int verb) {
  45.         program.set(1, noun);
  46.         program.set(2, verb);
  47.  
  48.         for(int i = 0 ; i < program.size() ; i += 4) {
  49.             if(program.get(i) == 99) {
  50.                 break;
  51.             }
  52.  
  53.             int opcode = program.get(i);
  54.             int addr1 = program.get(i + 1);
  55.             int addr2 = program.get(i + 2);
  56.             int addr3 = program.get(i + 3);
  57.             int result = instruction(opcode, program.get(addr1), program.get(addr2));
  58.  
  59.             program.set(addr3, result);
  60.         }
  61.     }
  62.  
  63.     private static int instruction(int opcode, int operand1, int operand2) {
  64.         switch(opcode) {
  65.             case 1:
  66.                 return operand1 + operand2;
  67.             case 2:
  68.                 return operand1 * operand2;
  69.             default:
  70.                 throw new IllegalStateException("HCF");
  71.         }
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement