Created
June 30, 2021 14:29
-
-
Save esouthren/9f7782c1cb3570f31f9a5b49b273d467 to your computer and use it in GitHub Desktop.
This file contains 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
void main() { | |
void runTestCases(Function scoringFunction) { | |
print(scoringFunction(1, 1) == 'Player 1: fifteen, Player 2: fifteen' | |
? 'passes' | |
: 'fail: output = ${scoringFunction(1, 1)}'); | |
print(scoringFunction(3, 0) == 'Player 1: forty, Player 2: love' | |
? 'passes' | |
: 'fail: output = ${scoringFunction(3, 0)}'); | |
print(scoringFunction(4, 4) == 'Deuce' | |
? 'passes' | |
: 'fail: output = ${scoringFunction(4, 4)}'); | |
print(scoringFunction(8, 8) == 'Deuce' | |
? 'passes' | |
: 'fail: output = ${scoringFunction(8, 8)}'); | |
print(scoringFunction(5, 4) == 'Advantage Player 1' | |
? 'passes' | |
: 'fail: output = ${scoringFunction(5, 4)}'); | |
print(scoringFunction(10, 11) == 'Advantage Player 2' | |
? 'passes' | |
: 'fail: output = ${scoringFunction(10, 11)}'); | |
print(scoringFunction(4, 1) == 'Player 1 wins!' | |
? 'passes' | |
: 'fail: output = ${scoringFunction(4, 1)}'); | |
print(scoringFunction(2, 4) == 'Player 2 wins!' | |
? 'passes' | |
: 'fail: output = ${scoringFunction(2, 4)}'); | |
} | |
/// Session 1: No constraints | |
/// | |
/// Doesn't handle invalid scores like 8-1 | |
final scores = ['love', 'fifteen', 'thirty', 'forty']; | |
String convertScore1(int s1, int s2) { | |
if (s1 >= 3 && s2 >= 3 && s1 == s2) { | |
return 'Deuce'; | |
} | |
if (s1 >= 3 && s2 >= 3) { | |
if (s1 - s2 == 2) return 'Player 1 wins!'; | |
if (s2 - s1 == 2) return 'Player 2 wins!'; | |
if (s1 - s2 == 1) return 'Advantage Player 1'; | |
if (s2 - s1 == 1) return 'Advantage Player 2'; | |
} | |
if (s1 - s2 >= 2 && s1 == 4) return 'Player 1 wins!'; | |
if (s2 - s1 >= 2 && s2 == 4) return 'Player 2 wins!'; | |
return 'Player 1: ${scores[s1]}, Player 2: ${scores[s2]}'; | |
} | |
/// Session 2: Methods shorter than 4 lines | |
/// | |
/// Create helper methods. | |
bool checkDeuce(int s1, int s2) => (s1 >= 3 && s2 >= 3 && s1 == s2); | |
bool checkAdvantage(int s1, int s2) => (s1 >= 3 && s2 >= 3) && (s1 - s2 == 1); | |
bool checkWin(int s1, int s2) => | |
((s1 >= 3 && s2 >= 3) && (s1 - s2 == 2)) || (s1 - s2 >= 2 && s1 == 4); | |
String convertScore2(int s1, int s2) { | |
if (checkDeuce(s1, s2)) return 'Deuce'; | |
if (checkAdvantage(s1, s2)) return 'Advantage Player 1'; | |
if (checkAdvantage(s2, s1)) return 'Advantage Player 2'; | |
if (checkWin(s1, s2)) return 'Player 1 wins!'; | |
if (checkWin(s2, s1)) return 'Player 2 wins!'; | |
return 'Player 1: ${scores[s1]}, Player 2: ${scores[s2]}'; | |
} | |
/// Session 3: No conditional statements | |
/// | |
/// Options: | |
/// | |
/// 1: Try/Catch of equality checks, returning false when throwing | |
/// | |
/// 2: Hardcoded map | |
runTestCases(convertScore1); | |
runTestCases(convertScore2); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment