Day 01 and 02 2019.
This commit is contained in:
106
2019/02/src/main.rs
Normal file
106
2019/02/src/main.rs
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user