summaryrefslogtreecommitdiff
path: root/exercises
diff options
context:
space:
mode:
authormokou <mokou@fastmail.com>2022-07-14 13:16:32 +0200
committermokou <mokou@fastmail.com>2022-07-14 13:24:15 +0200
commitc64b340622a59f60b0b056ed849557bc4872a535 (patch)
tree42451112169211db5c3ccc743507dceceea780c8 /exercises
parentf443f4e7b31467b29271aab477c63eb64aba1be3 (diff)
feat: rework quiz2
Diffstat (limited to 'exercises')
-rw-r--r--exercises/quiz2.rs71
1 files changed, 50 insertions, 21 deletions
diff --git a/exercises/quiz2.rs b/exercises/quiz2.rs
index de0dce9..d2211c7 100644
--- a/exercises/quiz2.rs
+++ b/exercises/quiz2.rs
@@ -1,30 +1,59 @@
// quiz2.rs
// This is a quiz for the following sections:
// - Strings
+// - Vecs
+// - Move semantics
+// - Modules
+// - Enums
-// Ok, here are a bunch of values-- some are `String`s, some are `&str`s. Your
-// task is to call one of these two functions on each value depending on what
-// you think each value is. That is, add either `string_slice` or `string`
-// before the parentheses on each line. If you're right, it will compile!
+// Let's build a little machine in form of a function.
+// As input, we're going to give a list of strings and commands. These commands
+// determine what action is going to be applied to the string. It can either be:
+// - Uppercase the string
+// - Trim the string
+// - Append "bar" to the string a specified amount of times
+// The exact form of this will be:
+// - The input is going to be a Vector of a 2-length tuple,
+// the first element is the string, the second one is the command.
+// - The output element is going to be a Vector of strings.
-// I AM NOT DONE
-
-fn string_slice(arg: &str) {
- println!("{}", arg);
+pub enum Command {
+ Uppercase,
+ Trim,
+ Append(usize),
}
-fn string(arg: String) {
- println!("{}", arg);
+
+mod my_module {
+ use super::Command;
+
+ // TODO: Complete the function signature!
+ pub fn transformer(input: ???) -> ??? {
+ // TODO: Complete the output declaration!
+ let mut output: ??? = vec![];
+ for (string, command) in input.iter() {
+ // TODO: Complete the function body. You can do it!
+ }
+ output
+ }
}
-fn main() {
- ???("blue");
- ???("red".to_string());
- ???(String::from("hi"));
- ???("rust is fun!".to_owned());
- ???("nice weather".into());
- ???(format!("Interpolation {}", "Station"));
- ???(&String::from("abc")[0..1]);
- ???(" hello there ".trim());
- ???("Happy Monday!".to_string().replace("Mon", "Tues"));
- ???("mY sHiFt KeY iS sTiCkY".to_lowercase());
+#[cfg(test)]
+mod tests {
+ // TODO: What to we have to import to have `transformer` in scope?
+ use ???;
+ use super::Command;
+
+ #[test]
+ fn it_works() {
+ let output = transformer(vec![
+ ("hello".into(), Command::Uppercase),
+ (" all roads lead to rome! ".into(), Command::Trim),
+ ("foo".into(), Command::Append(1)),
+ ("bar".into(), Command::Append(5)),
+ ]);
+ assert_eq!(output[0], "HELLO");
+ assert_eq!(output[1], "all roads lead to rome!");
+ assert_eq!(output[2], "foobar");
+ assert_eq!(output[3], "barbarbarbarbarbar");
+ }
}