Add day1
This commit is contained in:
2
2024/day1/.gitignore
vendored
Normal file
2
2024/day1/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/target
|
||||||
|
input.txt
|
7
2024/day1/Cargo.lock
generated
Normal file
7
2024/day1/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 = "day1"
|
||||||
|
version = "0.1.0"
|
6
2024/day1/Cargo.toml
Normal file
6
2024/day1/Cargo.toml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[package]
|
||||||
|
name = "day1"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
32
2024/day1/src/main.rs
Normal file
32
2024/day1/src/main.rs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
use std::fs;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let input = fs::read_to_string("./input.txt").unwrap();
|
||||||
|
let mut column1 = Vec::new();
|
||||||
|
let mut column2 = Vec::new();
|
||||||
|
for line in input.lines() {
|
||||||
|
let mut split = line.split_whitespace();
|
||||||
|
column1.push(split.next().unwrap().parse::<i32>().unwrap());
|
||||||
|
column2.push(split.next().unwrap().parse::<i32>().unwrap());
|
||||||
|
}
|
||||||
|
column1.sort_unstable();
|
||||||
|
column2.sort_unstable();
|
||||||
|
|
||||||
|
println!("Solution 1: {}", puzzle1(&column1, &column2));
|
||||||
|
println!("Solution 2: {}", puzzle2(&column1, &column2));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn puzzle1(column1: &[i32], column2: &[i32]) -> i32 {
|
||||||
|
column1
|
||||||
|
.iter()
|
||||||
|
.zip(column2)
|
||||||
|
.map(|(c1, c2)| (c1 - c2).abs())
|
||||||
|
.sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn puzzle2(column1: &[i32], column2: &[i32]) -> i32 {
|
||||||
|
column1
|
||||||
|
.iter()
|
||||||
|
.map(|c1| column2.iter().filter(|&c2| c1 == c2).count() as i32 * c1)
|
||||||
|
.sum()
|
||||||
|
}
|
Reference in New Issue
Block a user