Skip to content

Instantly share code, notes, and snippets.

@100lp
Last active December 10, 2015 01:58
Show Gist options
  • Save 100lp/4363239 to your computer and use it in GitHub Desktop.
Save 100lp/4363239 to your computer and use it in GitHub Desktop.
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