Sha256: 537aa5c3ece172623fed7519747b7baca723ade35716e477e166612b8182314c

Contents?: true

Size: 1.15 KB

Versions: 325

Compression:

Stored size: 1.15 KB

Contents

struct Hexadecimal {

    let hexString: String
    let intValue: Int?

    private static let hexDigits = [
        "0": 0,
        "1": 1,
        "2": 2,
        "3": 3,
        "4": 4,
        "5": 5,
        "6": 6,
        "7": 7,
        "8": 8,
        "9": 9,
        "a": 10,
        "b": 11,
        "c": 12,
        "d": 13,
        "e": 14,
        "f": 15
    ]

    init(_ hexString: String) {
        self.hexString = hexString
        self.intValue = Hexadecimal.getIntFromHexString(hexString)
    }

    private static func getIntFromHexString(_ hexString: String) -> Int? {
        var result = 0
        var multiplier = 1

        let digits = hexString.characters.map { String($0).lowercased() }.reversed()

        for digit in digits {
            guard let intValue = hexDigits[digit] else {
                // Invalid hex string
                return nil
            }

            result += intValue * multiplier
            multiplier *= 16
        }

        return result
    }
}

extension Int {

    init?(_ hex: Hexadecimal) {
        guard let intValue = hex.intValue else {
            return nil
        }

        self = intValue
    }

}

Version data entries

325 entries across 325 versions & 1 rubygems

Version Path
trackler-2.2.1.119 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.118 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.117 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.116 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.115 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.114 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.113 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.111 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.110 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.109 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.108 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.107 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.106 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.105 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.104 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.103 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.102 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.101 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.100 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift
trackler-2.2.1.99 tracks/swift/exercises/hexadecimal/Sources/HexadecimalExample.swift