| author | Christian Urban <urbanc@in.tum.de> | 
| Thu, 22 Nov 2018 17:19:23 +0000 | |
| changeset 213 | 5a5acaf4b32b | 
| parent 98 | 44a20e85dd38 | 
| permissions | -rw-r--r-- | 
| 86 | 1 | |
| 2 | import scala.concurrent._ | |
| 3 | import scala.concurrent.duration._ | |
| 4 | import ExecutionContext.Implicits.global | |
| 5 | import scala.language.postfixOps | |
| 6 | ||
| 7 | ||
| 8 | def add_pair_urban(x: Pos)(y: Pos): Pos = | |
| 9 | (x._1 + y._1, x._2 + y._2) | |
| 10 | ||
| 11 | def is_legal_urban(dim: Int, path: Path)(x: Pos): Boolean = | |
| 12 | 0 <= x._1 && 0 <= x._2 && x._1 < dim && x._2 < dim && !path.contains(x) | |
| 13 | ||
| 14 | def moves_urban(x: Pos): List[Pos] = | |
| 15 | List(( 1, 2),( 2, 1),( 2, -1),( 1, -2), | |
| 16 | (-1, -2),(-2, -1),(-2, 1),(-1, 2)).map(add_pair_urban(x)) | |
| 17 | ||
| 18 | def legal_moves_urban(dim: Int, path: Path, x: Pos): List[Pos] = | |
| 19 | moves_urban(x).filter(is_legal_urban(dim, path)) | |
| 20 | ||
| 21 | def correct_urban(dim: Int)(p: Path): Boolean = p match {
 | |
| 22 | case Nil => true | |
| 23 | case x::Nil => true | |
| 24 | case x::y::p => | |
| 25 | if (legal_moves_urban(dim, p, y).contains(x)) correct_urban(dim)(y::p) else false | |
| 26 | } | |
| 27 | ||
| 97 | 28 | def correct_closed_urban(dim: Int)(p: Path) = | 
| 29 | correct_urban(6)(p) && moves_urban(p.head).contains(p.last) | |
| 86 | 30 | |
| 31 | lazy val f = Future {
 | |
| 32 | ||
| 97 | 33 | val tsc = first_closed_tour_heuristic(6, List((3, 3))).get | 
| 87 
9384b8c98014
updatd
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
86diff
changeset | 34 | assert(correct_closed_urban(6)(tsc) == true) | 
| 86 | 35 | |
| 36 | } | |
| 37 | ||
| 38 | Await.result(f, 300 second) |