Skip to content

Instantly share code, notes, and snippets.

@basekays
Last active October 27, 2018 02:44
Show Gist options
  • Save basekays/b053b6f8cff5dc68256a4524e028a297 to your computer and use it in GitHub Desktop.
Save basekays/b053b6f8cff5dc68256a4524e028a297 to your computer and use it in GitHub Desktop.
const onesIndex = {
'0': '',
'1': 'One',
'2': 'Two',
'3': 'Three',
'4': 'Four',
'5': 'Five',
'6': 'Six',
'7': 'Seven',
'8': 'Eight',
'9': 'Nine',
};
const tensIndex = {
'0': '',
'2': 'Twenty',
'3': 'Thirty',
'4': 'Forty',
'5': 'Fifty',
'6': 'Sixty',
'7': 'Seventy',
'8': 'Eighty',
'9': 'Ninety',
};
const elevenToNineteen = {
'11': 'Eleven',
'12': 'Twelve',
'13': 'Thirteen',
'14': 'Fourteen',
'15': 'Fifteen',
'16': 'Sixteen',
'17': 'Seventeen',
'18': 'Eighteen',
'19': 'Nineteen',
};
function joinText (target, unit) {
let result = '';
for (let i = unit.length - 1; i >= 0; i--) {
result = result.concat(target[unit[i]]);
}
return result == 0 ? 'Zero' : result == 'One' ? result.concat('Dollar') : result.concat('Dollars');
}
function transliterateTens (target, index, unit) {
if (target[index] == 1) {
if (target[index - 1] == 0) {
if (index > 3) {
target[index] = 'TenThousand';
} else {
target[index] = 'Ten';
}
} else {
const tensNumber = target[index].concat(target[index - 1]);
target[index] = elevenToNineteen[tensNumber].concat(unit);
target[index - 1] = 0;
}
} else {
const tensNumber = target[index];
const onesNumber = target[index - 1];
target[index] = tensIndex[tensNumber];
target[index - 1] = onesIndex[onesNumber].concat(unit);
}
}
function transliterateHundreds (target, index) {
if (target[index] != 0) {
const hundredsNumber = target[index];
target[index] = onesIndex[hundredsNumber].concat('Hundred');
}
}
function textDollar (number) {
const integerMap = {};
const reverseNumber = number.toString().split("").reverse().join("");
for (let i = 0; i < reverseNumber.length; i++) {
integerMap[i] = reverseNumber[i];
}
if (1 in integerMap) {
transliterateTens(integerMap, 1, '');
} else {
const onesNumber = integerMap[0];
integerMap[0] = onesIndex[onesNumber];
}
if (2 in integerMap) {
transliterateHundreds(integerMap, 2);
}
if (3 in integerMap) {
if (4 in integerMap) {
if (integerMap[3] == 0 && integerMap[4] == 0) {
integerMap[3] == '';
integerMap[4] == '';
} else {
transliterateTens(integerMap, 4, 'Thousand');
}
} else {
const thousandsNumber = integerMap[3];
integerMap[3] = onesIndex[thousandsNumber].concat('Thousand');
}
}
if (5 in integerMap) {
transliterateHundreds(integerMap, 5);
}
if (6 in integerMap) {
if (7 in integerMap) {
transliterateTens(integerMap, 7, 'Million');
} else {
const millionsNumber = integerMap[6];
integerMap[6] = onesIndex[millionsNumber].concat('Million');
}
}
if (8 in integerMap) {
transliterateHundreds(integerMap, 8);
}
const unitsToBeAdded = [];
for (let unit in integerMap) {
if (integerMap[unit] != '0') {
unitsToBeAdded.push(unit);
}
}
return joinText(integerMap, unitsToBeAdded);
}
console.log(textDollar(0));
console.log(textDollar(1));
console.log(textDollar(9));
console.log(textDollar(10));
console.log(textDollar(11));
console.log(textDollar(20));
console.log(textDollar(99));
console.log(textDollar(100));
console.log(textDollar(111));
console.log(textDollar(999));
console.log(textDollar(1000));
console.log(textDollar(14000));
console.log(textDollar(14444));
console.log(textDollar(99999));
console.log(textDollar(99000));
console.log(textDollar(92013));
console.log(textDollar(90103));
console.log(textDollar(901030));
console.log(textDollar(100000));
console.log(textDollar(111111));
console.log(textDollar(110110));
console.log(textDollar(909909));
console.log(textDollar(999919));
console.log(textDollar(1000000));
console.log(textDollar(1111111));
console.log(textDollar(90932845));
console.log(textDollar(90000800));
console.log(textDollar(900008000));
console.log(textDollar(900000000));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment