Преглед изворни кода

Merge branch 'roman-numerals'

Piet van Dongen пре 11 година
родитељ
комит
d1ead387d6

+ 2
- 1
config.json Прегледај датотеку

@@ -17,7 +17,8 @@
17 17
     "space-age",
18 18
     "gigasecond",
19 19
     "triangle",
20
-    "scrabble-score"
20
+    "scrabble-score",
21
+    "roman-numerals"
21 22
   ],
22 23
   "deprecated": [
23 24
   ],

+ 11
- 0
roman-numerals/build.gradle Прегледај датотеку

@@ -0,0 +1,11 @@
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.10"
11
+}

+ 41
- 0
roman-numerals/example.java Прегледај датотеку

@@ -0,0 +1,41 @@
1
+public class RomanNumeral {
2
+
3
+    private int arabicNumeral;
4
+
5
+    private static final Map<Integer, String> arabicToRomanConversions = new LinkedHashMap<>();
6
+
7
+    static {
8
+        arabicToRomanConversions.put(1000, "M");
9
+        arabicToRomanConversions.put(900, "CM");
10
+        arabicToRomanConversions.put(500, "D");
11
+        arabicToRomanConversions.put(400, "CD");
12
+        arabicToRomanConversions.put(100, "C");
13
+        arabicToRomanConversions.put(90, "XC");
14
+        arabicToRomanConversions.put(50, "L");
15
+        arabicToRomanConversions.put(40, "XL");
16
+        arabicToRomanConversions.put(10, "X");
17
+        arabicToRomanConversions.put(9, "IX");
18
+        arabicToRomanConversions.put(5, "V");
19
+        arabicToRomanConversions.put(4, "IV");
20
+        arabicToRomanConversions.put(1, "I");
21
+    }
22
+
23
+    public RomanNumeral(int arabicNumeral) {
24
+        this.arabicNumeral = arabicNumeral;
25
+    }
26
+
27
+
28
+    public String getRomanNumeral() {
29
+        StringBuilder romanNumeral = new StringBuilder();
30
+
31
+        for (Map.Entry<Integer, String> conversion : arabicToRomanConversions.entrySet()) {
32
+            while (arabicNumeral / conversion.getKey() > 0) {
33
+                arabicNumeral -= conversion.getKey();
34
+
35
+                romanNumeral.append(conversion.getValue());
36
+            }
37
+        }
38
+
39
+        return romanNumeral.toString();
40
+    }
41
+}

+ 0
- 0
roman-numerals/src/main/java/.keep Прегледај датотеку


+ 2
- 0
roman-numerals/src/main/java/RomanNumeral.java Прегледај датотеку

@@ -0,0 +1,2 @@
1
+public class RomanNumeral {
2
+}

+ 53
- 0
roman-numerals/src/test/java/RomanNumeralsTest.java Прегледај датотеку

@@ -0,0 +1,53 @@
1
+import org.junit.Test;
2
+import org.junit.runner.RunWith;
3
+import org.junit.runners.Parameterized;
4
+import org.junit.runners.Parameterized.Parameters;
5
+
6
+import java.util.Arrays;
7
+import java.util.Collection;
8
+
9
+import static org.junit.Assert.assertEquals;
10
+
11
+@RunWith(Parameterized.class)
12
+public class RomanNumeralsTest {
13
+
14
+    private int input;
15
+    private String expectedOutput;
16
+
17
+    @Parameters
18
+    public static Collection<Object[]> data() {
19
+        return Arrays.asList(new Object[][]{
20
+                {0, ""},
21
+                {1, "I"},
22
+                {2, "II"},
23
+                {3, "III"},
24
+                {4, "IV"},
25
+                {5, "V"},
26
+                {6, "VI"},
27
+                {9, "IX"},
28
+                {27, "XXVII"},
29
+                {48, "XLVIII"},
30
+                {59, "LIX"},
31
+                {93, "XCIII"},
32
+                {141, "CXLI"},
33
+                {163, "CLXIII"},
34
+                {402, "CDII"},
35
+                {575, "DLXXV"},
36
+                {911, "CMXI"},
37
+                {1024, "MXXIV"},
38
+                {3000, "MMM"}
39
+        });
40
+    }
41
+
42
+    public RomanNumeralsTest(int input, String expectedOutput) {
43
+        this.input = input;
44
+        this.expectedOutput = expectedOutput;
45
+    }
46
+
47
+    @Test
48
+    public void convertArabicNumberalToRomanNumeral() {
49
+        RomanNumeral romanNumeral = new RomanNumeral(input);
50
+
51
+        assertEquals(romanNumeral.getRomanNumeral(), expectedOutput);
52
+    }
53
+}