summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--296/ch1.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/296/ch1.rs b/296/ch1.rs
new file mode 100644
index 0000000..c5c87c4
--- /dev/null
+++ b/296/ch1.rs
@@ -0,0 +1,38 @@
+const INPUT: &str = "aaabcccédéééééééééééééééééé";
+
+fn compress(s: &str) -> String {
+ let mut chars: Vec<char> = vec![];
+ let mut curr: Option<char> = None;
+ let mut count: u32 = 0;
+ for b in s.chars() {
+ match curr {
+ None => {
+ curr = Some(b);
+ count += 1;
+ }
+ Some(c) if b == c => {
+ count += 1;
+ }
+ Some(c) => {
+ chars.push(c);
+ for c in count.to_string().chars() {
+ chars.push(c);
+ }
+ curr = Some(b);
+ count = 1;
+ }
+ }
+ }
+ if let Some(c) = curr {
+ chars.push(c);
+ for c in count.to_string().chars() {
+ chars.push(c);
+ }
+ }
+ chars.into_iter().collect()
+}
+
+fn main() {
+ println!("Input: {INPUT}");
+ println!("Output: {:?}", compress(INPUT));
+}