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
12 changes: 12 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@
<groupId>io.zipcoder</groupId>
<artifactId>InterviewProblem5</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
Expand Down
65 changes: 64 additions & 1 deletion src/main/java/io/zipcoder/Problem6.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,67 @@
package io.zipcoder;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

public class Problem6 {
}
//Calendar is a singleton and you HAVE to call .getInstance *protected constructor*
private Calendar calendar = Calendar.getInstance();
private String hour;
private String minute;

public String convertToMilitary(String input) {
//Separate Hour & Minute
calendar.set(Calendar.HOUR, Integer.parseInt(input.substring(0, input.indexOf(":"))));
calendar.set(Calendar.MINUTE,
//if it is a double digit hour then you index at 5 else index at 4
Integer.parseInt(input.substring(input.indexOf(":") + 1 , calendar.get(Calendar.HOUR)>9?5:4)));
//If I want to check seconds, too - I would need to change the formatter to reflect HH:mm:ss
//calendar.set(Calendar.SECOND, 00);

//Check if AM or PM
calendar.set(Calendar.AM_PM, input.substring(input.length() - 2).equalsIgnoreCase("am") ? Calendar.AM : Calendar.PM);

SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
return formatter.format(calendar.getTime());

}

public Map<Integer, String> minuteMap = new HashMap<Integer, String>(){
{
put(1, "One"); put(2, "Two"); put(3, "Three"); put(4, "Four"); put(5, "Five");
put(6, "Six"); put(7, "Seven"); put(8, "Eight"); put(9, "Nine"); put(10, "Ten");
put(11, "Eleven"); put(12, "Twelve"); put(13, "Thirteen"); put(14, "Fourteen");
put(15, "Fifteen"); put(16, "Sixteen"); put(17, "Seventeen"); put(18, "Eighteen");
put(19, "Nineteen"); put(20, "Twenty"); put(21, "Twenty One"); put(22, "Twenty Two");
put(23, "Twenty Three"); put(24, "Twenty Four"); put(25, "Twenty Five");put(26, "Twenty Six");
put(27, "Twenty Seven"); put(28, "Twenty Eight"); put(29, "Twenty Nine"); put(30, "Thirty");
put(31, "Thirty One"); put(32, "Thirty Two"); put(33, "Thirty Three"); put(34, "Thirty Four");
put(35, "Thirty Five"); put(36, "Thirty Six"); put(37, "Thirty Seven"); put(38, "Thirty Eight");
put(39, "Thirty Nine"); put(40, "Forty"); put(41, "Forty One"); put(42, "Forty Two");
put(43, "Forty Three"); put(44, "Forty Four"); put(45, "Forty Five");put(46, "Forty Six");
put(47, "Forty Seven"); put(48, "Forty Eight"); put(49, "Forty Nine"); put(50, "Fifty");
put(51, "Fifty One"); put(52, "Fifty Two"); put(53, "Fifty Three"); put(54, "Fifty Four");
put(55, "Fifty Five");put(56, "Fifty Six"); put(57, "Fifty Seven"); put(58, "Fifty Eight"); put(59, "Fifty Nine");
}
};

public Map<Integer, String> hourMap = new HashMap<Integer, String>(){
{
put(1, "Zero One"); put(2, "Zero Two"); put(3, "Zero Three"); put(4, "Zero Four"); put(5, "Zero Five");
put(6, "Zero Six"); put(7, "Zero Seven"); put(8, "Zero Eight"); put(9, "Zero Nine"); put(10, "Ten");
put(11, "Eleven"); put(12, "Twelve"); put(13, "Thirteen"); put(14, "Fourteen");
put(15, "Fifteen"); put(16, "Sixteen"); put(17, "Seventeen"); put(18, "Eighteen");
put(19, "Nineteen"); put(20, "Twenty"); put(21, "Twenty One"); put(22, "Twenty Two");
put(23, "Twenty Three"); put(24, "Twenty Four");
}
};

public String parseToString(String input) {
String[] time = convertToMilitary(input).split(":");
time[1] = minuteMap.get(calendar.get(Calendar.MINUTE));
time[0] = hourMap.get(calendar.get(Calendar.HOUR_OF_DAY));
return time[0] + " Hundred and " + time[1] + " Hours";
}
}
145 changes: 144 additions & 1 deletion src/test/java/io/zipcoder/Problem6Test.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,147 @@
package io.zipcoder;

import org.junit.Assert;
import org.junit.Test;

public class Problem6Test {
}

@Test
public void splitStringTest() {
// Given
Problem6 problem6 = new Problem6();
String time = "1:30pm";

// When
String expected = "13:30";
String actual = problem6.convertToMilitary(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void splitStringTest2() {
// Given
Problem6 problem6 = new Problem6();
String time = "1:30am";

// When
String expected = "01:30";
String actual = problem6.convertToMilitary(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void splitStringTest3() {
// Given
Problem6 problem6 = new Problem6();
String time = "2:22pm";

// When
String expected = "14:22";
String actual = problem6.convertToMilitary(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void splitStringTest4() {
// Given
Problem6 problem6 = new Problem6();
String time = "2:11am";

// When
String expected = "02:11";
String actual = problem6.convertToMilitary(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void splitStringTest5() {
// Given
Problem6 problem6 = new Problem6();
String time = "10:02am";

// When
String expected = "10:02";
String actual = problem6.convertToMilitary(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void parseToStringTest() {
// Given
Problem6 problem6 = new Problem6();
String time = "1:30pm";

// When
String expected = "Thirteen Hundred and Thirty Hours";
String actual = problem6.parseToString(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void parseToStringTest2() {
// Given
Problem6 problem6 = new Problem6();
String time = "1:30am";

// When
String expected = "Zero One Hundred and Thirty Hours";
String actual = problem6.parseToString(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void parseToStringTest3() {
// Given
Problem6 problem6 = new Problem6();
String time = "2:22pm";

// When
String expected = "Fourteen Hundred and Twenty Two Hours";
String actual = problem6.parseToString(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void parseToStringTest4() {
// Given
Problem6 problem6 = new Problem6();
String time = "2:11am";

// When
String expected = "Zero Two Hundred and Eleven Hours";
String actual = problem6.parseToString(time);

// Then
Assert.assertEquals(expected, actual);
}

@Test
public void parseToStringTest5() {
// Given
Problem6 problem6 = new Problem6();
String time = "10:02am";

// When
String expected = "Ten Hundred and Two Hours";
String actual = problem6.parseToString(time);

// Then
Assert.assertEquals(expected, actual);
}
}