ぜのぜ

しりとりしようぜのぜのぜのぜ

55日目

日記

きょうはよくなかった

今日書いたコード

struct Chessboard {
    let boardColors: [Bool] = {
        var temporaryBoard: [Bool] = []
        var isBlack = false
        for i in 1...8 {
            for j in 1...8 {
                temporaryBoard.append(isBlack)
                isBlack = !isBlack
            }
            isBlack = !isBlack
        }
        return temporaryBoard
    }()
    func squareIsBlackAt(row: Int, column: Int) -> Bool {
        return boardColors[(row * 8) + column]
    }
}

let board = Chessboard()
print(board.squareIsBlackAt(row: 0, column: 1)) // true
print(board.squareIsBlackAt(row: 7, column: 7)) // false

初めて知ったこと

swift-bookからは特になし.

今日正規表現を使って数字を抜き出すコードを書いていたんだけど,\d[0-9]でマッチする文字が違うというのを知った.

Swiftの正規表現における\dUnicodeのNdと呼ばれるGeneral Category(このpdfのTable 4-4に一覧がある)にマッチするMetacharacterである.例えば,以下のコードを実行すると12345١٢٣٤٥が出力される.これは١٢٣٤٥アラビア文字圏で数字を表すのに使われる文字で,Ndに含まれるから.

let str = "abcde12345١٢٣٤٥"
let regex = try! NSRegularExpression(pattern: "(\\d+)")
let result = regex.firstMatch(in: str, range: .init(location: 0, length: str.count))!
str[Range(result.range, in: str)!] // 12345١٢٣٤٥

[0-9]0, 1, 2, 3, 4, 5, 6, 7, 8, 9にだけマッチするなにか(正式名称を調べる気力はなかった)である.今回の用途にはこちらのほうが合っているのでこちらを採用した.

let str = "abcde12345١٢٣٤٥"
let regex = try! NSRegularExpression(pattern: "([0-9]+)")
let result = regex.firstMatch(in: str, range: .init(location: 0, length: str.count))!
str[Range(result.range, in: str)!] // 12345

この記事がわかりやすい.