Day 01 and 02 2019.

This commit is contained in:
2019-12-02 10:16:53 +01:00
parent 1fd77f3b83
commit 38be740633
8 changed files with 286 additions and 0 deletions

106
2019/02/src/main.rs Normal file
View File

@@ -0,0 +1,106 @@
use std::env;
use std::fs;
fn main() {
let input = env::args().nth(1).expect("need an input file");
let data = fs::read_to_string(&input).expect("failed to read input file");
let intcode = data
.split(',')
.map(|value| {
value
.trim()
.parse::<usize>()
.expect("failed to convert value to u8")
})
.collect::<Vec<_>>();
let mut program = intcode.clone();
program[1] = 12;
program[2] = 2;
let mut pc = 0;
loop {
match program[pc] {
1 => {
let a_addr = program[pc + 1];
let b_addr = program[pc + 2];
let x_addr = program[pc + 3];
program[x_addr] = program[a_addr] + program[b_addr];
pc += 4;
}
2 => {
let a_addr = program[pc + 1];
let b_addr = program[pc + 2];
let x_addr = program[pc + 3];
program[x_addr] = program[a_addr] * program[b_addr];
pc += 4;
}
99 => {
break;
}
_ => panic!("invalid op code"),
}
}
println!("part_one={}", program[0]);
let mut noun = 0;
let mut verb = 0;
loop {
let mut program = intcode.clone();
program[1] = noun;
program[2] = verb;
let mut pc = 0;
loop {
match program[pc] {
1 => {
let a_addr = program[pc + 1];
let b_addr = program[pc + 2];
let x_addr = program[pc + 3];
program[x_addr] = program[a_addr] + program[b_addr];
pc += 4;
}
2 => {
let a_addr = program[pc + 1];
let b_addr = program[pc + 2];
let x_addr = program[pc + 3];
program[x_addr] = program[a_addr] * program[b_addr];
pc += 4;
}
99 => {
break;
}
_ => panic!("invalid op code"),
}
}
if program[0] == 19690720 {
break;
}
noun += 1;
if noun > 99 {
noun = 0;
verb += 1;
if verb > 99 {
panic!("failed to find a valid input pair");
}
}
}
println!("part_two={}", 100 * noun + verb);
}