我正在尝试在有无限网格的 Scala 中解决 GameOfLife 问题。我试图将网格表示为一组单元格(x,y)。当我从说字符串中读取时,我从 (0,0) 开始。但是由于 GameOfLife 的规律,并且由于我在将规则应用于我的 Generation 类之后正在考虑 Infinite Grid,所以我想打印当前一代。
在这里,我不知道如何计算最小位置(读取 x,y 迭代器)从哪里开始迭代和打印“X”代表活细胞和“-”代表那一代的 GameOfLife 中的死细胞。我提供我的天真Generation类的toString方法的解决方案。但我对此一点也不满意。有人可以提出更好的解决方案吗?
override def toString:String =
{
val output:StringBuilder = new StringBuilder();
val minOfRowColumn = for
{
cell <- aliveCells
row = cell.row
column = cell.column
} yield if( row < column ) row else column
val min = minOfRowColumn.min
val maxOfRowColumn = for
{
cell <- aliveCells
row = cell.row
column = cell.column
} yield if( row > column ) row else column
val max = maxOfRowColumn.max
var row = min;
var column = min;
while(row <= max)
{
while(column <= max)
{
if(aliveCells.contains(Cell(row,column)))
{
output.append('X')
}
else
output.append('-')
column = column + 1
}
output.append("\n");
column = min
row = row + 1
}
//remove the last new line addded.
val indexOfNewLine = output.lastIndexOf("\n");
if( -1 != indexOfNewLine )
output.delete(indexOfNewLine,output.length());
return output.toString();
}
这里的 aliveCells 是一个 Set[Cell] ,其中 Cell 是 Cell(x,y) 一个案例类。