Sha256: 5a9333e3dd4cbc5b1b23efbde3f01be11172a7dbed28947b3d78cd11e9ae1c18

Contents?: true

Size: 1014 Bytes

Versions: 107

Compression:

Stored size: 1014 Bytes

Contents

struct IsbnVerifier {

    static func isValid(_ string: String) -> Bool {
        // This will be considerably less awkward after Swift 3 support is dropped
        let cleanedString = string.characters.split(separator: "-").map(String.init).joined()

        guard cleanedString.characters.count == 10 else {
            return false
        }

        var digits = [Int]()

        for character in cleanedString.characters.dropLast() {
            if let digit = Int(String(character)) {
                digits.append(digit)
            } else {
                return false
            }
        }

        if cleanedString.characters.last == "X" {
            digits.append(10)
        } else if let last = cleanedString.characters.last, let digit = Int(String(last)) {
            digits.append(digit)
        } else {
            return false
        }

        let sum = digits.enumerated().reduce(0) {
            return $0 + (10 - $1.offset) * $1.element
        }

        return sum % 11 == 0
    }
}

Version data entries

107 entries across 107 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.179 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.178 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.177 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.176 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.175 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.174 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.173 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.172 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.171 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.170 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.169 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.167 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.166 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.165 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.164 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.163 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.162 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.161 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift
trackler-2.2.1.160 tracks/swift/exercises/isbn-verifier/Sources/IsbnVerifierExample.swift