0
我正在嘗試解決Scala中的GameOfLife問題,我有一個infinte網格。我試圖將網格表示爲一組單元(x,y)。當我讀從說字符串我開始在(0,0)。 但由於GameOfLife的規律,並且因爲我在應用規則到我的Generation類後正在考慮無限網格,所以我想要打印當前代。如何在Scala中查找笛卡爾座標的最小值和最大值
在這裏,我不知道如何計算最小位置(讀取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 here是一個Set [Cell]其中Cell是Cell(x,y)的一個case類。