| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Mon, 08 Nov 2021 01:39:00 +0000 | |
| changeset 403 | 312c9eb39ad8 | 
| parent 391 | 048fc6b70776 | 
| child 421 | 864107857d27 | 
| permissions | -rw-r--r-- | 
| 
391
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
1  | 
import CW9a._  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
2  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
3  | 
//type Pos = (Int, Int) // a position on a chessboard  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
4  | 
//type Path = List[Pos] // a path...a list of positions  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
5  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
6  | 
def add_pair_urban(x: Pos)(y: Pos): Pos =  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
7  | 
(x._1 + y._1, x._2 + y._2)  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
8  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
9  | 
def is_legal_urban(dim: Int, path: Path)(x: Pos): Boolean =  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
10  | 
0 <= x._1 && 0 <= x._2 && x._1 < dim && x._2 < dim && !path.contains(x)  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
11  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
12  | 
def moves_urban(x: Pos): List[Pos] =  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
13  | 
List(( 1, 2),( 2, 1),( 2, -1),( 1, -2),  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
14  | 
(-1, -2),(-2, -1),(-2, 1),(-1, 2)).map(add_pair_urban(x))  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
15  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
16  | 
def legal_moves_urban(dim: Int, path: Path, x: Pos): List[Pos] =  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
17  | 
moves_urban(x).filter(is_legal_urban(dim, path))  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
18  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
19  | 
def correct_urban(dim: Int)(p: Path): Boolean = p match {
 | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
20  | 
case Nil => true  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
21  | 
case x::Nil => true  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
22  | 
case x::y::p =>  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
23  | 
if (legal_moves_urban(dim, p, y).contains(x)) correct_urban(dim)(y::p) else false  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
24  | 
}  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
25  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
26  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
27  | 
val ts1_urban = first_tour(6, List((0, 0))).get  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
28  | 
assert(correct_urban(6)(ts1_urban) == true)  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
29  | 
|
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
30  | 
val ts2_urban = first_tour(4, List((0, 0)))  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
31  | 
assert(ts2_urban == None)  |