diff --git a/config.json b/config.json index 6d79f75a2..e8431aa45 100644 --- a/config.json +++ b/config.json @@ -33,6 +33,17 @@ "unlocked_by": "two-fer", "uuid": "2c8afeed-480e-41f3-ad58-590fa8f88029" }, + { + "core": false, + "difficulty": 2, + "slug": "armstrong-numbers", + "topics": [ + "integers", + "mathematics" + ], + "unlocked_by": null, + "uuid": "8e1dd48c-e05e-4a72-bf0f-5aed8dd123f5" + }, { "core": false, "difficulty": 2, diff --git a/exercises/armstrong-numbers/.meta/src/reference/java/ArmstrongNumbers.java b/exercises/armstrong-numbers/.meta/src/reference/java/ArmstrongNumbers.java new file mode 100644 index 000000000..328b97536 --- /dev/null +++ b/exercises/armstrong-numbers/.meta/src/reference/java/ArmstrongNumbers.java @@ -0,0 +1,20 @@ +import static java.lang.Math.pow; + +class ArmstrongNumbers { + + boolean isArmstrongNumber(int numberToCheck) { + + int number = numberToCheck; + int calculation = 0; + int length = String.valueOf(number).length(); + + while (number > 0) { + calculation += pow((number % 10), length); + number = number / 10; + } + + return numberToCheck == calculation; + + } + +} diff --git a/exercises/armstrong-numbers/.meta/version b/exercises/armstrong-numbers/.meta/version new file mode 100644 index 000000000..3eefcb9dd --- /dev/null +++ b/exercises/armstrong-numbers/.meta/version @@ -0,0 +1 @@ +1.0.0 diff --git a/exercises/armstrong-numbers/README.md b/exercises/armstrong-numbers/README.md new file mode 100644 index 000000000..6bca30c97 --- /dev/null +++ b/exercises/armstrong-numbers/README.md @@ -0,0 +1,30 @@ +# Armstrong Numbers + +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. + +For example: + +- 9 is an Armstrong number, because `9 = 9^1 = 9` +- 10 is *not* an Armstrong number, because `10 != 1^2 + 0^2 = 2` +- 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. + +# Running the tests + +You can run all the tests for an exercise by entering + +```sh +$ gradle test +``` + +in your terminal. + +## Source + +Wikipedia [https://en.wikipedia.org/wiki/Narcissistic_number](https://en.wikipedia.org/wiki/Narcissistic_number) + +## Submitting Incomplete Solutions + +It's possible to submit an incomplete solution so you can see how others have completed the exercise. diff --git a/exercises/armstrong-numbers/build.gradle b/exercises/armstrong-numbers/build.gradle new file mode 100644 index 000000000..019e5f323 --- /dev/null +++ b/exercises/armstrong-numbers/build.gradle @@ -0,0 +1,18 @@ +apply plugin: "java" +apply plugin: "eclipse" +apply plugin: "idea" + +repositories { + mavenCentral() +} + +dependencies { + testCompile "junit:junit:4.12" +} + +test { + testLogging { + exceptionFormat = 'full' + events = ["passed", "failed", "skipped"] + } +} diff --git a/exercises/armstrong-numbers/src/main/java/ArmstrongNumbers.java b/exercises/armstrong-numbers/src/main/java/ArmstrongNumbers.java new file mode 100644 index 000000000..f315ed95d --- /dev/null +++ b/exercises/armstrong-numbers/src/main/java/ArmstrongNumbers.java @@ -0,0 +1,9 @@ +class ArmstrongNumbers { + + boolean isArmstrongNumber(int numberToCheck) { + + throw new UnsupportedOperationException("Delete this statement and write your own implementation."); + + } + +} diff --git a/exercises/armstrong-numbers/src/test/java/ArmstrongNumbersTest.java b/exercises/armstrong-numbers/src/test/java/ArmstrongNumbersTest.java new file mode 100644 index 000000000..b6db1c236 --- /dev/null +++ b/exercises/armstrong-numbers/src/test/java/ArmstrongNumbersTest.java @@ -0,0 +1,80 @@ +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +public class ArmstrongNumbersTest { + + private ArmstrongNumbers armstrongNumbers; + + @Before + public void setup() { + armstrongNumbers = new ArmstrongNumbers(); + } + + @Test + public void singleDigitsAreArmstrongNumbers() { + int input = 5; + + assertTrue(armstrongNumbers.isArmstrongNumber(input)); + } + + @Ignore("Remove to run test") + @Test + public void noTwoDigitArmstrongNumbers() { + int input = 10; + + assertFalse(armstrongNumbers.isArmstrongNumber(input)); + } + + @Ignore("Remove to run test") + @Test + public void threeDigitNumberIsArmstrongNumber() { + int input = 153; + + assertTrue(armstrongNumbers.isArmstrongNumber(input)); + } + + @Ignore("Remove to run test") + @Test + public void threeDigitNumberIsNotArmstrongNumber() { + int input = 100; + + assertFalse(armstrongNumbers.isArmstrongNumber(input)); + } + + @Ignore("Remove to run test") + @Test + public void fourDigitNumberIsArmstrongNumber() { + int input = 9474; + + assertTrue(armstrongNumbers.isArmstrongNumber(input)); + } + + @Ignore("Remove to run test") + @Test + public void fourDigitNumberIsNotArmstrongNumber() { + int input = 9475; + + assertFalse(armstrongNumbers.isArmstrongNumber(input)); + } + + @Ignore("Remove to run test") + @Test + public void sevenDigitNumberIsArmstrongNumber() { + int input = 9926315; + + assertTrue(armstrongNumbers.isArmstrongNumber(input)); + } + + @Ignore("Remove to run test") + @Test + public void sevenDigitNumberIsNotArmstrongNumber() { + int input = 9926314; + + assertFalse(armstrongNumbers.isArmstrongNumber(input)); + } + +} diff --git a/exercises/settings.gradle b/exercises/settings.gradle index 3ee342bdd..8b7d84913 100644 --- a/exercises/settings.gradle +++ b/exercises/settings.gradle @@ -3,6 +3,7 @@ include 'acronym' include 'all-your-base' include 'allergies' include 'anagram' +include 'armstrong-numbers' include 'atbash-cipher' include 'bank-account' include 'beer-song'