Last active
May 9, 2018 22:39
-
-
Save paulpanezc/08061487d55a94d6853320fb6103aa29 to your computer and use it in GitHub Desktop.
Script in ruby to return number for six digits as spanish text. Use it for example to generate invoices.
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 unity_or_especial(n, separator=nil) | |
case n | |
when 1 | |
if separator.nil? | |
return 'UNO' | |
#return 'UN' | |
else | |
return '' | |
end | |
when 2 | |
if separator.nil? | |
return 'DOS' | |
else | |
return 'DOS ' | |
end | |
when 3 | |
if separator.nil? | |
return 'TRES' | |
else | |
return 'TRES ' | |
end | |
when 4 | |
if separator.nil? | |
return 'CUATRO' | |
else | |
return 'CUATRO ' | |
end | |
when 5 | |
if separator.nil? | |
return 'CINCO' | |
else | |
return 'CINCO ' | |
end | |
when 6 | |
if separator.nil? | |
return 'SEIS' | |
else | |
return 'SEIS ' | |
end | |
when 7 | |
if separator.nil? | |
return 'SIETE' | |
else | |
return 'SIETE ' | |
end | |
when 8 | |
if separator.nil? | |
return 'OCHO' | |
else | |
return 'OCHO ' | |
end | |
when 9 | |
if separator.nil? | |
return 'NUEVE' | |
else | |
return 'NUEVE ' | |
end | |
when 10 | |
return 'DIEZ' | |
when 11 | |
return 'ONCE' | |
when 12 | |
return 'DOCE' | |
when 13 | |
return 'TRECE' | |
when 14 | |
return 'CATORCE' | |
when 15 | |
return 'QUINCE' | |
when 16 | |
return 'DIECISÉIS' | |
when 17 | |
return 'DIECISIETE' | |
when 18 | |
return 'DIECIOCHO' | |
when 19 | |
return 'DIECINUEVE' | |
when 20 | |
return 'VEINTE' | |
when 21 | |
return 'VEINTIÚN' | |
when 22 | |
return 'VEINTIDÓS' | |
when 23 | |
return 'VEINTITRÉS' | |
when 24 | |
return 'VEINTICUATRO' | |
when 25 | |
return 'VEINTICINCO' | |
when 26 | |
return 'VEINTISÉIS' | |
when 27 | |
return 'VEINTISIETE' | |
when 28 | |
return 'VEINTIOCHO' | |
when 29 | |
return 'VEINTINUEVE' | |
else | |
return '' | |
end | |
end | |
def hundred(n, o, p) | |
case n | |
when 1 | |
if o == 0 and p == 0 | |
return 'CIEN' | |
else | |
return 'CIENTO' | |
end | |
when 2 | |
return 'DOSCIENTOS' | |
when 3 | |
return 'TRESCIENTOS' | |
when 4 | |
return 'CUATROCIENTOS' | |
when 5 | |
return 'QUINIENTOS' | |
when 6 | |
return 'SEISCIENTOS' | |
when 7 | |
return 'SETECIENTOS' | |
when 8 | |
return 'OCHOCIENTOS' | |
when 9 | |
return 'NOVECIENTOS' | |
else | |
return '' | |
end | |
end | |
def ten(n, unity) | |
case n | |
when 3 | |
text = 'TREINTA' | |
if unity > 0 | |
text += ' Y ' + unity_or_especial(unity) | |
end | |
return text | |
when 4 | |
text = 'CUARENTA' | |
if unity > 0 | |
text += ' Y ' + unity_or_especial(unity) | |
end | |
return text | |
when 5 | |
text = 'CINCUENTA' | |
if unity > 0 | |
text += ' Y ' + unity_or_especial(unity) | |
end | |
return text | |
when 6 | |
text = 'SESENTA' | |
if unity > 0 | |
text += ' Y ' + unity_or_especial(unity) | |
end | |
return text | |
when 7 | |
text = 'SETENTA' | |
if unity > 0 | |
text += ' Y ' + unity_or_especial(unity) | |
end | |
return text | |
when 8 | |
text = 'OCHENTA' | |
if unity > 0 | |
text += ' Y ' + unity_or_especial(unity) | |
end | |
return text | |
when 9 | |
text = 'NOVENTA' | |
if unity > 0 | |
text += ' Y ' + unity_or_especial(unity) | |
end | |
return text | |
else | |
if n == 1 or n == 2 | |
text = unity_or_especial(n * 10 + unity) | |
else | |
text = unity_or_especial(unity) | |
end | |
return text | |
end | |
end | |
thousands_separator = 'MIL' | |
number = gets.chomp.to_i | |
split_number = number.to_s.split('') | |
number_size = split_number.size | |
position = number_size | |
_text = '' | |
split_number.each do |t| | |
position -= 1 | |
case position | |
when 1 | |
# puts '-'*117 | |
# puts position | |
# puts '-'*117 | |
if number_size > position + 1 | |
space = ' ' | |
else | |
space = '' | |
end | |
_text += space + ten(t.to_i, split_number[number_size - position].to_i) | |
puts _text | |
break | |
when 2 | |
# puts '-'*117 | |
# puts position | |
# puts '-'*117 | |
if number_size > position + 1 | |
space = ' ' | |
else | |
space = '' | |
end | |
_text += space + hundred(t.to_i, split_number[number_size - position].to_i, split_number[number_size - position + 1].to_i) | |
when 3 | |
# puts '-'*117 | |
# puts position | |
# puts '-'*117 | |
if number_size > position + 1 | |
space = ' ' | |
else | |
space = '' | |
end | |
if number_size == 3 | |
_text += space + unity_or_especial(t.to_i, thousands_separator) + thousands_separator | |
else | |
_text += space + thousands_separator | |
end | |
when 4 | |
# puts '-'*117 | |
# puts ten(1, 2) | |
# puts '-'*117 | |
if number_size > position + 1 | |
space = ' ' | |
else | |
space = '' | |
end | |
_text += space + ten(t.to_i, split_number[number_size - position].to_i) | |
when 5 | |
# puts '-'*117 | |
# puts position | |
# puts '-'*117 | |
if number_size > position + 1 | |
space = ' ' | |
else | |
space = '' | |
end | |
_text += space + hundred(t.to_i, split_number[number_size - position].to_i, split_number[number_size - position + 1].to_i) | |
else | |
# puts '-'*117 | |
# puts position | |
# puts '-'*117 | |
_text = unity_or_especial(t.to_i) | |
puts _text | |
break | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment