Skip to content

Instantly share code, notes, and snippets.

@joejag
Created April 1, 2021 15:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joejag/5226f812cd15af9ee53c03907072d66b to your computer and use it in GitHub Desktop.
Save joejag/5226f812cd15af9ee53c03907072d66b to your computer and use it in GitHub Desktop.
const unitNames = {
0: 'ZERO',
1: 'ONE',
2: 'TWO',
3: 'THREE',
4: 'FOUR',
5: 'FIVE',
6: 'SIX',
7: 'SEVEN',
8: 'EIGHT',
9: 'NINE',
} as Record<number, string>
const troubledTeens = {
11: 'ELEVEN',
12: 'TWELVE',
13: 'THIRTEEN',
14: 'FOURTEEN',
15: 'FIFTEEN',
16: 'SIXTEEN',
17: 'SEVENTEEN',
18: 'EIGHTEEN',
19: 'NINETEEN',
} as Record<number, string>
const tensNames = {
10: 'TEN',
20: 'TWENTY',
30: 'THIRTY',
40: 'FOURTY',
50: 'FIFTY',
60: 'SIXTY',
70: 'SEVENTY',
80: 'EIGHTY',
90: 'NINETY',
} as Record<number, string>
const chequeLike = (input: number): string => {
const inputString = input.toString()
const digits = inputString.length
if (digits === 3) {
const hunderedName = unitNames[inputString[0]]
const lastTwoDigits = Number(inputString.substring(1, 3))
if (lastTwoDigits === 0) {
return `${hunderedName} HUNDRED`
}
return `${hunderedName} HUNDRED AND ${belowHundred(lastTwoDigits)}`
}
return belowHundred(input)
}
const belowHundred = (input: number): string => {
const inputString = input.toString()
const digits = inputString.length
if (digits === 2) {
if (inputString[digits - 1] !== '0') {
if (inputString[0] === '1') {
return troubledTeens[input]
}
return (
tensNames[Number(inputString[0]) * 10] +
' ' +
unitNames[Number(inputString[1])]
)
}
return tensNames[input]
}
return unitNames[input]
}
export { chequeLike }
import { chequeLike } from './main'
// 2 digit numbers
// 10 should return “ten”
// 14 should return “fourteen”
// 20 should return “twenty”
// 21 should return “twenty-one”
// 56 should return “fifty-six”
describe('Cheque', () => {
it.each`
number | result
${0} | ${'ZERO'}
${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} | ${'FIFTEEN'}
${16} | ${'SIXTEEN'}
${17} | ${'SEVENTEEN'}
${18} | ${'EIGHTEEN'}
${19} | ${'NINETEEN'}
${20} | ${'TWENTY'}
${21} | ${'TWENTY ONE'}
${30} | ${'THIRTY'}
${40} | ${'FOURTY'}
${50} | ${'FIFTY'}
${60} | ${'SIXTY'}
${70} | ${'SEVENTY'}
${80} | ${'EIGHTY'}
${88} | ${'EIGHTY EIGHT'}
${90} | ${'NINETY'}
${99} | ${'NINETY NINE'}
${100} | ${'ONE HUNDRED'}
${132} | ${'ONE HUNDRED AND THIRTY TWO'}
${200} | ${'TWO HUNDRED'}
${999} | ${'NINE HUNDRED AND NINETY NINE'}
`('should return $result when passed $number', ({ number, result }) => {
expect(chequeLike(number)).toEqual(result)
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment