aoc-rs-2021/src/day_01.rs
Jan Christian Grünhage f3afa52c9b initial commit
2021-12-01 23:05:08 +01:00

56 lines
1.2 KiB
Rust

use aoc_runner_derive::{aoc, aoc_generator};
use itertools::Itertools;
#[aoc_generator(day1)]
pub fn parse_measurements(input: &str) -> Vec<usize> {
input
.split('\n')
.map(|input| input.parse().unwrap())
.collect()
}
#[aoc(day1, part1)]
pub fn count_increases_indexed(input: &[usize]) -> usize {
let mut count = 0;
for i in 1..input.len() {
if input[i - 1] < input[i] {
count += 1;
}
}
count
}
#[aoc(day1, part1, tuple_windows)]
pub fn count_increases_tuple_windows(input: &[usize]) -> usize {
let mut count = 0;
for (a, b) in input.iter().tuple_windows() {
if a < b {
count += 1;
}
}
count
}
#[aoc(day1, part2)]
pub fn count_sliding_increases_indexed(input: &[usize]) -> usize {
let mut count = 0;
for i in 3..input.len() {
if input[i - 3] + input[i - 2] + input[i - 1] < input[i - 2] + input[i - 1] + input[i] {
count += 1;
}
}
count
}
#[aoc(day1, part2, tuple_windows)]
pub fn count_sliding_increases_tuple_windows(input: &[usize]) -> usize {
let mut count = 0;
for (a, b, c, d) in input.iter().tuple_windows() {
if a + b + c < b + c + d {
count += 1;
}
}
count
}