aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-328/roger-bell-west/rust/ch-1.rs33
-rwxr-xr-xchallenge-328/roger-bell-west/rust/ch-2.rs44
-rw-r--r--challenge-328/roger-bell-west/tests.json32
3 files changed, 109 insertions, 0 deletions
diff --git a/challenge-328/roger-bell-west/rust/ch-1.rs b/challenge-328/roger-bell-west/rust/ch-1.rs
new file mode 100755
index 0000000000..c459be6522
--- /dev/null
+++ b/challenge-328/roger-bell-west/rust/ch-1.rs
@@ -0,0 +1,33 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(replaceall("a?z"), "abz");
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(replaceall("pe?k"), "peak");
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(replaceall("gra?te"), "grabte");
+}
+
+fn replaceall(a: &str) -> String {
+ let mut ci = a.chars().collect::<Vec<char>>();
+ let l = a.len() - 1;
+ for i in 0..=l {
+ let c = ci[i];
+ if c == '?' {
+ let mut r = 'a';
+ while (i > 0 && ci[i - 1] == r) || (i < l && ci[i + 1] == r) {
+ r = std::char::from_u32(r as u32 + 1).unwrap();
+ }
+ ci[i] = r;
+ }
+ }
+ ci.into_iter().collect()
+}
diff --git a/challenge-328/roger-bell-west/rust/ch-2.rs b/challenge-328/roger-bell-west/rust/ch-2.rs
new file mode 100755
index 0000000000..f263f46693
--- /dev/null
+++ b/challenge-328/roger-bell-west/rust/ch-2.rs
@@ -0,0 +1,44 @@
+#! /bin/sh
+//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit
+
+#[test]
+fn test_ex1() {
+ assert_eq!(goodstring("WeEeekly"), "Weekly");
+}
+
+#[test]
+fn test_ex2() {
+ assert_eq!(goodstring("abBAdD"), "");
+}
+
+#[test]
+fn test_ex3() {
+ assert_eq!(goodstring("abc"), "abc");
+}
+
+fn goodstring(a: &str) -> String {
+ let mut c = a.chars().collect::<Vec<char>>();
+ let mut dirty;
+ loop {
+ dirty = false;
+ for i in 0..c.len() - 1 {
+ if (c[i].is_ascii_lowercase() && c[i + 1].is_ascii_uppercase())
+ || (c[i].is_ascii_uppercase() && c[i + 1].is_ascii_lowercase())
+ {
+ let mut ca = c[i];
+ let mut cb = c[i + 1];
+ ca.make_ascii_lowercase();
+ cb.make_ascii_lowercase();
+ if ca == cb {
+ dirty = true;
+ c.splice(i..=i + 1, []);
+ break;
+ }
+ }
+ }
+ if !dirty || c.len() == 0 {
+ break;
+ }
+ }
+ c.into_iter().collect()
+}
diff --git a/challenge-328/roger-bell-west/tests.json b/challenge-328/roger-bell-west/tests.json
new file mode 100644
index 0000000000..0058749628
--- /dev/null
+++ b/challenge-328/roger-bell-west/tests.json
@@ -0,0 +1,32 @@
+{
+ "ch-1" : [
+ {
+ "function" : "replaceall",
+ "arguments" : "a?z",
+ "result" : "abz"
+ },
+ {
+ "arguments" : "pe?k",
+ "result" : "peak"
+ },
+ {
+ "arguments" : "gra?te",
+ "result" : "grabte"
+ }
+ ],
+ "ch-2" : [
+ {
+ "function" : "goodstring",
+ "arguments" : "WeEeekly",
+ "result" : "Weekly"
+ },
+ {
+ "arguments" : "abBAdD",
+ "result" : ""
+ },
+ {
+ "arguments" : "abc",
+ "result" : "abc"
+ }
+ ]
+}