aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Andre <benjaminandre23@gmail.com>2025-11-10 15:13:13 +0100
committerBenjamin Andre <benjaminandre23@gmail.com>2025-11-10 15:13:13 +0100
commitcb2188c231fe899e55ebf74a92a8ba72f8a43ba2 (patch)
tree371060e824fd5678dc7f27cf84c08cb7ed256ff1
parent83c02309afd45cdbfce02a54ee39361fce28c592 (diff)
downloadperlweeklychallenge-club-cb2188c231fe899e55ebf74a92a8ba72f8a43ba2.tar.gz
perlweeklychallenge-club-cb2188c231fe899e55ebf74a92a8ba72f8a43ba2.tar.bz2
perlweeklychallenge-club-cb2188c231fe899e55ebf74a92a8ba72f8a43ba2.zip
feat(347): completed both challenges
-rwxr-xr-xchallenge-347/benjamin-andre/rust/ch-1.rs27
-rwxr-xr-xchallenge-347/benjamin-andre/rust/ch-2.rs28
2 files changed, 55 insertions, 0 deletions
diff --git a/challenge-347/benjamin-andre/rust/ch-1.rs b/challenge-347/benjamin-andre/rust/ch-1.rs
new file mode 100755
index 0000000000..fa058a8cfe
--- /dev/null
+++ b/challenge-347/benjamin-andre/rust/ch-1.rs
@@ -0,0 +1,27 @@
+#!/bin/sh
+//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit
+
+fn format_date(s: &str) -> String {
+ let months = [
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+ ];
+ let parts: Vec<_> = s.split_whitespace().collect();
+ let day: u32 = parts[0]
+ .chars()
+ .filter(|c| c.is_ascii_digit())
+ .collect::<String>()
+ .parse()
+ .unwrap();
+ let month = months.iter().position(|&m| m == parts[1]).unwrap() + 1;
+ let year = parts[2];
+ format!("{}-{:02}-{:02}", year, month, day)
+}
+
+#[test]
+fn example() {
+ assert_eq!(format_date("1st Jan 2025"), "2025-01-01");
+ assert_eq!(format_date("22nd Feb 2025"), "2025-02-22");
+ assert_eq!(format_date("15th Apr 2025"), "2025-04-15");
+ assert_eq!(format_date("23rd Oct 2025"), "2025-10-23");
+ assert_eq!(format_date("31st Dec 2025"), "2025-12-31");
+}
diff --git a/challenge-347/benjamin-andre/rust/ch-2.rs b/challenge-347/benjamin-andre/rust/ch-2.rs
new file mode 100755
index 0000000000..5e49813e77
--- /dev/null
+++ b/challenge-347/benjamin-andre/rust/ch-2.rs
@@ -0,0 +1,28 @@
+#!/bin/sh
+//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit
+
+fn format_phone_number(phone: &str) -> String {
+ let digits: String = phone.chars().filter(|c| c.is_ascii_digit()).collect();
+ let mut result = Vec::new();
+ let mut i = 0;
+ while i < digits.len() {
+ let remaining = digits.len() - i;
+ let block_size = if remaining <= 4 && remaining != 3 {
+ 2
+ } else {
+ 3
+ };
+ result.push(&digits[i..i + block_size]);
+ i += block_size;
+ }
+ result.join("-")
+}
+
+#[test]
+fn example() {
+ assert_eq!(format_phone_number("1-23-45-6"), "123-456");
+ assert_eq!(format_phone_number("1234"), "12-34");
+ assert_eq!(format_phone_number("12 345-6789"), "123-456-789");
+ assert_eq!(format_phone_number("123 4567"), "123-45-67");
+ assert_eq!(format_phone_number("123 456-78"), "123-456-78");
+}