Skip to content

Instantly share code, notes, and snippets.

@baweaver
Created February 6, 2021 10:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save baweaver/ebdc326730fea2f9f57a79053897d116 to your computer and use it in GitHub Desktop.
Save baweaver/ebdc326730fea2f9f57a79053897d116 to your computer and use it in GitHub Desktop.
def roman_numeral(n) = case n
in 1000..3000 then 'M' + roman_numeral(n - 1000)
in 900..999 then 'CM' + roman_numeral(n - 900)
in 500..899 then 'D' + roman_numeral(n - 500)
in 400..499 then 'CD' + roman_numeral(n - 400)
in 100..399 then 'C' + roman_numeral(n - 100)
in 90..99 then 'XC' + roman_numeral(n - 90)
in 50..89 then 'L' + roman_numeral(n - 50)
in 40..49 then 'XL' + roman_numeral(n - 40)
in 10..39 then 'X' + roman_numeral(n - 10)
in 9 then 'IX' + roman_numeral(n - 9)
in 5..9 then 'V' + roman_numeral(n - 5)
in 4 then 'IV' + roman_numeral(n - 4)
in 1..3 then 'I' + roman_numeral(n - 1)
else ''
end
# Shorter variant
def roman_numeral(n) = case n
in 1000..3000 then 'M' + roman_numeral(n - 1000)
in 900.. then 'CM' + roman_numeral(n - 900)
in 500.. then 'D' + roman_numeral(n - 500)
in 400.. then 'CD' + roman_numeral(n - 400)
in 100.. then 'C' + roman_numeral(n - 100)
in 90.. then 'XC' + roman_numeral(n - 90)
in 50.. then 'L' + roman_numeral(n - 50)
in 40.. then 'XL' + roman_numeral(n - 40)
in 10.. then 'X' + roman_numeral(n - 10)
in 9 then 'IX' + roman_numeral(n - 9)
in 5.. then 'V' + roman_numeral(n - 5)
in 4 then 'IV' + roman_numeral(n - 4)
in 1.. then 'I' + roman_numeral(n - 1)
else ''
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment