diff --git a/rust/pset1/cash/Cargo.lock b/rust/pset1/cash/Cargo.lock new file mode 100644 index 0000000..3270e98 --- /dev/null +++ b/rust/pset1/cash/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "cash" +version = "0.1.0" diff --git a/rust/pset1/cash/Cargo.toml b/rust/pset1/cash/Cargo.toml new file mode 100644 index 0000000..b2f63e7 --- /dev/null +++ b/rust/pset1/cash/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "cash" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/rust/pset1/cash/README.md b/rust/pset1/cash/README.md new file mode 120000 index 0000000..d8952d7 --- /dev/null +++ b/rust/pset1/cash/README.md @@ -0,0 +1 @@ +../../../pset1/cash/README.md \ No newline at end of file diff --git a/rust/pset1/cash/src/lib.rs b/rust/pset1/cash/src/lib.rs new file mode 100644 index 0000000..913d474 --- /dev/null +++ b/rust/pset1/cash/src/lib.rs @@ -0,0 +1,17 @@ +use std::io::{self, Write}; + +pub fn get_int(prompt: &str) -> i32 { + loop { + print!("{prompt}"); + io::stdout().flush().unwrap(); + + let mut input_text = String::new(); + match io::stdin().read_line(&mut input_text) { + Ok(_) => match input_text.trim().parse() { + Ok(input_int) => return input_int, + Err(_) => continue, + }, + Err(_) => continue, + } + } +} diff --git a/rust/pset1/cash/src/main.rs b/rust/pset1/cash/src/main.rs new file mode 100644 index 0000000..680ceb2 --- /dev/null +++ b/rust/pset1/cash/src/main.rs @@ -0,0 +1,39 @@ +use cash::get_int; + +fn main() { + let mut cents = loop { + let x = get_int("Change owed: "); + if x >= 0 { + break x; + } + }; + + let quarters = calculate_quarters(cents); + cents -= quarters * 25; + + let dimes = calculate_dimes(cents); + cents -= dimes * 10; + + let nickels = calculate_nickels(cents); + cents -= nickels * 5; + + let pennies = calculate_pennies(cents); + + println!("{}", quarters + dimes + nickels + pennies); +} + +fn calculate_quarters(cents: i32) -> i32 { + cents / 25 +} + +fn calculate_dimes(cents: i32) -> i32 { + cents / 10 +} + +fn calculate_nickels(cents: i32) -> i32 { + cents / 5 +} + +fn calculate_pennies(cents: i32) -> i32 { + cents +}