RosettaCodeData/Task/Look-and-say-sequence/Rust/look-and-say-sequence.rust

31 lines
706 B
Text
Raw Permalink Normal View History

2015-11-18 06:14:39 +00:00
fn next_sequence(in_seq: &[i8]) -> Vec<i8> {
2014-01-17 05:32:22 +00:00
assert!(!in_seq.is_empty());
2015-11-18 06:14:39 +00:00
let mut result = Vec::new();
2014-01-17 05:32:22 +00:00
let mut current_number = in_seq[0];
let mut current_runlength = 1;
2015-11-18 06:14:39 +00:00
for i in &in_seq[1..] {
2014-01-17 05:32:22 +00:00
if current_number == *i {
current_runlength += 1;
} else {
result.push(current_runlength);
result.push(current_number);
current_runlength = 1;
current_number = *i;
}
}
result.push(current_runlength);
result.push(current_number);
result
}
fn main() {
2015-11-18 06:14:39 +00:00
let mut seq = vec![1];
2014-01-17 05:32:22 +00:00
2015-11-18 06:14:39 +00:00
for i in 0..10 {
2014-01-17 05:32:22 +00:00
println!("Sequence {}: {:?}", i, seq);
2015-11-18 06:14:39 +00:00
seq = next_sequence(&seq);
2014-01-17 05:32:22 +00:00
}
}