diff --git a/src/days.rs b/src/days.rs index 7f0258a..1c4b09e 100644 --- a/src/days.rs +++ b/src/days.rs @@ -8,7 +8,7 @@ pub mod d7; pub mod d8; pub mod d9; pub mod d10; -// pub mod d11; +pub mod d11; // pub mod d12; // pub mod d13; // pub mod d14; diff --git a/src/days/d11.rs b/src/days/d11.rs new file mode 100644 index 0000000..5920a89 --- /dev/null +++ b/src/days/d11.rs @@ -0,0 +1,71 @@ +use crate::prelude::*; + +pub type I = Vec>; +pub type O = i64; + +fn _parse (data: &str) -> I { + Default::default() +} + +fn _solve (data: &I) -> O { + Default::default() +} + +fn _silver (data: &I) -> O { + + + Default::default() +} + +fn _gold (data: &I) -> O { + Default::default() +} + +type St = [Vec; 4]; + +fn is_final_state (state: &St) -> bool { + state[1..].iter().all(|e| e.is_empty()) +} + +fn is_valid_state (state: &St) -> bool { + state.iter().all(|level| level.len() < 2 || level.iter().all(|e| e.is_lowercase()) || { + let mut chips = level.iter().filter(|e| e.is_uppercase()); + while let Some(chip) = chips.next() { + if level.iter().find(|&v| chip.to_ascii_lowercase() == *v).is_none() { + return false; + } + } + true + }) +} + +fn state_discriminant (state: &St) -> [(usize, usize); 4] { + state.iter().map(|s| ( + s.iter().filter(|e| e.is_lowercase()).count(), + s.iter().filter(|e| e.is_uppercase()).count() + )).collect_vec().try_into().unwrap() +} + +#[cfg(test)] +mod test { + use super::*; + fn read () -> I { + vec![vec!['a', 'b', 'c', 'd', 'e', 'A', 'B', 'C'], vec!['D', 'E'], vec![], vec![]] + } + + #[test] + fn silver () { + let data = read(); + let ans = _silver(&data); + + assert_eq!(ans, 1) + } + + #[test] + fn gold () { + let data = read(); + let ans = _gold(&data); + + assert_eq!(ans, 1) + } +}