| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Mon, 08 Nov 2021 01:49:28 +0000 | |
| changeset 404 | 5ff7ffa929cc | 
| 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 CW9c._  | 
| 
 
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)  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
4  | 
//type Path = List[Pos]  | 
| 
 
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 ts70_urban = tour_on_mega_board(70, List((0,0))).get  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
28  | 
assert(correct_urban(70)(ts70_urban) == true)  | 
| 
 
048fc6b70776
added main4 marking
 
Christian Urban <christian.urban@kcl.ac.uk> 
parents:  
diff
changeset
 | 
29  |