aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Andre <benjaminandre23@gmail.com>2025-08-19 15:50:04 +0200
committerBenjamin Andre <benjaminandre23@gmail.com>2025-08-19 15:50:04 +0200
commita39b41d243fe3d7d1c4573167dbeb64e50f22121 (patch)
tree452c727dacf1f4f0eebf2aca510b78fb61a9609b
parent221b3b14db0d48f6434e8ad4a7f8ce8baab8bda1 (diff)
downloadperlweeklychallenge-club-a39b41d243fe3d7d1c4573167dbeb64e50f22121.tar.gz
perlweeklychallenge-club-a39b41d243fe3d7d1c4573167dbeb64e50f22121.tar.bz2
perlweeklychallenge-club-a39b41d243fe3d7d1c4573167dbeb64e50f22121.zip
feat(335): completed both challenges
-rwxr-xr-xchallenge-335/benjamin-andre/rust/ch-1.rs36
-rwxr-xr-xchallenge-335/benjamin-andre/rust/ch-2.rs50
2 files changed, 86 insertions, 0 deletions
diff --git a/challenge-335/benjamin-andre/rust/ch-1.rs b/challenge-335/benjamin-andre/rust/ch-1.rs
new file mode 100755
index 0000000000..4e2a470dc0
--- /dev/null
+++ b/challenge-335/benjamin-andre/rust/ch-1.rs
@@ -0,0 +1,36 @@
+#!/bin/sh
+//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit
+
+fn common_characters(words: &[&str]) -> Vec<char> {
+ if words.is_empty() {
+ return Vec::new();
+ }
+ let mut result = words[0].chars().collect::<Vec<_>>();
+ for word in &words[1..] {
+ let mut word_chars = word.chars().collect::<Vec<_>>();
+ result.retain(|&c| {
+ if let Some(pos) = word_chars.iter().position(|&x| x == c) {
+ word_chars.remove(pos);
+ true
+ } else {
+ false
+ }
+ });
+ }
+ result
+}
+
+#[test]
+fn example() {
+ assert_eq!(
+ common_characters(&["bella", "label", "roller"]),
+ vec!['e', 'l', 'l']
+ );
+ assert_eq!(common_characters(&["cool", "lock", "cook"]), vec!['c', 'o']);
+ assert_eq!(
+ common_characters(&["hello", "world", "pole"]),
+ vec!['l', 'o']
+ );
+ assert_eq!(common_characters(&["abc", "def", "ghi"]), vec![]);
+ assert_eq!(common_characters(&["aab", "aac", "aaa"]), vec!['a', 'a']);
+}
diff --git a/challenge-335/benjamin-andre/rust/ch-2.rs b/challenge-335/benjamin-andre/rust/ch-2.rs
new file mode 100755
index 0000000000..eb4339cb0f
--- /dev/null
+++ b/challenge-335/benjamin-andre/rust/ch-2.rs
@@ -0,0 +1,50 @@
+#!/bin/sh
+//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit
+
+fn find_winner(moves: &[[usize; 2]]) -> String {
+ let mut board = [[' '; 3]; 3];
+ for (i, &[r, c]) in moves.iter().enumerate() {
+ board[r][c] = if i % 2 == 0 { 'A' } else { 'B' };
+ let player = board[r][c];
+ if (0..3).all(|j| board[r][j] == player)
+ || (0..3).all(|j| board[j][c] == player)
+ || (r == c && (0..3).all(|j| board[j][j] == player))
+ || (r + c == 2 && (0..3).all(|j| board[j][2 - j] == player))
+ {
+ return player.to_string();
+ }
+ }
+ if moves.len() == 9 {
+ "Draw".to_string()
+ } else {
+ "Pending".to_string()
+ }
+}
+
+#[test]
+fn example() {
+ assert_eq!(find_winner(&[[0, 0], [2, 0], [1, 1], [2, 1], [2, 2]]), "A");
+ assert_eq!(
+ find_winner(&[[0, 0], [1, 1], [0, 1], [0, 2], [1, 0], [2, 0]]),
+ "B"
+ );
+ assert_eq!(
+ find_winner(&[
+ [0, 0],
+ [1, 1],
+ [2, 0],
+ [1, 0],
+ [1, 2],
+ [2, 1],
+ [0, 1],
+ [0, 2],
+ [2, 2]
+ ]),
+ "Draw"
+ );
+ assert_eq!(find_winner(&[[0, 0], [1, 1]]), "Pending");
+ assert_eq!(
+ find_winner(&[[1, 1], [0, 0], [2, 2], [0, 1], [1, 0], [0, 2]]),
+ "B"
+ );
+}