From 3d03c64ae00a8e9b4264d759260fb0c745b77960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Fertyk?= Date: Sat, 10 Feb 2024 22:16:11 +0100 Subject: [PATCH] Add grains exercise --- config.json | 8 ++++ .../practice/grains/.docs/instructions.md | 15 +++++++ exercises/practice/grains/.meta/config.json | 19 ++++++++ exercises/practice/grains/.meta/example.gd | 8 ++++ exercises/practice/grains/.meta/tests.toml | 43 ++++++++++++++++++ exercises/practice/grains/grains.gd | 6 +++ exercises/practice/grains/grains_test.gd | 44 +++++++++++++++++++ 7 files changed, 143 insertions(+) create mode 100644 exercises/practice/grains/.docs/instructions.md create mode 100644 exercises/practice/grains/.meta/config.json create mode 100644 exercises/practice/grains/.meta/example.gd create mode 100644 exercises/practice/grains/.meta/tests.toml create mode 100644 exercises/practice/grains/grains.gd create mode 100644 exercises/practice/grains/grains_test.gd diff --git a/config.json b/config.json index 81a601c..a82791e 100644 --- a/config.json +++ b/config.json @@ -139,6 +139,14 @@ "prerequisites": [], "difficulty": 2 }, + { + "slug": "grains", + "name": "Grains", + "uuid": "e163b0a9-b9fe-4303-b047-11e588d684da", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "luhn", "name": "Luhn", diff --git a/exercises/practice/grains/.docs/instructions.md b/exercises/practice/grains/.docs/instructions.md new file mode 100644 index 0000000..df479fc --- /dev/null +++ b/exercises/practice/grains/.docs/instructions.md @@ -0,0 +1,15 @@ +# Instructions + +Calculate the number of grains of wheat on a chessboard given that the number on each square doubles. + +There once was a wise servant who saved the life of a prince. +The king promised to pay whatever the servant could dream up. +Knowing that the king loved chess, the servant told the king he would like to have grains of wheat. +One grain on the first square of a chess board, with the number of grains doubling on each successive square. + +There are 64 squares on a chessboard (where square 1 has one grain, square 2 has two grains, and so on). + +Write code that shows: + +- how many grains were on a given square, and +- the total number of grains on the chessboard diff --git a/exercises/practice/grains/.meta/config.json b/exercises/practice/grains/.meta/config.json new file mode 100644 index 0000000..9fc34a7 --- /dev/null +++ b/exercises/practice/grains/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "pfertyk" + ], + "files": { + "solution": [ + "grains.gd" + ], + "test": [ + "grains_test.gd" + ], + "example": [ + ".meta/example.gd" + ] + }, + "blurb": "Calculate the number of grains of wheat on a chessboard given that the number on each square doubles.", + "source": "The CodeRanch Cattle Drive, Assignment 6", + "source_url": "https://coderanch.com/wiki/718824/Grains" +} diff --git a/exercises/practice/grains/.meta/example.gd b/exercises/practice/grains/.meta/example.gd new file mode 100644 index 0000000..50eb8d5 --- /dev/null +++ b/exercises/practice/grains/.meta/example.gd @@ -0,0 +1,8 @@ +func square(number): + if number < 1 or number > 64: + return null + return int(pow(2, number - 1)) + + +func total(): + return int(pow(2, 64) - 1) diff --git a/exercises/practice/grains/.meta/tests.toml b/exercises/practice/grains/.meta/tests.toml new file mode 100644 index 0000000..6ea68bc --- /dev/null +++ b/exercises/practice/grains/.meta/tests.toml @@ -0,0 +1,43 @@ +# 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. + +[9fbde8de-36b2-49de-baf2-cd42d6f28405] +description = "returns the number of grains on the square -> grains on square 1" + +[ee1f30c2-01d8-4298-b25d-c677331b5e6d] +description = "returns the number of grains on the square -> grains on square 2" + +[10f45584-2fc3-4875-8ec6-666065d1163b] +description = "returns the number of grains on the square -> grains on square 3" + +[a7cbe01b-36f4-4601-b053-c5f6ae055170] +description = "returns the number of grains on the square -> grains on square 4" + +[c50acc89-8535-44e4-918f-b848ad2817d4] +description = "returns the number of grains on the square -> grains on square 16" + +[acd81b46-c2ad-4951-b848-80d15ed5a04f] +description = "returns the number of grains on the square -> grains on square 32" + +[c73b470a-5efb-4d53-9ac6-c5f6487f227b] +description = "returns the number of grains on the square -> grains on square 64" + +[1d47d832-3e85-4974-9466-5bd35af484e3] +description = "returns the number of grains on the square -> square 0 is invalid" + +[61974483-eeb2-465e-be54-ca5dde366453] +description = "returns the number of grains on the square -> negative square is invalid" + +[a95e4374-f32c-45a7-a10d-ffec475c012f] +description = "returns the number of grains on the square -> square greater than 64 is invalid" + +[6eb07385-3659-4b45-a6be-9dc474222750] +description = "returns the total number of grains on the board" diff --git a/exercises/practice/grains/grains.gd b/exercises/practice/grains/grains.gd new file mode 100644 index 0000000..326d9f2 --- /dev/null +++ b/exercises/practice/grains/grains.gd @@ -0,0 +1,6 @@ +func square(number): + pass + + +func total(): + pass diff --git a/exercises/practice/grains/grains_test.gd b/exercises/practice/grains/grains_test.gd new file mode 100644 index 0000000..4361710 --- /dev/null +++ b/exercises/practice/grains/grains_test.gd @@ -0,0 +1,44 @@ +func test_grains_on_square_1(solution_script): + return [solution_script.square(1), 1] + + +func test_grains_on_square_2(solution_script): + return [solution_script.square(2), 2] + + +func test_grains_on_square_3(solution_script): + return [solution_script.square(3), 4] + + +func test_grains_on_square_4(solution_script): + return [solution_script.square(4), 8] + + +func test_grains_on_square_16(solution_script): + return [solution_script.square(16), 32768] + + +func test_grains_on_square_32(solution_script): + return [solution_script.square(32), 2147483648] + + +func test_grains_on_square_64(solution_script): + return [solution_script.square(64), 9223372036854775808] + + +func test_square_0_is_invalid(solution_script): + return [solution_script.square(0), null] + + +func test_negative_square_is_invalid(solution_script): + return [solution_script.square(-1), null] + + +func test_square_greater_than_64_is_invalid(solution_script): + return [solution_script.square(65), null] + + +func test_returns_the_total_number_of_grains_on_the_board(solution_script): + return [solution_script.total(), 18446744073709551615] + +