2022 rust day 1
This commit is contained in:
parent
5003737a3f
commit
22b6450724
2259
2022/rust/inputs/day01.txt
Normal file
2259
2022/rust/inputs/day01.txt
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,14 @@
|
||||||
a
|
1000
|
||||||
b
|
2000
|
||||||
c
|
3000
|
||||||
d
|
|
||||||
sss
|
4000
|
||||||
asas
|
|
||||||
|
5000
|
||||||
|
6000
|
||||||
|
|
||||||
|
7000
|
||||||
|
8000
|
||||||
|
9000
|
||||||
|
|
||||||
|
10000
|
||||||
|
|
|
@ -1,10 +1,54 @@
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
|
|
||||||
pub fn run() -> () {
|
pub fn run() -> () {
|
||||||
let data = utils::read_lines(utils::Source::Scratch);
|
let data = parse_data(utils::read_lines(utils::Source::Day(1)));
|
||||||
|
|
||||||
println!("Day 1");
|
println!("Day 1");
|
||||||
for x in data {
|
println!("Part 1: {}", solve1(&data));
|
||||||
println!("{}", x);
|
println!("Part 2: {}", solve2(&data));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve1(data: &Vec<Vec<i32>>) -> i32 {
|
||||||
|
data.iter().map(|xs| xs.iter().sum::<i32>()).max().unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn insert(arr: &mut [i32; 3], to_insert: i32) {
|
||||||
|
if to_insert > arr[2] {
|
||||||
|
for idx in (0..3).rev() {
|
||||||
|
if idx != 0 && arr[idx - 1] < to_insert {
|
||||||
|
arr[idx] = arr[idx - 1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
arr[idx] = to_insert;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn solve2(data: &Vec<Vec<i32>>) -> i32 {
|
||||||
|
let mut three = [0; 3];
|
||||||
|
|
||||||
|
for x in data {
|
||||||
|
let sum = x.iter().sum::<i32>();
|
||||||
|
insert(&mut three, sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
three.iter().sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn parse_data(data: Vec<String>) -> Vec<Vec<i32>> {
|
||||||
|
data.iter()
|
||||||
|
.fold(vec![vec![]], | mut acc, next| {
|
||||||
|
if next.len() == 0 {
|
||||||
|
acc.push(Vec::new())
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let number: i32 = next.parse().expect("Parse error");
|
||||||
|
acc.last_mut().and_then(|last| Some(last.push(number)));
|
||||||
|
}
|
||||||
|
acc
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue