commit c5f1c153940edc2bf4e47525be619ed67cd3f790 Author: DerTyp7 Date: Fri Aug 25 11:48:11 2023 +0200 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..5bac0ba --- /dev/null +++ b/pom.xml @@ -0,0 +1,25 @@ + + 4.0.0 + + org.example + RomanCharConverter + 1.0-SNAPSHOT + jar + + RomanCharConverter + http://maven.apache.org + + + UTF-8 + + + + + org.junit.jupiter + junit-jupiter-api + 5.10.0 + test + + + diff --git a/src/main/java/com/tf/romanCharConverter/RomanCharConverter.java b/src/main/java/com/tf/romanCharConverter/RomanCharConverter.java new file mode 100644 index 0000000..ad07382 --- /dev/null +++ b/src/main/java/com/tf/romanCharConverter/RomanCharConverter.java @@ -0,0 +1,37 @@ +package com.tf.romanCharConverter; + +import java.util.HashMap; + +public class RomanCharConverter { + + private final HashMap romanToArabic = new HashMap(); + public RomanCharConverter() { + this.romanToArabic.put("I", 1); + this.romanToArabic.put("V", 5); + this.romanToArabic.put("X", 10); + this.romanToArabic.put("L", 50); + this.romanToArabic.put("C", 100); + this.romanToArabic.put("D", 500); + this.romanToArabic.put("M", 1000); + this.romanToArabic.put("A", 5000); + } + + public int convert(String romanString) { + int result = 0; + for (int i = 0; i < romanString.length(); i++) { + String romanChar = String.valueOf(romanString.charAt(i)); + + if(i < romanString.length() - 1) { + String nextRomanChar = String.valueOf(romanString.charAt(i + 1)); + if(this.romanToArabic.get(romanChar) < this.romanToArabic.get(nextRomanChar)) { + result -= this.romanToArabic.get(romanChar); + continue; + } + } + + result += this.romanToArabic.get(romanChar); + + } + return result; + } +} diff --git a/src/test/java/com/tf/romanCharConverter/RomanCharConverterTest.java b/src/test/java/com/tf/romanCharConverter/RomanCharConverterTest.java new file mode 100644 index 0000000..950c63d --- /dev/null +++ b/src/test/java/com/tf/romanCharConverter/RomanCharConverterTest.java @@ -0,0 +1,51 @@ +package com.tf.romanCharConverter; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class RomanCharConverterTest { + private RomanCharConverter converter; + + @BeforeEach + public void setUp() { + converter = new RomanCharConverter(); + } + + @Test + public void givenSingleRomanChar_whenConvert_thenArabic(){ + assertEquals(10, converter.convert("X")); + assertEquals(50, converter.convert("L")); + assertEquals(100, converter.convert("C")); + assertEquals(500, converter.convert("D")); + assertEquals(1000, converter.convert("M")); + assertEquals(5000, converter.convert("A")); + } + + @Test + public void givenMultipleRomanChar_whenConvert_thenArabic(){ + assertEquals(2, converter.convert("II")); + assertEquals(20, converter.convert("XX")); + assertEquals(200, converter.convert("CC")); + assertEquals(2000, converter.convert("MM")); + assertEquals(10000, converter.convert("AA")); + + assertEquals(3, converter.convert("III")); + assertEquals(30, converter.convert("XXX")); + assertEquals(300, converter.convert("CCC")); + assertEquals(3000, converter.convert("MMM")); + assertEquals(1500, converter.convert("MD")); + } + + @Test + public void givenMultipleRomanSubstractChar_whenConvert_thenArabic(){ + assertEquals(4, converter.convert("IV")); + assertEquals(9, converter.convert("IX")); + assertEquals(40, converter.convert("XL")); + assertEquals(90, converter.convert("XC")); + assertEquals(400, converter.convert("CD")); + assertEquals(900, converter.convert("CM")); + assertEquals(14, converter.convert("XIV")); + } +}