Skip to content

Instantly share code, notes, and snippets.

@cp6
Created March 2, 2023 01:03
Show Gist options
  • Save cp6/b4ef3cbd6a583d05d606fe39a61bee8e to your computer and use it in GitHub Desktop.
Save cp6/b4ef3cbd6a583d05d606fe39a61bee8e to your computer and use it in GitHub Desktop.
PHP tennis score function
<?php
//$series = [];
//$series = ['Jimmy'];
//$series = ['Lisa'];
//$series = ['Jimmy', 'Lisa'];
//$series = ['Jimmy', 'Lisa', 'Jimmy'];
//$series = ['Jimmy', 'Lisa', 'Jimmy', 'Lisa'];
//$series = ['Jimmy', 'Lisa', 'Jimmy', 'Jimmy'];
//$series = ['Jimmy', 'Jimmy', 'Jimmy'];
$series = ['Jimmy', 'Lisa', 'Jimmy', 'Lisa', 'Jimmy'];
//$series = ['Jimmy', 'Lisa', 'Jimmy', 'Lisa', 'Jimmy', 'Lisa'];//DEUCE
//$series = ['Jimmy', 'Lisa', 'Jimmy', 'Jimmy', 'Lisa', 'Lisa', 'Lisa'];
//$series = ['Jimmy', 'Lisa', 'Jimmy', 'Jimmy', 'Lisa', 'Lisa', 'Jimmy'];
//$series = ['Jimmy', 'Lisa', 'Jimmy', 'Jimmy', 'Lisa', 'Lisa', 'Lisa', 'Lisa'];
//$series = ['Jimmy', 'Lisa', 'Jimmy', 'Jimmy', 'Lisa', 'Lisa', 'Lisa', 'Jimmy', 'Jimmy', 'Lisa', 'Jimmy', 'Jimmy'];
echo computeGameState('Jimmy', 'Lisa', $series);
function computeGameState(string $nameP1, string $nameP2, array $wins): string
{
$p1_score = $p2_score = 0;//Each player's score counter
foreach ($wins as $winner) {//Loop through the wins array
if ($winner === $nameP1) {//This winner is Jimmy
$p1_score++;//Add 1 onto Jimmy's score
} else {//Winner is Lisa
$p2_score++;//Add 1 onto Lisa's score
}
}
if ($p1_score === 0 && $p2_score === 0) {//Both players have not scored yet
return "$nameP1 0 - $nameP2 0";
} elseif ($p1_score >= 3 && $p2_score >= 3) {//Both players are on OR above 40! DEUCE scenarios:
if ($p1_score - 1 === $p2_score) {//p1 has ADVANTAGE because 1 score above p1
return "$nameP1 ADVANTAGE";
} elseif ($p2_score - 1 === $p1_score) {//p2 has ADVANTAGE because 1 score above p2
return "$nameP2 ADVANTAGE";
} elseif ($p1_score - 2 === $p2_score) {//p1 wins as 2 scores above p2
return "$nameP1 WINS";
} elseif ($p2_score - 2 === $p1_score) {//p2 wins as 2 scores above p1
return "$nameP2 WINS";
} else {//Both players are on 40
return "DEUCE";
}
} elseif ($p1_score === 3 && $p2_score < 3) {//p1 on 40 p2 below 40 (NOT DEUCE)
return "$nameP1 40 - $nameP2 " . $p2_score * 15;
} elseif ($p2_score === 3 && $p1_score < 3) {//p2 on 40 p1 below 40 (NOT DEUCE)
return "$nameP1 " . $p1_score * 15 . " - $nameP2 40";
} elseif ($p1_score === $p2_score) {//Scores tied AND below 40
return $p1_score * 15 . "a";
} else {//Scores are different and below 40 for both players
return "$nameP1 " . $p1_score * 15 . " - $nameP2 " . $p2_score * 15;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment