diff options
| -rwxr-xr-x | challenge-328/roger-bell-west/rust/ch-1.rs | 33 | ||||
| -rwxr-xr-x | challenge-328/roger-bell-west/rust/ch-2.rs | 44 | ||||
| -rw-r--r-- | challenge-328/roger-bell-west/tests.json | 32 |
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" + } + ] +} |
