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

    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"),
]

extension BinaryInteger {

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