Skip to content

Instantly share code, notes, and snippets.

@djryanash
Created May 12, 2023 09:24
Show Gist options
  • Save djryanash/3e9c151463d33c2ccbc232a96d8111f0 to your computer and use it in GitHub Desktop.
Save djryanash/3e9c151463d33c2ccbc232a96d8111f0 to your computer and use it in GitHub Desktop.
Roman numerals to Int method
import Foundation
class Solution {
func romanToInt(_ s: String) -> Int {
var stringVar = s
print("stringVar: \(stringVar)")
var num = 0
let validDic = [
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000,
]
let exceptionsDic = [
"IV": 4,
"IX": 9,
"XL": 40,
"XC": 90,
"CD": 400,
"CM": 900
]
var counter = 0
for char in stringVar {
let isValid = validDic.contains(where: { (string, integer) in
string.contains(char)
})
if isValid == false {
print("String does not contain a valid Roman numeral.")
return -1
}
if counter < stringVar.count - 1 {
let isException = exceptionsDic.contains { (string, integer) in
let i = stringVar.index(stringVar.startIndex, offsetBy: counter, limitedBy: stringVar.endIndex)
let j = stringVar.index(stringVar.startIndex, offsetBy: counter + 1, limitedBy: stringVar.endIndex)
var k = stringVar[i!]
let l = stringVar[j!]
var m: String = ""
m.append(k)
m.append(l)
if string.contains(m) == true {
print("true_m: \(m), stringVar: \(stringVar)")
num += exceptionsDic[m]!
//Remove the first two Characters
stringVar.remove(at: i!)
stringVar.remove(at: i!)
print("stringVar: \(stringVar)")
counter = 0
return true
} else {
print("false_m: \(m), stringVar: \(stringVar)")
var charS: String = ""
charS.append(char)
num += validDic[charS]!
//Remove only the first Character
stringVar.remove(at: i!)
print("stringVar: \(stringVar)")
counter = 0
return false
}
}
}
counter += 1
}
return num
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment