aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Andre <benjaminandre23@gmail.com>2025-08-31 06:45:23 +0200
committerBenjamin Andre <benjaminandre23@gmail.com>2025-08-31 06:45:23 +0200
commit773023ccf4cbd1fcc85fe27cc7e4d988f0893455 (patch)
tree4fc4ca4e353fafc8de200c6393c05372454267c2
parent1cda67fc152a1c71cf521ffe30c5f503959c81a1 (diff)
downloadperlweeklychallenge-club-773023ccf4cbd1fcc85fe27cc7e4d988f0893455.tar.gz
perlweeklychallenge-club-773023ccf4cbd1fcc85fe27cc7e4d988f0893455.tar.bz2
perlweeklychallenge-club-773023ccf4cbd1fcc85fe27cc7e4d988f0893455.zip
feat(336): completed both challenges
-rwxr-xr-xchallenge-336/benjamin-andre/rust/ch-1.rs35
-rwxr-xr-xchallenge-336/benjamin-andre/rust/ch-2.rs35
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
+ );
+}