diff options
| author | Benjamin Andre <benjaminandre23@gmail.com> | 2025-08-19 15:50:04 +0200 |
|---|---|---|
| committer | Benjamin Andre <benjaminandre23@gmail.com> | 2025-08-19 15:50:04 +0200 |
| commit | a39b41d243fe3d7d1c4573167dbeb64e50f22121 (patch) | |
| tree | 452c727dacf1f4f0eebf2aca510b78fb61a9609b | |
| parent | 221b3b14db0d48f6434e8ad4a7f8ce8baab8bda1 (diff) | |
| download | perlweeklychallenge-club-a39b41d243fe3d7d1c4573167dbeb64e50f22121.tar.gz perlweeklychallenge-club-a39b41d243fe3d7d1c4573167dbeb64e50f22121.tar.bz2 perlweeklychallenge-club-a39b41d243fe3d7d1c4573167dbeb64e50f22121.zip | |
feat(335): completed both challenges
| -rwxr-xr-x | challenge-335/benjamin-andre/rust/ch-1.rs | 36 | ||||
| -rwxr-xr-x | challenge-335/benjamin-andre/rust/ch-2.rs | 50 |
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" + ); +} |
