diff -r 6e93040e3378 -r cdfa6a293453 main_templates4/knight1.scala --- a/main_templates4/knight1.scala Sat Oct 08 00:30:51 2022 +0100 +++ b/main_templates4/knight1.scala Tue Nov 01 15:03:48 2022 +0000 @@ -9,22 +9,19 @@ // templates below. Also have a look whether the functions // at the end of the file are of any help. - - type Pos = (Int, Int) // a position on a chessboard type Path = List[Pos] // a path...a list of positions -//(1) Complete the function that tests whether the position x -// is inside the board and not yet element in the path. +// ADD YOUR CODE BELOW +//====================== + + +//(1) def is_legal(dim: Int, path: Path, x: Pos) : Boolean = ??? - -//(2) Complete the function that calculates for a position x -// all legal onward moves that are not already in the path. -// The moves should be ordered in a "clockwise" manner. - +//(2) def legal_moves(dim: Int, path: Path, x: Pos) : List[Pos] = ??? @@ -38,21 +35,12 @@ //assert(legal_moves(8, List((6,6)), (7,7)) == List((6,5), (5,6))) -//(3) Complete the two recursive functions below. -// They exhaustively search for knight's tours starting from the -// given path. The first function counts all possible tours, -// and the second collects all tours in a list of paths. - +// (3) def count_tours(dim: Int, path: Path) : Int = ??? def enum_tours(dim: Int, path: Path) : List[Path] = ??? - -//(4) Implement a first-function that finds the first -// element, say x, in the list xs where f is not None. -// In that case Return f(x), otherwise None. If possible, -// calculate f(x) only once. - +// (4) def first(xs: List[Pos], f: Pos => Option[Path]) : Option[Path] = ??? @@ -64,10 +52,7 @@ //first(List((1, 0),(2, 0),(3, 0)), foo) // None -//(5) Implement a function that uses the first-function from (4) for -// trying out onward moves, and searches recursively for a -// knight tour on a dim * dim-board. - +//(5) def first_tour(dim: Int, path: Path) : Option[Path] = ???