diff --git a/README.md b/README.md index a632e54..dd6a5cc 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ We encourage you to share your progress and ask questions in the Discussions sec | Day #42 | [Drawing Book](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-06/Day-42_Drawing-Book) | :white_check_mark: | | Day #43 | [Area Of A Triangle](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-07/Day-43_Area-Of-A-Triangle) | :white_check_mark: | | Day #44 | [Maximum Edge Of A Triangle](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-07/Day-44_Maximum-Edge-Of-A-Triangle) | :white_check_mark: | -| Day #45 | [Subtract The Swapped Bits...](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage) | :white_large_square: | +| Day #45 | [Subtract The Swapped Bits...](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage) | :white_check_mark: | | Day #46 | [Hot Pics Of Danny Devito](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-07/Day-46_Hot-Pics-Of-Danny-Devito) | :white_large_square: | | Day #47 | [Zip It](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-07/Day-47_Zip-It) | :white_large_square: | | Day #48 | [Christmas Tree](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-07/Day-48_Christmas-Tree) | :white_large_square: | diff --git a/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/Cargo.toml b/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/Cargo.toml new file mode 100644 index 0000000..e74f10d --- /dev/null +++ b/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day45" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/src/lib.rs b/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/src/lib.rs new file mode 100644 index 0000000..1c6c197 --- /dev/null +++ b/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/src/lib.rs @@ -0,0 +1,6 @@ +pub fn xor(x: &mut usize, y: &mut usize) -> isize { + *x ^= *y; + *y ^= *x; + *x ^= *y; + *x as isize - *y as isize +} diff --git a/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/src/main.rs b/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/src/main.rs new file mode 100644 index 0000000..3b1e90f --- /dev/null +++ b/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/src/main.rs @@ -0,0 +1,35 @@ +use std::{ + io::{self, Write}, + process::exit, +}; + +use day45::xor; + +fn read_usize(request: &str) -> Result { + print!("{}", request); + io::stdout().flush().expect("Failed to flush stdout"); + let mut input = String::new(); + std::io::stdin() + .read_line(&mut input) + .expect("Failed to read from stdin"); + input.trim().parse() +} + +fn main() { + let mut x = match read_usize("Enter the first number: ") { + Ok(x) => x, + Err(_) => { + println!("Invalid input, please enter a valid number"); + exit(1) + } + }; + let mut y = match read_usize("Enter the second number: ") { + Ok(y) => y, + Err(_) => { + println!("Invalid input, please enter a valid number"); + exit(1) + } + }; + let result = xor(&mut x, &mut y); + println!("{x} - {y} = {result}"); +} diff --git a/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/tests/examples.rs b/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/tests/examples.rs new file mode 100644 index 0000000..c4a07b2 --- /dev/null +++ b/Week-07/Day-45_Subtract-The-Swapped-Bits-Without-Temp-Storage/day45/tests/examples.rs @@ -0,0 +1,24 @@ +#[cfg(test)] +mod examples { + use day45::xor; + + #[test] + fn test_example() { + assert_eq!(xor(&mut 10, &mut 41), 31); + } + + #[test] + fn test_example2() { + assert_eq!(xor(&mut 69, &mut 420), 351); + } + + #[test] + fn test_example3() { + assert_eq!(xor(&mut 12345, &mut 890412), 878067); + } + + #[test] + fn test_example4() { + assert_eq!(xor(&mut 2, &mut 1), -1); + } +}