From 6d468ece96c1e89f73828369be907d17513b455f Mon Sep 17 00:00:00 2001 From: Federico I Date: Sun, 15 Mar 2020 00:33:33 +0000 Subject: [rust] Raindrops --- raindrops/src/lib.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 raindrops/src/lib.rs (limited to 'raindrops/src/lib.rs') diff --git a/raindrops/src/lib.rs b/raindrops/src/lib.rs new file mode 100644 index 0000000..811c569 --- /dev/null +++ b/raindrops/src/lib.rs @@ -0,0 +1,28 @@ +struct Drops { + num: u32, + drops: Option +} + +impl Drops { + pub fn new(num: u32) -> Drops { + Drops { num, drops: None } + } + + pub fn add_if_factor(&mut self, div: u32, suffix: &str) { + if self.num % div == 0 { + self.drops.get_or_insert(String::new()).push_str(suffix); + } + } + + pub fn get(self) -> String { + self.drops.unwrap_or(self.num.to_string()) + } +} + +pub fn raindrops(n: u32) -> String { + let mut drops = Drops::new(n); + drops.add_if_factor(3, "Pling"); + drops.add_if_factor(5, "Plang"); + drops.add_if_factor(7, "Plong"); + drops.get() +} -- cgit v1.2.3