Rosetta Code

Number names

Spell small whole numbers in English words for predictable sample inputs.

Intermediate View source
Source rosettacode/popular/number_names.vibe
# title: Number names
# source: https://rosettacode.org/wiki/Number_names
# category: Rosetta Code
# difficulty: Intermediate
# summary: Spell small whole numbers in English words for predictable sample inputs.
# tags: popular, strings, formatting, math
# vibe: 0.2

def ones
  [
    "zero",
    "one",
    "two",
    "three",
    "four",
    "five",
    "six",
    "seven",
    "eight",
    "nine"
  ]
end

def teens
  [
    "ten",
    "eleven",
    "twelve",
    "thirteen",
    "fourteen",
    "fifteen",
    "sixteen",
    "seventeen",
    "eighteen",
    "nineteen"
  ]
end

def tens_names
  [
    "",
    "",
    "twenty",
    "thirty",
    "forty",
    "fifty",
    "sixty",
    "seventy",
    "eighty",
    "ninety"
  ]
end

def under_hundred(number)
  if number < 10
    ones[number]
  elsif number < 20
    teens[number - 10]
  else
    tens = tens_names[number / 10]
    remainder = number % 10
    if remainder == 0
      tens
    else
      tens + "-" + ones[remainder]
    end
  end
end

def under_thousand(number)
  hundreds = number / 100
  remainder = number % 100

  if hundreds == 0
    under_hundred(remainder)
  else
    text = ones[hundreds] + " hundred"
    if remainder == 0
      text
    else
      text + " " + under_hundred(remainder)
    end
  end
end

def number_name(number)
  if number < 1000
    under_thousand(number)
  else
    thousands = number / 1000
    remainder = number % 1000
    text = under_thousand(thousands) + " thousand"
    if remainder == 0
      text
    else
      text + " " + under_thousand(remainder)
    end
  end
end

def run
  {
    zero: number_name(0),
    forty_two: number_name(42),
    three_hundred_five: number_name(305),
    nine_hundred_ninety_nine: number_name(999),
    twelve_thousand_three_hundred_four: number_name(12304)
  }
end
Output
Press run to execute run from this example.
rosetta-code popular strings formatting math browser-runner