-
def isSafe(col: Int, row: Int, queens: List[Int]): Boolean = {
def isSafeRightDiagonal(col: Int, queens: List[Int]): Boolean = queens match {
case List() => true
case head::q => (!(head == col+1) && isSafeRightDiagonal(col+1, q));
}
def isSafeLeftDiagonal(col: Int, queens: List[Int]): Boolean = queens match {
case List() => true
case head::q => (!(head == col-1) && isSafeLeftDiagonal(col-1, q));
}
if(queens.contains(col)) return false
return isSafeLeftDiagonal(col, queens) && isSafeRightDiagonal(col,queens);
}
lub
def queens(n: Int): List[List[Int]] = {
def placeQueens(k: Int): List[List[Int]] =
if (k == 0) List(List())
else for { queens <- placeQueens(k-1)
column <- List.range(1, n+1)
if isSafe(column, queens, 1) } yield column :: queens
placeQueens(n)
}
def isSafe(col: Int, queens: List[Int], delta: Int):Boolean={
queens match {
case List() => true
case y :: ys => if (col != y && col != y+delta && col != y-delta) isSafe(col,ys,delta+1)
else false
}
}
-
def flatten[A](xss: List[List[A]]): List[A] = {
var acc = List();
return for(xs <-xss; x<-xs; acc<-x::acc) yield acc;
}
def main(args: Array[String]) = {
val diag3 = List(List(1, 0, 0), List(0, 1, 0), List(0, 0, 1))
Console.print(flatten[Int](diag3));
}
-
def flatten[A](xss: List[List[A]]) : List[A]=
for { li <- xss
el <- li } yield el
-
def findBird (books: List[Book]) =
books.foldLeft (List[String]()) ((aku, el) =>
if (el.authors.exists(a => a startsWith "Bird")) el.title :: aku
else aku)
def findProgram (books: List[Book]) =
books.foldLeft (List[String]()) ((aku, el) =>
if ((el.title indexOf "Program") >= 0) el.title :: aku
else aku)
-
def repeatLoop ( command: => Unit ) ( condition: => Boolean ) : Unit = {
command
if (condition)
repeatLoop (command) (condition)
}
def until (condition: => Boolean) = condition
var x = 5
repeatLoop { println(x); x = x-1 } ( x > 0 )
repeatLoop { println(x); x = x+1 } (until ( x < 5 ))
-