Skip to content

Commit 4e0b3a7

Browse files
authored
Armstrong (#6)
* armstrong-numbers * streamline jq in workflow
1 parent 78fd2b6 commit 4e0b3a7

11 files changed

Lines changed: 268 additions & 4 deletions

File tree

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ jobs:
2828
pr_endpoint=$(jq -r '"repos/\(.repository.full_name)/pulls/\(.pull_request.number)"' "$GITHUB_EVENT_PATH")
2929
gh api "$pr_endpoint/files" --paginate --jq '
3030
map(
31-
select(.filename | match("\\.odin$")) |
32-
.filename |
33-
match("exercises/practice/([^/]+)/") |
34-
.captures[0].string
31+
.filename
32+
| select(match("\\.moon$"))
33+
| match("exercises/practice/([^/]+)/")
34+
| .captures[0].string
3535
) | unique[]
3636
' | xargs -r -L1 bin/test-one
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"exercise": "armstrong-numbers",
3+
"cases": [
4+
{
5+
"uuid": "c1ed103c-258d-45b2-be73-d8c6d9580c7b",
6+
"description": "Zero is an Armstrong number",
7+
"property": "isArmstrongNumber",
8+
"input": {
9+
"number": 0
10+
},
11+
"expected": true
12+
},
13+
{
14+
"uuid": "579e8f03-9659-4b85-a1a2-d64350f6b17a",
15+
"description": "Single-digit numbers are Armstrong numbers",
16+
"property": "isArmstrongNumber",
17+
"input": {
18+
"number": 5
19+
},
20+
"expected": true
21+
},
22+
{
23+
"uuid": "2d6db9dc-5bf8-4976-a90b-b2c2b9feba60",
24+
"description": "There are no two-digit Armstrong numbers",
25+
"property": "isArmstrongNumber",
26+
"input": {
27+
"number": 10
28+
},
29+
"expected": false
30+
},
31+
{
32+
"uuid": "509c087f-e327-4113-a7d2-26a4e9d18283",
33+
"description": "Three-digit number that is an Armstrong number",
34+
"property": "isArmstrongNumber",
35+
"input": {
36+
"number": 153
37+
},
38+
"expected": true
39+
},
40+
{
41+
"uuid": "7154547d-c2ce-468d-b214-4cb953b870cf",
42+
"description": "Three-digit number that is not an Armstrong number",
43+
"property": "isArmstrongNumber",
44+
"input": {
45+
"number": 100
46+
},
47+
"expected": false
48+
},
49+
{
50+
"uuid": "6bac5b7b-42e9-4ecb-a8b0-4832229aa103",
51+
"description": "Four-digit number that is an Armstrong number",
52+
"property": "isArmstrongNumber",
53+
"input": {
54+
"number": 9474
55+
},
56+
"expected": true
57+
},
58+
{
59+
"uuid": "eed4b331-af80-45b5-a80b-19c9ea444b2e",
60+
"description": "Four-digit number that is not an Armstrong number",
61+
"property": "isArmstrongNumber",
62+
"input": {
63+
"number": 9475
64+
},
65+
"expected": false
66+
},
67+
{
68+
"uuid": "f971ced7-8d68-4758-aea1-d4194900b864",
69+
"description": "Seven-digit number that is an Armstrong number",
70+
"property": "isArmstrongNumber",
71+
"input": {
72+
"number": 9926315
73+
},
74+
"expected": true
75+
},
76+
{
77+
"uuid": "7ee45d52-5d35-4fbd-b6f1-5c8cd8a67f18",
78+
"description": "Seven-digit number that is not an Armstrong number",
79+
"property": "isArmstrongNumber",
80+
"input": {
81+
"number": 9926314
82+
},
83+
"expected": false
84+
},
85+
{
86+
"uuid": "5ee2fdf8-334e-4a46-bb8d-e5c19c02c148",
87+
"description": "Armstrong number containing seven zeroes",
88+
"comments": [
89+
"The numeric size of this input number is 108 bits. Consider skipping this test if appropriate."
90+
],
91+
"scenarios": ["big-integer"],
92+
"property": "isArmstrongNumber",
93+
"input": {
94+
"number": 186709961001538790100634132976990
95+
},
96+
"expected": true
97+
},
98+
{
99+
"uuid": "12ffbf10-307a-434e-b4ad-c925680e1dd4",
100+
"description": "The largest and last Armstrong number",
101+
"comments": [
102+
"The numeric size of this input number is 127 bits. Consider skipping this test if appropriate."
103+
],
104+
"scenarios": ["big-integer"],
105+
"property": "isArmstrongNumber",
106+
"input": {
107+
"number": 115132219018763992565095597973971522401
108+
},
109+
"expected": true
110+
}
111+
]
112+
}

config.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@
3838
"practices": [],
3939
"prerequisites": [],
4040
"difficulty": 1
41+
},
42+
{
43+
"slug": "armstrong-numbers",
44+
"name": "Armstrong Numbers",
45+
"uuid": "a9cc7677-4151-4e3b-b08a-be547a56d705",
46+
"practices": [],
47+
"prerequisites": [],
48+
"difficulty": 2
4149
}
4250
]
4351
},
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
return {
2+
default = {
3+
ROOT = { '.' }
4+
}
5+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Instructions
2+
3+
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.
4+
5+
For example:
6+
7+
- 9 is an Armstrong number, because `9 = 9^1 = 9`
8+
- 10 is _not_ an Armstrong number, because `10 != 1^2 + 0^2 = 1`
9+
- 153 is an Armstrong number, because: `153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153`
10+
- 154 is _not_ an Armstrong number, because: `154 != 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190`
11+
12+
Write some code to determine whether a number is an Armstrong number.
13+
14+
[armstrong-number]: https://en.wikipedia.org/wiki/Narcissistic_number
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"authors": [
3+
"glennj"
4+
],
5+
"files": {
6+
"solution": [
7+
"armstrong_numbers.moon"
8+
],
9+
"test": [
10+
"armstrong_numbers_spec.moon"
11+
],
12+
"example": [
13+
".meta/example.moon"
14+
]
15+
},
16+
"blurb": "Determine if a number is an Armstrong number.",
17+
"source": "Wikipedia",
18+
"source_url": "https://en.wikipedia.org/wiki/Narcissistic_number"
19+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
armstrong_sum = (n) ->
2+
width = #tostring(n)
3+
sum = 0
4+
while n > 0
5+
sum += (n % 10) ^ width
6+
n = n // 10
7+
sum
8+
9+
is_armstrong = (n) -> n == armstrong_sum n
10+
11+
{ :is_armstrong }
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
module_name: 'ArmstrongNumbers',
3+
generate_test: (case, level) ->
4+
lines = {
5+
"result = ArmstrongNumbers.is_armstrong #{case.input.number}",
6+
"assert.is_#{case.expected} result"
7+
}
8+
table.concat [indent line, level for line in *lines], '\n'
9+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# This is an auto-generated file.
2+
#
3+
# Regenerating this file via `configlet sync` will:
4+
# - Recreate every `description` key/value pair
5+
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
6+
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
7+
# - Preserve any other key/value pair
8+
#
9+
# As user-added comments (using the # character) will be removed when this file
10+
# is regenerated, comments can be added via a `comment` key.
11+
12+
[c1ed103c-258d-45b2-be73-d8c6d9580c7b]
13+
description = "Zero is an Armstrong number"
14+
15+
[579e8f03-9659-4b85-a1a2-d64350f6b17a]
16+
description = "Single-digit numbers are Armstrong numbers"
17+
18+
[2d6db9dc-5bf8-4976-a90b-b2c2b9feba60]
19+
description = "There are no two-digit Armstrong numbers"
20+
21+
[509c087f-e327-4113-a7d2-26a4e9d18283]
22+
description = "Three-digit number that is an Armstrong number"
23+
24+
[7154547d-c2ce-468d-b214-4cb953b870cf]
25+
description = "Three-digit number that is not an Armstrong number"
26+
27+
[6bac5b7b-42e9-4ecb-a8b0-4832229aa103]
28+
description = "Four-digit number that is an Armstrong number"
29+
30+
[eed4b331-af80-45b5-a80b-19c9ea444b2e]
31+
description = "Four-digit number that is not an Armstrong number"
32+
33+
[f971ced7-8d68-4758-aea1-d4194900b864]
34+
description = "Seven-digit number that is an Armstrong number"
35+
36+
[7ee45d52-5d35-4fbd-b6f1-5c8cd8a67f18]
37+
description = "Seven-digit number that is not an Armstrong number"
38+
39+
[5ee2fdf8-334e-4a46-bb8d-e5c19c02c148]
40+
description = "Armstrong number containing seven zeroes"
41+
42+
[12ffbf10-307a-434e-b4ad-c925680e1dd4]
43+
description = "The largest and last Armstrong number"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
is_armstrong = (num) ->
2+
error "Implement me!"
3+
4+
{ :is_armstrong }
5+

0 commit comments

Comments
 (0)