私はScintでGameOfLifeを解決しようとしています。私はセル(x、y)のセットとしてグリッドを表現しようとしています。私が(0,0)で始まるストリングから読むと。 しかし、GameOfLifeの法則のため、私はGenerationクラスにルールを適用した後、Infinite Gridを検討しているので、現在の世代を印刷したいと思います。Scalaのデカルト座標の最小値と最大値の求め方
ここでは、生き残りセルの 'X'とその世代のGameOfLifeの死んだセルの ' - 'の反復と印刷を開始する場所から最小位置(x、yイテレータを読む)を計算する方法がわかりません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ここで、CellはCell(x、y)のケースクラスであるSet [Cell]です。