Created
October 16, 2010 06:12
-
-
Save aharisu/629501 to your computer and use it in GitHub Desktop.
Life game in Scala ver Iterator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import _root_.scala.util.Random | |
def lifeGameIterator(stride:Int) = new Iterator[Array[Array[Boolean]]] { | |
private def pathFilter(num : Int) = num | |
private def prevFilter(num : Int) = if(num == 0) stride - 1 else num - 1 | |
private def nextFilter(num : Int) = if(num == stride - 1) 0 else num + 1 | |
private def cellArriveGetter(xFilter:(Int)=>Int, yFilter: (Int)=>Int) | |
(cells:Array[Array[Boolean]], x:Int, y:Int) = cells(yFilter(y))(xFilter(x)) | |
private val _isArriveGetter = List( | |
cellArriveGetter(prevFilter, prevFilter)_ , cellArriveGetter(pathFilter, prevFilter)_ , cellArriveGetter(nextFilter, prevFilter)_ , | |
cellArriveGetter(prevFilter, pathFilter)_ , cellArriveGetter(nextFilter, pathFilter)_ , | |
cellArriveGetter(prevFilter, nextFilter)_,cellArriveGetter(pathFilter, nextFilter)_,cellArriveGetter(nextFilter, nextFilter)_) | |
private var _cells = Array.tabulate(stride, stride)((_,_) => Random.nextInt % 5 == 0) | |
def hasNext = true | |
def next:Array[Array[Boolean]] = { | |
_cells.zipWithIndex.map(row => row._1.zipWithIndex.map(cell => { | |
val count = _isArriveGetter.foldLeft(0)((acc, f) => acc + (if(f(_cells, cell._2, row._2)) 1 else 0)) | |
count == 3 || count == 2 && cell._1 | |
})) | |
} | |
} | |
lifeGameIterator(30).foreach(cells => { | |
cells.foreach(row => { | |
row.foreach(cell => {print(if(cell) "●" else "○")}) | |
println | |
}) | |
println | |
Thread.sleep(500) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment