LoginSignup
1
1

More than 5 years have passed since last update.

Scalaで8-queens

Last updated at Posted at 2016-07-19

Scalaを忘れていたのでリハビリ。Haskellで書いたものを移植してみたが末端が一個ずれることによるバグを直すのが面倒だった。

object EightQueens {

  def queen(n: Int): List[List[Int]] = n match {
    case 0 => List(List())
    case `n` => for {b <- queen(n - 1); q <- 0 to 7 if safe(q, b)} yield q :: b
  }

  def safe(q: Int, b: List[Int]) = b.indices.forall(i => checks(q, b, i))

  def checks(q: Int, b: List[Int], i: Int) = q != b(i) && (Math.abs(q - b(i)) != i + 1)

  def main(args: Array[String]) {
    val res = queen(8)
    res.foreach(l => println(l))
    println(res.length)
  }

}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1