diff options
Diffstat (limited to 'proverb/src/lib.rs')
| -rw-r--r-- | proverb/src/lib.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/proverb/src/lib.rs b/proverb/src/lib.rs new file mode 100644 index 0000000..1046553 --- /dev/null +++ b/proverb/src/lib.rs | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | use std::iter; | ||
| 2 | |||
| 3 | pub fn build_proverb(list: &[&str]) -> String { | ||
| 4 | if list.is_empty() { | ||
| 5 | String::new() | ||
| 6 | } else { | ||
| 7 | let reason = |(a, b)| format!("For want of a {} the {} was lost.\n", a, b); | ||
| 8 | let bitter_end = format!("And all for the want of a {}.", list[0]); | ||
| 9 | list.iter() | ||
| 10 | .zip(list.iter().skip(1)) // .window(2) also works here | ||
| 11 | .map(reason) | ||
| 12 | .chain(iter::once(bitter_end)) | ||
| 13 | .collect() | ||
| 14 | } | ||
| 15 | } | ||
