From cb2188c231fe899e55ebf74a92a8ba72f8a43ba2 Mon Sep 17 00:00:00 2001 From: Benjamin Andre Date: Mon, 10 Nov 2025 15:13:13 +0100 Subject: feat(347): completed both challenges --- challenge-347/benjamin-andre/rust/ch-1.rs | 27 +++++++++++++++++++++++++++ challenge-347/benjamin-andre/rust/ch-2.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100755 challenge-347/benjamin-andre/rust/ch-1.rs create mode 100755 challenge-347/benjamin-andre/rust/ch-2.rs 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::() + .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"); +} -- cgit