#124
Analyze Reversi
 

Difficulty:Hard
Topics:game


Reversi is normally played on an 8 by 8 board. In this problem, a 4 by 4 board is represented as a two-dimensional vector with black, white, and empty pieces represented by ‘b, ‘w, and ‘e, respectively. Create a function that accepts a game board and color as arguments, and returns a map of legal moves for that color. Each key should be the coordinates of a legal move, and its value a set of the coordinates of the pieces flipped by that move. Board coordinates should be as in calls to get-in. For example, [0 1] is the topmost row, second column from the left.
test not run
(= {[1 3] #{[1 2]}
                       [0 2] #{[1 2]}
                       [3 1] #{[2 1]}
                       [2 0] #{[2 1]}}
                      (__ '[[e e e e]
                                 [e w b e]
                                 [e b w e]
                                 [e e e e]] 'w))
test not run
(= {[3 2] #{[2 2]}
                       [3 0] #{[2 1]}
                       [1 0] #{[1 1]}}
                      (__ '[[e e e e]
                                 [e w b e]
                                 [w w w e]
                                 [e e e e]] 'b))
test not run
(= {[0 3] #{[1 2]}
                       [1 3] #{[1 2]}
                       [3 3] #{[2 2]}
                       [2 3] #{[2 2]}}
                      (__ '[[e e e e]
                                 [e w b e]
                                 [w w b e]
                                 [e e b e]] 'w))
test not run
(= {[0 3] #{[2 1] [1 2]}
                       [1 3] #{[1 2]}
                       [2 3] #{[2 1] [2 2]}}
                      (__ '[[e e w e]
                                 [b b w e]
                                 [b w w e]
                                 [b w w w]] 'b))
test not run
(= {[0 3] #{[2 1] [1 2]}
                       [1 3] #{[1 2]}
                       [2 3] #{[2 1] [2 2]}}
                      (__ '[[e e w e]
                                 [b b w e]
                                 [b w w e]
                                 [b w w w]] 'b))


Code which fills in the blank: