Sha256: 2dde6208baa7d60d2a29b694d774c040efd67d976e6ceb48ebe9ad67107344a6

Contents?: true

Size: 1.12 KB

Versions: 396

Compression:

Stored size: 1.12 KB

Contents

class Board(rows: List[String]) {
  lazy val annotate: List[String] =
    (for (y <- 0 until numRows) yield annotateRow(y)).toList

  private lazy val numRows = rows.length
  private lazy val numCols = if (rows.isEmpty) 0 else rows.head.length
  private lazy val boardVector = rows.toVector.map(_.toVector)

  private def annotateRow(y: Int) =
    (for (x <- 0 until numCols) yield annotateSquare(x, y)).mkString

  private def annotateSquare(x: Int, y: Int) =
    if (hasMine(x, y)) mineChar
    else neighborsWithMines(x, y) match {
      case 0 => ' '
      case n => (n + '0').toChar
    }

  private def neighborsWithMines(x: Int, y: Int) = (for (
    yNeighbor <- Math.max(0, y - 1) to Math.min(numRows - 1, y + 1);
    xNeighbor <- Math.max(0, x - 1) to Math.min(numCols - 1, x + 1)
      if (yNeighbor != y || xNeighbor != x) && hasMine(xNeighbor, yNeighbor)
  ) yield Unit).length

  private def hasMine(x: Int, y: Int) = isMineChar(boardVector(y)(x))
  private def isMineChar(c: Char) = c == mineChar
  private val mineChar = '*'
}

object Minesweeper {
  def annotate(board: List[String]): List[String] = new Board(board).annotate
}

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.179 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.178 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.177 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.176 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.175 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.174 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.173 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.172 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.171 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.170 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.169 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.167 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.166 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.165 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.164 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.163 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.162 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.161 tracks/scala/exercises/minesweeper/example.scala
trackler-2.2.1.160 tracks/scala/exercises/minesweeper/example.scala