Skip to content

Instantly share code, notes, and snippets.

@esouthren
Created June 30, 2021 14:29
Show Gist options
  • Save esouthren/9f7782c1cb3570f31f9a5b49b273d467 to your computer and use it in GitHub Desktop.
Save esouthren/9f7782c1cb3570f31f9a5b49b273d467 to your computer and use it in GitHub Desktop.
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