フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: BrainFuck
DEKO
管理者
投稿数: 2645
BrainFuck
on: 2013/04/06 12:07 Sat

コンソールアプリ版です。

program bf;

{$APPTYPE CONSOLE}

uses
SysUtils,
Classes;

const
Buf_Len = 30000;
var
Buf, P1, P2: PAnsiChar;
C: AnsiChar;
Dmy: AnsiString;
BCnt: Integer;
SourceFile: TFileName;
Src: TStringList;
begin
Writeln('Brainf*ck 1.00'#$0D#$0A);
if ParamCount = 0 then
begin
Writeln(Format('Usage: %s sourcefile', [ExtractFileName(ParamStr(0))]));
Exit;
end;
SourceFile := ParamStr(1);
if not FileExists(SourceFile) then
begin
Writeln('File not found.');
Exit;
end;
Src := TStringList.Create;
try
Src.LoadFromFile(SourceFile, TEncoding.Default);
Dmy := AnsiString(Src.Text);
finally
Src.Free;
end;
Buf := AllocMem(Buf_Len);
try
P1 := Buf;
P2 := PAnsiChar(Dmy);
repeat
case P2^ of
'>':Inc(P1);
'<':Dec(P1);
'+':Inc(P1^);
'-':Dec(P1^);
'.':Write(P1^);
',':begin
Read(C);
if C = ^Z then
Break
else
P1^ := C;
end;
'[':begin
if P1^ = #$00 then
begin
BCnt := 1;
repeat
Inc(P2);
if P2^ = '[' then
Inc(BCnt)
else if P2^ = ']' then
Dec(BCnt);
until (P2^ = ']') and (BCnt = 0);
end;
end;
']':begin
BCnt := 1;
repeat
Dec(P2);
if P2^ = ']' then
Inc(BCnt)
else if P2^ = '[' then
Dec(BCnt);
until (P2^ = '[') and (BCnt = 0);
Continue;
end;
end;
Inc(P2);
until (P2^ = #$00);
finally
FreeMem(Buf);
end;
end.

 
See Also:
[BrainF*ck]
http://ht-deko.minim.ne.jp/algo006.html

[コミュ障プログラミング言語]
http://www.moonroom.mydns.jp/ls/software/commdis.htm

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.021 sec.