Skip to content

Instantly share code, notes, and snippets.

@paulpanezc
Last active May 9, 2018 22:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paulpanezc/08061487d55a94d6853320fb6103aa29 to your computer and use it in GitHub Desktop.
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.
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