Skip to content

Instantly share code, notes, and snippets.

@bradleyyin
Created September 11, 2019 16:14
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 bradleyyin/f699fa2f93472dfca6131078c815bfce to your computer and use it in GitHub Desktop.
Save bradleyyin/f699fa2f93472dfca6131078c815bfce to your computer and use it in GitHub Desktop.
morning code challenge week 10
import Foundation
func doAsTheRomansDoAndNumeralize(_ number: Int) -> String {
guard number > 0 else { return "" }
var romanNumeral = ""
let mRemainder = romanize(number: number, romanNumeral: &romanNumeral, value: 1000, romanSymbol: "M")
let cmRemainder = romanize(number: mRemainder, romanNumeral: &romanNumeral, value: 900, romanSymbol: "CM")
let dRemainder = romanize(number: cmRemainder, romanNumeral: &romanNumeral, value: 500, romanSymbol: "D")
let cdRemainder = romanize(number: dRemainder, romanNumeral: &romanNumeral, value: 400, romanSymbol: "CD")
let cRemainder = romanize(number: cdRemainder, romanNumeral: &romanNumeral, value: 100, romanSymbol: "C")
let xcRemainder = romanize(number: cRemainder, romanNumeral: &romanNumeral, value: 90, romanSymbol: "XC")
let lremainder = romanize(number: xcRemainder, romanNumeral: &romanNumeral, value: 50, romanSymbol: "L")
let xlremainder = romanize(number: lremainder, romanNumeral: &romanNumeral, value: 40, romanSymbol: "XL")
let xremainder = romanize(number: xlremainder, romanNumeral: &romanNumeral, value: 10, romanSymbol: "X")
let ixremainder = romanize(number: xremainder, romanNumeral: &romanNumeral, value: 9, romanSymbol: "IX")
let vremainder = romanize(number: ixremainder, romanNumeral: &romanNumeral, value: 5, romanSymbol: "V")
let ivremainder = romanize(number: vremainder, romanNumeral: &romanNumeral, value: 4, romanSymbol: "IV")
let _ = romanize(number: ivremainder, romanNumeral: &romanNumeral, value: 1, romanSymbol: "I")
return romanNumeral
}
func romanize(number: Int, romanNumeral: inout String, value: Int, romanSymbol: String) -> Int {
let symbol = (number / value)
if symbol > 0 {
for _ in 1...symbol {
romanNumeral.append(romanSymbol)
}
}
return number % value
}
doAsTheRomansDoAndNumeralize(2500) //return MMD
doAsTheRomansDoAndNumeralize(0) // returns ''
doAsTheRomansDoAndNumeralize(42) // returns XLII
doAsTheRomansDoAndNumeralize(1974) // returns MCMLXXIV
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment