Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions src/main/java/io/zipcoder/Digits.java
Original file line number Diff line number Diff line change
@@ -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;
}

}
77 changes: 77 additions & 0 deletions src/main/java/io/zipcoder/Problem6.java
Original file line number Diff line number Diff line change
@@ -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));
}

}
29 changes: 29 additions & 0 deletions src/test/java/io/zipcoder/DigitsTest.java
Original file line number Diff line number Diff line change
@@ -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);
}

}
75 changes: 75 additions & 0 deletions src/test/java/io/zipcoder/Problem6Test.java
Original file line number Diff line number Diff line change
@@ -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);
}

}