Просмотр исходного кода

armstrong-numbers: add to track (#1073)

* armstrong-numbers: add to track

* amrstrong-numbers: add readme

* armstrong-numbers: add tests and ref solution

* armstrong-numbers: add reference solution

* armstrong-numbers: improve tests as per @FridaTveit's suggestions

* armstrong-numbers: update tests

* armstrong-numbers: improve reference solution
Sam Warner 8 лет назад
Родитель
Сommit
233fd8744e

+ 11
- 0
config.json Просмотреть файл

@@ -48,6 +48,17 @@
48 48
     {
49 49
       "core": false,
50 50
       "difficulty": 2,
51
+      "slug": "armstrong-numbers",
52
+      "topics": [
53
+        "integers",
54
+        "mathematics"
55
+      ],
56
+      "unlocked_by": null,
57
+      "uuid": "8e1dd48c-e05e-4a72-bf0f-5aed8dd123f5"
58
+    },
59
+    {
60
+      "core": false,
61
+      "difficulty": 2,
51 62
       "slug": "rna-transcription",
52 63
       "topics": [
53 64
         "loops",

+ 20
- 0
exercises/armstrong-numbers/.meta/src/reference/java/ArmstrongNumbers.java Просмотреть файл

@@ -0,0 +1,20 @@
1
+import static java.lang.Math.pow;
2
+
3
+class ArmstrongNumbers {
4
+
5
+	boolean isArmstrongNumber(int numberToCheck) {
6
+		
7
+		int number = numberToCheck;
8
+		int calculation = 0;
9
+		int length = String.valueOf(number).length();
10
+
11
+		while (number > 0) {
12
+    		calculation += pow((number % 10), length);
13
+    		number = number / 10;
14
+		}
15
+
16
+		return numberToCheck == calculation;
17
+
18
+	}
19
+
20
+}

+ 1
- 0
exercises/armstrong-numbers/.meta/version Просмотреть файл

@@ -0,0 +1 @@
1
+1.0.0

+ 30
- 0
exercises/armstrong-numbers/README.md Просмотреть файл

@@ -0,0 +1,30 @@
1
+# Armstrong Numbers
2
+
3
+An [Armstrong number](https://en.wikipedia.org/wiki/Narcissistic_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 = 2`
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
+# Running the tests
15
+
16
+You can run all the tests for an exercise by entering
17
+
18
+```sh
19
+$ gradle test
20
+```
21
+
22
+in your terminal.
23
+
24
+## Source
25
+
26
+Wikipedia [https://en.wikipedia.org/wiki/Narcissistic_number](https://en.wikipedia.org/wiki/Narcissistic_number)
27
+
28
+## Submitting Incomplete Solutions
29
+
30
+It's possible to submit an incomplete solution so you can see how others have completed the exercise.

+ 18
- 0
exercises/armstrong-numbers/build.gradle Просмотреть файл

@@ -0,0 +1,18 @@
1
+apply plugin: "java"
2
+apply plugin: "eclipse"
3
+apply plugin: "idea"
4
+
5
+repositories {
6
+  mavenCentral()
7
+}
8
+
9
+dependencies {
10
+  testCompile "junit:junit:4.12"
11
+}
12
+
13
+test {
14
+  testLogging {
15
+    exceptionFormat = 'full'
16
+    events = ["passed", "failed", "skipped"]
17
+  }
18
+}

+ 9
- 0
exercises/armstrong-numbers/src/main/java/ArmstrongNumbers.java Просмотреть файл

@@ -0,0 +1,9 @@
1
+class ArmstrongNumbers {
2
+
3
+	boolean isArmstrongNumber(int numberToCheck) {
4
+
5
+		throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
6
+		
7
+	}
8
+
9
+}

+ 80
- 0
exercises/armstrong-numbers/src/test/java/ArmstrongNumbersTest.java Просмотреть файл

@@ -0,0 +1,80 @@
1
+import org.junit.Before;
2
+import org.junit.Ignore;
3
+import org.junit.Test;
4
+
5
+import static org.junit.Assert.assertTrue;
6
+import static org.junit.Assert.assertFalse;
7
+
8
+public class ArmstrongNumbersTest {
9
+
10
+    private ArmstrongNumbers armstrongNumbers;
11
+
12
+    @Before
13
+    public void setup() {
14
+        armstrongNumbers = new ArmstrongNumbers();
15
+    }
16
+
17
+    @Test
18
+    public void singleDigitsAreArmstrongNumbers() {
19
+        int input = 5;
20
+
21
+        assertTrue(armstrongNumbers.isArmstrongNumber(input));
22
+    }
23
+
24
+    @Ignore("Remove to run test")
25
+    @Test
26
+    public void noTwoDigitArmstrongNumbers() {
27
+        int input = 10;
28
+
29
+        assertFalse(armstrongNumbers.isArmstrongNumber(input));
30
+    }
31
+
32
+    @Ignore("Remove to run test")
33
+    @Test
34
+    public void threeDigitNumberIsArmstrongNumber() {
35
+        int input = 153;
36
+        
37
+        assertTrue(armstrongNumbers.isArmstrongNumber(input));
38
+    }
39
+
40
+    @Ignore("Remove to run test")
41
+    @Test
42
+    public void threeDigitNumberIsNotArmstrongNumber() {
43
+        int input = 100;
44
+        
45
+        assertFalse(armstrongNumbers.isArmstrongNumber(input));
46
+    }
47
+
48
+    @Ignore("Remove to run test")
49
+    @Test
50
+    public void fourDigitNumberIsArmstrongNumber() {
51
+        int input = 9474;
52
+        
53
+        assertTrue(armstrongNumbers.isArmstrongNumber(input));
54
+    }
55
+
56
+    @Ignore("Remove to run test")
57
+    @Test
58
+    public void fourDigitNumberIsNotArmstrongNumber() {
59
+        int input = 9475;
60
+        
61
+        assertFalse(armstrongNumbers.isArmstrongNumber(input));
62
+    }
63
+
64
+    @Ignore("Remove to run test")
65
+    @Test
66
+    public void sevenDigitNumberIsArmstrongNumber() {
67
+        int input = 9926315;
68
+        
69
+        assertTrue(armstrongNumbers.isArmstrongNumber(input));
70
+    }
71
+
72
+    @Ignore("Remove to run test")
73
+    @Test
74
+    public void sevenDigitNumberIsNotArmstrongNumber() {
75
+        int input = 9926314;
76
+        
77
+        assertFalse(armstrongNumbers.isArmstrongNumber(input));
78
+    }
79
+
80
+}

+ 1
- 0
exercises/settings.gradle Просмотреть файл

@@ -3,6 +3,7 @@ include 'acronym'
3 3
 include 'all-your-base'
4 4
 include 'allergies'
5 5
 include 'anagram'
6
+include 'armstrong-numbers'
6 7
 include 'atbash-cipher'
7 8
 include 'bank-account'
8 9
 include 'beer-song'