-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathContents.swift
97 lines (75 loc) · 3.01 KB
/
Contents.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//: [上一道题](@previous)
/*:
# 车的可用捕获量
- 题号:[999](https://leetcode-cn.com/problems/available-captures-for-rook/)
- 难度:简单
- 描述:
在一个 8 x 8 的棋盘上,有一个白色车(rook)。
也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。
它们分别以字符 `R`,`.`,`B` 和 `p` 给出。大写字符表示白棋,小写字符表示黑棋。
车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到 达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。
另外,车不能与其他友方(白色)象进入同一个方格。
返回车能够在一次移动中捕获到的卒的数量。
*/
//: ## Code
import Foundation
func numRookCaptures(_ board: [[Character]]) -> Int {
var result = 0
for i in 0 ..< board.count {
for j in 0 ..< board[i].count {
guard board[i][j] == "R" else { continue }
let cal: (Character) -> Bool = {
if $0 == "B" { return true }
if $0 == "p" {
result += 1
return true
}
return false
}
for n in (0 ..< i).reversed() { if cal(board[n][j]) { break } } // 左侧
for n in (i + 1 ..< board[i].count) { if cal(board[n][j]) { break } } // 右侧
for n in (0 ..< j).reversed() { if cal(board[i][n]) { break } } // 上侧
for n in (j + 1 ..< board.count) { if cal(board[i][n]) { break } } // 下侧
break
}
}
return result
}
//: ## Test
print(numRookCaptures( // 3
[
[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".","R",".",".",".","p"],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."]
]
))
print(numRookCaptures( // 0
[
[".",".",".",".",".",".",".","."],
[".","p","p","p","p","p",".","."],
[".","p","p","B","p","p",".","."],
[".","p","B","R","B","p",".","."],
[".","p","p","B","p","p",".","."],
[".","p","p","p","p","p",".","."],
[".",".",".",".",".",".",".","."],
[".",".",".",".",".",".",".","."]
]
))
print(numRookCaptures( // 3
[
[".",".",".",".",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".","p",".",".",".","."],
["p","p",".","R",".","p","B","."],
[".",".",".",".",".",".",".","."],
[".",".",".","B",".",".",".","."],
[".",".",".","p",".",".",".","."],
[".",".",".",".",".",".",".","."]
]
))
//: [下一道题](@next)