Skip to content

Instantly share code, notes, and snippets.

@trvswgnr
Last active August 24, 2023 04:10
Show Gist options
  • Save trvswgnr/c551144a91df653254243985c3560af8 to your computer and use it in GitHub Desktop.
Save trvswgnr/c551144a91df653254243985c3560af8 to your computer and use it in GitHub Desktop.
check connect four winner
#!/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"
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