Skip to content

Instantly share code, notes, and snippets.

@CaseyLeask
Created October 29, 2016 12:18
Show Gist options
  • Save CaseyLeask/b36cc54e05c2472686db6e609e19bb10 to your computer and use it in GitHub Desktop.
Save CaseyLeask/b36cc54e05c2472686db6e609e19bb10 to your computer and use it in GitHub Desktop.
use std::io;
use std::io::BufRead;
fn main() {
let stdin = io::stdin();
let lines: Vec<std::string::String> = stdin.lock().lines().map(|l| l.unwrap()).collect();
let date_returned_vec: Vec<&str> = lines[0].split_whitespace().collect();
let due_date_vec: Vec<&str> = lines[1].split_whitespace().collect();
let date_returned = construct_date(date_returned_vec[0], date_returned_vec[1], date_returned_vec[2]);
let due_date = construct_date(due_date_vec[0], due_date_vec[1], due_date_vec[2]);
let date_difference = calculate_difference(date_returned, due_date);
let fine = calculate_fine(date_difference);
println!("{:?}", fine);
}
fn construct_date(d: &str, m: &str, y: &str) -> (isize, isize, isize) {
let day = match d.parse::<isize>() {
Ok(i) => i,
Err(..) => 0
};
let month = match m.parse::<isize>() {
Ok(i) => i,
Err(..) => 0
};
let year = match y.parse::<isize>() {
Ok(i) => i,
Err(..) => 0
};
(day, month, year)
}
fn calculate_difference(date1: (isize, isize, isize), date2: (isize, isize, isize)) -> (isize, isize, isize) {
(date1.0 - date2.0, date1.1 - date2.1, date1.2 - date2.2)
}
fn calculate_fine(date_difference: (isize, isize, isize)) -> isize {
if date_difference.2 < 0 {
0
} else if date_difference.2 > 0 {
10000
} else if date_difference.1 < 0 {
0
} else if date_difference.1 > 0 {
500 * date_difference.1
} else if date_difference.0 < 0 {
0
} else if date_difference.0 > 0 {
15 * date_difference.0
} else {
0
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment