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
|
||||
b
|
||||
c
|
||||
d
|
||||
sss
|
||||
asas
|
||||
1000
|
||||
2000
|
||||
3000
|
||||
|
||||
4000
|
||||
|
||||
5000
|
||||
6000
|
||||
|
||||
7000
|
||||
8000
|
||||
9000
|
||||
|
||||
10000
|
||||
|
|
|
@ -1,10 +1,54 @@
|
|||
use crate::utils;
|
||||
|
||||
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");
|
||||
for x in data {
|
||||
println!("{}", x);
|
||||
println!("Part 1: {}", solve1(&data));
|
||||
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