Skip to content

Instantly share code, notes, and snippets.

@stevenheidel
Created November 3, 2010 23:45
Show Gist options
  • Select an option

  • Save stevenheidel/661905 to your computer and use it in GitHub Desktop.

Select an option

Save stevenheidel/661905 to your computer and use it in GitHub Desktop.
Calculate the aronson numbers
# Works from 1 - 999
# Recursively convert to cardinal numbers
def cardinal(num)
case num
when 0 then return ""
when 1 then return "one"
when 2 then return "two"
when 3 then return "three"
when 4 then return "four"
when 5 then return "five"
when 6 then return "six"
when 7 then return "seven"
when 8 then return "eight"
when 9 then return "nine"
when 10 then return "ten"
when 11 then return "eleven"
when 12 then return "twelve"
when 13 then return "thirteen"
when 14 then return "fourteen"
when 15 then return "fifteen"
when 16 then return "sixteen"
when 17 then return "seventeen"
when 18 then return "eighteen"
when 19 then return "nineteen"
end
return "twenty" + cardinal(num-20) if (num < 30)
return "thirty" + cardinal(num-30) if (num < 40)
return "forty" + cardinal(num-40) if (num < 50)
return "fifty" + cardinal(num-50) if (num < 60)
return "sixty" + cardinal(num-60) if (num < 70)
return "seventy" + cardinal(num-70) if (num < 80)
return "eighty" + cardinal(num-80) if (num < 90)
return "ninety" + cardinal(num-90) if (num < 100)
return cardinal(num/100) + "hundred" + cardinal(num%100)
end
# Works from 1 - 999999
# Recursively convert to ordinal numbers
def ordinal(num)
case num
when 0 then return ""
when 1 then return "first"
when 2 then return "second"
when 3 then return "third"
when 4 then return "fourth"
when 5 then return "fifth"
when 6 then return "sixth"
when 7 then return "seventh"
when 8 then return "eighth"
when 9 then return "ninth"
when 10 then return "tenth"
when 11 then return "eleventh"
when 12 then return "twelfth"
when 13 then return "thirteenth"
when 14 then return "fourteenth"
when 15 then return "fifteenth"
when 16 then return "sixteenth"
when 17 then return "seventeenth"
when 18 then return "eighteenth"
when 19 then return "nineteenth"
when 20 then return "twentieth"
when 30 then return "thirtieth"
when 40 then return "fortieth"
when 50 then return "fiftieth"
when 60 then return "sixtieth"
when 70 then return "seventieth"
when 80 then return "eightieth"
when 90 then return "ninetieth"
end
return cardinal(20) + ordinal(num-20) if (num < 30)
return cardinal(30) + ordinal(num-30) if (num < 40)
return cardinal(40) + ordinal(num-40) if (num < 50)
return cardinal(50) + ordinal(num-50) if (num < 60)
return cardinal(60) + ordinal(num-60) if (num < 70)
return cardinal(70) + ordinal(num-70) if (num < 80)
return cardinal(80) + ordinal(num-80) if (num < 90)
return cardinal(90) + ordinal(num-90) if (num < 100)
return cardinal(num/100) + "hundredth" if (num < 1000) and (num % 100 == 0)
return cardinal(num/100) + "hundred" + ordinal(num%100) if (num < 1000)
return cardinal(num/1000) + "thousandth" if (num % 1000 == 0)
return cardinal(num/1000) + "thousand" + ordinal(num%1000)
end
#862623
MAX = 100000
# Store all aronsons in an array
aronsons = []
index = 0
# Start the sentence
sentence = "tisthe"
#sentence = File.read("cached_aronson_sentence.txt")
# Calculate all the aronson numbers
MAX.times do
index = sentence.index(?t, index) + 1
sentence << ordinal(index) unless sentence.length > 1000000
aronsons << index
end
#puts sentence
puts aronsons[MAX-1]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment