solution: day 18
This commit is contained in:
parent
350f6ef6eb
commit
06e554c53e
@ -15,7 +15,7 @@ pub mod d14;
|
|||||||
pub mod d15;
|
pub mod d15;
|
||||||
pub mod d16;
|
pub mod d16;
|
||||||
pub mod d17;
|
pub mod d17;
|
||||||
// pub mod d18;
|
pub mod d18;
|
||||||
// pub mod d19;
|
// pub mod d19;
|
||||||
// pub mod d20;
|
// pub mod d20;
|
||||||
// pub mod d21;
|
// pub mod d21;
|
||||||
|
|||||||
64
src/days/d18.rs
Normal file
64
src/days/d18.rs
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
pub type I = &'static str;
|
||||||
|
pub type O = usize;
|
||||||
|
|
||||||
|
// @TODO: try bit mast approach
|
||||||
|
fn _solve (data: I, rows: usize) -> O {
|
||||||
|
let w = data.len();
|
||||||
|
let mut v = vec![data.to_owned()];
|
||||||
|
|
||||||
|
while v.len() < rows {
|
||||||
|
let mut v2 = String::new();
|
||||||
|
let prev = &v[v.len() - 1].chars().collect_vec();
|
||||||
|
|
||||||
|
for i in 0..w {
|
||||||
|
let next = match (
|
||||||
|
i.checked_sub(1).map(|i| prev.get(i)).flatten().unwrap_or(&'.'),
|
||||||
|
prev.get(i).unwrap_or(&'.'),
|
||||||
|
prev.get(i+1).unwrap_or(&'.')
|
||||||
|
) {
|
||||||
|
('^', '^', '.') | ('.', '^', '^') | ('^', '.', '.') | ('.', '.', '^') => '^',
|
||||||
|
_ => '.'
|
||||||
|
};
|
||||||
|
|
||||||
|
v2.push(next);
|
||||||
|
}
|
||||||
|
v.push(v2);
|
||||||
|
}
|
||||||
|
v.concat().chars().filter(|&c| c == '.').count()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
fn read () -> I {
|
||||||
|
inc!(18).trim()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn example () {
|
||||||
|
let data = ".^^.^.^^^^";
|
||||||
|
let ans = _solve(data, 10);
|
||||||
|
assert_eq!(ans, 38);
|
||||||
|
|
||||||
|
let data = "..^^.";
|
||||||
|
let ans = _solve(data, 3);
|
||||||
|
assert_eq!(ans, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn silver () {
|
||||||
|
let data = read();
|
||||||
|
let ans = _solve(data, 40);
|
||||||
|
assert_eq!(ans, 1982)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn gold () {
|
||||||
|
let data = read();
|
||||||
|
let ans = _solve(data, 400_000);
|
||||||
|
assert_eq!(ans, 20005203)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user