2022 day 20 rust

This commit is contained in:
Maciej Jur 2022-12-20 11:57:24 +01:00
parent 7f830d635e
commit fce1331719
4 changed files with 5067 additions and 1 deletions

5000
2022/rust/inputs/day20.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -21,5 +21,6 @@ fn main() {
// solutions::day16::run(); // solutions::day16::run();
// solutions::day17::run(); // solutions::day17::run();
// solutions::day18::run(); // solutions::day18::run();
solutions::day19::run(); // solutions::day19::run();
solutions::day20::run();
} }

View file

@ -0,0 +1,64 @@
use std::collections::VecDeque;
use crate::utils;
pub fn run() -> () {
let data = parse_data(&utils::read_lines(utils::Source::Day(20)));
println!("Day 20");
println!("Part 1: {}", solve1(&data));
println!("Part 2: {}", solve2(&data));
}
fn reorder(data: &[(usize, i32)]) -> Vec<i32> {
let mut array = data.iter().copied().collect::<VecDeque<_>>();
for item in data {
let index = array.iter().position(|item_ref| item == item_ref).unwrap();
array.remove(index);
let index = (index as i32 + item.1).rem_euclid(array.len() as i32) as usize;
array.insert(index, *item);
}
let zero_offset = array.iter().position(|item_ref| 0 == item_ref.1).unwrap();
array.rotate_left(zero_offset);
array.into_iter().map(|x| x.1).collect()
}
fn solve1(data: &[(usize, i32)]) -> i32 {
let array = reorder(data);
let len = array.len();
array[1000 % len] + array[2000 % len] + array[3000 % len]
}
fn solve2(data: &[(usize, i32)]) -> i32 {
reorder(data);
2
}
fn parse_data<T: AsRef<str>>(data: &[T]) -> Vec<(usize, i32)> {
data.iter()
.enumerate()
.map(|(index, line)| (index, line.as_ref().parse().unwrap()))
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
static DATA: &[&str] = &["1", "2", "-3", "3", "-2", "0", "4"];
#[test]
fn part1() {
assert_eq!(3, solve1(&parse_data(DATA)));
}
#[test]
fn part2() {
assert_eq!(2, solve2(&parse_data(DATA)));
}
}

View file

@ -17,3 +17,4 @@ pub mod day16;
pub mod day17; pub mod day17;
pub mod day18; pub mod day18;
pub mod day19; pub mod day19;
pub mod day20;