Day 10
This commit is contained in:
parent
d61cb31103
commit
8ec6b0413b
7
day10/Cargo.lock
generated
Normal file
7
day10/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 = "day10"
|
||||
version = "0.1.0"
|
143
day10/input.txt
Normal file
143
day10/input.txt
Normal file
@ -0,0 +1,143 @@
|
||||
addx 2
|
||||
addx 3
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
addx 5
|
||||
addx -1
|
||||
addx 5
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx 4
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx -5
|
||||
addx 6
|
||||
addx 3
|
||||
addx 1
|
||||
addx 5
|
||||
addx 1
|
||||
noop
|
||||
addx -38
|
||||
addx 41
|
||||
addx -22
|
||||
addx -14
|
||||
addx 7
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx -2
|
||||
addx 2
|
||||
noop
|
||||
addx 17
|
||||
addx -12
|
||||
addx 5
|
||||
addx 2
|
||||
addx -16
|
||||
addx 17
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -30
|
||||
noop
|
||||
addx -6
|
||||
addx 1
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx -12
|
||||
addx 17
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 10
|
||||
addx -9
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -5
|
||||
addx 6
|
||||
addx 4
|
||||
noop
|
||||
noop
|
||||
addx -37
|
||||
noop
|
||||
noop
|
||||
addx 17
|
||||
addx -12
|
||||
addx 30
|
||||
addx -23
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx -17
|
||||
addx 22
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
addx -10
|
||||
addx 11
|
||||
addx 4
|
||||
noop
|
||||
addx 5
|
||||
addx -2
|
||||
noop
|
||||
addx -6
|
||||
addx -29
|
||||
addx 37
|
||||
addx -30
|
||||
addx 27
|
||||
addx -2
|
||||
addx -22
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
noop
|
||||
addx 7
|
||||
addx -2
|
||||
addx 2
|
||||
addx 5
|
||||
addx -5
|
||||
addx 6
|
||||
addx 2
|
||||
addx 2
|
||||
addx 5
|
||||
addx -25
|
||||
noop
|
||||
addx -10
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 1
|
||||
addx 4
|
||||
addx 1
|
||||
noop
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx -1
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx 2
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
@ -1,3 +1,84 @@
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
use std::fs::read_to_string;
|
||||
|
||||
type Register = i32;
|
||||
|
||||
enum Instruction {
|
||||
Noop,
|
||||
Addx(Register),
|
||||
Addx2(Register),
|
||||
}
|
||||
|
||||
impl From<&str> for Instruction {
|
||||
fn from(value: &str) -> Self {
|
||||
match &value.split_whitespace().collect::<Vec<_>>()[..] {
|
||||
["addx", v] => Self::Addx(v.parse::<Register>().unwrap()),
|
||||
["noop"] => Self::Noop,
|
||||
_ => panic!("Invalid instruction"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Cpu<T> {
|
||||
instruction: Option<Instruction>,
|
||||
x: Register,
|
||||
instructions: T,
|
||||
}
|
||||
|
||||
impl<T> Cpu<T> {
|
||||
fn new(instructions: T) -> Self {
|
||||
Self {
|
||||
instruction: Some(Instruction::Noop),
|
||||
x: 1,
|
||||
instructions,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Iterator for Cpu<T>
|
||||
where
|
||||
T: Iterator<Item = Instruction>,
|
||||
{
|
||||
type Item = Register;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
match self.instruction {
|
||||
Some(Instruction::Noop) => self.instruction = self.instructions.next(),
|
||||
Some(Instruction::Addx(v)) => self.instruction = Some(Instruction::Addx2(v)),
|
||||
Some(Instruction::Addx2(v)) => {
|
||||
self.x += v;
|
||||
self.instruction = self.instructions.next()
|
||||
}
|
||||
None => return None,
|
||||
}
|
||||
Some(self.x)
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let input = "addx 15\naddx -11\naddx 6\naddx -3\naddx 5\naddx -1\naddx -8\naddx 13\naddx 4\nnoop\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx 5\naddx -1\naddx -35\naddx 1\naddx 24\naddx -19\naddx 1\naddx 16\naddx -11\nnoop\nnoop\naddx 21\naddx -15\nnoop\nnoop\naddx -3\naddx 9\naddx 1\naddx -3\naddx 8\naddx 1\naddx 5\nnoop\nnoop\nnoop\nnoop\nnoop\naddx -36\nnoop\naddx 1\naddx 7\nnoop\nnoop\nnoop\naddx 2\naddx 6\nnoop\nnoop\nnoop\nnoop\nnoop\naddx 1\nnoop\nnoop\naddx 7\naddx 1\nnoop\naddx -13\naddx 13\naddx 7\nnoop\naddx 1\naddx -33\nnoop\nnoop\nnoop\naddx 2\nnoop\nnoop\nnoop\naddx 8\nnoop\naddx -1\naddx 2\naddx 1\nnoop\naddx 17\naddx -9\naddx 1\naddx 1\naddx -3\naddx 11\nnoop\nnoop\naddx 1\nnoop\naddx 1\nnoop\nnoop\naddx -13\naddx -19\naddx 1\naddx 3\naddx 26\naddx -30\naddx 12\naddx -1\naddx 3\naddx 1\nnoop\nnoop\nnoop\naddx -9\naddx 18\naddx 1\naddx 2\nnoop\nnoop\naddx 9\nnoop\nnoop\nnoop\naddx -1\naddx 2\naddx -37\naddx 1\naddx 3\nnoop\naddx 15\naddx -21\naddx 22\naddx -6\naddx 1\nnoop\naddx 2\naddx 1\nnoop\naddx -10\nnoop\nnoop\naddx 20\naddx 1\naddx 2\naddx 2\naddx -6\naddx -11\nnoop\nnoop\nnoop";
|
||||
let input = read_to_string("input.txt").unwrap_or_else(|_| input.to_owned());
|
||||
let instructions = input.lines().map(Instruction::from);
|
||||
let signal_strength: Register = Cpu::new(instructions)
|
||||
.enumerate()
|
||||
.map(|(i, x)| {
|
||||
let i = i as Register;
|
||||
let horizontal = i % 40;
|
||||
print!(
|
||||
"{}",
|
||||
if (horizontal - x).abs() <= 1 {
|
||||
'█'
|
||||
} else {
|
||||
' '
|
||||
}
|
||||
);
|
||||
if horizontal == 39 {
|
||||
println!();
|
||||
}
|
||||
(i, x)
|
||||
})
|
||||
.skip(19)
|
||||
.step_by(40)
|
||||
.map(|(i, x)| (i + 1) * x)
|
||||
.sum();
|
||||
println!("signal strength: {signal_strength}");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user