day10 part 1.
This commit is contained in:
		
							parent
							
								
									3b18b90bda
								
							
						
					
					
						commit
						711dbb63d2
					
				
					 14 changed files with 1005 additions and 18 deletions
				
			
		
							
								
								
									
										27
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										27
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -69,12 +69,36 @@ dependencies = [
 | 
				
			||||||
 "regex",
 | 
					 "regex",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "day10"
 | 
				
			||||||
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "aoc_libs",
 | 
				
			||||||
 | 
					 "nom",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "memchr"
 | 
					name = "memchr"
 | 
				
			||||||
version = "2.6.4"
 | 
					version = "2.6.4"
 | 
				
			||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
 | 
					checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "minimal-lexical"
 | 
				
			||||||
 | 
					version = "0.2.1"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "nom"
 | 
				
			||||||
 | 
					version = "7.1.3"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "memchr",
 | 
				
			||||||
 | 
					 "minimal-lexical",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "once_cell"
 | 
					name = "once_cell"
 | 
				
			||||||
version = "1.18.0"
 | 
					version = "1.18.0"
 | 
				
			||||||
| 
						 | 
					@ -142,6 +166,9 @@ dependencies = [
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "template"
 | 
					name = "template"
 | 
				
			||||||
version = "0.1.0"
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "aoc_libs",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "thiserror"
 | 
					name = "thiserror"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,3 @@
 | 
				
			||||||
//TODO:
 | 
					 | 
				
			||||||
#![allow(dead_code)]
 | 
					 | 
				
			||||||
mod part1;
 | 
					mod part1;
 | 
				
			||||||
mod part2;
 | 
					mod part2;
 | 
				
			||||||
mod parse;
 | 
					mod parse;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								days/day10/Cargo.toml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								days/day10/Cargo.toml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					[package]
 | 
				
			||||||
 | 
					name = "day10"
 | 
				
			||||||
 | 
					authors.workspace = true
 | 
				
			||||||
 | 
					description.workspace = true
 | 
				
			||||||
 | 
					version.workspace = true
 | 
				
			||||||
 | 
					edition.workspace = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[dependencies]
 | 
				
			||||||
 | 
					aoc_libs.workspace = true
 | 
				
			||||||
 | 
					nom.workspace = true
 | 
				
			||||||
							
								
								
									
										139
									
								
								days/day10/src/input.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								days/day10/src/input.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,139 @@
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 12
 | 
				
			||||||
 | 
					addx -5
 | 
				
			||||||
 | 
					addx -1
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 4
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 1
 | 
				
			||||||
 | 
					addx 4
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 13
 | 
				
			||||||
 | 
					addx -8
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx -19
 | 
				
			||||||
 | 
					addx 24
 | 
				
			||||||
 | 
					addx 1
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 4
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 1
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					addx -1
 | 
				
			||||||
 | 
					addx -37
 | 
				
			||||||
 | 
					addx 16
 | 
				
			||||||
 | 
					addx -13
 | 
				
			||||||
 | 
					addx 18
 | 
				
			||||||
 | 
					addx -11
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					addx 23
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx -18
 | 
				
			||||||
 | 
					addx 9
 | 
				
			||||||
 | 
					addx -8
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					addx -21
 | 
				
			||||||
 | 
					addx 26
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx -15
 | 
				
			||||||
 | 
					addx 20
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx -38
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 26
 | 
				
			||||||
 | 
					addx -4
 | 
				
			||||||
 | 
					addx -19
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					addx 1
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx -30
 | 
				
			||||||
 | 
					addx -4
 | 
				
			||||||
 | 
					addx 1
 | 
				
			||||||
 | 
					addx 18
 | 
				
			||||||
 | 
					addx -8
 | 
				
			||||||
 | 
					addx -4
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 7
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					addx -2
 | 
				
			||||||
 | 
					addx -20
 | 
				
			||||||
 | 
					addx 27
 | 
				
			||||||
 | 
					addx -20
 | 
				
			||||||
 | 
					addx 25
 | 
				
			||||||
 | 
					addx -2
 | 
				
			||||||
 | 
					addx -35
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 4
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					addx -2
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					addx -11
 | 
				
			||||||
 | 
					addx 1
 | 
				
			||||||
 | 
					addx 13
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					addx 6
 | 
				
			||||||
 | 
					addx -1
 | 
				
			||||||
 | 
					addx -2
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 7
 | 
				
			||||||
 | 
					addx -2
 | 
				
			||||||
 | 
					addx 6
 | 
				
			||||||
 | 
					addx 1
 | 
				
			||||||
 | 
					addx -21
 | 
				
			||||||
 | 
					addx 22
 | 
				
			||||||
 | 
					addx -38
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					addx -1
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 5
 | 
				
			||||||
 | 
					addx 1
 | 
				
			||||||
 | 
					addx 4
 | 
				
			||||||
 | 
					addx 3
 | 
				
			||||||
 | 
					addx -2
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					addx 7
 | 
				
			||||||
 | 
					addx -1
 | 
				
			||||||
 | 
					addx 2
 | 
				
			||||||
 | 
					addx 4
 | 
				
			||||||
 | 
					addx -10
 | 
				
			||||||
 | 
					addx -19
 | 
				
			||||||
 | 
					addx 35
 | 
				
			||||||
 | 
					addx -1
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
 | 
					noop
 | 
				
			||||||
							
								
								
									
										256
									
								
								days/day10/src/machine.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								days/day10/src/machine.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,256 @@
 | 
				
			||||||
 | 
					use std::{collections::VecDeque, fmt};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::parse::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub struct Machine {
 | 
				
			||||||
 | 
					    instructions: VecDeque<Instruction>,
 | 
				
			||||||
 | 
					    current_instruction: Option<(Instruction, usize)>,
 | 
				
			||||||
 | 
					    cycle: usize,
 | 
				
			||||||
 | 
					    x: i32,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Machine {
 | 
				
			||||||
 | 
					    pub fn load_program(instructions: VecDeque<Instruction>) -> Self {
 | 
				
			||||||
 | 
					        let mut res = Machine {
 | 
				
			||||||
 | 
					            instructions,
 | 
				
			||||||
 | 
					            current_instruction: None,
 | 
				
			||||||
 | 
					            cycle: 0,
 | 
				
			||||||
 | 
					            x: 1,
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        res.fetch_next_instruction();
 | 
				
			||||||
 | 
					        res
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn step(&mut self) -> bool {
 | 
				
			||||||
 | 
					        if self.current_instruction.is_none() {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let (instruction, cycles_left) = self.current_instruction.as_mut().unwrap();
 | 
				
			||||||
 | 
					        *cycles_left -= 1;
 | 
				
			||||||
 | 
					        if *cycles_left == 0 {
 | 
				
			||||||
 | 
					            if let Instruction::Addx(i) = instruction {
 | 
				
			||||||
 | 
					                self.x += *i
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            self.fetch_next_instruction();
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.cycle += 1;
 | 
				
			||||||
 | 
					        true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn fetch_next_instruction(&mut self) {
 | 
				
			||||||
 | 
					        self.current_instruction = self.instructions.pop_front().map(|i| (i, i.cycles()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //returns the signal strength during the middle of the 20th cycle.
 | 
				
			||||||
 | 
					    pub fn step20(&mut self) -> i32 {
 | 
				
			||||||
 | 
					        for _ in 0..19 {
 | 
				
			||||||
 | 
					            if !self.step() {
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        let ret = self.x*(self.cycle as i32 +1);
 | 
				
			||||||
 | 
					        self.step();
 | 
				
			||||||
 | 
					        ret
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn signal_strength(&self) -> i32 {
 | 
				
			||||||
 | 
					        self.x * (self.cycle as i32)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl fmt::Debug for Machine {
 | 
				
			||||||
 | 
					    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
				
			||||||
 | 
					        write!(
 | 
				
			||||||
 | 
					            f,
 | 
				
			||||||
 | 
					            "cycle={} x={} current instruction: {:?} ({} instructions left)",
 | 
				
			||||||
 | 
					            self.cycle,
 | 
				
			||||||
 | 
					            self.x,
 | 
				
			||||||
 | 
					            self.current_instruction,
 | 
				
			||||||
 | 
					            self.instructions.len()
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_machine() {
 | 
				
			||||||
 | 
					        let input = vec![
 | 
				
			||||||
 | 
					            Instruction::Addx(15),
 | 
				
			||||||
 | 
					            Instruction::Addx(-11),
 | 
				
			||||||
 | 
					            Instruction::Addx(6),
 | 
				
			||||||
 | 
					            Instruction::Addx(-3),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-8),
 | 
				
			||||||
 | 
					            Instruction::Addx(13),
 | 
				
			||||||
 | 
					            Instruction::Addx(4),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-35),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(24),
 | 
				
			||||||
 | 
					            Instruction::Addx(-19),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(16),
 | 
				
			||||||
 | 
					            Instruction::Addx(-11),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(21),
 | 
				
			||||||
 | 
					            Instruction::Addx(-15),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-3),
 | 
				
			||||||
 | 
					            Instruction::Addx(9),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-3),
 | 
				
			||||||
 | 
					            Instruction::Addx(8),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-36),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(7),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(6),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(7),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-13),
 | 
				
			||||||
 | 
					            Instruction::Addx(13),
 | 
				
			||||||
 | 
					            Instruction::Addx(7),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-33),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(8),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(17),
 | 
				
			||||||
 | 
					            Instruction::Addx(-9),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-3),
 | 
				
			||||||
 | 
					            Instruction::Addx(11),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-13),
 | 
				
			||||||
 | 
					            Instruction::Addx(-19),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(3),
 | 
				
			||||||
 | 
					            Instruction::Addx(26),
 | 
				
			||||||
 | 
					            Instruction::Addx(-30),
 | 
				
			||||||
 | 
					            Instruction::Addx(12),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(3),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-9),
 | 
				
			||||||
 | 
					            Instruction::Addx(18),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(9),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(-37),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(3),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(15),
 | 
				
			||||||
 | 
					            Instruction::Addx(-21),
 | 
				
			||||||
 | 
					            Instruction::Addx(22),
 | 
				
			||||||
 | 
					            Instruction::Addx(-6),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-10),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(20),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(-6),
 | 
				
			||||||
 | 
					            Instruction::Addx(-11),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					        let mut machine = Machine::load_program(input.into());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //20th
 | 
				
			||||||
 | 
					        assert_eq!(machine.step20(), 420);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        machine.step20();
 | 
				
			||||||
 | 
					        //60th
 | 
				
			||||||
 | 
					        assert_eq!(machine.step20(), 1140);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        machine.step20();
 | 
				
			||||||
 | 
					        //100th
 | 
				
			||||||
 | 
					        assert_eq!(machine.step20(), 1800);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        machine.step20();
 | 
				
			||||||
 | 
					        //140th
 | 
				
			||||||
 | 
					        assert_eq!(machine.step20(), 2940);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        machine.step20();
 | 
				
			||||||
 | 
					        //180th
 | 
				
			||||||
 | 
					        assert_eq!(machine.step20(), 2880);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        machine.step20();
 | 
				
			||||||
 | 
					        //220th
 | 
				
			||||||
 | 
					        assert_eq!(machine.step20(), 3960);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								days/day10/src/main.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								days/day10/src/main.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					mod part1;
 | 
				
			||||||
 | 
					mod part2;
 | 
				
			||||||
 | 
					mod parse;
 | 
				
			||||||
 | 
					mod machine;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn main() {
 | 
				
			||||||
 | 
					    let input = include_str!("./input.txt");
 | 
				
			||||||
 | 
					    let structured_input = parse::parse(input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    println!("Part One");
 | 
				
			||||||
 | 
					    println!("Result: {}", part1::part1(structured_input));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    println!("Part Two");
 | 
				
			||||||
 | 
					    println!("Result: {}", part2::part2());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										344
									
								
								days/day10/src/parse.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										344
									
								
								days/day10/src/parse.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,344 @@
 | 
				
			||||||
 | 
					use std::collections::VecDeque;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use nom::{
 | 
				
			||||||
 | 
					    branch::alt,
 | 
				
			||||||
 | 
					    bytes::complete::tag,
 | 
				
			||||||
 | 
					    combinator::{all_consuming, map, value},
 | 
				
			||||||
 | 
					    sequence::preceded,
 | 
				
			||||||
 | 
					    Finish, IResult,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug, Clone, Copy, PartialEq, Eq)]
 | 
				
			||||||
 | 
					pub enum Instruction {
 | 
				
			||||||
 | 
					    NoOp,
 | 
				
			||||||
 | 
					    Addx(i32),
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Instruction {
 | 
				
			||||||
 | 
					    fn parse(i: &str) -> IResult<&str, Self> {
 | 
				
			||||||
 | 
					        let noop = tag("noop");
 | 
				
			||||||
 | 
					        let addx = preceded(tag("addx "), nom::character::complete::i32);
 | 
				
			||||||
 | 
					        alt((value(Self::NoOp, noop), map(addx, Self::Addx)))(i)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    pub fn cycles(self) -> usize {
 | 
				
			||||||
 | 
					        match self {
 | 
				
			||||||
 | 
					            Self::NoOp => 1,
 | 
				
			||||||
 | 
					            Self::Addx(_) => 2,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn parse(input: &str) -> VecDeque<Instruction> {
 | 
				
			||||||
 | 
					    input
 | 
				
			||||||
 | 
					        .lines()
 | 
				
			||||||
 | 
					        .map(|l| all_consuming(Instruction::parse)(l).finish().unwrap().1)
 | 
				
			||||||
 | 
					        .collect()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_parse() {
 | 
				
			||||||
 | 
					        let input = concat!(
 | 
				
			||||||
 | 
					            "addx 15\n",
 | 
				
			||||||
 | 
					            "addx -11\n",
 | 
				
			||||||
 | 
					            "addx 6\n",
 | 
				
			||||||
 | 
					            "addx -3\n",
 | 
				
			||||||
 | 
					            "addx 5\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx -8\n",
 | 
				
			||||||
 | 
					            "addx 13\n",
 | 
				
			||||||
 | 
					            "addx 4\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx 5\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx 5\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx 5\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx 5\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx -35\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 24\n",
 | 
				
			||||||
 | 
					            "addx -19\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 16\n",
 | 
				
			||||||
 | 
					            "addx -11\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 21\n",
 | 
				
			||||||
 | 
					            "addx -15\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -3\n",
 | 
				
			||||||
 | 
					            "addx 9\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx -3\n",
 | 
				
			||||||
 | 
					            "addx 8\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 5\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -36\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 7\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 2\n",
 | 
				
			||||||
 | 
					            "addx 6\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 7\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -13\n",
 | 
				
			||||||
 | 
					            "addx 13\n",
 | 
				
			||||||
 | 
					            "addx 7\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx -33\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 2\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 8\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx 2\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 17\n",
 | 
				
			||||||
 | 
					            "addx -9\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx -3\n",
 | 
				
			||||||
 | 
					            "addx 11\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -13\n",
 | 
				
			||||||
 | 
					            "addx -19\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 3\n",
 | 
				
			||||||
 | 
					            "addx 26\n",
 | 
				
			||||||
 | 
					            "addx -30\n",
 | 
				
			||||||
 | 
					            "addx 12\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx 3\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -9\n",
 | 
				
			||||||
 | 
					            "addx 18\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 2\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 9\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -1\n",
 | 
				
			||||||
 | 
					            "addx 2\n",
 | 
				
			||||||
 | 
					            "addx -37\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 3\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 15\n",
 | 
				
			||||||
 | 
					            "addx -21\n",
 | 
				
			||||||
 | 
					            "addx 22\n",
 | 
				
			||||||
 | 
					            "addx -6\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 2\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx -10\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "addx 20\n",
 | 
				
			||||||
 | 
					            "addx 1\n",
 | 
				
			||||||
 | 
					            "addx 2\n",
 | 
				
			||||||
 | 
					            "addx 2\n",
 | 
				
			||||||
 | 
					            "addx -6\n",
 | 
				
			||||||
 | 
					            "addx -11\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					            "noop\n",
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        assert_eq!(
 | 
				
			||||||
 | 
					            parse(input),
 | 
				
			||||||
 | 
					            vec![
 | 
				
			||||||
 | 
					                Instruction::Addx(15),
 | 
				
			||||||
 | 
					                Instruction::Addx(-11),
 | 
				
			||||||
 | 
					                Instruction::Addx(6),
 | 
				
			||||||
 | 
					                Instruction::Addx(-3),
 | 
				
			||||||
 | 
					                Instruction::Addx(5),
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(-8),
 | 
				
			||||||
 | 
					                Instruction::Addx(13),
 | 
				
			||||||
 | 
					                Instruction::Addx(4),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(5),
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(5),
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(5),
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(5),
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(-35),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(24),
 | 
				
			||||||
 | 
					                Instruction::Addx(-19),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(16),
 | 
				
			||||||
 | 
					                Instruction::Addx(-11),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(21),
 | 
				
			||||||
 | 
					                Instruction::Addx(-15),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-3),
 | 
				
			||||||
 | 
					                Instruction::Addx(9),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(-3),
 | 
				
			||||||
 | 
					                Instruction::Addx(8),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(5),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-36),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(7),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(2),
 | 
				
			||||||
 | 
					                Instruction::Addx(6),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(7),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-13),
 | 
				
			||||||
 | 
					                Instruction::Addx(13),
 | 
				
			||||||
 | 
					                Instruction::Addx(7),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(-33),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(2),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(8),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(2),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(17),
 | 
				
			||||||
 | 
					                Instruction::Addx(-9),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(-3),
 | 
				
			||||||
 | 
					                Instruction::Addx(11),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-13),
 | 
				
			||||||
 | 
					                Instruction::Addx(-19),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(3),
 | 
				
			||||||
 | 
					                Instruction::Addx(26),
 | 
				
			||||||
 | 
					                Instruction::Addx(-30),
 | 
				
			||||||
 | 
					                Instruction::Addx(12),
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(3),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-9),
 | 
				
			||||||
 | 
					                Instruction::Addx(18),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(2),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(9),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-1),
 | 
				
			||||||
 | 
					                Instruction::Addx(2),
 | 
				
			||||||
 | 
					                Instruction::Addx(-37),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(3),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(15),
 | 
				
			||||||
 | 
					                Instruction::Addx(-21),
 | 
				
			||||||
 | 
					                Instruction::Addx(22),
 | 
				
			||||||
 | 
					                Instruction::Addx(-6),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(2),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(-10),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::Addx(20),
 | 
				
			||||||
 | 
					                Instruction::Addx(1),
 | 
				
			||||||
 | 
					                Instruction::Addx(2),
 | 
				
			||||||
 | 
					                Instruction::Addx(2),
 | 
				
			||||||
 | 
					                Instruction::Addx(-6),
 | 
				
			||||||
 | 
					                Instruction::Addx(-11),
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp,
 | 
				
			||||||
 | 
					                Instruction::NoOp
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										191
									
								
								days/day10/src/part1.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								days/day10/src/part1.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,191 @@
 | 
				
			||||||
 | 
					use std::collections::VecDeque;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::{parse::*, machine::Machine};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn part1(input: VecDeque<Instruction>) -> i32 {
 | 
				
			||||||
 | 
					    let mut machine = Machine::load_program(input.into());
 | 
				
			||||||
 | 
					    let mut total = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //20th
 | 
				
			||||||
 | 
					    total+=machine.step20();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    machine.step20();
 | 
				
			||||||
 | 
					    //60th
 | 
				
			||||||
 | 
					    total+=machine.step20();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    machine.step20();
 | 
				
			||||||
 | 
					    //100th
 | 
				
			||||||
 | 
					    total+=machine.step20();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    machine.step20();
 | 
				
			||||||
 | 
					    //140th
 | 
				
			||||||
 | 
					    total+=machine.step20();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    machine.step20();
 | 
				
			||||||
 | 
					    //180th
 | 
				
			||||||
 | 
					    total+=machine.step20();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    machine.step20();
 | 
				
			||||||
 | 
					    //220th
 | 
				
			||||||
 | 
					    total+=machine.step20();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    total
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_part1() {
 | 
				
			||||||
 | 
					        let input = vec![
 | 
				
			||||||
 | 
					            Instruction::Addx(15),
 | 
				
			||||||
 | 
					            Instruction::Addx(-11),
 | 
				
			||||||
 | 
					            Instruction::Addx(6),
 | 
				
			||||||
 | 
					            Instruction::Addx(-3),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-8),
 | 
				
			||||||
 | 
					            Instruction::Addx(13),
 | 
				
			||||||
 | 
					            Instruction::Addx(4),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-35),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(24),
 | 
				
			||||||
 | 
					            Instruction::Addx(-19),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(16),
 | 
				
			||||||
 | 
					            Instruction::Addx(-11),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(21),
 | 
				
			||||||
 | 
					            Instruction::Addx(-15),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-3),
 | 
				
			||||||
 | 
					            Instruction::Addx(9),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-3),
 | 
				
			||||||
 | 
					            Instruction::Addx(8),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(5),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-36),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(7),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(6),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(7),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-13),
 | 
				
			||||||
 | 
					            Instruction::Addx(13),
 | 
				
			||||||
 | 
					            Instruction::Addx(7),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-33),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(8),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(17),
 | 
				
			||||||
 | 
					            Instruction::Addx(-9),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(-3),
 | 
				
			||||||
 | 
					            Instruction::Addx(11),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-13),
 | 
				
			||||||
 | 
					            Instruction::Addx(-19),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(3),
 | 
				
			||||||
 | 
					            Instruction::Addx(26),
 | 
				
			||||||
 | 
					            Instruction::Addx(-30),
 | 
				
			||||||
 | 
					            Instruction::Addx(12),
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(3),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-9),
 | 
				
			||||||
 | 
					            Instruction::Addx(18),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(9),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-1),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(-37),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(3),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(15),
 | 
				
			||||||
 | 
					            Instruction::Addx(-21),
 | 
				
			||||||
 | 
					            Instruction::Addx(22),
 | 
				
			||||||
 | 
					            Instruction::Addx(-6),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(-10),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::Addx(20),
 | 
				
			||||||
 | 
					            Instruction::Addx(1),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(2),
 | 
				
			||||||
 | 
					            Instruction::Addx(-6),
 | 
				
			||||||
 | 
					            Instruction::Addx(-11),
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					            Instruction::NoOp,
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					        assert_eq!(part1(input.into()), 13140)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								days/day10/src/part2.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								days/day10/src/part2.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					use crate::parse::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn part2() -> usize {
 | 
				
			||||||
 | 
					    unimplemented!()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_part2() {
 | 
				
			||||||
 | 
					        assert_eq!(0, 0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -4,3 +4,6 @@ authors.workspace = true
 | 
				
			||||||
description.workspace = true
 | 
					description.workspace = true
 | 
				
			||||||
version.workspace = true
 | 
					version.workspace = true
 | 
				
			||||||
edition.workspace = true
 | 
					edition.workspace = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[dependencies]
 | 
				
			||||||
 | 
					aoc_libs.workspace = true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,12 +1,10 @@
 | 
				
			||||||
//TODO:
 | 
					 | 
				
			||||||
#![allow(dead_code)]
 | 
					 | 
				
			||||||
mod part1;
 | 
					mod part1;
 | 
				
			||||||
mod part2;
 | 
					mod part2;
 | 
				
			||||||
mod utilities;
 | 
					mod parse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn main() {
 | 
					fn main() {
 | 
				
			||||||
    let input = include_str!("./input.txt");
 | 
					    let input = include_str!("./input.txt");
 | 
				
			||||||
    let structured_input = utilities::parse(input);
 | 
					    let structured_input = parse::parse(input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    println!("Part One");
 | 
					    println!("Part One");
 | 
				
			||||||
    println!("Result: {}", part1::part1());
 | 
					    println!("Result: {}", part1::part1());
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,3 @@
 | 
				
			||||||
//TODO:
 | 
					 | 
				
			||||||
#![allow(unused)]
 | 
					 | 
				
			||||||
pub fn parse(input: &str) -> usize {
 | 
					pub fn parse(input: &str) -> usize {
 | 
				
			||||||
    unimplemented!()
 | 
					    unimplemented!()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -10,9 +8,7 @@ mod tests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    fn test_parse() {
 | 
					    fn test_parse() {
 | 
				
			||||||
        let input =
 | 
					        let input = concat!();
 | 
				
			||||||
"test"
 | 
					 | 
				
			||||||
;
 | 
					 | 
				
			||||||
        assert_eq!(0, 0);
 | 
					        assert_eq!(0, 0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,4 @@
 | 
				
			||||||
//TODO:
 | 
					use crate::parse::*
 | 
				
			||||||
#![allow(unused)]
 | 
					 | 
				
			||||||
use crate::utilities::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pub fn part1() -> usize {
 | 
					pub fn part1() -> usize {
 | 
				
			||||||
    unimplemented!()
 | 
					    unimplemented!()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,4 @@
 | 
				
			||||||
//TODO:
 | 
					use crate::parse::*
 | 
				
			||||||
#![allow(unused)]
 | 
					 | 
				
			||||||
use crate::utilities::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn part2() -> usize {
 | 
					pub fn part2() -> usize {
 | 
				
			||||||
    unimplemented!()
 | 
					    unimplemented!()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue