Last active
December 10, 2015 01:58
-
-
Save 100lp/4363239 to your computer and use it in GitHub Desktop.
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
def englishNumber number | |
if number < 0 | |
return 'please' | |
end | |
if number == 0 | |
return 'zero' | |
end | |
numString = '' | |
onesPlace = ['one', 'two', 'three', 'four', 'five', | |
'six', 'seven', 'eight', 'nine'] | |
# десятки | |
tensPlace = ['ten', 'twenty', 'thirty', 'forty', 'fifty', | |
'sixty', 'seventy', 'eighty', 'ninety'] | |
teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', | |
'sixteen', 'seventeen', 'eighteen', 'nineteen'] | |
# "left" - сколько от числа нам ещё осталось вывести. | |
# "write" - часть числа, которую мы выводим сейчас. | |
# write и left... поняли? :) | |
left = number | |
write = left/1000 # Сколько тысяч осталось вывести? | |
left = left - write*1000 # Вычтем эти тысячи | |
if write > 0 | |
thousands = englishNumber write | |
numString = numString + thousands + ' thousand' | |
if left > 0 | |
numString = numString + ' and ' | |
end | |
end | |
write = left/100 # Сколько сотен осталось вывести? | |
left = left - write*100 # Вычтем эти сотни. | |
if write > 0 | |
# Вот здесь действительно хитрый фокус: | |
hundreds = englishNumber write | |
numString = numString + hundreds + ' hundred' | |
if left > 0 | |
# Так, мы не выводим 'two hundredfifty-one'... | |
numString = numString + ' and ' | |
end | |
end | |
write = left/10 # Сколько десятков осталось вывести? | |
left = left - write*10 # Вычтем эти десятки. | |
if write > 0 | |
if ((write == 1) and (left > 0)) | |
# Поскольку мы не можем вывести "tenty-two" вместо "twelve", | |
# нам нужно сделать для них особую обработку. | |
numString = numString + teenagers[left-1] | |
# "-1" здесь потому, что teenagers[3] это 'fourteen', а не 'thirteen'. | |
# Поскольку уже мы позаботились о цифре для единиц, | |
# нам не осталось ничего для вывода. | |
left = 0 | |
else | |
numString = numString + tensPlace[write-1] | |
# "-1" потому, что tensPlace[3] это 'forty', а не 'thirty'. | |
end | |
if left > 0 | |
# Так, мы не выводим 'sixtyfour'... | |
numString = numString + ' and ' | |
end | |
end | |
write = left # Сколько единиц осталось вывести? | |
left = 0 # Вычтем эти единицы. | |
if write > 0 | |
numString = numString + onesPlace[write-1] | |
# "-1" потому, что onesPlace[3] это 'four', а не 'three'. | |
end | |
# А теперь мы просто возвращаем "numString"... | |
numString | |
end | |
puts englishNumber(40000) | |
puts englishNumber( 9) | |
puts englishNumber( 10) | |
puts englishNumber( 11) | |
puts englishNumber( 17) | |
puts englishNumber( 32) | |
puts englishNumber( 88) | |
puts englishNumber( 99) | |
puts englishNumber(100) | |
puts englishNumber(101) | |
puts englishNumber(234) | |
puts englishNumber(3211) | |
puts englishNumber(999999) | |
puts englishNumber(1000000000000) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment