Skip to content

Instantly share code, notes, and snippets.

@speedcom
Created April 19, 2016 17:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save speedcom/37759346f146fbb814b5ffb49dbe7dbb to your computer and use it in GitHub Desktop.
Save speedcom/37759346f146fbb814b5ffb49dbe7dbb to your computer and use it in GitHub Desktop.
sealed trait Mark
case object Circle extends Mark
case object Cross extends Mark
case class Board(array: Array[Array[Mark]]) {
lazy val cols: Array[Array[Mark]] = {
val col1 = Array(array(0)(0), array(1)(0), array(2)(0))
val col2 = Array(array(0)(1), array(1)(1), array(2)(1))
val col3 = Array(array(0)(2), array(1)(2), array(2)(2))
Array(col1, col2, col3)
}
lazy val firstRow = array(0)
lazy val secondRow = array(1)
lazy val thirdRow = array(2)
lazy val firstCol = cols(0)
lazy val secondCol = cols(1)
lazy val thirdCol = cols(2)
lazy val firstCross = Array(firstRow(0), secondRow(1), thirdRow(2))
lazy val secondCross = Array(firstRow(2), secondRow(1), thirdRow(0))
}
object Check {
def inRows(board: Board, mark: Mark): Boolean = {
lazy val inRow1 = board.firstRow.forall(_ == mark)
lazy val inRow2 = board.secondRow.forall(_ == mark)
lazy val inRow3 = board.thirdRow.forall(_ == mark)
inRow1 || inRow2 || inRow3
}
def inCols(board: Board, mark: Mark): Boolean = {
lazy val inCol1 = board.firstCol.forall(_ == mark)
lazy val inCol2 = board.secondCol.forall(_ == mark)
lazy val inCol3 = board.thirdCol.forall(_ == mark)
inCol1 || inCol2 || inCol3
}
def inCross(board: Board, mark: Mark): Boolean = {
lazy val inCross1 = board.firstCross.forall(_ == mark)
lazy val inCross2 = board.secondCross.forall(_ == mark)
inCross1 || inCross2
}
}
val array: Array[Array[Mark]] = Array(
Array(Cross, Cross, Cross),
Array(Cross, Cross, Circle),
Array(Cross, Circle, Cross)
)
assert(Check.inRows(Board(array), Cross) == true)
assert(Check.inCols(Board(array), Cross) == true)
assert(Check.inCross(Board(array), Cross) == true)
assert(Check.inCross(Board(array), Circle) == false)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment