Wireworld: Difference between revisions
Added Delphi example
m (Corrected spacing inconsistency.) |
MaiconSoft (talk | contribs) (Added Delphi example) |
||
Line 1,281:
. ....
.. </pre>
=={{header|Delphi}}==
{{libheader| System.SysUtils}}
{{libheader| System.IOUtils}}
{{Trans|Go}}
<lang Delphi>
program Wireworld;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
System.IOUtils;
var
rows, cols: Integer;
rx, cx: Integer;
mn: TArray<Integer>;
procedure Print(grid: TArray<byte>);
begin
writeln(string.Create('_', cols * 2), #10);
for var r := 1 to rows do
begin
for var c := 1 to cols do
begin
if grid[r * cx + c] = 0 then
write(' ')
else
write(' ', chr(grid[r * cx + c]));
end;
writeln;
end;
end;
procedure Step(var dst: TArray<byte>; src: TArray<byte>);
begin
for var r := 1 to rows do
begin
for var c := 1 to cols do
begin
var x := r * cx + c;
dst[x] := src[x];
case chr(dst[x]) of
'H':
dst[x] := ord('t');
't':
dst[x] := ord('.');
'.':
begin
var nn := 0;
for var n in mn do
if src[x + n] = ord('H') then
inc(nn);
if (nn = 1) or (nn = 2) then
dst[x] := ord('H');
end;
end;
end;
end;
end;
procedure Main();
const
CONFIG_FILE = 'ww.config';
begin
if not FileExists(CONFIG_FILE) then
begin
Writeln(CONFIG_FILE, ' not exist');
exit;
end;
var srcRows := TFile.ReadAllLines(CONFIG_FILE);
rows := length(srcRows);
cols := 0;
for var r in srcRows do
begin
if Length(r) > cols then
cols := length(r);
end;
rx := rows + 2;
cx := cols + 2;
mn := [-cx - 1, -cx, -cx + 1, -1, 1, cx - 1, cx, cx + 1];
var _odd: TArray<byte>;
var _even: TArray<byte>;
SetLength(_odd, rx * cx);
SetLength(_even, rx * cx);
FillChar(_odd[0], rx * cx, 0);
FillChar(_even[0], rx * cx, 0);
for var i := 0 to High(srcRows) do
begin
var r := srcRows[i];
var offset := (i + 1) * cx + 1;
for var j := 1 to length(r) do
_odd[offset + j - 1] := ord(r[j]);
end;
while True do
begin
print(_odd);
step(_even, _odd);
Readln;
print(_even);
step(_odd, _even);
Readln;
end;
end;
begin
Main;
{$IFNDEF UNIX} readln; {$ENDIF}
end.</lang>
{{out}}
<pre>__________________
t H
. . . . .
. .
__________________
. t
. H . . .
. .
__________________
. .
. t H . .
. H
__________________
. .
. . t H .
H t
__________________
. .
H . . t H
t .
__________________
H .
t . . . t
. .
__________________
t H
. . . . .
. .
__________________
. t
. H . . .
. .
</pre>
=={{header|Elena}}==
|