diff options
| author | Benjamin Andre <benjaminandre23@gmail.com> | 2025-08-31 06:45:23 +0200 |
|---|---|---|
| committer | Benjamin Andre <benjaminandre23@gmail.com> | 2025-08-31 06:45:23 +0200 |
| commit | 773023ccf4cbd1fcc85fe27cc7e4d988f0893455 (patch) | |
| tree | 4fc4ca4e353fafc8de200c6393c05372454267c2 | |
| parent | 1cda67fc152a1c71cf521ffe30c5f503959c81a1 (diff) | |
| download | perlweeklychallenge-club-773023ccf4cbd1fcc85fe27cc7e4d988f0893455.tar.gz perlweeklychallenge-club-773023ccf4cbd1fcc85fe27cc7e4d988f0893455.tar.bz2 perlweeklychallenge-club-773023ccf4cbd1fcc85fe27cc7e4d988f0893455.zip | |
feat(336): completed both challenges
| -rwxr-xr-x | challenge-336/benjamin-andre/rust/ch-1.rs | 35 | ||||
| -rwxr-xr-x | challenge-336/benjamin-andre/rust/ch-2.rs | 35 |
2 files changed, 70 insertions, 0 deletions
diff --git a/challenge-336/benjamin-andre/rust/ch-1.rs b/challenge-336/benjamin-andre/rust/ch-1.rs new file mode 100755 index 0000000000..6b35bdf474 --- /dev/null +++ b/challenge-336/benjamin-andre/rust/ch-1.rs @@ -0,0 +1,35 @@ +#!/bin/sh +//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit + +fn equal_group(ints: &[i32]) -> bool { + let mut counts = std::collections::HashMap::new(); + for &n in ints { + *counts.entry(n).or_insert(0) += 1; + } + let frequencies: Vec<_> = counts.values().collect(); + if frequencies.is_empty() || frequencies.iter().any(|&&c| c < 2) { + return false; + } + let gcd = frequencies + .iter() + .fold(**frequencies.first().unwrap(), |acc, &&x| { + fn gcd(a: usize, b: usize) -> usize { + if b == 0 { + a + } else { + gcd(b, a % b) + } + } + gcd(acc, x) + }); + gcd >= 2 +} + +#[test] +fn example() { + assert_eq!(equal_group(&[1, 1, 2, 2, 2, 2]), true); + assert_eq!(equal_group(&[1, 1, 1, 2, 2, 2, 3, 3]), false); + assert_eq!(equal_group(&[5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7]), true); + assert_eq!(equal_group(&[1, 2, 3, 4]), false); + assert_eq!(equal_group(&[8, 8, 9, 9, 10, 10, 11, 11]), true); +} diff --git a/challenge-336/benjamin-andre/rust/ch-2.rs b/challenge-336/benjamin-andre/rust/ch-2.rs new file mode 100755 index 0000000000..a72cef213f --- /dev/null +++ b/challenge-336/benjamin-andre/rust/ch-2.rs @@ -0,0 +1,35 @@ +#!/bin/sh +//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit + +fn final_score(scores: &[&str]) -> i32 { + let mut stack = Vec::new(); + for score in scores { + match *score { + "C" => { + stack.pop(); + } + "D" => { + let last = *stack.last().unwrap(); + stack.push(last * 2); + } + "+" => { + let len = stack.len(); + stack.push(stack[len - 1] + stack[len - 2]); + } + _ => stack.push(score.parse().unwrap()), + } + } + stack.iter().sum() +} + +#[test] +fn example() { + assert_eq!(final_score(&["5", "2", "C", "D", "+"]), 30); + assert_eq!(final_score(&["5", "-2", "4", "C", "D", "9", "+", "+"]), 27); + assert_eq!(final_score(&["7", "D", "D", "C", "+", "3"]), 45); + assert_eq!(final_score(&["-5", "-10", "+", "D", "C", "+"]), -55); + assert_eq!( + final_score(&["3", "6", "+", "D", "C", "8", "+", "D", "-2", "C", "+"]), + 128 + ); +} |
