Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package adventofcode;
- import adventofcode.utils.Utils;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.stream.Collectors;
- public class Day2 {
- public static void solve() {
- String input = Utils.getInput(2).get(0);
- List<Integer> program = Arrays.stream(input.split(","))
- .map(Integer::valueOf).collect(Collectors.toList());
- System.out.println(part1(program));
- System.out.println(part2(program, 19690720));
- }
- private static int part1(List<Integer> originalProgram) {
- List<Integer> program = new ArrayList<>(originalProgram);
- run(program, 12, 2);
- return program.get(0);
- }
- private static int part2(List<Integer> originalProgram, int expectedOutput) {
- for(int noun = 0 ; noun <= 99 ; noun++) {
- for(int verb = 0 ; verb <= 99 ; verb++) {
- List<Integer> program = new ArrayList<>(originalProgram);
- run(program, noun, verb);
- if(program.get(0) == expectedOutput) {
- return 100 * noun + verb;
- }
- }
- }
- throw new IllegalStateException("HCF");
- }
- private static void run(List<Integer> program, int noun, int verb) {
- program.set(1, noun);
- program.set(2, verb);
- for(int i = 0 ; i < program.size() ; i += 4) {
- if(program.get(i) == 99) {
- break;
- }
- int opcode = program.get(i);
- int addr1 = program.get(i + 1);
- int addr2 = program.get(i + 2);
- int addr3 = program.get(i + 3);
- int result = instruction(opcode, program.get(addr1), program.get(addr2));
- program.set(addr3, result);
- }
- }
- private static int instruction(int opcode, int operand1, int operand2) {
- switch(opcode) {
- case 1:
- return operand1 + operand2;
- case 2:
- return operand1 * operand2;
- default:
- throw new IllegalStateException("HCF");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement