Last active
August 24, 2023 04:10
-
-
Save trvswgnr/c551144a91df653254243985c3560af8 to your computer and use it in GitHub Desktop.
check connect four winner
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
declare -A board | |
for ((i=1; i<=7; i++)); do | |
for ((j=1; j<=6; j++)); do | |
board[$i,$j]=' ' | |
done | |
done | |
check_winner() { | |
local player=$1 | |
local col=$2 | |
local row=$3 | |
local dir | |
for dir in -1,0 0,-1 -1,-1 -1,1; do | |
local dcol=${dir%,*} | |
local drow=${dir#*,} | |
local count=1 | |
for ((i=1; i<4; i++)); do | |
if [[ ${board[$((col+i*dcol)),$((row+i*drow))]} == $player ]]; then | |
((count++)) | |
else | |
break | |
fi | |
done | |
for ((i=1; i<4; i++)); do | |
if [[ ${board[$((col-i*dcol)),$((row-i*drow))]} == $player ]]; then | |
((count++)) | |
else | |
break | |
fi | |
done | |
if ((count >= 4)); then | |
echo $player | |
exit | |
fi | |
done | |
} | |
while read -r player col row; do | |
board[$col,$row]=$player | |
check_winner $player $col $row | |
done | |
for ((i=1; i<=7; i++)); do | |
for ((j=1; j<=6; j++)); do | |
if [[ ${board[$i,$j]} == ' ' ]]; then | |
echo "P" | |
exit | |
fi | |
done | |
done | |
echo "D" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pub fn connect_four_winner(board: Vec<Vec<char>>, last_move: (usize, usize)) -> String { | |
let (row, col) = last_move; | |
let player = board[row][col]; | |
let directions = vec![ | |
(0, 1), // right | |
(1, 0), // down | |
(1, 1), // down-right | |
(1, -1), // down-left | |
]; | |
for &(dr, dc) in &directions { | |
let mut count = 1; | |
for i in 1..4 { | |
let new_row = row as i32 + dr * i; | |
let new_col = col as i32 + dc * i; | |
if new_row < 0 || new_row >= 6 || new_col < 0 || new_col >= 7 { | |
break; | |
} | |
if board[new_row as usize][new_col as usize] == player { | |
count += 1; | |
} else { | |
break; | |
} | |
} | |
for i in 1..4 { | |
let new_row = row as i32 - dr * i; | |
let new_col = col as i32 - dc * i; | |
if new_row < 0 || new_row >= 6 || new_col < 0 || new_col >= 7 { | |
break; | |
} | |
if board[new_row as usize][new_col as usize] == player { | |
count += 1; | |
} else { | |
break; | |
} | |
} | |
if count >= 4 { | |
return player.to_string(); | |
} | |
} | |
for row in &board { | |
for &cell in row { | |
if cell == '0' { | |
return "Pending".to_string(); | |
} | |
} | |
} | |
"Draw".to_string() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment