2022 rust day 1

This commit is contained in:
Maciej Jur 2022-12-01 11:56:38 +01:00
parent 5003737a3f
commit 22b6450724
3 changed files with 2320 additions and 9 deletions

2259
2022/rust/inputs/day01.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,14 @@
a
b
c
d
sss
asas
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000

View file

@ -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
})
}