blob: 1b1a3a904e4ed0fa21c328692cacb95f75b06c97 (
plain)
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
|
#lang racket
(define/contract (num-rook-captures board)
(-> (listof (listof string?)) exact-integer?)
(define (get-rook-space [board-state board])
(for/or ([board-rank (in-list board-state)]
[rank (in-range 0 (length board-state))]
#:when (index-of board-rank "R"))
(list rank (index-of board-rank "R"))))
(define (check-for-capturable-pawns spaces)
(match spaces
[(list _ ... "p" "." ... "R" "." ... "p" _ ...) 2]
[(list _ ... "R" "." ... "p" _ ...) 1]
[(list _ ... "p" "." ... "R" _ ...) 1]
[_ 0]))
(define (check-rank rank [board-state board])
(let ([spaces (list-ref board-state rank)])
(check-for-capturable-pawns spaces)))
(define (check-file file [board-state board])
(let ([spaces (map (curryr list-ref file) board)])
(check-for-capturable-pawns spaces)))
(match (get-rook-space board)
[(list rank file) (+ (check-rank rank)
(check-file file))]))
|