-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathResult.java
More file actions
57 lines (49 loc) · 2.05 KB
/
Result.java
File metadata and controls
57 lines (49 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package hackrank.algorithm.implement.time;
/**
* @see <a href="https://www.hackerrank.com/challenges/the-time-in-words">The Time in Words</a>
*/
public class Result {
/**
* @param hours the hour of the day
* @param minutes the minutes after the hour
* @return Time in words format for {@code hours} and {@code minutes}
*/
public static String timeInWords(int hours, int minutes) {
TimeInWordsFormatter formatter = new TimeInWordsFormatter();
return formatter.format(hours, minutes);
}
public static class TimeInWordsFormatter {
private static final String[] WORDS =
{ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven",
"twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
"twenty" };
public String format(int hours, int minutes) {
if (minutes == 0) {
return getNumberWord(hours) + " o' clock";
} else if (minutes == 15) {
return "quarter past " + getNumberWord(hours);
} else if (minutes < 30) {
return getMinutesWord(minutes) + " past " + getNumberWord(hours);
} else if (minutes == 30) {
return "half past " + getNumberWord(hours);
} else if (minutes == 45) {
return "quarter to " + getNumberWord(hours + 1);
} else {
return getMinutesWord(minutes) + " to " + getNumberWord(hours + 1); // minutes must be >= 31
}
}
private String getNumberWord(int number) {
if (number <= 20) {
return WORDS[number];
} else {
return WORDS[20] + " " + WORDS[number - 20];
}
}
private String getMinutesWord(int minutes) {
if (minutes > 30) {
minutes = 60 - minutes;
}
return getNumberWord(minutes) + " minute" + (minutes == 1 ? "" : "s");
}
}
}