Skip to content

Commit

Permalink
Add armstrong numbers (#171)
Browse files Browse the repository at this point in the history
  • Loading branch information
BNAndras authored May 25, 2024
1 parent f035cf5 commit 8f70a72
Show file tree
Hide file tree
Showing 8 changed files with 426 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@
"prerequisites": [],
"difficulty": 2
},
{
"slug": "armstrong-numbers",
"name": "Armstrong Numbers",
"uuid": "7ee5d442-dbed-4831-aee1-3d58070dcc36",
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "binary-search",
"name": "Binary Search",
Expand Down
14 changes: 14 additions & 0 deletions exercises/practice/armstrong-numbers/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -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
19 changes: 19 additions & 0 deletions exercises/practice/armstrong-numbers/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"authors": [
"BNAndras"
],
"files": {
"solution": [
"armstrong-numbers.red"
],
"test": [
"armstrong-numbers-test.red"
],
"example": [
".meta/example.red"
]
},
"blurb": "Determine if a number is an Armstrong number.",
"source": "Wikipedia",
"source_url": "https://en.wikipedia.org/wiki/Narcissistic_number"
}
16 changes: 16 additions & 0 deletions exercises/practice/armstrong-numbers/.meta/example.red
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Red [
description: {"Armstrong Numbers" exercise solution for exercism platform}
author: "BNAndras"
]

is-armstrong-number: function [
number
] [
working: 0
digits: to-string number
foreach digit digits [
working: working + power to-integer form digit length? digits
]
working == number
]

45 changes: 45 additions & 0 deletions exercises/practice/armstrong-numbers/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -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
96 changes: 96 additions & 0 deletions exercises/practice/armstrong-numbers/armstrong-numbers-test.red
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
Red [
description: {Tests for "Armstrong Numbers" Exercism exercise}
author: "loziniak"
]

#include %testlib.red

test-init/limit %armstrong-numbers.red 1
; test-init/limit %.meta/example.red 1 ; test example solution

canonical-cases: [#[
description: "Zero is an Armstrong number"
input: #[
number: 0
]
expected: true
function: "is-armstrong-number"
uuid: "c1ed103c-258d-45b2-be73-d8c6d9580c7b"
] #[
description: "Single-digit numbers are Armstrong numbers"
input: #[
number: 5
]
expected: true
function: "is-armstrong-number"
uuid: "579e8f03-9659-4b85-a1a2-d64350f6b17a"
] #[
description: "There are no two-digit Armstrong numbers"
input: #[
number: 10
]
expected: false
function: "is-armstrong-number"
uuid: "2d6db9dc-5bf8-4976-a90b-b2c2b9feba60"
] #[
description: "Three-digit number that is an Armstrong number"
input: #[
number: 153
]
expected: true
function: "is-armstrong-number"
uuid: "509c087f-e327-4113-a7d2-26a4e9d18283"
] #[
description: {Three-digit number that is not an Armstrong number}
input: #[
number: 100
]
expected: false
function: "is-armstrong-number"
uuid: "7154547d-c2ce-468d-b214-4cb953b870cf"
] #[
description: "Four-digit number that is an Armstrong number"
input: #[
number: 9474
]
expected: true
function: "is-armstrong-number"
uuid: "6bac5b7b-42e9-4ecb-a8b0-4832229aa103"
] #[
description: "Four-digit number that is not an Armstrong number"
input: #[
number: 9475
]
expected: false
function: "is-armstrong-number"
uuid: "eed4b331-af80-45b5-a80b-19c9ea444b2e"
] #[
description: "Seven-digit number that is an Armstrong number"
input: #[
number: 9926315
]
expected: true
function: "is-armstrong-number"
uuid: "f971ced7-8d68-4758-aea1-d4194900b864"
] #[
description: {Seven-digit number that is not an Armstrong number}
input: #[
number: 9926314
]
expected: false
function: "is-armstrong-number"
uuid: "7ee45d52-5d35-4fbd-b6f1-5c8cd8a67f18"
]]


foreach c-case canonical-cases [
case-code: reduce [
'expect c-case/expected compose [
(to word! c-case/function) (values-of c-case/input)
]
]

test c-case/description case-code
]

test-results/print
11 changes: 11 additions & 0 deletions exercises/practice/armstrong-numbers/armstrong-numbers.red
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Red [
description: {"Armstrong Numbers" exercise solution for exercism platform}
author: "" ; you can write your name here, in quotes
]

is-armstrong-number: function [
number
] [
cause-error 'user 'message "You need to implement is-armstrong-number function."
]

Loading

0 comments on commit 8f70a72

Please sign in to comment.