day 9
This commit is contained in:
parent
2c1323095f
commit
02445824a6
@ -9,4 +9,5 @@ members = [
|
|||||||
"day6",
|
"day6",
|
||||||
"day7",
|
"day7",
|
||||||
"day8",
|
"day8",
|
||||||
|
"day9",
|
||||||
]
|
]
|
9
day9/Cargo.toml
Normal file
9
day9/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day9"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
nalgebra = "0.31.4"
|
2000
day9/input.txt
Normal file
2000
day9/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
8
day9/sample_input.txt
Normal file
8
day9/sample_input.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
R 5
|
||||||
|
U 8
|
||||||
|
L 8
|
||||||
|
D 3
|
||||||
|
R 17
|
||||||
|
D 10
|
||||||
|
L 25
|
||||||
|
U 20
|
64
day9/src/main.rs
Normal file
64
day9/src/main.rs
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
use nalgebra::base::Vector2;
|
||||||
|
|
||||||
|
type IVec2 = Vector2<i32>;
|
||||||
|
|
||||||
|
const RIGHT: IVec2 = IVec2::new(1, 0);
|
||||||
|
const LEFT: IVec2 = IVec2::new(-1, 0);
|
||||||
|
const UP: IVec2 = IVec2::new(0, 1);
|
||||||
|
const DOWN: IVec2 = IVec2::new(0, -1);
|
||||||
|
|
||||||
|
const ZERO: IVec2 = IVec2::new(0, 0);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let mut visited: HashSet<IVec2> = HashSet::new();
|
||||||
|
|
||||||
|
let mut knots: [IVec2; 10] = [ZERO; 10];
|
||||||
|
|
||||||
|
for line in INPUT.lines() {
|
||||||
|
let (dir, steps) = line.split_once(' ').unwrap();
|
||||||
|
let dir: IVec2 = match dir.chars().next().unwrap() {
|
||||||
|
'R' => RIGHT,
|
||||||
|
'L' => LEFT,
|
||||||
|
'U' => UP,
|
||||||
|
'D' => DOWN,
|
||||||
|
_ => ZERO,
|
||||||
|
};
|
||||||
|
let steps: u32 = steps.parse().unwrap();
|
||||||
|
|
||||||
|
for _ in 0..steps {
|
||||||
|
*knots.get_mut(0).unwrap() += dir;
|
||||||
|
|
||||||
|
for i in 1..knots.len() {
|
||||||
|
let diff: IVec2;
|
||||||
|
{
|
||||||
|
let knot = knots.get(i).unwrap();
|
||||||
|
let prev = knots.get(i - 1).unwrap();
|
||||||
|
diff = *prev - *knot;
|
||||||
|
}
|
||||||
|
|
||||||
|
let knot = knots.get_mut(i).unwrap();
|
||||||
|
if diff.x.abs() > 1 || diff.y.abs() > 1 {
|
||||||
|
// need to move
|
||||||
|
if diff.x == 0 {
|
||||||
|
knot.y += diff.y.signum();
|
||||||
|
} else if diff.y == 0 {
|
||||||
|
knot.x += diff.x.signum();
|
||||||
|
} else {
|
||||||
|
knot.x += diff.x.signum();
|
||||||
|
knot.y += diff.y.signum();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if i == 9 {
|
||||||
|
visited.insert(*knot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{}", visited.len());
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user