From b667f922e73a9db9fac00e46264903d3687a84e9 Mon Sep 17 00:00:00 2001 From: Erik Schierboom Date: Sat, 5 Oct 2024 09:21:00 +0200 Subject: [PATCH] Add `high-scores` exercise --- config.json | 8 +++ .../high-scores/.docs/instructions.md | 6 ++ .../practice/high-scores/.meta/config.json | 18 +++++ .../practice/high-scores/.meta/example.R | 0 .../practice/high-scores/.meta/tests.toml | 46 +++++++++++++ exercises/practice/high-scores/high-scores.R | 0 .../practice/high-scores/test_high-scores.R | 69 +++++++++++++++++++ 7 files changed, 147 insertions(+) create mode 100644 exercises/practice/high-scores/.docs/instructions.md create mode 100644 exercises/practice/high-scores/.meta/config.json create mode 100644 exercises/practice/high-scores/.meta/example.R create mode 100644 exercises/practice/high-scores/.meta/tests.toml create mode 100644 exercises/practice/high-scores/high-scores.R create mode 100644 exercises/practice/high-scores/test_high-scores.R diff --git a/config.json b/config.json index 9f764017..4787e17d 100644 --- a/config.json +++ b/config.json @@ -680,6 +680,14 @@ "practices": [], "prerequisites": [], "difficulty": 1 + }, + { + "slug": "high-scores", + "name": "High Scores", + "uuid": "f238872e-385b-42b9-9e4d-1725c23c2cd3", + "practices": [], + "prerequisites": [], + "difficulty": 1 } ] }, diff --git a/exercises/practice/high-scores/.docs/instructions.md b/exercises/practice/high-scores/.docs/instructions.md new file mode 100644 index 00000000..55802488 --- /dev/null +++ b/exercises/practice/high-scores/.docs/instructions.md @@ -0,0 +1,6 @@ +# Instructions + +Manage a game player's High Score list. + +Your task is to build a high-score component of the classic Frogger game, one of the highest selling and most addictive games of all time, and a classic of the arcade era. +Your task is to write methods that return the highest score from the list, the last added score and the three highest scores. diff --git a/exercises/practice/high-scores/.meta/config.json b/exercises/practice/high-scores/.meta/config.json new file mode 100644 index 00000000..d971178a --- /dev/null +++ b/exercises/practice/high-scores/.meta/config.json @@ -0,0 +1,18 @@ +{ + "authors": [ + "erikschierboom" + ], + "files": { + "solution": [ + "high-scores.R" + ], + "test": [ + "test_high-scores.R" + ], + "example": [ + ".meta/example.R" + ] + }, + "blurb": "Manage a player's High Score list.", + "source": "Tribute to the eighties' arcade game Frogger" +} diff --git a/exercises/practice/high-scores/.meta/example.R b/exercises/practice/high-scores/.meta/example.R new file mode 100644 index 00000000..e69de29b diff --git a/exercises/practice/high-scores/.meta/tests.toml b/exercises/practice/high-scores/.meta/tests.toml new file mode 100644 index 00000000..7c946338 --- /dev/null +++ b/exercises/practice/high-scores/.meta/tests.toml @@ -0,0 +1,46 @@ +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[1035eb93-2208-4c22-bab8-fef06769a73c] +description = "List of scores" + +[6aa5dbf5-78fa-4375-b22c-ffaa989732d2] +description = "Latest score" + +[b661a2e1-aebf-4f50-9139-0fb817dd12c6] +description = "Personal best" + +[3d996a97-c81c-4642-9afc-80b80dc14015] +description = "Top 3 scores -> Personal top three from a list of scores" + +[1084ecb5-3eb4-46fe-a816-e40331a4e83a] +description = "Top 3 scores -> Personal top highest to lowest" + +[e6465b6b-5a11-4936-bfe3-35241c4f4f16] +description = "Top 3 scores -> Personal top when there is a tie" + +[f73b02af-c8fd-41c9-91b9-c86eaa86bce2] +description = "Top 3 scores -> Personal top when there are less than 3" + +[16608eae-f60f-4a88-800e-aabce5df2865] +description = "Top 3 scores -> Personal top when there is only one" + +[2df075f9-fec9-4756-8f40-98c52a11504f] +description = "Top 3 scores -> Latest score after personal top scores" + +[809c4058-7eb1-4206-b01e-79238b9b71bc] +description = "Top 3 scores -> Scores after personal top scores" + +[ddb0efc0-9a86-4f82-bc30-21ae0bdc6418] +description = "Top 3 scores -> Latest score after personal best" + +[6a0fd2d1-4cc4-46b9-a5bb-2fb667ca2364] +description = "Top 3 scores -> Scores after personal best" diff --git a/exercises/practice/high-scores/high-scores.R b/exercises/practice/high-scores/high-scores.R new file mode 100644 index 00000000..e69de29b diff --git a/exercises/practice/high-scores/test_high-scores.R b/exercises/practice/high-scores/test_high-scores.R new file mode 100644 index 00000000..5c3dac09 --- /dev/null +++ b/exercises/practice/high-scores/test_high-scores.R @@ -0,0 +1,69 @@ + + +def test_list_of_scores(self): + scores = [30, 50, 20, 70] + expected = [30, 50, 20, 70] + self.assertEqual(HighScores(scores).scores, expected) + + def test_latest_score(self): + scores = [100, 0, 90, 30] + expected = 30 + self.assertEqual(HighScores(scores).latest(), expected) + + def test_personal_best(self): + scores = [40, 100, 70] + expected = 100 + self.assertEqual(HighScores(scores).personal_best(), expected) + + def test_personal_top_three_from_a_list_of_scores(self): + scores = [10, 30, 90, 30, 100, 20, 10, 0, 30, 40, 40, 70, 70] + expected = [100, 90, 70] + self.assertEqual(HighScores(scores).personal_top_three(), expected) + + def test_personal_top_highest_to_lowest(self): + scores = [20, 10, 30] + expected = [30, 20, 10] + self.assertEqual(HighScores(scores).personal_top_three(), expected) + + def test_personal_top_when_there_is_a_tie(self): + scores = [40, 20, 40, 30] + expected = [40, 40, 30] + self.assertEqual(HighScores(scores).personal_top_three(), expected) + + def test_personal_top_when_there_are_less_than_3(self): + scores = [30, 70] + expected = [70, 30] + self.assertEqual(HighScores(scores).personal_top_three(), expected) + + def test_personal_top_when_there_is_only_one(self): + scores = [40] + expected = [40] + self.assertEqual(HighScores(scores).personal_top_three(), expected) + + def test_latest_score_after_personal_top_scores(self): + scores = [70, 50, 20, 30] + expected = 30 + highscores = HighScores(scores) + highscores.personal_top_three() + self.assertEqual(highscores.latest(), expected) + + def test_scores_after_personal_top_scores(self): + scores = [30, 50, 20, 70] + expected = [30, 50, 20, 70] + highscores = HighScores(scores) + highscores.personal_top_three() + self.assertEqual(highscores.scores, expected) + + def test_latest_score_after_personal_best(self): + scores = [20, 70, 15, 25, 30] + expected = 30 + highscores = HighScores(scores) + highscores.personal_best() + self.assertEqual(highscores.latest(), expected) + + def test_scores_after_personal_best(self): + scores = [20, 70, 15, 25, 30] + expected = [20, 70, 15, 25, 30] + highscores = HighScores(scores) + highscores.personal_best() + self.assertEqual(highscores.scores, expected) \ No newline at end of file