diff --git a/src/main/java/io/zipcoder/Digits.java b/src/main/java/io/zipcoder/Digits.java new file mode 100644 index 0000000..69fab46 --- /dev/null +++ b/src/main/java/io/zipcoder/Digits.java @@ -0,0 +1,82 @@ +package io.zipcoder; + +public enum Digits { + + ZERO_ZERO(0, "Zero Zero"), + ZERO_ONE(1, "Zero One"), + ZERO_TWO(2, "Zero Two"), + ZERO_THREE(3, "Zero Three"), + ZERO_FOUR(4, "Zero Four"), + ZERO_FIVE(5, "Zero Five"), + ZERO_SIX(6, "Zero Six"), + ZERO_SEVEN(7, "Zero Seven"), + ZERO_EIGHT(8, "Zero Eight"), + ZERO_NINE(9, "Zero Nine"), + TEN(10, "Ten"), + ELEVEN(11, "Eleven"), + TWELVE(12, "Twelve"), + THIRTEEN(13, "Thirteen"), + FOURTEEN(14, "Fourteen"), + FIFTEEN(15, "Fifteen"), + SIXTEEN(16, "Sixteen"), + SEVENTEEN(17, "Seventeen"), + EIGHTEEN(18, "Eighteen"), + NINETEEN(19, "Nineteen"), + TWENTY(20, "Twenty"), + TWENTY_ONE(21, "Twenty One"), + TWENTY_TWO(22, "Twenty Two"), + TWENTY_THREE(23, "Twenty Three"), + TWENTY_FOUR(24, "Twenty Four"), + TWENTY_FIVE(25, "Twenty Five"), + TWENTY_SIX(26, "Twenty Six"), + TWENTY_SEVEN(27, "Twenty Seven"), + TWENTY_EIGHT(28, "Twenty Eight"), + TWENTY_NINE(29, "Twenty Nine"), + THIRTY(30, "Thirty"), + THIRTY_ONE(31, "Thirty One"), + THIRTY_TWO(32, "Thirty Two"), + THIRTY_THREE(33, "Thirty Three"), + THIRTY_FOUR(34, "Thirty Four"), + THIRTY_FIVE(35, "Thirty Five"), + THIRTY_SIX(36, "Thirty Six"), + THIRTY_SEVEN(37, "Thirty Seven"), + THIRTY_EIGHT(38, "Thirty Eight"), + THIRTY_NINE(39, "Thirty Nine"), + FORTY(40, "Forty"), + FORTY_ONE(41, "Forty One"), + FORTY_TWO(42, "Forty Two"), + FORTY_THREE(43, "Forty Three"), + FORTY_FOUR(44, "Forty Four"), + FORTY_FIVE(45, "Forty Five"), + FORTY_SIX(46, "Forty Six"), + FORTY_SEVEN(47, "Forty Seven"), + FORTY_EIGHT(48, "Forty Eight"), + FORTY_NINE(49, "Forty Nine"), + FIFTY(50, "Fifty"), + FIFTY_ONE(51, "Fifty One"), + FIFTY_TWO(52, "Fifty Two"), + FIFTY_THREE(53, "Fifty Three"), + FIFTY_FOUR(54, "Fifty Four"), + FIFTY_FIVE(55, "Fifty Five"), + FIFTY_SIX(56, "Fifty Six"), + FIFTY_SEVEN(57, "Fifty Seven"), + FIFTY_EIGHT(58, "Fifty Eight"), + FIFTY_NINE(59, "Fifty Nine"); + + final int digitsInt; + final String digitsString; + + Digits(int digitsInt, String digitsString) { + this.digitsInt = digitsInt; + this.digitsString = digitsString; + } + + public int toInt() { + return digitsInt; + } + + public String toString() { + return digitsString; + } + +} diff --git a/src/main/java/io/zipcoder/Problem6.java b/src/main/java/io/zipcoder/Problem6.java index 4ee4e64..973ca96 100644 --- a/src/main/java/io/zipcoder/Problem6.java +++ b/src/main/java/io/zipcoder/Problem6.java @@ -1,4 +1,81 @@ package io.zipcoder; +import java.util.LinkedHashMap; +import java.util.Map; + public class Problem6 { + + private String[] digitsAsMilitaryWords = { + "Zero Zero", "Zero One", "Zero Two", "Zero Three", "Zero Four", + "Zero Five", "Zero Six", "Zero Seven", "Zero Eight", "Zero Nine", + "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", + "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen", + "Twenty", "Twenty One", "Twenty Two", "Twenty Three", "Twenty Four", + "Twenty Five", "Twenty Six", "Twenty Seven", "Twenty Eight", "Twenty Nine", + "Thirty", "Thirty One", "Thirty Two", "Thirty Three", "Thirty Four", + "Thirty Five", "Thirty Six", "Thirty Seven", "Thirty Eight", "Thirty Nine", + "Forty", "Forty One", "Forty Two", "Forty Three", "Forty Four", + "Forty Five", "Forty Six", "Forty Seven", "Forty Eight", "Forty Nine", + "Fifty", "Fifty One", "Fifty Two", "Fifty Three", "Fifty Four", + "Fifty Five", "Fifty Six", "Fifty Seven", "Fifty Eight", "Fifty Nine" + }; + + public Problem6() { + } + + public String[] getDigitsAsMilitaryWords() { + return digitsAsMilitaryWords; + } + + public String writeTimeAsMilitary(String timeString) { + char timeOfDay = isTimeAmOrPm(timeString); + String[] timeStringArray = timeStringToStringArray(timeString); + + String hourDigitsAsString = timeStringArray[0]; + int hourDigits = Integer.parseInt(hourDigitsAsString); + if ((timeOfDay == 'p') && (hourDigits != 12)) { + hourDigits += 12; + } + String minutesDigitsAsString = timeStringArray[1]; + int minutesDigits = Integer.parseInt(minutesDigitsAsString); + + StringBuilder sb = new StringBuilder(); + + sb.append(digitsAsMilitaryWords[hourDigits]); + sb.append(" Hundred and "); + sb.append(digitsAsMilitaryWords[minutesDigits]); + sb.append(" Hours"); + + return sb.toString(); + } + + public char isTimeAmOrPm(String timeString) { + int stringLength = timeString.length(); + return timeString.charAt(stringLength - 2); + } + + public String[] timeStringToStringArray(String timeString) { + return removeLastTwoChars(timeString).split(":"); + } + + public String removeLastTwoChars(String timeString) { + return timeString.substring(0, timeString.length() - 2); + } + + public String digitsToStringFromDigitsEnum(int digitsToFind) { + for (Digits digits : Digits.values()) { + if (digitsToFind == digits.toInt()) { + return digits.toString(); + } + } + return "Digits not found"; + } + + public static void main(String[] args) { + Problem6 problem6 = new Problem6(); + String time = "3:28pm"; + System.out.println(time); + System.out.println(problem6.writeTimeAsMilitary(time)); + } + } diff --git a/src/test/java/io/zipcoder/DigitsTest.java b/src/test/java/io/zipcoder/DigitsTest.java new file mode 100644 index 0000000..01dbc7c --- /dev/null +++ b/src/test/java/io/zipcoder/DigitsTest.java @@ -0,0 +1,29 @@ +package io.zipcoder; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class DigitsTest { + + @Test + public void toIntTest() { + // Given + int expectedHour = 0; + // When + int actualHour = Digits.ZERO_ZERO.toInt(); + // Then + Assert.assertEquals(expectedHour, actualHour); + } + + @Test + public void toStringTest() { + // Given + String expectedHour = "Zero Zero"; + // When + String actualHour = Digits.ZERO_ZERO.toString(); + // Then + Assert.assertEquals(expectedHour, actualHour); + } + +} diff --git a/src/test/java/io/zipcoder/Problem6Test.java b/src/test/java/io/zipcoder/Problem6Test.java index d262e88..48bf611 100644 --- a/src/test/java/io/zipcoder/Problem6Test.java +++ b/src/test/java/io/zipcoder/Problem6Test.java @@ -1,4 +1,79 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + public class Problem6Test { + + private Problem6 problem6; + private String timeStringPm0 = "1:30pm"; + + @Before + public void setup() { + problem6 = new Problem6(); + } + + @Test + public void getDigitsAsMilitaryWordsTest() { + // Given + int expectedInt = 39; + String expectedString = "Thirty Nine"; + // When + String actualString = problem6.getDigitsAsMilitaryWords()[expectedInt]; + // Then + Assert.assertEquals(expectedString, actualString); + } + + @Test + public void isTimeAmOrPmTest() { + // Given + char expectedSecondToLastChar = 'p'; + // When + char actualSecondToLastChar = problem6.isTimeAmOrPm(timeStringPm0); + // Then + Assert.assertEquals(expectedSecondToLastChar, actualSecondToLastChar); + } + + @Test + public void timeStringToStringArrayTest() { + // Given + String[] expectedStringArr = { "1", "30"}; + // When + String[] actualStringArr = problem6.timeStringToStringArray(timeStringPm0); + // Then + Assert.assertArrayEquals(expectedStringArr, actualStringArr); + } + + @Test + public void removeLastTwoCharsTest() { + // Given + String expectedString = "1:30"; + // When + String actualString = problem6.removeLastTwoChars(timeStringPm0); + // Then + Assert.assertEquals(expectedString, actualString); + } + + @Test + public void writeTimeAsMilitaryTest() { + // Given + String expectedHourMilitary = "Thirteen Hundred and Thirty Hours"; + // When + String actualHourMilitary = problem6.writeTimeAsMilitary(timeStringPm0); + // Then + Assert.assertEquals(expectedHourMilitary, actualHourMilitary); + } + + @Test + public void digitsToStringFromDigitsEnumTest() { + // Given + int digits = 0; + String expectedHourMilitary = "Zero Zero"; + // When + String actualHourMilitary = problem6.digitsToStringFromDigitsEnum(digits); + // Then + Assert.assertEquals(expectedHourMilitary, actualHourMilitary); + } + }