From b5e1c27db8c7d330ac13e43927b791b21d95de18 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Wed, 31 Aug 2022 01:02:38 +0200 Subject: day10 --- src/bin/day10.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/bin/day10.rs diff --git a/src/bin/day10.rs b/src/bin/day10.rs new file mode 100644 index 0000000..562408b --- /dev/null +++ b/src/bin/day10.rs @@ -0,0 +1,44 @@ +fn main() { + let input = [1,3,2,1,1,3,1,1,1,2]; + println!("10a: {}", lookandsay_times(&input, 40).len()); + println!("10b: {}", lookandsay_times(&input, 50).len()); +} + +fn lookandsay(input: &[u8]) -> Vec { + let mut say = Vec::new(); + + let mut count = 1; + let mut prev = input[0]; + for n in input.iter().skip(1) { + if *n != prev { + say.push(count); + say.push(prev); + prev = *n; + count = 0; + } + count += 1; + } + say.push(count); + say.push(prev); + + say +} + +fn lookandsay_times(input: &[u8], times: u32) -> Vec { + let mut data = Vec::from(input); + for _ in 0..times { + data = lookandsay(&data); + } + data +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + assert_eq!(lookandsay(&[1,1,1,2,2,1]), [3,1,2,2,1,1]); + assert_eq!(lookandsay_times(&[1], 5), [3,1,2,2,1,1]); + } +} -- cgit v1.2.3