2024: Day 1, part 1

This commit is contained in:
Wesley Moore 2024-12-02 10:39:41 +10:00
parent 663fc5bc6e
commit ca118d2856
No known key found for this signature in database
5 changed files with 1071 additions and 0 deletions

7
2024/Cargo.lock generated Normal file
View file

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "advent-of-code"
version = "0.1.0"

6
2024/Cargo.toml Normal file
View file

@ -0,0 +1,6 @@
[package]
name = "advent-of-code"
version = "0.1.0"
edition = "2021"
[dependencies]

1000
2024/input/day1.txt Executable file

File diff suppressed because it is too large Load diff

30
2024/src/day1.rs Normal file
View file

@ -0,0 +1,30 @@
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::path::Path;
pub fn main(input: &Path) {
let file = BufReader::new(File::open(input).expect("unable to open input"));
let mut group1 = Vec::new();
let mut group2 = Vec::new();
for line in file.lines() {
let line = line.expect("error reading input line");
let mut split = line.split_ascii_whitespace();
let mut next = || split.next().unwrap().parse::<i32>().unwrap();
group1.push(next());
group2.push(next());
}
group1.sort();
group2.sort();
let part1: i32 = group1
.iter()
.copied()
.zip(group2.iter().copied())
.map(|(a, b)| (a - b).abs())
.sum();
println!("Part 1: {part1}");
}

28
2024/src/main.rs Normal file
View file

@ -0,0 +1,28 @@
use std::env;
use std::path::PathBuf;
mod day1;
fn main() {
let Some(input) = env::args().skip(1).next().map(PathBuf::from) else {
eprintln!("Usage advent-of-code dayN.txt");
return;
};
let day = input
.file_stem()
.and_then(|stem| stem.to_str())
.and_then(|stem| stem.strip_prefix("day").unwrap_or(stem).parse::<u8>().ok());
let Some(day) = day else {
eprintln!("Unable to determine day from {}", input.display());
return;
};
match day {
1 => day1::main(&input),
_ => {
eprintln!("Unknown day {day}");
return;
}
}
}