1 // Part 1 about finding and counting Knight's tours |
|
2 //================================================== |
|
3 |
|
4 object CW7a { |
|
5 |
|
6 type Pos = (Int, Int) // a position on a chessboard |
|
7 type Path = List[Pos] // a path...a list of positions |
|
8 |
|
9 //(1a) Complete the function that tests whether the position |
|
10 // is inside the board and not yet element in the path. |
|
11 |
|
12 //def is_legal(dim: Int, path: Path)(x: Pos) : Boolean = ... |
|
13 |
|
14 |
|
15 //(1b) Complete the function that calculates for a position |
|
16 // all legal onward moves that are not already in the path. |
|
17 // The moves should be ordered in a "clockwise" manner. |
|
18 |
|
19 //def legal_moves(dim: Int, path: Path, x: Pos) : List[Pos] = ... |
|
20 |
|
21 |
|
22 //some test cases |
|
23 // |
|
24 //assert(legal_moves(8, Nil, (2,2)) == |
|
25 // List((3,4), (4,3), (4,1), (3,0), (1,0), (0,1), (0,3), (1,4))) |
|
26 //assert(legal_moves(8, Nil, (7,7)) == List((6,5), (5,6))) |
|
27 //assert(legal_moves(8, List((4,1), (1,0)), (2,2)) == |
|
28 // List((3,4), (4,3), (3,0), (0,1), (0,3), (1,4))) |
|
29 //assert(legal_moves(8, List((6,6)), (7,7)) == List((6,5), (5,6))) |
|
30 |
|
31 |
|
32 //(1c) Complete the two recursive functions below. |
|
33 // They exhaustively search for knight's tours starting from the |
|
34 // given path. The first function counts all possible tours, |
|
35 // and the second collects all tours in a list of paths. |
|
36 |
|
37 //def count_tours(dim: Int, path: Path) : Int = ... |
|
38 |
|
39 //def enum_tours(dim: Int, path: Path) : List[Path] = ... |
|
40 |
|
41 |
|
42 } |
|