Wrote program for Day 31
This commit is contained in:
parent
5df229b02f
commit
32e0240d0a
@ -77,7 +77,7 @@ We encourage you to share your progress and ask questions in the Discussions sec
|
||||
| Day #28 | [Word Search](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-04/Day-28_Word-Search) | :white_check_mark: |
|
||||
| Day #29 | [Traffic Light Checker](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-05/Day-29_Traffic-Light-Checker) | :white_check_mark: |
|
||||
| Day #30 | [The Maximum Value](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-05/Day-30_The-Maximum-Value) | :white_check_mark: |
|
||||
| Day #31 | [The Time In Words](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-05/Day-31_The-Time-In-Words) | :white_large_square: |
|
||||
| Day #31 | [The Time In Words](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-05/Day-31_The-Time-In-Words) | :white_check_mark: |
|
||||
| Day #32 | [Climbing The Leaderboard](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-05/Day-32_Climbing-The-Leaderboard) | :white_large_square: |
|
||||
| Day #33 | [WERTYU](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-05/Day-33_WERTYU) | :white_large_square: |
|
||||
| Day #34 | [Primary Arithmetic](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-05/Day-34_Primary-Arithmetic) | :white_large_square: |
|
||||
|
6
Week-05/Day-31_The-Time-In-Words/day31/Cargo.toml
Normal file
6
Week-05/Day-31_The-Time-In-Words/day31/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "day31"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
68
Week-05/Day-31_The-Time-In-Words/day31/src/lib.rs
Normal file
68
Week-05/Day-31_The-Time-In-Words/day31/src/lib.rs
Normal file
@ -0,0 +1,68 @@
|
||||
fn number_to_string<'a, 'b>(number: u8) -> Result<&'a str, &'b str> {
|
||||
match number {
|
||||
1 => Ok("one"),
|
||||
2 => Ok("two"),
|
||||
3 => Ok("three"),
|
||||
4 => Ok("four"),
|
||||
5 => Ok("five"),
|
||||
6 => Ok("six"),
|
||||
7 => Ok("seven"),
|
||||
8 => Ok("eight"),
|
||||
9 => Ok("nine"),
|
||||
10 => Ok("ten"),
|
||||
11 => Ok("eleven"),
|
||||
12 => Ok("twelve"),
|
||||
13 => Ok("thirteen"),
|
||||
14 => Ok("fourteen"),
|
||||
16 => Ok("sixteen"),
|
||||
17 => Ok("seventeen"),
|
||||
18 => Ok("eighteen"),
|
||||
19 => Ok("nineteen"),
|
||||
20 => Ok("twenty"),
|
||||
21 => Ok("twentyone"),
|
||||
22 => Ok("twentytwo"),
|
||||
23 => Ok("twentythree"),
|
||||
24 => Ok("twentyfour"),
|
||||
25 => Ok("twentyfive"),
|
||||
26 => Ok("twentysix"),
|
||||
27 => Ok("twentyseven"),
|
||||
28 => Ok("twentyeight"),
|
||||
29 => Ok("twentynine"),
|
||||
_ => Err("Number not found"),
|
||||
}
|
||||
}
|
||||
|
||||
fn minute_to_string<'a>(minutes: u8) -> Result<String, &'a str> {
|
||||
match minutes {
|
||||
0 => Ok(String::from("o' clock")),
|
||||
1 => Ok(String::from("one minute past")),
|
||||
15 => Ok(String::from("quarter past")),
|
||||
30 => Ok(String::from("half past")),
|
||||
45 => Ok(String::from("quarter to")),
|
||||
59 => Ok(String::from("one minute to")),
|
||||
2..30 => Ok(format!("{} minutes past", number_to_string(minutes)?)),
|
||||
31..59 => Ok(format!("{} minutes to", number_to_string(60 - minutes)?)),
|
||||
_ => Err("Minute not found"),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn time_to_string<'a>(hours: u8, minutes: u8) -> Result<String, &'a str> {
|
||||
if (1..=12).contains(&hours) && (0..60).contains(&minutes) {
|
||||
let hours = hours + if minutes > 30 { 1 } else { 0 };
|
||||
if minutes == 0 {
|
||||
Ok(format!(
|
||||
"{} {}",
|
||||
number_to_string(hours)?,
|
||||
minute_to_string(minutes)?
|
||||
))
|
||||
} else {
|
||||
Ok(format!(
|
||||
"{} {}",
|
||||
minute_to_string(minutes)?,
|
||||
number_to_string(hours)?
|
||||
))
|
||||
}
|
||||
} else {
|
||||
Err("Time not valid")
|
||||
}
|
||||
}
|
50
Week-05/Day-31_The-Time-In-Words/day31/src/main.rs
Normal file
50
Week-05/Day-31_The-Time-In-Words/day31/src/main.rs
Normal file
@ -0,0 +1,50 @@
|
||||
use std::{
|
||||
io::{self, Write},
|
||||
process::exit,
|
||||
};
|
||||
|
||||
use day31::time_to_string;
|
||||
|
||||
fn main() {
|
||||
println!("Insert the time in the format hh:mm");
|
||||
print!("> ");
|
||||
io::stdout().flush().expect("Failed to flush stdout");
|
||||
|
||||
let mut buffer = String::new();
|
||||
|
||||
io::stdin()
|
||||
.read_line(&mut buffer)
|
||||
.expect("Failed to read line");
|
||||
|
||||
let (hours, minutes) = match buffer.split_once(':') {
|
||||
Some(x) => x,
|
||||
None => {
|
||||
eprintln!("':' not found.");
|
||||
exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
let hours = match hours.trim().parse() {
|
||||
Ok(x) => x,
|
||||
Err(_) => {
|
||||
eprintln!("Hours is not a valid number");
|
||||
exit(1);
|
||||
}
|
||||
};
|
||||
let minutes = match minutes.trim().parse() {
|
||||
Ok(x) => x,
|
||||
Err(_) => {
|
||||
eprintln!("Minutes is not a valid number");
|
||||
exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
let result = time_to_string(hours, minutes);
|
||||
match result {
|
||||
Ok(x) => println!("{x}"),
|
||||
Err(e) => {
|
||||
eprintln!("{e}");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
38
Week-05/Day-31_The-Time-In-Words/day31/tests/examples.rs
Normal file
38
Week-05/Day-31_The-Time-In-Words/day31/tests/examples.rs
Normal file
@ -0,0 +1,38 @@
|
||||
#[cfg(test)]
|
||||
mod exaples {
|
||||
use day31::time_to_string;
|
||||
|
||||
#[test]
|
||||
fn example1() {
|
||||
assert_eq!(
|
||||
time_to_string(5, 47),
|
||||
Ok(String::from("thirteen minutes to six"))
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn example2() {
|
||||
assert_eq!(time_to_string(3, 00), Ok(String::from("three o' clock")))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn example3() {
|
||||
assert_eq!(
|
||||
time_to_string(7, 15),
|
||||
Ok(String::from("quarter past seven"))
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn example4() {
|
||||
assert_eq!(time_to_string(5, 30), Ok(String::from("half past five")));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn example5() {
|
||||
assert_eq!(
|
||||
time_to_string(5, 1),
|
||||
Ok(String::from("one minute past five"))
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user