Day 01 and 02 2019.
This commit is contained in:
6
2019/01/Cargo.lock
generated
Normal file
6
2019/01/Cargo.lock
generated
Normal 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
9
2019/01/Cargo.toml
Normal 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
100
2019/01/input
Normal 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
49
2019/01/src/main.rs
Normal 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
6
2019/02/Cargo.lock
generated
Normal 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
9
2019/02/Cargo.toml
Normal 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
1
2019/02/input
Normal 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
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