2022 day 18 part 1
This commit is contained in:
parent
cbcb798f9f
commit
644745623f
2759
2022/rust/inputs/day18.txt
Normal file
2759
2022/rust/inputs/day18.txt
Normal file
File diff suppressed because it is too large
Load diff
|
@ -19,5 +19,6 @@ fn main() {
|
||||||
// solutions::day14::run();
|
// solutions::day14::run();
|
||||||
// solutions::day15::run();
|
// solutions::day15::run();
|
||||||
// solutions::day16::run();
|
// solutions::day16::run();
|
||||||
solutions::day17::run();
|
// solutions::day17::run();
|
||||||
|
solutions::day18::run();
|
||||||
}
|
}
|
||||||
|
|
74
2022/rust/src/solutions/day18.rs
Normal file
74
2022/rust/src/solutions/day18.rs
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
use std::collections::HashSet;
|
||||||
|
use crate::utils;
|
||||||
|
|
||||||
|
|
||||||
|
pub fn run() -> () {
|
||||||
|
let data = parse_data(&utils::read_lines(utils::Source::Day(18)));
|
||||||
|
|
||||||
|
println!("Day 18");
|
||||||
|
println!("Part 1: {}", solve1(&data));
|
||||||
|
println!("Part 2: {}", solve2(&data));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type Point = (isize, isize, isize);
|
||||||
|
|
||||||
|
|
||||||
|
fn solve1(data: &[Point]) -> i32 {
|
||||||
|
let points: HashSet<Point> = HashSet::from_iter(data.iter().copied());
|
||||||
|
|
||||||
|
let mut side_sum = 0;
|
||||||
|
for &(p_x, p_y, p_z) in data {
|
||||||
|
let sides = [
|
||||||
|
(p_x - 1, p_y, p_z), (p_x + 1, p_y, p_z),
|
||||||
|
(p_x, p_y - 1, p_z), (p_x, p_y + 1, p_z),
|
||||||
|
(p_x, p_y, p_z - 1), (p_x, p_y, p_z + 1),
|
||||||
|
];
|
||||||
|
|
||||||
|
for side in sides {
|
||||||
|
if !points.contains(&side) {
|
||||||
|
side_sum += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
side_sum
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve2(data: &[Point]) -> i32 {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn parse_data<T: AsRef<str>>(data: &[T]) -> Vec<Point> {
|
||||||
|
data.iter()
|
||||||
|
.map(|line| {
|
||||||
|
let mut coords = line.as_ref().split(",").into_iter();
|
||||||
|
(
|
||||||
|
coords.next().unwrap().parse().unwrap(),
|
||||||
|
coords.next().unwrap().parse().unwrap(),
|
||||||
|
coords.next().unwrap().parse().unwrap(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
static DATA: &[&str] = &[
|
||||||
|
"2,2,2", "1,2,2", "3,2,2", "2,1,2", "2,3,2", "2,2,1", "2,2,3",
|
||||||
|
"2,2,4", "2,2,6", "1,2,5", "3,2,5", "2,1,5", "2,3,5",
|
||||||
|
];
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1() {
|
||||||
|
assert_eq!(64, solve1(&parse_data(DATA)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2() {
|
||||||
|
assert_eq!(2, solve2(&parse_data(DATA)));
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,3 +15,4 @@ pub mod day14;
|
||||||
pub mod day15;
|
pub mod day15;
|
||||||
pub mod day16;
|
pub mod day16;
|
||||||
pub mod day17;
|
pub mod day17;
|
||||||
|
pub mod day18;
|
||||||
|
|
Loading…
Reference in a new issue