class Integer
def to_english
return to_english_under_1000 if self < 1000
unit = % w[
\ thousand million billion trillion quadrillion quintillion
]
to_s.reverse .scan ( / .{ 1 ,3 } / ) .zip ( unit) .reduce ( '' ) do | s, ( d, u) |
d =~ / \A0+ \z/ ? s : [ d.reverse .to_i .to_english_under_1000 , u, s] * ' '
end .strip
end
def to_english_under_1000
a, b = divmod( 100 )
s = b.to_english_under_100
return s if self < 100
a.to_english_under_20 + ' hundred' + ( b.zero ? ? '' : ' ' + s)
end
def to_english_under_100
return to_english_under_20 if self < 20
a, b = divmod( 10 )
d = % w[
\ \ twenty thirty forty fifty sixty seventy eighty ninety
] [ a]
b.zero ? ? d : d + ' ' + b.to_english_under_20
end
def to_english_under_20
% w[
zero one two three four five six seven eight nine ten eleven
twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen
] [ self ]
end
end
puts $_ .to_i .to_english while gets
CmNsYXNzIEludGVnZXIKICBkZWYgdG9fZW5nbGlzaAogICAgcmV0dXJuIHRvX2VuZ2xpc2hfdW5kZXJfMTAwMCBpZiBzZWxmIDwgMTAwMAogICAgdW5pdCA9ICV3WwogICAgICBcICB0aG91c2FuZCBtaWxsaW9uIGJpbGxpb24gdHJpbGxpb24gcXVhZHJpbGxpb24gcXVpbnRpbGxpb24KICAgIF0KICAgIHRvX3MucmV2ZXJzZS5zY2FuKC8uezEsM30vKS56aXAodW5pdCkucmVkdWNlKCcnKSBkbyB8cywgKGQsIHUpfAogICAgICBkID1+IC9cQTArXHovID8gcyA6IFtkLnJldmVyc2UudG9faS50b19lbmdsaXNoX3VuZGVyXzEwMDAsIHUsIHNdICogJyAnCiAgICBlbmQuc3RyaXAKICBlbmQKCiAgZGVmIHRvX2VuZ2xpc2hfdW5kZXJfMTAwMAogICAgYSwgYiA9IGRpdm1vZCgxMDApCiAgICBzID0gYi50b19lbmdsaXNoX3VuZGVyXzEwMAogICAgcmV0dXJuIHMgaWYgc2VsZiA8IDEwMAogICAgYS50b19lbmdsaXNoX3VuZGVyXzIwICsgJyBodW5kcmVkJyArIChiLnplcm8/ID8gJycgOiAnICcgKyBzKQogIGVuZAoKICBkZWYgdG9fZW5nbGlzaF91bmRlcl8xMDAKICAgIHJldHVybiB0b19lbmdsaXNoX3VuZGVyXzIwIGlmIHNlbGYgPCAyMAogICAgYSwgYiA9IGRpdm1vZCgxMCkKICAgIGQgPSAld1sKICAgICAgXCAgXCAgdHdlbnR5IHRoaXJ0eSBmb3J0eSBmaWZ0eSBzaXh0eSBzZXZlbnR5IGVpZ2h0eSBuaW5ldHkKICAgIF1bYV0KICAgIGIuemVybz8gPyBkIDogZCArICcgJyArIGIudG9fZW5nbGlzaF91bmRlcl8yMAogIGVuZAoKICBkZWYgdG9fZW5nbGlzaF91bmRlcl8yMAogICAgJXdbCiAgICAgIHplcm8gb25lIHR3byB0aHJlZSBmb3VyIGZpdmUgc2l4IHNldmVuIGVpZ2h0IG5pbmUgdGVuIGVsZXZlbgogICAgICB0d2VsdmUgdGhpcnRlZW4gZm91cnRlZW4gZmlmdGVlbiBzaXh0ZWVuIHNldmVudGVlbiBlaWdodGVlbiBuaW5ldGVlbgogICAgXVtzZWxmXQogIGVuZAplbmQKCnB1dHMgJF8udG9faS50b19lbmdsaXNoIHdoaWxlIGdldHMK