Hackerrank The Time in Words Solution
.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
Given the time in numerals we may convert it into words, as shown below:
At , use o' clock. For , use past, and for use to. Note the space between the apostrophe and clock in o' clock. Write a program which prints the time in words for the input given in the format described.
Function Description
Complete the timeInWords function in the editor below. It should return a time string as described.
timeInWords has the following parameter(s):
- h: an integer representing hour of the day
- m: an integer representing minutes after the hour
Input Format.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
The first line contains , the hours portion The second line contains , the minutes portion
Constraints.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
Output Format.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0}
Print the time in words as described.
Sample Input 0.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} 547
Sample Output 0.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} thirteen minutes to six
Sample Input 1.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} 300
Sample Output 1.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} three o' clock
Sample Input 2.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} 715
Sample Output 2.MathJax_SVG_Display {text-align: center; margin: 1em 0em; position: relative; display: block!important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100%} .MathJax_SVG .MJX-monospace {font-family: monospace} .MathJax_SVG .MJX-sans-serif {font-family: sans-serif} .MathJax_SVG {display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; font-size-adjust: none; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0} .MathJax_SVG * {transition: none; -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none} .mjx-svg-href {fill: blue; stroke: blue} .MathJax_SVG_LineBox {display: table!important} .MathJax_SVG_LineBox span {display: table-cell!important; width: 10000em!important; min-width: 0; max-width: none; padding: 0; border: 0; margin: 0} quarter past seven
Solution in java8
Approach 1.
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */Scanner s = new Scanner(System.in);
int h = s.nextInt();
int m = s.nextInt();
String flag;
String str[]={"o' clock","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","quarter","sixteen","seventeen","eighteen","nineteen","twenty","twenty one","twenty two","twenty three","twenty four","twenty five","twenty six","twenty seven","twenty eight","twenty nine","half"};
if(m<=30)
{
if(m==0)
flag=" ";
else if(m==1)
flag=" minute past ";
else if(m==15 || m==30)
flag=" past ";
else
flag=" minutes past ";
}
else
{
m=60-m;
if(m==0)
flag=" ";
else if(m==1)
flag=" minute to ";
else if(m==15 || m==30)
flag=" to ";
else
flag=" minutes to ";
h=h+1;
}
if(m==0)
System.out.println(str[h]+flag+str[0]);
else
System.out.println(str[m]+flag+str[h]);
}
}
Approach 2.
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int h=Integer.parseInt(br.readLine());
int m=Integer.parseInt(br.readLine());
if((h>=1 && h<=12) && (m>=0 && m<=59)) {
String w[]={"", "one", "two", "three", "four", "five", "six","seven", "eight", "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"};
String b, a;
if(m == 1 || m == 59)
b = "minute";
else
b = "minutes";
if(h==12)
a = w[1];
else
a = w[h+1];
if(m==0)
System.out.println(w[h]+" o' clock");
else if(m==15)
System.out.println("quarter past "+w[h]);
else if(m==30)
System.out.println("half past "+w[h]);
else if(m==45)
System.out.println("quarter to "+a);
else if(m<30)
System.out.println(w[m]+" "+b+" past "+w[h]);
else
System.out.println(w[60-m]+" "+b+" to "+a);
}
else
System.out.println("Invalid Input!");
}
}
Approach 3.
import java.io.*;
import java.util.*;
public class Timeinwords {
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int h=Integer.parseInt(br.readLine());
int m=Integer.parseInt(br.readLine());
if((h>=1 && h<=12) && (m>=0 && m<=59)) {
String words[]={"", "one", "two", "three", "four", "five", "six","seven", "eight", "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"};
String plu, a;
if(m == 1 || m == 59)
plu = "minute";
else
plu = "minutes";
if(h==12)
a = words[1];
else
a = words[h+1];
if(m==0)
System.out.println(words[h]+" o' clock");
else if(m==15)
System.out.println("quarter past "+words[h]);
else if(m==30)
System.out.println("half past "+words[h]);
else if(m==45)
System.out.println("quarter to "+a);
else if(m<30)
System.out.println(words[m]+" "+plu+" past "+words[h]);
else
System.out.println(words[60-m]+" "+plu+" to "+a);
}
else
System.out.println("Invalid Input!");
}
}
Solution in python3
Approach 1.
#!/bin/python3
ByOne=[0,'one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve',
'thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','ninteen','twenty']
ByQua=["%s o' clock", "quarter past %s", "half past %s", "quarter to %s"]
for i in range(1,10):
ByOne.append('twenty %s'%ByOne[i])
h,m=int(input()),int(input())
hour=ByOne[h] if (m<31) else ByOne[h+1]
if not m%15:
print(ByQua[m//15] % hour)
elif m<30:
print("%s minutes"%ByOne[m]+"s"*(m==1)+ " past %s"%hour)
else:
print("%s minutes"%ByOne[60-m]+"s"*(m==59)+ " to %s"%hour)
Approach 2.
#!/bin/python3
import sys
h = int(input().strip())
m = int(input().strip())
numbers={0:"zero",1:"one",2:"two",3:"three",
4:"four",5:"five",6:"six",7:"seven",
8:"eight",9:"nine",10:"one",11:"eleven",
12:"twelve",13:"thirteen",14:"fourteen",
15:"fifteen",16:"sixteen",17:"seventeen",
18:"eighteen",19:"nineteen",20:"twenty",
21:"twenty one",22:"twenty two",23:"twenty three",
24:"twenty four",25:"twenty five",26:"twenty six",
27:"twenty seven",28:"twenty eight",29:"twenty nine"
}
saat=["o' clock","past","half past","quarter past","quarter to"]
if m==00:
print(numbers[h],saat[0])
elif m>30:
if m==45:
print(saat[4],numbers[h+1])
else:
print(numbers[60-m],"minutes to",numbers[h + 1])
elif m==30:
print(saat[2],numbers[h])
else:
if m == 15:
print(saat[3], numbers[h])
else:
print(numbers[m], "minutes past", numbers[h])
Approach 3.
#!/bin/python3
import sys
h = int(input().strip())
m = int(input().strip())
numbers = {
1: 'one',
2: 'two',
3: 'three',
4: 'four',
5: 'five',
6: 'six',
7: 'seven',
8: 'eight',
9: 'nine',
10: 'ten',
11: 'eleven',
12: 'twelve',
13: 'thirteen',
14: 'fourteen',
15: 'quarter',
16: 'sixteen',
17: 'seventeen',
18: 'eighteen',
19: 'nineteen',
20: 'twenty',
21: 'twenty one',
22: 'twenty two',
23: 'twenty three',
24: 'twenty four',
25: 'twenty five',
26: 'twenty six',
27: 'twenty seven',
28: 'twenty eight',
29: 'twenty nine',
30: 'half'
}
to_past = 'to' if m > 30 else 'past'
minutes = '' if m % 15 == 0 else 'minutes '
if m > 30:
m = 60 - m
h = 1 if h == 12 else h + 1
if m == 0:
print("{} o' clock".format(numbers[h]))
elif m == 1 or m == 59:
print('one minute {} {}'.format(to_past, numbers[h]))
else:
print('{} {}{} {}'.format(numbers[m], minutes, to_past, numbers[h]))
Solution in cpp
Approach 1.
#include <iostream>
static const char *numbers[] = {
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"ten",
"eleven",
"twelve",
"thirteen",
"fourteen",
"quarter",
"sixteen",
"seventeen",
"eighteen",
"nineteen",
"twenty",
"twenty one",
"twenty two",
"twenty three",
"twenty four",
"twenty five",
"twenty six",
"twenty seven",
"twenty eight",
"twenty nine",
"half"
};
static const char *minSuffix(int m) {
switch (m) {
case 1: case 21: case 39: case 59:
return " minute";
case 15: case 30: case 45:
return "";
}
return " minutes";
}
int main(void) {
int h, m;
std::cin >> h >> m;
if (m == 0) {
std::cout << numbers[h-1] << " o' clock" << std::endl;
} else {
std::cout << (m <= 30 ? numbers[m-1] : numbers[59-m])
<< minSuffix(m)
<< (m <= 30 ? " past " : " to ")
<< (m <= 30 ? numbers[h-1] : numbers[h])
<< std::endl;
}
return 0;
}
Approach 2.
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int h,min;
cin>>h>>min;
string str1[30],str2,str3;
str1[1]="one ";
str1[2]="two ";
str1[3]="three ";
str1[4]="four ";
str1[5]="five ";
str1[6]="six ";
str1[7]="seven ";
str1[8]="eight ";
str1[9]="nine ";
str1[10]="ten ";
str1[11]="eleven ";
str1[12]="twelve ";
str1[13]="thirteen ";
str1[14]="fourteen ";
str1[15]="fifteen ";
str1[16]="sixteen ";
str1[17]="seventeen ";
str1[18]="eighteen ";
str1[19]="nineteen ";
str1[20]="twenty ";
str1[21]="twenty one ";
str1[22]="twenty two ";
str1[23]="twenty three ";
str1[24]="twenty four ";
str1[25]="twenty five ";
str1[26]="twenty six ";
str1[27]="twenty seven ";
str1[28]="twenty eight ";
str1[29]="twenty nine ";
int x=22;
//if(min>30) m=30-min; else m=min;
if(min==0) {str2="o' clock";str3=str1[h]+str2;}
else if(min==30) {str2="half past ";str3=str2+str1[h];}
else if(min==15) {str2="quarter past ";str3=str2+str1[h];}
else if(min==45) {str2="quarter to ";str3=str2+str1[h+1];}
else
{if(min>30){str2=str1[60-min]+"minutes to ";str3=str2+str1[h+1];}
if(min<30){str2=str1[min]+"minutes past ";str3=str2+str1[h];}
}
cout<<str3;
return 0;
}
Approach 3.
#include<iostream>
using namespace std;
class numtoword
{
public:
string units(int i)
{
string a[]={ "zero", "one", "two", "three",
"four", "five", "six", "seven", "sight", "nine", "ten", "eleven",
"twelve", "thirteen", "fourteen", "fifteen", "sixteen",
"seventeen", "eighteen", "nineteen" };
return a[i];
}
string tens(int i)
{
string b[]={ "", "", "twenty", "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety" };
return b[i];
}
};
int main()
{
int a,b,c,g ;
string d,e,f;
numtoword x;
cin>>a>>b;
if(b<30)
{
if(b<20)
{
string d=x.units(b);
string e=x.units(a);
if(b==1)
cout<<d<<" minute past "<< e;
else if (b==0)
{
cout<<e<<" o' clock";
}
else if (b==15)
{
cout<<"quarter past "<<e;
}
else
cout<< d<<" minutes past "<< e;
}
else
{
c=b/10;
string d=x.tens(c);
b=b%10;
string e=x.units(b);
string f=x.units(a);
cout<< d<<" "<< e<<" minutes past "<< f;
}
}
else if(b==30)
{
d=x.units(a);
cout<<"half past "<<d;
}
else
{
c=60-b;
if(c<20)
{
string d=x.units(c);
string e=x.units(a+1);
if(c==1)
cout<<d<<" minute to "<< e;
else if(c==15)
{
cout<<"quarter to "<<e;
}
else
cout<< d<<" minutes to "<< e;
}
else
{
g=c/10;
string d=x.tens(g);
b=c%10;
string e=x.units(b);
string f=x.units(a+1);
cout<< d<<" "<< e<<" minutes to "<< f;
}
}
return 0;
}