diff options
Diffstat (limited to '2015/rs/code/ten/src')
-rw-r--r-- | 2015/rs/code/ten/src/main.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/2015/rs/code/ten/src/main.rs b/2015/rs/code/ten/src/main.rs new file mode 100644 index 0000000..848c288 --- /dev/null +++ b/2015/rs/code/ten/src/main.rs @@ -0,0 +1,34 @@ +use std::fmt::Write; + +static INPUT: &str = "1113122113"; + +fn main() { + let mut buf = INPUT.to_string(); + for _ in 0..40 { + buf = part1(&buf); + } + println!("Final strlen @ 40: {}", buf.len()); + + for _ in 0..10 { + buf = part1(&buf); + } + println!("Final strlen @ 50: {}", buf.len()); +} + +fn part1(nums: &str) -> String { + let mut buf = String::with_capacity(nums.len() * 2); // worst-case + let mut chars = nums.chars(); + let mut last = chars.next().unwrap(); + let mut count = 1; + for char in chars { + if char == last { + count += 1; + } else { + let _ = write!(&mut buf, "{count}{last}"); + last = char; + count = 1; + } + } + let _ = write!(&mut buf, "{count}{last}"); + buf +} |