Conway's Game of Life: Difference between revisions
no edit summary
LalaithMeren (talk | contribs) No edit summary |
|||
Line 4,657:
=={{header|Chapel}}==
Compile and run with <code>chpl gol.chpl; ./gol --gridWidth [x] --gridHeight [y]</code>.
<syntaxhighlight lang="chapel">
config const gridHeight : int = 3;
config const gridWidth : int = 3;
enum
class ConwaysGameofLife
{
var gridDomain : domain(2, int);
var computeDomain : subdomain(gridDomain);
var grid : [gridDomain] state;
proc init(height : int, width : int)
{
this.gridDomain = {0..#height+2, 0..#width+2};
this.computeDomain = this.gridDomain.expand(-1);
}
proc step() : void
{
var tempGrid: [this.computeDomain] state;
forall (i,j) in this.computeDomain
{
var isAlive = this.grid[i,j] == state.alive;
var numAlive = (+ reduce this.grid[i-1..i+1, j-1..j+1]:int) - if isAlive then 1 else 0;
tempGrid[i,j] = if ( (2 == numAlive && isAlive) || numAlive == 3 ) then state.alive else state.dead ;
}
this.grid[this.computeDomain] = tempGrid;
}
proc this(i : int, j : int) ref : state
{
return this.grid[i,j];
}
proc prettyPrint() : string
{
var str : string;
for i in this.gridDomain.dim(0)
{
if i == 0 || i == gridDomain.dim(0).last
{
for j in this.gridDomain.dim(1)
{
str += "-";
}
}
else
{
for j in this.gridDomain.dim(1)
{
if j == 0 || j == this.gridDomain.dim(1).last
{
str += "|";
}
else
{
str += if this.grid[i,j] == state.alive then "#" else " ";
}
}
}
str += "\n";
}
return str;
}
}
proc main()
{
game[gridHeight/2 + 1, gridWidth/2 ] = state.alive;
game[gridHeight/2 + 1, gridWidth/2 + 1 ] = state.alive;
game[gridHeight/2 + 1, gridWidth/2 + 2 ] = state.alive;
for i in 1..3
{
writeln(game.prettyPrint());
game.step();
}
}
</syntaxhighlight>
|