Finished day 10 of aoc in rust with heavy guidance
This commit is contained in:
48
advent_of_code/2022/10/Cargo.lock
generated
Normal file
48
advent_of_code/2022/10/Cargo.lock
generated
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "either"
|
||||||
|
version = "1.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.10.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "main"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"itertools",
|
||||||
|
"nom",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "2.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||||
|
|
||||||
|
[[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.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
"minimal-lexical",
|
||||||
|
]
|
||||||
10
advent_of_code/2022/10/Cargo.toml
Normal file
10
advent_of_code/2022/10/Cargo.toml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "main"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
itertools = "0.10.5"
|
||||||
|
nom = "7.1.1"
|
||||||
139
advent_of_code/2022/10/input.txt
Normal file
139
advent_of_code/2022/10/input.txt
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
addx 2
|
||||||
|
addx 3
|
||||||
|
addx -2
|
||||||
|
addx 3
|
||||||
|
noop
|
||||||
|
addx 6
|
||||||
|
addx -1
|
||||||
|
addx 4
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
addx 1
|
||||||
|
addx 7
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -1
|
||||||
|
addx 3
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
addx 4
|
||||||
|
addx 2
|
||||||
|
addx -25
|
||||||
|
addx -7
|
||||||
|
addx -4
|
||||||
|
addx 2
|
||||||
|
addx 2
|
||||||
|
addx 19
|
||||||
|
addx -8
|
||||||
|
addx -5
|
||||||
|
addx 2
|
||||||
|
addx -9
|
||||||
|
addx 16
|
||||||
|
addx 3
|
||||||
|
addx -2
|
||||||
|
addx 12
|
||||||
|
addx -5
|
||||||
|
addx 2
|
||||||
|
addx -15
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 5
|
||||||
|
addx 16
|
||||||
|
addx -22
|
||||||
|
addx -14
|
||||||
|
addx 5
|
||||||
|
noop
|
||||||
|
addx 29
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -21
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 8
|
||||||
|
addx -2
|
||||||
|
addx 4
|
||||||
|
noop
|
||||||
|
addx -22
|
||||||
|
addx 29
|
||||||
|
noop
|
||||||
|
addx -36
|
||||||
|
noop
|
||||||
|
addx -2
|
||||||
|
addx 6
|
||||||
|
addx -2
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 8
|
||||||
|
addx 2
|
||||||
|
addx 10
|
||||||
|
noop
|
||||||
|
addx -5
|
||||||
|
addx 3
|
||||||
|
addx -2
|
||||||
|
addx 9
|
||||||
|
addx -2
|
||||||
|
addx 2
|
||||||
|
addx -21
|
||||||
|
addx 10
|
||||||
|
addx 17
|
||||||
|
addx -38
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 34
|
||||||
|
addx -27
|
||||||
|
addx 2
|
||||||
|
addx -6
|
||||||
|
addx 7
|
||||||
|
addx 5
|
||||||
|
addx 2
|
||||||
|
addx 5
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
addx -2
|
||||||
|
addx 2
|
||||||
|
addx 5
|
||||||
|
addx 2
|
||||||
|
addx -29
|
||||||
|
addx 35
|
||||||
|
addx -3
|
||||||
|
addx -25
|
||||||
|
addx -8
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx 4
|
||||||
|
addx 3
|
||||||
|
addx -2
|
||||||
|
addx 5
|
||||||
|
noop
|
||||||
|
addx 8
|
||||||
|
addx -6
|
||||||
|
noop
|
||||||
|
addx -3
|
||||||
|
addx 10
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 6
|
||||||
|
addx -1
|
||||||
|
addx -18
|
||||||
|
addx 21
|
||||||
|
addx -30
|
||||||
|
addx 37
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
112
advent_of_code/2022/10/src/main.rs
Normal file
112
advent_of_code/2022/10/src/main.rs
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
|
use itertools::Itertools;
|
||||||
|
use nom::{
|
||||||
|
character::complete::{self, newline},
|
||||||
|
branch::alt,
|
||||||
|
multi::separated_list1,
|
||||||
|
bytes::complete::tag,
|
||||||
|
sequence::preceded,
|
||||||
|
*,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum Command {
|
||||||
|
NoOp,
|
||||||
|
AddX(i32),
|
||||||
|
}
|
||||||
|
use Command::*;
|
||||||
|
|
||||||
|
impl Command{
|
||||||
|
pub fn cycles(&self) -> u32 {
|
||||||
|
match &self {
|
||||||
|
NoOp => 1,
|
||||||
|
AddX(_) => 2,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_input(input: &str) -> IResult<&str, Vec<Command>> {
|
||||||
|
let (input, vecs) = separated_list1(
|
||||||
|
newline,
|
||||||
|
alt((
|
||||||
|
tag("noop").map(|_| NoOp),
|
||||||
|
preceded(tag("addx "), complete::i32)
|
||||||
|
.map(|num| AddX(num))
|
||||||
|
)),
|
||||||
|
)(input)?;
|
||||||
|
|
||||||
|
Ok((input, vecs))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1(){
|
||||||
|
let important_cycles = [20, 60, 100, 140, 180, 220];
|
||||||
|
let mut scores: BTreeMap<u32, i32> = BTreeMap::new();
|
||||||
|
let mut x = 1;
|
||||||
|
let mut cycles = 0;
|
||||||
|
|
||||||
|
let input_data = include_str!("../input.txt");
|
||||||
|
let (_, command_lines) = parse_input(input_data).unwrap();
|
||||||
|
|
||||||
|
// let result = fold(command_lines.iter(), (0, 1), |(cycles, x), command| match command {
|
||||||
|
// NoOp => (cycles + 1, x),
|
||||||
|
// AddX(num) => (cycles + 2, x + num),
|
||||||
|
// });
|
||||||
|
// println!("Result: {:?}", result);
|
||||||
|
|
||||||
|
for command in command_lines.iter() {
|
||||||
|
if important_cycles.contains(&(cycles + 1)) {
|
||||||
|
scores.insert(cycles + 1, (cycles as i32 + 1) * x);
|
||||||
|
}
|
||||||
|
|
||||||
|
if important_cycles.contains(&(cycles + 2)) {
|
||||||
|
scores.insert(cycles + 2, (cycles as i32 + 2) * x);
|
||||||
|
}
|
||||||
|
|
||||||
|
cycles += command.cycles();
|
||||||
|
match command {
|
||||||
|
NoOp => {},
|
||||||
|
AddX(num) => { x += num; },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
let score = scores.iter().map(|(_key, value)| value).sum::<i32>();
|
||||||
|
println!("Score: {:?}", score);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2() {
|
||||||
|
let input_data = include_str!("../input.txt");
|
||||||
|
let (_, command_lines) = parse_input(input_data).unwrap();
|
||||||
|
|
||||||
|
let mut x = 1;
|
||||||
|
let mut cycles = 0;
|
||||||
|
let mut pixels = "".to_string();
|
||||||
|
|
||||||
|
for command in command_lines.iter() {
|
||||||
|
for cycle_add in 0..command.cycles() {
|
||||||
|
let pixel_id = (cycles as i32 + cycle_add as i32) % 40;
|
||||||
|
|
||||||
|
if ((x-1)..=(x+1)).contains(&pixel_id) {
|
||||||
|
pixels.push('#');
|
||||||
|
} else {
|
||||||
|
pixels.push('.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cycles += command.cycles();
|
||||||
|
match command {
|
||||||
|
NoOp => {},
|
||||||
|
AddX(num) => {
|
||||||
|
x += num;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = pixels.chars().chunks(40).into_iter().map(|chunk| chunk.collect::<String>()).join("\n");
|
||||||
|
print!("{}", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main(){
|
||||||
|
part1();
|
||||||
|
part2();
|
||||||
|
}
|
||||||
146
advent_of_code/2022/10/test.txt
Normal file
146
advent_of_code/2022/10/test.txt
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
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
|
||||||
Reference in New Issue
Block a user