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

6
2019/02/Cargo.lock generated Normal file
View File

@@ -0,0 +1,6 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "day-02"
version = "0.1.0"

9
2019/02/Cargo.toml Normal file
View File

@@ -0,0 +1,9 @@
[package]
name = "day-02"
version = "0.1.0"
authors = ["Anders Olsson <anders.e.olsson@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

1
2019/02/input Normal file
View File

@@ -0,0 +1 @@
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,6,19,2,19,6,23,1,23,5,27,1,9,27,31,1,31,10,35,2,35,9,39,1,5,39,43,2,43,9,47,1,5,47,51,2,51,13,55,1,55,10,59,1,59,10,63,2,9,63,67,1,67,5,71,2,13,71,75,1,75,10,79,1,79,6,83,2,13,83,87,1,87,6,91,1,6,91,95,1,10,95,99,2,99,6,103,1,103,5,107,2,6,107,111,1,10,111,115,1,115,5,119,2,6,119,123,1,123,5,127,2,127,6,131,1,131,5,135,1,2,135,139,1,139,13,0,99,2,0,14,0

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);
}