diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-07-31 21:06:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-31 21:06:08 +0100 |
| commit | e085ac67c613bb3c258715dd344b6c0c86c83626 (patch) | |
| tree | 535eafe36a650711539c998c7bb7424d3fc96ee5 | |
| parent | 65a2ff6db1e19cc1bd28f2f73aa9b44336a80256 (diff) | |
| parent | ab6092382192bf54f113d029e085e20a79cce779 (diff) | |
| download | perlweeklychallenge-club-e085ac67c613bb3c258715dd344b6c0c86c83626.tar.gz perlweeklychallenge-club-e085ac67c613bb3c258715dd344b6c0c86c83626.tar.bz2 perlweeklychallenge-club-e085ac67c613bb3c258715dd344b6c0c86c83626.zip | |
Merge pull request #4632 from xkr47/pwc123
pwc123
| -rw-r--r-- | challenge-123/xkr47/rust/Cargo.lock | 7 | ||||
| -rw-r--r-- | challenge-123/xkr47/rust/Cargo.toml | 15 | ||||
| -rw-r--r-- | challenge-123/xkr47/rust/ch-1.rs | 53 | ||||
| -rw-r--r-- | challenge-123/xkr47/rust/ch-2.rs | 39 |
4 files changed, 114 insertions, 0 deletions
diff --git a/challenge-123/xkr47/rust/Cargo.lock b/challenge-123/xkr47/rust/Cargo.lock new file mode 100644 index 0000000000..ec844e7b4d --- /dev/null +++ b/challenge-123/xkr47/rust/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "pwd-123" +version = "0.1.0" diff --git a/challenge-123/xkr47/rust/Cargo.toml b/challenge-123/xkr47/rust/Cargo.toml new file mode 100644 index 0000000000..5213a81782 --- /dev/null +++ b/challenge-123/xkr47/rust/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "pwd-123" +version = "0.1.0" +authors = ["Jonas Berlin <xkr47@outerspace.dyndns.org>"] +edition = "2018" + +[dependencies] + +[[bin]] +name = "ch-1" +path = "ch-1.rs" + +[[bin]] +name = "ch-2" +path = "ch-2.rs" diff --git a/challenge-123/xkr47/rust/ch-1.rs b/challenge-123/xkr47/rust/ch-1.rs new file mode 100644 index 0000000000..7ec77ca91a --- /dev/null +++ b/challenge-123/xkr47/rust/ch-1.rs @@ -0,0 +1,53 @@ +#![allow(dead_code)] + +use std::env; + +fn main() { + let n = env::args().nth(1).expect("Missing argument n").parse().expect("Bad argument n"); + + let num = nth_ugly_number(n); + + println!("{}", num); +} + +fn nth_ugly_number(n: usize) -> usize { + (1..) + .filter(|i| is_ugly(*i)) + .nth(n - 1) + .unwrap() +} + +fn is_ugly(mut n: usize) -> bool { + n = divide_all(n, 5); + n = divide_all(n, 3); + n = divide_all(n, 2); + n == 1 +} + +fn divide_all(n: usize, div: usize) -> usize { + let l = if div == 2 { (n as f64).log2() } else { (n as f64).log(div as f64) } as u32; + (1..=l) + .rev() + .map(|k| div.pow(k)) + .filter(|kp| n % kp == 0) + .map(|kp| n / kp) + .next() + .unwrap_or(n) +} + +#[cfg(test)] +mod tests { + use crate::*; + + // from assignment + + #[test] + fn do_test1() { + assert_eq!(nth_ugly_number(7), 8); + } + + #[test] + fn do_test2() { + assert_eq!(nth_ugly_number(10), 12); + } +} diff --git a/challenge-123/xkr47/rust/ch-2.rs b/challenge-123/xkr47/rust/ch-2.rs new file mode 100644 index 0000000000..1bd2f372c7 --- /dev/null +++ b/challenge-123/xkr47/rust/ch-2.rs @@ -0,0 +1,39 @@ +#![allow(dead_code)] + +use std::env; + +fn main() { + let args = env::args().skip(1).take(8).map(|i| i.parse::<i32>().unwrap()).collect::<Vec<_>>(); + assert_eq!(args.len(), 8, "Wrong number of arguments, expected 8"); + + let sq = is_square([(args[0], args[1]), (args[2], args[3]), (args[4], args[5]), (args[6], args[7])]); + + println!("{}", sq); +} + +fn is_square(c: [(i32, i32); 4]) -> i8 { + let vx1 = c[1].0 - c[0].0; + let vy1 = c[1].1 - c[0].1; + let vx2 = c[2].0 - c[0].0; + let vy2 = c[2].1 - c[0].1; + let vx3 = c[3].0 - c[0].0; + let vy3 = c[3].1 - c[0].1; + if vx1 + vx3 == vx2 && vy1 + vy3 == vy2 { 1 } else { 0 } +} + +#[cfg(test)] +mod tests { + use crate::*; + + // from assignment + + #[test] + fn do_test1() { + assert_eq!(is_square([(10, 20), (20, 20), (20, 10), (10, 10)]), 1); + } + + #[test] + fn do_test2() { + assert_eq!(is_square([(12, 24), (16, 10), (20, 12), (18, 16)]), 0); + } +} |
