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/01/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-01"
version = "0.1.0"

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

@@ -0,0 +1,9 @@
[package]
name = "day-01"
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]

100
2019/01/input Normal file
View File

@@ -0,0 +1,100 @@
83285
96868
121640
51455
128067
128390
141809
52325
68310
140707
124520
149678
87961
52040
133133
52203
117483
85643
84414
86558
65402
122692
88565
61895
126271
128802
140363
109764
53600
114391
98973
124467
99574
69140
144856
56809
149944
138738
128823
82776
77557
51994
74322
64716
114506
124074
73096
97066
96731
149307
135626
121413
69575
98581
50570
60754
94843
72165
146504
53290
63491
50936
79644
119081
70218
85849
133228
114550
131943
67288
68499
80512
148872
99264
119723
68295
90348
146534
52661
99146
95993
130363
78956
126736
82065
77227
129950
97946
132345
107137
79623
148477
88928
118911
75277
97162
80664
149742
88983
74518

49
2019/01/src/main.rs Normal file
View File

@@ -0,0 +1,49 @@
use std::env;
use std::fs::File;
use std::io::{BufRead, BufReader};
fn main() {
let input = env::args().nth(1).expect("need an input file");
let reader = File::open(&input)
.map(BufReader::new)
.expect("failed to open input file");
let modules = reader
.lines()
.filter_map(Result::ok)
.map(|value| {
value
.parse::<i32>()
.expect("failed to convert value to i32")
})
.collect::<Vec<_>>();
let total_fuel: i32 = modules.iter().map(|value| (value / 3) - 2).sum();
println!("part_one={}", total_fuel);
let total_fuel: i32 = modules
.iter()
.map(|value| {
let mut total_fuel = 0;
let mut input = *value;
loop {
let fuel = (input / 3) - 2;
if fuel <= 0 {
break;
}
total_fuel += fuel;
input = fuel;
}
total_fuel
})
.sum();
println!("part_two={}", total_fuel);
}

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