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