Add 2022/10

This commit is contained in:
kageru 2022-12-12 11:09:57 +01:00
parent 09f5b95c78
commit 8c7b1dfb78
2 changed files with 369 additions and 0 deletions

140
2022/inputs/day10 Normal file
View File

@ -0,0 +1,140 @@
noop
addx 5
noop
noop
noop
addx 1
addx 2
addx 5
addx 2
addx 5
noop
noop
noop
noop
noop
addx -12
addx 18
addx -1
noop
addx 3
addx 5
addx -5
addx 7
noop
addx -36
addx 18
addx -16
noop
noop
noop
addx 5
addx 2
addx 5
addx 2
addx 13
addx -6
addx -4
addx 5
addx 2
addx 4
addx -3
addx 2
noop
addx 3
addx 2
addx 5
addx -40
addx 25
addx -22
addx 25
addx -21
addx 5
addx 3
noop
addx 2
addx 19
addx -10
addx -4
noop
addx -4
addx 7
noop
addx 3
addx 2
addx 5
addx 2
addx -26
addx 27
addx -36
noop
noop
noop
noop
addx 4
addx 6
noop
addx 12
addx -11
addx 2
noop
noop
noop
addx 5
addx 5
addx 2
noop
noop
addx 1
addx 2
addx 5
addx 2
addx 1
noop
noop
addx -38
noop
addx 9
addx -4
noop
noop
addx 7
addx 10
addx -9
addx 2
noop
addx -9
addx 14
addx 5
addx 2
addx -24
addx 25
addx 2
addx 5
addx 2
addx -30
addx 31
addx -38
addx 7
noop
noop
noop
addx 1
addx 21
addx -16
addx 8
addx -4
addx 2
addx 3
noop
noop
addx 5
addx -2
addx 5
addx 3
addx -1
addx -1
addx 4
addx 5
addx -38
noop

229
2022/src/bin/day10.rs Normal file
View File

@ -0,0 +1,229 @@
#![feature(test)]
extern crate test;
use aoc2022::{boilerplate, common::*};
use itertools::Itertools;
const DAY: usize = 10;
type Parsed = Vec<Instruction>;
#[derive(Debug)]
enum Instruction {
Add(i32),
Noop,
}
fn parse_input(raw: &str) -> Parsed {
raw.lines()
.flat_map(|line| {
if line == "noop" {
vec![Instruction::Noop]
} else {
vec![Instruction::Noop, Instruction::Add(line[5..].parse().unwrap())]
}
})
.collect()
}
fn part1(parsed: &Parsed) -> i32 {
const INSPECTION_CYCLES: &[i32] = &[20, 60, 100, 140, 180, 220];
parsed
.iter()
.zip(1..)
.scan(1, |x, (ins, cycle)| {
let ret = Some((cycle, *x * cycle));
if let Instruction::Add(n) = ins {
*x += n
}
ret
})
.filter_map(|(c, x)| INSPECTION_CYCLES.contains(&c).then_some(x))
.sum()
}
fn part2(parsed: &Parsed) -> String {
parsed
.iter()
.zip((0..=39).cycle())
.scan(1, |x, (ins, cycle)| {
let ret = if *x - 1 <= cycle && cycle <= *x + 1 { '#' } else { '.' };
if let Instruction::Add(n) = ins {
*x += n
}
Some(ret)
})
.chunks(40)
.into_iter()
.map(|c| c.collect::<String>())
.join("\n")
}
boilerplate! {
TEST_INPUT == "\
addx 15
addx -11
addx 6
addx -3
addx 5
addx -1
addx -8
addx 13
addx 4
noop
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx -35
addx 1
addx 24
addx -19
addx 1
addx 16
addx -11
noop
noop
addx 21
addx -15
noop
noop
addx -3
addx 9
addx 1
addx -3
addx 8
addx 1
addx 5
noop
noop
noop
noop
noop
addx -36
noop
addx 1
addx 7
noop
noop
noop
addx 2
addx 6
noop
noop
noop
noop
noop
addx 1
noop
noop
addx 7
addx 1
noop
addx -13
addx 13
addx 7
noop
addx 1
addx -33
noop
noop
noop
addx 2
noop
noop
noop
addx 8
noop
addx -1
addx 2
addx 1
noop
addx 17
addx -9
addx 1
addx 1
addx -3
addx 11
noop
noop
addx 1
noop
addx 1
noop
noop
addx -13
addx -19
addx 1
addx 3
addx 26
addx -30
addx 12
addx -1
addx 3
addx 1
noop
noop
noop
addx -9
addx 18
addx 1
addx 2
noop
noop
addx 9
noop
noop
noop
addx -1
addx 2
addx -37
addx 1
addx 3
noop
addx 15
addx -21
addx 22
addx -6
addx 1
noop
addx 2
addx 1
noop
addx -10
noop
noop
addx 20
addx 1
addx 2
addx 2
addx -6
addx -11
noop
noop
noop",
tests: {
part1: { TEST_INPUT => 13140 },
part2: { TEST_INPUT => P2_TEST_OUTPUT },
},
bench1 == 11780,
bench2 == "###..####.#..#.#....###...##..#..#..##..
#..#....#.#..#.#....#..#.#..#.#..#.#..#.
#..#...#..#..#.#....###..#..#.#..#.#..#.
###...#...#..#.#....#..#.####.#..#.####.
#....#....#..#.#....#..#.#..#.#..#.#..#.
#....####..##..####.###..#..#..##..#..#.",
bench_parse: Vec::len => 240,
}
#[cfg(test)]
const P2_TEST_OUTPUT: &str = "\
##..##..##..##..##..##..##..##..##..##..
###...###...###...###...###...###...###.
####....####....####....####....####....
#####.....#####.....#####.....#####.....
######......######......######......####
#######.......#######.......#######.....";