Add day2
This commit is contained in:
parent
e55a2e38c4
commit
5b1f405183
7
day2/Cargo.lock
generated
Normal file
7
day2/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 = "day2"
|
||||||
|
version = "0.1.0"
|
||||||
6
day2/Cargo.toml
Normal file
6
day2/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[package]
|
||||||
|
name = "day2"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
52
day2/src/main.rs
Normal file
52
day2/src/main.rs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
fn parse(input: &str) -> Vec<Vec<u32>> {
|
||||||
|
input
|
||||||
|
.lines()
|
||||||
|
.map(|line| {
|
||||||
|
line.split_whitespace()
|
||||||
|
.map(|level| level.parse::<u32>().unwrap())
|
||||||
|
.collect()
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_safe(report: &[u32]) -> bool {
|
||||||
|
let pairs: Vec<(u32, u32)> = report
|
||||||
|
.windows(2)
|
||||||
|
.map(|w| (*w.first().unwrap(), *w.get(1).unwrap()))
|
||||||
|
.collect();
|
||||||
|
pairs.iter().all(|(x, y)| x < y && x + 3 >= *y)
|
||||||
|
|| pairs.iter().all(|(x, y)| x > y && *x <= y + 3)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1(parsed_input: &[Vec<u32>]) -> u32 {
|
||||||
|
parsed_input
|
||||||
|
.iter()
|
||||||
|
.filter(|report| is_safe(report))
|
||||||
|
.count() as u32
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(parsed_input: &[Vec<u32>]) -> u32 {
|
||||||
|
let mut res = 0;
|
||||||
|
for report in parsed_input {
|
||||||
|
if is_safe(report) {
|
||||||
|
res += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for idx in 0..report.len() {
|
||||||
|
let mut modified_report = report.clone();
|
||||||
|
modified_report.remove(idx);
|
||||||
|
if is_safe(&modified_report) {
|
||||||
|
res += 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let input = include_str!("../input.txt");
|
||||||
|
let parsed_input = parse(input);
|
||||||
|
println!("{}", part1(&parsed_input));
|
||||||
|
println!("{}", part2(&parsed_input));
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user