Completed day 1
This commit is contained in:
parent
1ef9d8b86a
commit
f15f4abed9
2
day1/.gitignore
vendored
Normal file
2
day1/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/target
|
||||
**/*.rs.bk
|
6
day1/Cargo.lock
generated
Normal file
6
day1/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 = "day1"
|
||||
version = "0.1.0"
|
||||
|
9
day1/Cargo.toml
Normal file
9
day1/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "day1"
|
||||
version = "0.1.0"
|
||||
authors = ["Tyler Hallada <tyler@hallada.net>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
100
day1/input/input.txt
Normal file
100
day1/input/input.txt
Normal file
@ -0,0 +1,100 @@
|
||||
109506
|
||||
140405
|
||||
139135
|
||||
110950
|
||||
84296
|
||||
123991
|
||||
59438
|
||||
85647
|
||||
81214
|
||||
100517
|
||||
100910
|
||||
57704
|
||||
83368
|
||||
50777
|
||||
85523
|
||||
95788
|
||||
127699
|
||||
138908
|
||||
95502
|
||||
81703
|
||||
67317
|
||||
108468
|
||||
58394
|
||||
72202
|
||||
121580
|
||||
86908
|
||||
72705
|
||||
86578
|
||||
83714
|
||||
114900
|
||||
142915
|
||||
51332
|
||||
69054
|
||||
97039
|
||||
143539
|
||||
61143
|
||||
113534
|
||||
98335
|
||||
58533
|
||||
83893
|
||||
127138
|
||||
50844
|
||||
88397
|
||||
133591
|
||||
83563
|
||||
52435
|
||||
96342
|
||||
109491
|
||||
81148
|
||||
127397
|
||||
86200
|
||||
92418
|
||||
144842
|
||||
120142
|
||||
97531
|
||||
54449
|
||||
91004
|
||||
129115
|
||||
142487
|
||||
68513
|
||||
140405
|
||||
80111
|
||||
139359
|
||||
57486
|
||||
116973
|
||||
135102
|
||||
59737
|
||||
144040
|
||||
95483
|
||||
134470
|
||||
60473
|
||||
113142
|
||||
78189
|
||||
53845
|
||||
124139
|
||||
78055
|
||||
63791
|
||||
99879
|
||||
58630
|
||||
111233
|
||||
80544
|
||||
76932
|
||||
79644
|
||||
116247
|
||||
54646
|
||||
85217
|
||||
110795
|
||||
142095
|
||||
74492
|
||||
93318
|
||||
122300
|
||||
82755
|
||||
147407
|
||||
98697
|
||||
98105
|
||||
132055
|
||||
67856
|
||||
109731
|
||||
75747
|
||||
135700
|
4
day1/input/test.txt
Normal file
4
day1/input/test.txt
Normal file
@ -0,0 +1,4 @@
|
||||
12
|
||||
14
|
||||
1969
|
||||
100756
|
88
day1/src/main.rs
Normal file
88
day1/src/main.rs
Normal file
@ -0,0 +1,88 @@
|
||||
use std::fs::File;
|
||||
use std::io::{self, prelude::*, BufReader};
|
||||
|
||||
const INPUT: &str = "input/input.txt";
|
||||
|
||||
fn read_masses(filename: &str) -> io::Result<Vec<u32>> {
|
||||
let file = File::open(filename)?;
|
||||
let reader = BufReader::new(file);
|
||||
|
||||
Ok(reader
|
||||
.lines()
|
||||
.map(|mass| mass.unwrap().parse().unwrap())
|
||||
.collect())
|
||||
}
|
||||
|
||||
fn calculate_fuel_requirement(mass: u32) -> u32 {
|
||||
mass / 3 - 2
|
||||
}
|
||||
|
||||
fn calculate_fuel_requirement_including_fuel_mass(mass: u32) -> u32 {
|
||||
let mut fuel: i32 = mass as i32 / 3 - 2;
|
||||
let mut total_requirement = 0;
|
||||
|
||||
while fuel > 0 {
|
||||
total_requirement += fuel as u32;
|
||||
fuel = fuel / 3 - 2;
|
||||
}
|
||||
|
||||
total_requirement
|
||||
}
|
||||
|
||||
fn calculate_fuel_sum(masses: Vec<u32>) -> u32 {
|
||||
let fuel_requirements: Vec<u32> = masses
|
||||
.iter()
|
||||
.map(|mass| calculate_fuel_requirement(*mass))
|
||||
.collect();
|
||||
fuel_requirements.iter().sum()
|
||||
}
|
||||
|
||||
fn calculate_fuel_sum_including_fuel_mass(masses: Vec<u32>) -> u32 {
|
||||
let fuel_requirements: Vec<u32> = masses
|
||||
.iter()
|
||||
.map(|mass| calculate_fuel_requirement_including_fuel_mass(*mass))
|
||||
.collect();
|
||||
fuel_requirements.iter().sum()
|
||||
}
|
||||
|
||||
fn solve_part1() -> io::Result<u32> {
|
||||
Ok(calculate_fuel_sum(read_masses(INPUT)?))
|
||||
}
|
||||
|
||||
fn solve_part2() -> io::Result<u32> {
|
||||
Ok(calculate_fuel_sum_including_fuel_mass(read_masses(INPUT)?))
|
||||
}
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
println!("Part 1: {}", solve_part1()?);
|
||||
println!("Part 2: {}", solve_part2()?);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const TEST_INPUT: &str = "input/test.txt";
|
||||
|
||||
#[test]
|
||||
fn reads_masses() {
|
||||
assert_eq!(read_masses(TEST_INPUT).unwrap(), vec![12, 14, 1969, 100756]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn calculates_correct_fuel_requirements() {
|
||||
assert_eq!(calculate_fuel_requirement(12), 2);
|
||||
assert_eq!(calculate_fuel_requirement(14), 2);
|
||||
assert_eq!(calculate_fuel_requirement(1969), 654);
|
||||
assert_eq!(calculate_fuel_requirement(100756), 33583);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn calculates_correct_fuel_requirements_including_fuel_mass() {
|
||||
assert_eq!(calculate_fuel_requirement_including_fuel_mass(14), 2);
|
||||
assert_eq!(calculate_fuel_requirement_including_fuel_mass(1969), 966);
|
||||
assert_eq!(calculate_fuel_requirement_including_fuel_mass(100756), 50346);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user