diff --git a/config.json b/config.json index 87a05ba..726317d 100644 --- a/config.json +++ b/config.json @@ -179,6 +179,14 @@ "prerequisites": [], "difficulty": 2 }, + { + "slug": "armstrong-numbers", + "name": "Armstrong Numbers", + "uuid": "12bc423d-7c01-43c5-b091-43e6402d3cfb", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "allergies", "name": "Allergies", diff --git a/exercises/practice/armstrong-numbers/.docs/instructions.md b/exercises/practice/armstrong-numbers/.docs/instructions.md new file mode 100644 index 0000000..5e56bbe --- /dev/null +++ b/exercises/practice/armstrong-numbers/.docs/instructions.md @@ -0,0 +1,14 @@ +# Instructions + +An [Armstrong number][armstrong-number] is a number that is the sum of its own digits each raised to the power of the number of digits. + +For example: + +- 9 is an Armstrong number, because `9 = 9^1 = 9` +- 10 is _not_ an Armstrong number, because `10 != 1^2 + 0^2 = 1` +- 153 is an Armstrong number, because: `153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153` +- 154 is _not_ an Armstrong number, because: `154 != 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190` + +Write some code to determine whether a number is an Armstrong number. + +[armstrong-number]: https://en.wikipedia.org/wiki/Narcissistic_number diff --git a/exercises/practice/armstrong-numbers/.meta/config.json b/exercises/practice/armstrong-numbers/.meta/config.json new file mode 100644 index 0000000..14e50f8 --- /dev/null +++ b/exercises/practice/armstrong-numbers/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "glaxxie" + ], + "files": { + "solution": [ + "armstrong_numbers.gd" + ], + "test": [ + "armstrong_numbers_test.gd" + ], + "example": [ + ".meta/example.gd" + ] + }, + "blurb": "Determine if a number is an Armstrong number.", + "source": "Wikipedia", + "source_url": "https://en.wikipedia.org/wiki/Narcissistic_number" +} diff --git a/exercises/practice/armstrong-numbers/.meta/example.gd b/exercises/practice/armstrong-numbers/.meta/example.gd new file mode 100644 index 0000000..da2153a --- /dev/null +++ b/exercises/practice/armstrong-numbers/.meta/example.gd @@ -0,0 +1,6 @@ +func is_armstrong_number(number): + var digits = str(number) + var result = 0 + for n in digits: + result += pow(int(n), len(digits)) + return result == number diff --git a/exercises/practice/armstrong-numbers/.meta/tests.toml b/exercises/practice/armstrong-numbers/.meta/tests.toml new file mode 100644 index 0000000..faded64 --- /dev/null +++ b/exercises/practice/armstrong-numbers/.meta/tests.toml @@ -0,0 +1,45 @@ +# 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. + +[c1ed103c-258d-45b2-be73-d8c6d9580c7b] +description = "Zero is an Armstrong number" + +[579e8f03-9659-4b85-a1a2-d64350f6b17a] +description = "Single-digit numbers are Armstrong numbers" + +[2d6db9dc-5bf8-4976-a90b-b2c2b9feba60] +description = "There are no two-digit Armstrong numbers" + +[509c087f-e327-4113-a7d2-26a4e9d18283] +description = "Three-digit number that is an Armstrong number" + +[7154547d-c2ce-468d-b214-4cb953b870cf] +description = "Three-digit number that is not an Armstrong number" + +[6bac5b7b-42e9-4ecb-a8b0-4832229aa103] +description = "Four-digit number that is an Armstrong number" + +[eed4b331-af80-45b5-a80b-19c9ea444b2e] +description = "Four-digit number that is not an Armstrong number" + +[f971ced7-8d68-4758-aea1-d4194900b864] +description = "Seven-digit number that is an Armstrong number" + +[7ee45d52-5d35-4fbd-b6f1-5c8cd8a67f18] +description = "Seven-digit number that is not an Armstrong number" + +[5ee2fdf8-334e-4a46-bb8d-e5c19c02c148] +description = "Armstrong number containing seven zeroes" +include = false + +[12ffbf10-307a-434e-b4ad-c925680e1dd4] +description = "The largest and last Armstrong number" +include = false \ No newline at end of file diff --git a/exercises/practice/armstrong-numbers/armstrong_numbers.gd b/exercises/practice/armstrong-numbers/armstrong_numbers.gd new file mode 100644 index 0000000..218ebc1 --- /dev/null +++ b/exercises/practice/armstrong-numbers/armstrong_numbers.gd @@ -0,0 +1,2 @@ +func is_armstrong_number(number): + pass diff --git a/exercises/practice/armstrong-numbers/armstrong_numbers_test.gd b/exercises/practice/armstrong-numbers/armstrong_numbers_test.gd new file mode 100644 index 0000000..3e79467 --- /dev/null +++ b/exercises/practice/armstrong-numbers/armstrong_numbers_test.gd @@ -0,0 +1,53 @@ +func test_zero_is_an_armstrong_number(solution_script): + var value = 0 + var expected = true + return [solution_script.is_armstrong_number(value), expected] + + +func test_single_digit_numbers_are_armstrong_numbers(solution_script): + var value = 5 + var expected = true + return [solution_script.is_armstrong_number(value), expected] + + +func test_there_are_no_two_digit_armstrong_numbers(solution_script): + var value = 10 + var expected = false + return [solution_script.is_armstrong_number(value), expected] + + +func test_three_digit_number_that_is_an_armstrong_number(solution_script): + var value = 153 + var expected = true + return [solution_script.is_armstrong_number(value), expected] + + +func test_three_digit_number_that_is_not_an_armstrong_number(solution_script): + var value = 100 + var expected = false + return [solution_script.is_armstrong_number(value), expected] + + +func test_four_digit_number_that_is_an_armstrong_number(solution_script): + var value = 9474 + var expected = true + return [solution_script.is_armstrong_number(value), expected] + + +func test_four_digit_number_that_is_not_an_armstrong_number(solution_script): + var value = 9475 + var expected = false + return [solution_script.is_armstrong_number(value), expected] + + +func test_seven_digit_number_that_is_an_armstrong_number(solution_script): + var value = 9926315 + var expected = true + return [solution_script.is_armstrong_number(value), expected] + + +func test_seven_digit_number_that_is_not_an_armstrong_number(solution_script): + var value = 9926314 + var expected = false + return [solution_script.is_armstrong_number(value), expected] +