Sha256: 91c4b26315d4b4052b800a7b7c022998670ea4eac8f561ce50c0037245d02e46

Contents?: true

Size: 1.45 KB

Versions: 396

Compression:

Stored size: 1.45 KB

Contents

struct Queens {
    enum InitError: Error {
        case sameSpace
        case incorrectNumberOfCoordinates
        case invalidCoordinates
    }

    let white: [Int]
    let black: [Int]
    var canAttack: Bool {
        return onHorizontal || onVertical || onDiagonal
    }

    private var onHorizontal: Bool {
        return white[0] == black[0]
    }
    private var onVertical: Bool {
        return white[1] == black[1]
    }
    private var onDiagonal: Bool {
        return abs(black[1] - black[0]) == abs(white[1] - white[0])
    }

    init(white: [Int] = [0, 3], black: [Int] = [7, 3]) throws {
        guard white.count == 2 && black.count == 2 else {
            throw InitError.incorrectNumberOfCoordinates
        }

        for number in white + black {
            guard number >= 0 && number <= 7 else {
                throw InitError.invalidCoordinates
            }
        }

        guard white != black else {
            throw InitError.sameSpace
        }

        self.white = white
        self.black = black
    }

}

extension Queens: CustomStringConvertible {
    var description: String {
        let row = [String](repeating: "_", count: 8)
        var board = [[String]](repeating: row, count: 8)

        board[white[0]][white[1]] = "W"
        board[black[0]][black[1]] = "B"

        var rows = [String]()
        for row in board {
            rows.append(row.joined(separator: " "))
        }
        return rows.joined(separator: "\n")
    }
}

Version data entries

396 entries across 396 versions & 1 rubygems

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