Skip to content

Instantly share code, notes, and snippets.

@evanlh
Created June 14, 2018 19:07
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 evanlh/df4d949fa193fd1e553455f195333a06 to your computer and use it in GitHub Desktop.
Save evanlh/df4d949fa193fd1e553455f195333a06 to your computer and use it in GitHub Desktop.
Practice your vietnamese numbers
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var digitsVietMap = {
0: 'không',
1: 'một',
2: 'hai',
3: 'ba',
4: 'bốn',
5: 'năm',
6: 'sáu',
7: 'bảy',
8: 'tám',
9: 'chín',
10: 'mười',
100: 'trăm',
1000: 'nghìn'
};
var additionalRules = {
1: '',
5: 'lăm',
0: 'linh',
10: 'mưoi'
};
function digitInPlace(number, place){
var numInPlace = 0;
if (place > number || number > place*10) return false;
while (place * (numInPlace+1) <= number) numInPlace++;
return numInPlace;
}
function numberToViet(number, responseSoFar){
var hundreds, tens, ones, response;
if (number > 999) return "I don't know that yet.";
if (!responseSoFar) responseSoFar = '';
else if (responseSoFar) responseSoFar += ' ';
debugger;
if ((hundreds = digitInPlace(number, 100)) !== false) {
response = digitsVietMap[hundreds] + ' ' + digitsVietMap[100];
return numberToViet(number - hundreds*100, response);
}
else if ((tens = digitInPlace(number, 10)) !== false){
if (tens == 1) {
response = '';
}
else if (tens == 0) {
response = additionalRules[tens] + " ";
}
else {
response = digitsVietMap[tens] + " ";
}
response += ((tens > 1) ? additionalRules[10] : digitsVietMap[10]);
return numberToViet(number - tens*10, responseSoFar + response);
}
else {
if (number == 0) return responseSoFar;
else if (number == 5 && responseSoFar) return responseSoFar + additionalRules[number];
else return responseSoFar + digitsVietMap[number];
}
};
var ask = function(question, answer, next){
rl.question(question + "? ", function(response){
response = response.trimRight("\n");
console.log(response);
if (response == answer) console.log("Đúng!");
else console.log("Không, " + answer);
if (typeof next == 'function') next();
});
};
var askNumber = function(){
var n, r = Math.random();
if (r > .6) {
n = Math.floor(Math.random()*1000);
} else if (r > .3) {
n = Math.floor(Math.random()*100);
} else {
n = Math.floor(Math.random()*21);
}
var viet = numberToViet(n);
ask(viet, n, askNumber);
};
askNumber();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment