diff --git a/README.md b/README.md index 6f92035..5d0fa0b 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ We encourage you to share your progress and ask questions in the Discussions sec | Day #21 | [Random Maze Generator](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-03/Day-21_Random-Maze-Generator) | :white_check_mark: | | Day #22 | [Marcio Mellos Challenge](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-04/Day-22_Marcio-Mellos-Challenge) | :white_check_mark: | | Day #23 | [The Dining Philosophers](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-04/Day-23_The-Dining_Philosophers) | :white_check_mark: | -| Day #24 | [The Josephus Problem](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-04/Day-24_The-Josephus-Problem) | :white_large_square: | +| Day #24 | [The Josephus Problem](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-04/Day-24_The-Josephus-Problem) | :white_check_mark: | | Day #25 | [Coin Trouble](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-04/Day-25_Coin-Trouble) | :white_large_square: | | Day #26 | [Briefcase Lock](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-04/Day-26_Briefcase-Lock) | :white_large_square: | | Day #27 | [Task Scheduler](https://github.com/LiveGray/100-Days-Of-Rust/tree/main/Week-04/Day-27_Task-Scheduler) | :white_large_square: | diff --git a/Week-04/Day-24_The-Josephus-Problem/day24/Cargo.toml b/Week-04/Day-24_The-Josephus-Problem/day24/Cargo.toml new file mode 100644 index 0000000..ddaaf58 --- /dev/null +++ b/Week-04/Day-24_The-Josephus-Problem/day24/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day24" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/Week-04/Day-24_The-Josephus-Problem/day24/src/lib.rs b/Week-04/Day-24_The-Josephus-Problem/day24/src/lib.rs new file mode 100644 index 0000000..5901c02 --- /dev/null +++ b/Week-04/Day-24_The-Josephus-Problem/day24/src/lib.rs @@ -0,0 +1,12 @@ +pub fn josephus(n: usize, i: usize) -> usize { + let mut pos = 0; + let mut vec = vec![0]; + for _ in 1..n { + pos = (vec.len() * i + pos - (i - 1)) % vec.len(); + vec.insert(pos, vec.len()); + } + println!("{}/{}, {:?}", pos, vec.len(), vec.iter()); + let a = (vec.len() + pos - (i - 1)) % vec.len(); + println!("pos: {pos}, i: {i}, a: {a}"); + vec.len() - a +} diff --git a/Week-04/Day-24_The-Josephus-Problem/day24/src/main.rs b/Week-04/Day-24_The-Josephus-Problem/day24/src/main.rs new file mode 100644 index 0000000..e4965c9 --- /dev/null +++ b/Week-04/Day-24_The-Josephus-Problem/day24/src/main.rs @@ -0,0 +1,6 @@ +use day24::josephus; + +fn main() { + let res = josephus(11, 3); + println!("{res}"); +} diff --git a/Week-04/Day-24_The-Josephus-Problem/day24/tests/examples.rs b/Week-04/Day-24_The-Josephus-Problem/day24/tests/examples.rs new file mode 100644 index 0000000..787cc46 --- /dev/null +++ b/Week-04/Day-24_The-Josephus-Problem/day24/tests/examples.rs @@ -0,0 +1,24 @@ +#[cfg(test)] +mod examples { + use day24::josephus; + + #[test] + fn example1() { + assert_eq!(josephus(41, 3), 31); + } + + #[test] + fn example2() { + assert_eq!(josephus(35, 11), 18); + } + + #[test] + fn example3() { + assert_eq!(josephus(11, 1), 11); + } + + #[test] + fn example4() { + assert_eq!(josephus(2, 2), 1); + } +}