Created
June 14, 2018 19:07
-
-
Save evanlh/df4d949fa193fd1e553455f195333a06 to your computer and use it in GitHub Desktop.
Practice your vietnamese numbers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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