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]); } }