バトルアリーナのすべてのボットは突然頭を悩ませ、誰もその理由を説明できません。しかし、彼らがまだ戦うことができる限り誰も気にしません-Brainfuckは彼らがもう理解している唯一の言語ですが。
前回の投稿からしばらく経ちましたので、ついにBrainFuckedBotsForBattlingの勝者を発表します:NyurokiMagicalFantasyで優勝してLymiaAluysiaにおめでとうございます!
スコアボード
| Owner | Bot Score |
|--------------------|-------------------------------|
| LymiaAluysia | NyurokiMagicalFantasy - 600 |
| Sylwester | LethalLokeV2.1 - 585 |
| weston | MickeyV4 - 584 |
| Sp3000 | YandereBot - 538 |
| Comintern | CounterPunch - 512 |
| Sylwester | BurlyBalderV3 - 507 |
| LymiaAluysia | NestDarwin - 493 |
| IstvanChung | Bigger - 493 |
| Manu | DecoyMaster - 489 |
| archaephyrryx | Wut - 478 |
| DLosc | LightfootPlodder - 475 |
| archaephyrryx | 99BottlesOfBats - 461 |
| Sylwester | TerribleThorV2 - 458 |
| MikaLammi | WallE2.0 - 443 |
| Mikescher | MultiVAC - 441 |
| archaephyrryx | Twitcher - 439 |
| Timtech | MetalDetector - 438 |
| AndoDaan | BeatYouMate - 433 |
| csarchon | TheWallmaster - 427 |
| Sparr | SeeSawRush - 412 |
| archaephyrryx | Stitcher - 406 |
| PhiNotPi | RandomOscillator - 403 |
| ccarton | AnybodyThere - 398 |
| Comintern | 2BotsOneCup - 392 |
| kaine | SternBot - 387 |
| PhiNotPi | EvoBot2 - 385 |
| PhiNotPi | EvoBot1 - 381 |
| Brilliand | TimedAttack - 373 |
| Sylwester | ReluctantRanV2 - 373 |
| AndoDaan | PrimesAndWonders - 359 |
| Nax | TruthBot - 357 |
| DLosc | Plodder - 356 |
| weston | FastTrapClearBot - 345 |
| MikaLammi | PolarBearMkII - 340 |
| Sp3000 | ParanoidBot - 336 |
| Moop | Alternator - 319 |
| TestBot | FastClearBot - 302 |
| icedvariables | PyBot - 293 |
| TestBot | DecoyBot - 293 |
| kaine | BestOffense - 291 |
| Geobits | Backtracker - 289 |
| bornSwift | ScribeBot - 280 |
| IngoBuerk | Geronimo - 268 |
| flawr | CropCircleBot - 239 |
| plannapus | CleanUpOnAisleSix - 233 |
| frederick | ConBot - 230 |
| frederick | 128Bot - 222 |
| AndoDaan | EndTitled - 219 |
| PhiNotPi | CloakingDeviceBot - 215 |
| AndoDaan | GetOffMate - 206 |
| DLosc | ScaredyBot - 205 |
| isaacg | CleverAndDetermined - 202 |
| PhiNotPi | CantTouchThis - 202 |
| Moop | StubbornBot - 174 |
| Cruncher | StallBot - 168 |
| IngoBuerk | Gambler - 157 |
| BetaDecay | RussianRoulette - 129 |
| flawr | DoNothingBot - 123 |
| SebastianLamerichs | Dumbot - 115 |
| mmphilips | PacifistBot - 112 |
| SeanD | DontUnderstand - 92 |
| proudHaskeller | PatientBot - 83 |
| frederick | Dumberbot - 70 |
| flawr | MetaJSRandomBot - 68 |
| Darkgamma | TheRetard - 61 |
| BetaDecay | Roomba - 61 |
| BetaDecay | PrussianRoulette - 31 |
| frederick | Dumbestbot - 0 |
2014年9月10日の最終スコア
EDIT6:極端なサイズとランタイムのためにログが破棄されました。の行のコメントを外すことで、自分で生成できますRunThisTournament.py
。
EDIT5:コントローラーに略語処理を実装しました。巨大なランタイムはもうありません。これには、数字と括弧がコメントとして扱われなくなるという副作用があります。注釈付きバージョンを提供する場合は引き続き使用できますが、コードのコメント化されていないバージョンもある場合は非常に役立つので、手動でコメントを削除する必要はありません。ありがとう!
EDIT4:トーナメントがホットネットワークの質問から削除されたため、タイトルを変更しました。これを指摘してくれた@Geobitsに感謝します!
EDIT3:予期しない結果のためにbfプログラムのコメントを削除しましたが、修正する必要があります。コメントの削除に問題がある場合は、報告してください。
EDIT2:非常に遅いコンピューターで不可解なランタイムが発生するため、タイムアウト制限を100000サイクルから10000サイクルに減らしました。とにかく、この点を超えて実行中のゲームの結果を誰も変えていないということではない。
EDIT1:変換スクリプトのバグを修正し、インタープリターがコメント付きプログラムの数字を無視しないようにしました。
説明
これは、BF Joustに触発されたBrainfuckトーナメントです。2つのボット(Brainfuckプログラム)は、メモリテープで表されるアリーナで互いに戦っています。各セルは、-127から128までの値を保持し、制限で折り返すことができます(したがって、128 + 1 = -127)。
有効な手順は、通常のBrainfuckに似ています。つまり、次のことを意味します。
+ : Increment cell at your pointer's location by 1
- : Decrement cell at your pointer's location by 1
> : Move your memory pointer by 1 cell towards the enemy flag
< : Move your memory pointer by 1 cell away from the enemy flag
[ : Jump behind the matching ']'-bracket if the cell at your pointer's location equals 0
] : Jump behind the matching '['-bracket if the cell at your pointer's location is not 0
. : Do nothing
アリーナのサイズは10〜30セルで、各戦闘で擬似ランダムに選択されます。両端には、初期値が128の「フラグ」がありますが、他のすべてのセルはゼロになっています。ボットの目標は、敵のフラグをゼロにする前に2サイクル連続して敵のフラグをゼロにすることです。
各ボットは、自分の視点からセル[0]である自分のフラグで開始します。相手はテープの反対側にいます。
[ 128 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 ]
^ ^
my bot other bot
両方のボットが同時にアクションを実行します。これは1サイクルと見なされます。ゲームは10000サイクル後、または勝利条件の1つに達するとすぐに終了します。プログラムのいずれかが終了すると、ゲームの終了まで何もしなくなりますが、それでも勝つことができます。
勝利条件
ボットは、次のいずれかの条件で勝ちます。
- あなたの敵の旗はあなたの前にゼロにされます
- 敵がテープからポインターを移動します(
>
フラグまたは自分で実行します<
) - 10000サイクル後のフラグの値は、相手のフラグの値よりも0からはるかに離れています
ルール
投稿には、ボットの名前とそのコードを含める必要があります。
- 次の略語構文を使用して、コードを読みやすくすることができます。
- たとえば
(+)*4
、と同じ++++
です。これは、ループロジックが略語ロジックと衝突するため、かっこ内の不一致ブラケットを除くすべての命令に有効です。[-[-[-
代わりに使用してください([-)*3
- たとえば
- 以外のすべての文字
+-><[].
はコメントであるため()*
、略語を除いて無視されます
ルールに従わないボットはトーナメントから除外されます。
- 基本的なBrainfuckのみが許可され、プロシージャまたは算術演算をサポートする他のバリアントは許可されません
- ボットのソースコードに一致しない括弧を含めることはできません
基本的な戦略について自分自身に知らせることができますが、自分のボットに別のコードを使用しないでください。
得点
ボットのスコアは、他のすべてのボットに対する勝利数によって決まります。2つのボット間のエンカウンターは、異なるメモリテープ長の10のマッチで構成され、エンカウンターごとに最大スコアが10ポイントになります。引き分けの結果、この試合のポイントはありません。
制御プログラム
戦闘の全ログとともに、githubで制御プログラムを見つけることができます。リーダーボードは、生成されるとここに投稿されます。
リポジトリを自由にクローンし、自分でボットを他のボットに対して試してみてください。python Arena.py yourbot.bf otherbot.bf
マッチを実行するために使用します。コマンドラインフラグ-m
とで条件を変更でき-t
ます。端末がANSIエスケープシーケンスをサポートしていない場合は、--no-color
フラグを使用して色付き出力を無効にします。
ボットの例
FastClearBot.bf
(>)*9 Since the tape length is at least 10, the first 9 cells can be easily ignored
([ Find a non-zero cell
+++ Increment at first, since it could be a decoy
[-] Set the cell to zero
]> Move on to the next cell
)*21 Repeat this 21 times
DecoyBot.bf
>(+)*10 Set up a large defense in front of your flag
>(-)*10 Set up another one with different polarity
(>+>-)*3 Create some small decoys
(>[-] Move on and set the next cell to zero
. Wait one round, in case it is the enemy's flag
)*21 Repeat this 21 times
FastClearBotは小さなデコイを回避できますが、大きなデコイは回避できないため、DecoyBotはテープ長が10を超えるすべての試合に勝ちます。FastClearBotがDecoyBotに勝つことができる唯一の状況は、敵が大きなおとりを構築する前に敵の旗に達するのに十分な速さである場合です。