     tags: [.api, .String, .algorithm])
 ]
 
-let romanTable: [(Int, String)] = [
-  (1000, "M"),
-  (900, "CM"),
-  (500, "D"),
-  (400, "CD"),
-  (100, "C"),
-  (90, "XC"),
-  (50, "L"),
-  (40, "XL"),
-  (10, "X"),
-  (9, "IX"),
-  (5, "V"),
-  (4, "IV"),
-  (1, "I"),
+let romanTable: DictionaryLiteral<String, Int> = [
+  "M": 1000,
+  "CM": 900,
+  "D": 500,
+  "CD": 400,
+  "C": 100,
+  "XC": 90,
+  "L": 50,
+  "XL": 40,
+  "X": 10,
+  "IX": 9,
+  "V": 5,
+  "IV": 4,
+  "I": 1,
 ]
 
 extension BinaryInteger {

  outer:
    while value > 0 {
      var position = 0
      for i in position ..< romanTable.count {
        let (v, s) = romanTable[i]
        if value >= v {
          result += s
          value -= Self(v)

  outer:
    while !input.isEmpty {
      var position = 0
      for (i, (key: s, value: v)) in romanTable[position...].enumerated() {
        if input.starts(with: s) {
          self += Self(v)
          input = input.dropFirst(s.count)
