add day01 soulution
This commit is contained in:
commit
7db0c7c6c4
5 changed files with 1062 additions and 0 deletions
7
2024/Cargo.lock
generated
Normal file
7
2024/Cargo.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aoc2024"
|
||||||
|
version = "0.1.0"
|
6
2024/Cargo.toml
Normal file
6
2024/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "aoc2024"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
1000
2024/input/01_input.txt
Normal file
1000
2024/input/01_input.txt
Normal file
File diff suppressed because it is too large
Load diff
47
2024/src/day01.rs
Normal file
47
2024/src/day01.rs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
use std::fs::read_to_string;
|
||||||
|
|
||||||
|
fn read_as_vectors(input: &str) -> (Vec<i32>, Vec<i32>) {
|
||||||
|
let input = read_to_string(input).unwrap();
|
||||||
|
let (left, right): (Vec<_>, Vec<_>) = input
|
||||||
|
.lines()
|
||||||
|
.map(|x| {
|
||||||
|
let mut l = x.split_whitespace().map(|n| n.parse::<i32>().unwrap());
|
||||||
|
(l.next().unwrap(), l.next().unwrap())
|
||||||
|
})
|
||||||
|
.unzip();
|
||||||
|
(left, right)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn stage1(input: &str) -> i32 {
|
||||||
|
let (mut left, mut right) = read_as_vectors(input);
|
||||||
|
left.sort();
|
||||||
|
right.sort();
|
||||||
|
let res: i32 = left
|
||||||
|
.iter()
|
||||||
|
.zip(right.iter())
|
||||||
|
.map(|(l, r)| (l - r).abs())
|
||||||
|
.sum();
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn stage2(input: &str) -> i32 {
|
||||||
|
let (left, right) = read_as_vectors(input);
|
||||||
|
left.iter()
|
||||||
|
.map(|l| right.iter().filter(|&f| *f == *l).count() as i32 * l)
|
||||||
|
.sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_stage1() {
|
||||||
|
assert_eq!(stage1("input/01_input.txt"), 1590491);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_stage2() {
|
||||||
|
assert_eq!(stage2("input/01_input.txt"), 22588371);
|
||||||
|
}
|
||||||
|
}
|
2
2024/src/lib.rs
Normal file
2
2024/src/lib.rs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#[allow(dead_code)]
|
||||||
|
mod day01;
|
Loading…
Reference in a new issue