BrainF *** edBotsForBattling-Brainf ***トーナメント


88

バトルアリーナのすべてのボットは突然頭を悩ませ、誰もその理由を説明できません。しかし、彼らがまだ戦うことができる限り誰も気にしません-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に勝つことができる唯一の状況は、敵が大きなおとりを構築する前に敵の旗に達するのに十分な速さである場合です。


5
オリジナル、私はそれが好きです。私はこれが十分な戦略的深さを可能にしないのではないかと心配していますが、それは私だけかもしれません。
ɐɔıʇǝɥʇuʎs

11
これはBefungeでさらに楽しくなります。
IchBinKeinBaum

6
馬上槍試合を実行して視覚化できるBF Jousting Webページを見つけました。
PhiNotPi 14

4
このKOTHをホストしてくれてありがとう、Cipher。非常に多くの提出物で多くの作業をする必要があります。
AndoDaan

3
まだ参加してくれたみんなに感謝します^^
暗号

回答:


18

にゅろきマジカルファンタジー

真剣に取り組むべき時だと思います〜BF Joustプログラムの作成を容易にするために、コンパイラーを少しHLLで仕上げました。これはそれを使って何かを作ろうとする私の最初の真剣な試みでした。ボットのコンセプトは非常にシンプルです。さまざまな極性のデコイをいくつかセットアップしてから、中央にリバースオフセットクリアを備えた大きなウィグルクリアを使用すると、夢中になります。

ああ、ところで、予想されるスコアは最終ラウンドの丘に対して約577ポイントです。それは93%の勝率です。<3

コンパイル済み | ソースコード

Nyuroki Magical Fantasy by Lymia Aluysia
Released under the terms of MIT license

>>>>>>>>++<--<+<--<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+<-------------------------------------------------------------<---------------
----------------------------------------------<++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++<(-)*19(>)*8(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-
[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[
+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-
[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[
-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3
+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[
-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>
[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[
-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*
82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(
-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[
+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+
[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[
+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-
[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[
+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-
[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*
41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[
(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[
-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-
[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[
-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.]
.]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[
-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+
[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[
+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+
[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16
+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+
[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[
-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+
[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[
-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-
[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+
[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-
[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[
-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-
[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82
[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)
*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[
+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(+)*16+[+[+[+
[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[+[+[+[+[+[+[
+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--(>[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[-[-[-[-[-[(
+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+[+[+[+[+[+[
+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]-->[-[-[-[(+)*3+[+[+[(-)*6-[-[-[-[-[
-[-[-[-[-[(+)*16+[+[+[+[+[+[+[+[(-)*24-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[(+)*41+
[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[(+)*82[[+.].]--]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]--)*2]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]--)*3]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]--)*4]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*5]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*6]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*7]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*8]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*9]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]--)*10]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]--)*11]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)
*12]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*13]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*14]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*15]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*16]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]]]]]]]]]]]--)*17]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]]]]]]]]]]]--)*18]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
]]]]]]--)*19]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*
20]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]--)*21

編集:私はニュロキからさらにいくつかの勝利を絞りました。

編集2:ねえ、見て、もう一度やった!

編集3:Arena.pyの愚かな解析バグでしばらく苦労した後、私は最終的に別の改善を得ました〜これは私が「真剣になる時間」を意味していることを知っています。<3


Lokeには調整が必要なようです:-)言語が大好きです。Arena.pyのバグは、数字の間に)*または*数字と数字の間に空白があったということですか?
シルウェスター14

@Sylwesterはるかに悪い。行くべきでないところに行くループ:github.com/redevined/brainfuck/pull/6
Lymia Aluysia 14

#1おめでとうございます。92,5%の勝率は一致するのが難しいでしょう。
シルウェスター14

よくできましたが、この速記による虐待ではありませんか?ネストされたループは、事実上21階乗= 5 * 10 ^ 19です。言い換えれば、基本的なブレインファックに効果的に拡張することはできません。
ウェストン14

1
@westonはい。そして、最も開発されたBF Joustの丘(codu.org/eso/bfjoust/in_egobot-たとえば、smartlockを見てください)上のほとんどのプログラムは、さらに悪化しています。これは一種の速記のポイントなので、特に大したことではありません。そうでないと、長すぎるために実行不可能な戦略が実行可能になります。:)
リミアアルイジア14

43

クローキングデバイスボット

このボットは基本的にそのベースを隠そうとし、他のボットがそれを通り過ぎてテープから移動するようにします。

(-)*127(-+--+-++)*12500

4
非常に賢い、これを説明するためにボットを調整する必要がありました。
ムープ14

2
私の意見では、これはここで最も賢いものの一つです。
アルモ14

最初のクローカーの場合は+ f。Rànを作った後、私はこれに気づきませんでしたが、それは似たようなアイデアで、異なるアプリケーションです。
シルウェスター14

19

Burly Balder v3

Burly Balderは、ミディアムスローラッシュです。ラッシュモードに入る前に、2つの大きなおとりを作成します。ラッシュモードでは、ゼロセルごとに4ステップのみを使用するループがあり、ゼロ以外のセルの場合、[-18,18]のケース分析が行われた後、盲目的に107で減少してからでクリアし[-.]ます。不変フラグは242ステップでクリアされ、114は不確実性よりも多く-*128 、14は単純な[-]クリアよりも少なくなります。セルがクリアされると、彼は-2デコイの痕跡を残し続けます。彼は、サイズ10のゲームのためにいくつかのステップを節約するために、インデックス9専用の特別なケースを持っています。

>((-)*18>)*2                                  Make two minus seventeen decoys
(->)*6                                        Move to cell nine

[                                             special case for ten cell game 
   +[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[       if not minus one to minus eighteen 
   (-)*18                                     decrease by eighteen
   -[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[       if not plus one to plus eighteen
       (-)*107                                decrease by hundred and seven
       [-.]                                   slow clear
   ]]]]]]]]]]]]]]]]]]                         end plus conditionals
   ]]]]]]]]]]]]]]]]]]                         end minus conditionals
]                                             end special case
+
([>                                           while true go right
  [                                           start clear cell 
   +[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[+[       if not minus one to minus eighteen 
   (-)*18                                     decrease by eighteen
   -[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[-[       if not plus one to plus eighteen
       (-)*107                                decrease by hundred and seven
       [-.]                                   slow clear
   ]]]]]]]]]]]]]]]]]]                         end plus conditionals
   ]]]]]]]]]]]]]]]]]]                         end minus conditionals
  ]                                           end clear cell
  --                                          set to minus two 
 ]                                            while true end
 -                                           decrease and loop
)*5                                          In case of clash or initial column minus seven is zero

トリビア:バルダーは北欧の神でありオーディンの息子です。彼は主に彼の死物語で知られています。彼は彼の安全性が怖かったので、他の神々はあらゆる脅威を予測し、遮蔽しようとしました。彼は最終的にロキに殺されました。なぜなら彼らは彼を剣や矢から守ったが、ヤドリギから彼を守るのを忘れていたからです。


2
おとりが私を殺している。よくやった。
AndoDaan

1
@AndoDaanありがとう。あなたBeatYouMateは賢かった。次のラウンドでは、ほとんどのボットのおとりがペナルティを与えるまでさらに大きくなるのではないかと心配しています。その後、おそらくもっとクールな戦略が登場します:)
シルウェスター14

2
おとりのサイズを大きくすると、短いテープでのパフォーマンスと高速の攻撃ボットとのトレードオフが問題になります。10回のランダムラウンドでは、他のエントリが攻撃する速さに応じて変化するスイートスポットが発生する可能性が高くなります。
コミンテルン14

2
うん、あなたはまだ打つ人です。
AndoDaan

4
@AndoDaanたくさんの北欧の神々が私を支えてくれるので、ランダムなアリーナのサイズは私の好みに合っているようです:
シル

13

EvoBot 1

これは、遺伝的アルゴリズムによって作成された単純なボットです。私はテンプレートから始め、私のプログラムはゆっくりと数字を調整して、より良い戦士ボットを作成しました。以下のコードは、読みやすくするために編集されています。

>+>---(>)*6(>[+++[-]])*30

コンテストの他のエントリを使用して、さまざまな候補者の適合度を測定しました。

これがevobotでの最初の試みだったので、簡単なテンプレートから始めました。

>(+)*n>(-)*n(>)*n(>[(+)*n[-]])*30  #template

このボットは、50から60の範囲のスコアを受け取ると予測します。

現在、逆おとりテンプレートに取り組んでいます。

EvoBot 2

これは、同じ遺伝的アルゴリズムで作成されたボットですが、次のテンプレートを使用しています。

>>>>(-)*n<(+)*n<(-)*n<(+)*n(>)*8(>[+++[-]])*30  #template

このボットは、リバースデコイ戦略を使用して、さまざまな高さの4つのデコイを設定します。結果のボットは次のとおりです。

>>>>(-)*4<(+)*6<(-)*7<(+)*8(>)*8(>[+++[-]])*30

私はこの新しいボットが以前のボットよりもうまくいくと期待しており、おそらく70年代にスコアを獲得しています(多くの新しいエントリがあるため、おそらくそれよりもはるかに高いでしょう)。


2
遺伝的アルゴリズムの場合は+1。私は彼らに大きな信仰を持っています。ボットがうまくいくことを願っています。
AndoDaan

12

オルタネーター

ほとんどの人がセルを加算または減算してゼロにすることを想定しているため、平均してすべてのセルは128ターンでゼロになります。

(>+>-)*4>+(>[-][.])*21

注釈付きバージョン

(>+>-)*4       Move eight squares alternating polarity    
>+             Move one more
(
    >          Move to the next square
    [-]        Zero it
    [.]        Wait while it is zero
)*21           Repeat

くそー、あなたの最新の変更は、AlternatorのGeronimoに対する勝率を〜60%から〜90%に改善します。いいね
インゴバーク14

ええ、18回動いたときに(> +>-)* 9だったので、テープから落ちます。愚かな間違い。
ムープ14

セルを交互にゼロに加算/減算してGeronimoを保護しても、勝率はまったく変わりません。オルタネーターはここで勝者として出てくるかもしれません-それはいくつかのサイクルを使用して、かなり難しいクラックを設定します。
インゴ・バーク

ねえ、私が間違っているなら私を修正してください、しかし、ボードが10の長さであるならば、このボットはボードから自動的に動きませんか?ゼロに設定する前に、10個の正方形を移動します。
ボッシュマン14

11

したがって、ここで他の誰かが遺伝的アルゴリズムを使用して、ここでプログラムを作成しようとします。さて...ずっと前に、私はIRCチャンネルの進行中の丘のためにBF Joustエボルバーを書きました。私もこのコンテストで試してみることにしました〜

そして...エボルバーを持っている他の人とは異なり、私のエボルバーは実際に繰り返しカウントよりも多くのプログラムを変更できます。:)

ネストダーウィン(ジェネレーション309)

これは私の進化がこれまでに思いついた最高の結果です。この場合、ネストされた構造がどれだけ役立つかはわかりませんが、このような構造は、Evolverでできることです。27.08.2014 hillで期待されるパフォーマンスは474ポイントです。(21テープ長すべてでバトルを実行し、10/21で乗算することにより計算されます。この丘には1つの追加プログラムがあるという事実のために正規化されていないことに注意してください)

(-)*5(>[(-)*4----[.+]]--((-)*5(>[(-)*4----[.+]]--((-)*5(>[(-)*4----[.+]]--((-)*5(>[(-)*4----[.+]]--)*10000)*10000)*10000)*10000)*10000)*10000)*10000

編集:私はこの丘に入ってみたいプログラムのリストを変更しました。evolverを一晩実行しました。:)


編集2:私は行って手動でevolverの出力を分析しました。見た目は大きく異なりますが、NestDarwinは基本的にTinyDarwinの最適化バージョンです...手動で最小化(同一の機能を使用)し、分析します:

(-)*5                     Break stuff that assumes flag size.
(>[(-)*8[.+]](-)*7)*3     Make a few larger decoys next to our flag. 
                          The clear loop is basically dead code here.
                          Few things are going to approach so fast, so.
(>[(-)*8[.+]](-)*2)*10000 And go on an rampage with an offset clear!
                          I presume the slow clear is to beat tripwires.

したがって、ほぼ同一のプログラムは次のようになります...これは基本的にTinyDarwinの超最適化バージョンです。

(-)*5(>.(-)*7)*3(>[(-)*8[.+]](-)*2)*10000

TinyDarwinは次のとおりでした。それほど違いはありませんか?私はちょうど丘からそれを撤回するつもりです。私はそれがはっきりしていると思ったが、...まあ、私は間違っていた。

((-)*5>[(-)*4.[+.]].)*10000

現在の丘は、はるかに複雑なものを進化させるほど強くないことが明らかになりました。:(


1
おめでとうございます。遺伝的アルゴリズムプログラムは、現在のバージョンをテンプレートとして使用し、さらに改善するために新しいバージョンを継続できますか?
シルウェスター14

最初の場所で素晴らしい仕事。遺伝的アルゴリズム(まあ、そのスポーン)がそこにできてとてもうれしいです!
AndoDaan

我々は、すべてのゲームの結果を取るより進化、いくつかの機械学習を追加することができれば今...それを私たちの哀れな人間は、もはや任意のチャンスがありません:P
SP3000

@Sylwesterの並べ替え?私の内部表現では、(よく考え抜かれた)遺伝子活性化システムを使用しています。これは、上部構造を進化させると考えられています(実際にはそうではありません)。最終的なプログラムを元に戻して内部表現を回復することはできませんが、命令を単一の遺伝子に入れて、それを進化させ続けることはできます(ただし、それで十分です)。
リミアアルイシア14

@ Sp3000残念ながら、よく開発された#esoteric hillでは、私のアルゴリズムはほとんど進歩できません。そのようなことができればいいのですが、残念ながら、遺伝的アルゴリズムのスキルは十分ではありません。いつかエボルバーをリリースして、cleanedいハックをすべてクリーンアップする予定です。
リミアアルイシア14

10

シロクマMk II

ホッキョクグマには2種類あります。閉じ込められる人と他の人を閉じ込める人です。

相手の極性を推測し、その情報を使用して、相手を無限ループにロックします。単純なクリア戦略に対してはうまく機能し、他に対してはいくぶんランダムに機能します。トラップは非常に簡単に回避できるため、後でバックアップ戦略を追加することがあります。

>++>- create polar bear traps
[[]]<
[][
[[]]<
(+)*290 (>)*9  (+)*120 (.+)*16 (<)*9
(+)*112 (>)*10 (+)*120 (.+)*16 (<)*10
(+)*112 (>)*11 (+)*120 (.+)*16 (<)*11
(+)*112 (>)*12 (+)*120 (.+)*16 (<)*12
(+)*111 (>)*13 (+)*120 (.+)*16 (<)*13
(+)*111 (>)*14 (+)*120 (.+)*16 (<)*14
(+)*111 (>)*15 (+)*120 (.+)*16 (<)*15
(+)*110 (>)*16 (+)*120 (.+)*16 (<)*16
(+)*110 (>)*17 (+)*120 (.+)*16 (<)*17
(+)*110 (>)*18 (+)*120 (.+)*16 (<)*18
(+)*109 (>)*19 (+)*120 (.+)*16 (<)*19
(+)*109 (>)*20 (+)*120 (.+)*16 (<)*20
(+)*109 (>)*21 (+)*120 (.+)*16 (<)*21
(+)*108 (>)*22 (+)*120 (.+)*16 (<)*22
(+)*108 (>)*23 (+)*120 (.+)*16 (<)*23
(+)*108 (>)*24 (+)*120 (.+)*16 (<)*24
(+)*107 (>)*25 (+)*120 (.+)*16 (<)*25
(+)*107 (>)*26 (+)*120 (.+)*16 (<)*26
(+)*107 (>)*27 (+)*120 (.+)*16 (<)*27
(+)*106 (>)*28 (+)*120 (.+)*16 (<)*28
(+)*106 (>)*29 (+)*120 (.+)*16 (<)*29
(+)*106 (>)*29 [-]
]<
(-)*290 (>)*9  (+)*120 (.+)*16 (<)*9
(-)*112 (>)*10 (+)*120 (.+)*16 (<)*10
(-)*112 (>)*11 (+)*120 (.+)*16 (<)*11
(-)*112 (>)*12 (+)*120 (.+)*16 (<)*12
(-)*111 (>)*13 (+)*120 (.+)*16 (<)*13
(-)*111 (>)*14 (+)*120 (.+)*16 (<)*14
(-)*111 (>)*15 (+)*120 (.+)*16 (<)*15
(-)*110 (>)*16 (+)*120 (.+)*16 (<)*16
(-)*110 (>)*17 (+)*120 (.+)*16 (<)*17
(-)*110 (>)*18 (+)*120 (.+)*16 (<)*18
(-)*109 (>)*19 (+)*120 (.+)*16 (<)*19
(-)*109 (>)*20 (+)*120 (.+)*16 (<)*20
(-)*109 (>)*21 (+)*120 (.+)*16 (<)*21
(-)*108 (>)*22 (+)*120 (.+)*16 (<)*22
(-)*108 (>)*23 (+)*120 (.+)*16 (<)*23
(-)*108 (>)*24 (+)*120 (.+)*16 (<)*24
(-)*107 (>)*25 (+)*120 (.+)*16 (<)*25
(-)*107 (>)*26 (+)*120 (.+)*16 (<)*26
(-)*107 (>)*27 (+)*120 (.+)*16 (<)*27
(-)*106 (>)*28 (+)*120 (.+)*16 (<)*28
(-)*106 (>)*29 (+)*120 (.+)*16 (<)*29
(-)*106 (>)*29 [-]

(]< (+)*290 (>)*9 ... [-])*2?でコードサイズを半分にできます。
シルウェスター14

@Sylwester他の半分はを使用+し、もう1つはを使用するため、できません-
ミカランミ14

ホッキョクグマは、しかしオフセットクリア...素晴らしいアイデアを非常にうまくやっていません
SP3000

@ Sp3000よろしいですか?いくつかのオフセットと極性([(+)*3[-]]、など[(-)*6[+]])を試してみましたが、うまく機能します(少なくともかなり小さいオフセットの場合)。
ミカランミ14

ああ、私は何が悪いのか知っています:/私は>>>>>>>>>((-)*4[+][--.]>)*21セルをダブルチェックするようなプログラムを試していて、あなた(+/-)*290は2番目の非同期ループを引き起こしていました。オフセットクリアの障害ではありません。
Sp3000 14

10

平和主義者ボット

私のボットは、暴力は決して答えではないと信じており、あらゆる犠牲を払って戦闘を回避しようとします。

(.)*8       Since it takes at least 9 turns for a bot to come to mine, remain idle for 8
>           Skedaddle over one spot
([(>)*8     If a bot has approached, RUN
[(<)*8      If you accidentally ran into a bot, run the other way this time
]].         If it's safe here, chill out
)*6249      keep running until the end of battle, or until tired

8
コメントから '。'を削除してもかまいません。Brainfuckコードとしてカウントされ、ボットが必要以上に遅くなるためです。ドットが意図的なものであれば、お気軽に修正してください!
暗号14

ああ、。
's

9

だれかいませんか?

敵がいつおとりをクリアし始めたかを判断するために、定期的に後ろを振り返り、先へと駆けつけます。

うまくいくように見えますが、それが戦略によるものなのか、クリアする前にすべてのセルに10を加えているだけなのかわかりません。

編集:ロジックの問題を修正しました。Brainfuckプログラムを初めて作成しました。それはその名の通りです。

>>>+<(+)*5<(-)*5>>             Initial defense
[                              While he hasn't passed us yet
  (>[([(+)*10[-]]>)*29])*4     Jump ahead four, checking for enemy
  +                            Front marker
  <<<<                         Check behind
  [                            If he hasn't passed us yet
    >>>
    (+)*5<(-)*5                Set decoys in reverse
    <<[-]                  
  ]
  >>>>                         Check ahead
]                              
([-[(+)*10[-]]]>)*29           Clear to the end

+1:これは、文字列が最初の9セルを超えて(+/- 1以外)デコイすることを目にした最初のボットです。長いテープでは、それはキラーです。...もう少し今ライトフットプロッダーを改装
DLosc

9

ウォールE 2.0

ロケーション9に突入し、128を追加します。相手が初期フラグ値を変更していなければ、サイズ10のアリーナで素早く勝ちます。大きなアリーナでは、これは大きなおとりとして機能します。その後、ロケーション9と自分の旗の間のスペースを大きなおとりで満たします。おとりが配置されると、空ではない場所をスキャンし、それらをすばやく消去しようとします。

バージョン2.0は、より大きなデコイを構築し、初期フラグ値の変更に対するある程度の耐性を備えています。また、物事が困難に見え始めた場合、バックアップ戦略に切り替えることができます。

(>)*9
(+)*128 <
< [ (<)*7 ((-+-)*256)*15 ] > [ (<)*8 ((+-+)*256)*15 ]
(-)*47 < (+)*63 < (-)*72 < (+)*69 <
(-)*84 < (+)*66 < (-)*76 < (+)*66 <
++++ (>)*9 +.+.+.----.-.-. (>[-[++[(+)*124.+.+.+.+.+.+.+.+.>]]])*21

このボットの有効性は、次の2つの事実に基づいています。

  1. ほとんどのボットは、フラグの初期値を変更しません。
  2. 大きなおとりを構築することは、それらをクリアするよりも高速です。

これらの壁は、私を殺している
SP3000

9

Lethal Loke V2.1(ヤドリギ付き)

もちろんこれは致命的なボットであり、彼は美しいBurly Balder aをヤドリギで殺すだけでなく、他のボットに対してほぼ毎回勝ちます。これは中速と高速の両方を組み合わせたラッシュです。私のテストは567のスコアを与えます

戦闘用にコンパイルされたBFJファイル、ラケットBFJジェネレーターソース:

#lang racket
;; bare minimum bfj support
(define (bf . args)
  (apply string-append 
         (map (lambda (x) 
                (if (number? x)
                    (number->string x)
                    x))
              args)))

(define (dup x num)  
  (let loop ((n num) (lst '()))
    (cond ((< n 0) (error "Negative n"))
          ((zero? n) (apply bf lst))
          (else (loop (sub1 n) (cons x lst))))))


;; Useful procedures
(define (wiggle amount default-zero n)
  (let rec ((n n))
    (if (zero? n)
        ""
        (bf "["
            (dup "-[" amount)
            (bf "(+)*" amount)
            (dup "+[" amount)
            default-zero
            ">"
            (rec (sub1 n))
            (dup "]" (* amount 2))
            "]"))))

(define (goto from to)
  (let* ((dst (- to from))
         (op (if (> dst 0) ">" "<"))
         (abs (if (> dst 0) dst (- dst))))
    (if (= from to) 
        ""
        (bf "(" op ")*" abs))))

(define max-position 30)
(define initial-decoy  "(-)*17")
(define small-decoy "(+)*10")
(define large-decoy "(-)*32")
(define flag-position 7)
(define decoy-phase-end-position 14)
(define wiggle-amount 8)
(define plodd-clear "..(+)*120(+.)*27>")
(define plodd-inner-clear (bf "(+)*" 
                              (- 78 wiggle-amount) 
                              "..(+)*42(+.)*27"))
;; Main body of Loke V2
(define (generate-loke2)
  (bf ">" 
      initial-decoy
      ">->+>->+>->"
      (let gen-rec ((n flag-position) (p #t))
        (if (> n decoy-phase-end-position)
            (bf (medium-slow n))
            (bf "[" 
                (medium-slow n)
                "]" 
                (if p small-decoy large-decoy)
                ">"
                (gen-rec (+ n 1) (not p)))))))

;; Retreat goes back to home
;; leaving a trail of flags
;; from flag position
(define (medium-slow last-index)
  (bf (goto last-index 2)
      (let medium-rec ((n 2) (p #f))
        (if (= n flag-position)
                (fast-rush n last-index)
            (bf (if p "-" "+")
                "[" (fast-rush n (max 9 last-index)) "]" 
                (if p small-decoy large-decoy)
                ">"
                (medium-rec (+ n 1) (not p)))))))

(define (fast-rush cur-position last-known)
  (bf (goto cur-position last-known)      
      "([" plodd-clear 
      "("
      (wiggle wiggle-amount
              plodd-inner-clear 
              (- max-position last-known 1))
      ">)*" (- max-position last-known)
      "]>)*" (- max-position last-known)))

(display (generate-loke2))

雑学:Loke(Loki)は北欧神話の神で、みんなと戯れたりtrickしたりするのが好きです。彼はシェイプシフター(動物や人間への)であり、通常は自分の道を進みます。物語の中で彼はしばしば他の神々と一緒に旅行し、他の神々を助け、小さな策略を行い、物をかき立てます。バルダーを殺すことに加えて、彼はヘル(ヘル/ヘルベテの女神)、獣フェンリル、およびラグナロク(北アルマゲドン)を開始するミッドガルドサーペントを生んだ。

使い方

最初に大きな(-17)デコイを作成+-し、インデックス7までパターンを作成します。彼は13から前方にスキャンし、(+ 10、-32)+デコイの痕跡を残しますが、セットを検出すると中止します。中* 1のラッシュモードを開始します。セルが設定されていない場合、slow * 3ラッシュモードも開始します。

* 1ミディアムラッシュモードでは、インデックス7〜13のいずれかで敵の活動を検出し、インデックス2から開始します。一部の敵はゼロを残し、他の値を残します。インデックス2-6(-32、+ 10)+。セルが期待値(-1、1)でない場合、またはすべてのデコイを作成し終えた場合、fast * 2ラッシュモードになります。

* 2彼が検出されたと期待している高速ラッシュモードで、おとりは機能しません。既に設定したものが対戦相手を止め、対戦相手のデコイを駆け抜けることに焦点を合わせることを願っています。彼は、以前のスキャン[9,14]またはそれより前に作成された場合はインデックス9に基づいて、私たちが知っている最も遠い地点で急ぎ始めます。彼は最初のデコイに特別なケースを持っています。120を追加するだけで27になります。トラップの場合は0未満に値を下げたくありませんが、デコイごとに[-8,8] 120、次のセルに進む前に27の手順を実行する

スローラッシュモードは、現在の丘のスコアに影響を与えず、ボットが少し小さくなります(ただし、あまり大きくないため)ため、削除されました。


3
今、私たちは狂気に気づき始めています。私はそれが好きです。
Sp3000 14

@ Sp3000 YandereBotv2は、おとりとスイングの値を増やすだけでなく、新しく考える必要がある理由でした。前ラウンドのすべてのボットよりもハードに対する勝利パーセンタイルが高いため、アリーナのサイズに不運がありました。
シルウェスター14

AHAHA多分-私は常に増加おとりサイズに対する対策が必要だと思う:/私は本当にあなたがが異なるモードを持っているかのような
SP3000

ため息。BF JoustのHLLの動作を改善して、エボルバーが再びチャンスを得られるようにする必要があります。#1おめでとうございます
リミアアルイジア14

@LymiaAluysiaありがとう。Balderにはもっと驚いた。NestDarwin、YandereBot、Mickeyの新しいバージョンを期待しています:
シル

8

ジェロニモ

kaineのBestOffenseボットよりも攻撃性が高く、防御力がありません。ここでの戦略は次のとおりです。他の人は賢いことをしようとしますが、賢いことはサイクルがかかります。それでは、敵がいるとわかっている部分にスキップして、見つかったすべてをクリアしましょう。

(>)*9(>[-])*21

OPのサンプルボットとケインのボットに対してほとんどの試合に勝つようです。


7

SternBot

物事が始まった今、実際の半分深刻なボット これらのボットのいくつかの類似の性質に対処します。

(>->+>)*3(>[+]>[-])*21

1
SternBotは私にパリティの問題を与えます:(
Sp3000 14

7

DoNothingBot

最高の防御(...)は無知です。

.

何もしません。

編集:うわー、私はそれがすべてのボットの少なくとも20%以上よりも良い仕事をしたことを見て驚いた=)(これはそれが優れた戦略を使用することを意味するか...)?


2
他のボットの一部は、小さなアリーナで自殺します。例えば。ギャンブラーはさえに対して、20セルに、それは失うことになる10-19 WTHゲームに直接行くDoNothingBot
Sylwester

2
好奇心から、これをテスター(すべてのテープの長さで再生)を介して他のエントリに対して実行しました。壁を見よ... +1
コミンテルン14

ハハ、共有してくれてありがとう-黒い羊が一匹か二匹いるかもしれないと思っていましたが、たくさんのボットを「倒す」とは思っていませんでした=)
flawr 14

7

CounterPunch-編集済み

強力な防御の構築と攻撃のバランスの取れた組み合わせ。

(+)*6>(-)*12(>)*7(<(-)*12<(+)*12)*3(>)*7(([-([(-)*6[+.]])*5])*4>)*21

注釈付き:

(+)*6                             Switch polarity of the flag
>(-)*12                           Build a quick decoy in front of the flag
(>)*7(<(-)*12<(+)*12)*3           Hop out and start building decoys backward
(>)*7                             Tally ho!
(([-([(-)*6[+.]])*5])*4>)*21      Clear toward the opposite end

@GeobitのBacktrackerと同様に防御しますが、最初にフラグの前に素早くおとりを置くことで、高速攻撃者から防御します。

攻撃は、反対の極性を持つネストされたクリアリングで、値が小さいおとりをすばやくクリアします。最悪のシナリオは、64(どちらの極性)のデコイであるべきです。

編集1:おとりに対する攻撃効率を改善します(極性切り替えで論理エラーが発生しました)。

編集2:テストは、最も内側のループで一時停止のパフォーマンスがわずかに優れていることを示しています。


6

バックトラッカー

逆おとり戦略。おとりを前から後ろに敷き始めて、私がそれらを構築しているので、誰も残りをスキップしません。

ボードがサイズ20未満の場合、高速攻撃ボットに対しては機能しません。おとりを開始する前にお互いを渡すだけです。

(>)*9((-)*4<+<-<(+)*4<)*2(>)*8(>[-])*21

(>)*9                   Jump ahead 9
((-)*4<+<-<(+)*4<)*2    Lay down alternating polarity/size decoys for 8 spots behind
(>)*8                   Jump back forward
(>[-])*21               Clear until flag

注:私はBFをしませんが、これは私が望むことをします。そうでない場合は、今私に聞かせてください。


6

これに触れない

これは、相手がセルをクリアする方法を決定しようとする防衛指向のプログラムであり、適切なサイズのおとりを作成します。

>---    create 1st decoy
>+      decoy for timing
>+      decoy for waiting
[]<     tripwire activated!
[<-->]  increase size of 1st decoy while opponent clears 2nd decoy
(>)*8   attack!
[+(<)*9(+)*20(>)*9]    slowly clear, while going back to stop enemy progress
>[+(<)*10(+)*22(>)*10]
>[+(<)*11(+)*24(>)*11]
>[+(<)*12(+)*26(>)*12]
>[+(<)*13(+)*28(>)*13]
>[+(<)*14(+)*30(>)*14]
>[+(<)*15(+)*32(>)*15]
>[+(<)*16(+)*34(>)*16]
>[+(<)*17(+)*36(>)*17]
>[+(<)*18(+)*38(>)*18]
>[+(<)*19(+)*40(>)*19]
>[+(<)*20(+)*42(>)*20]
>[+(<)*21(+)*44(>)*21]
>[+(<)*22(+)*46(>)*22]
>[+(<)*23(+)*48(>)*23]
>[+(<)*24(+)*50(>)*24]
>[+(<)*25(+)*52(>)*25]
>[+(<)*26(+)*54(>)*26]
>[+(<)*27(+)*56(>)*27]
>[+(<)*28(+)*58(>)*28]

私は現在、両方の極性に勝てるバージョンに取り組んでいます。


6

ImpatientTripwire(別名YandereBot)

(ほとんど)対応する極性のデコイを置くことができるようにトリップワイヤーになりますが、時間がかかりすぎるとあきらめ、代わりに反対のパリティだと仮定します。小型ボード用の逆トリップワイヤがあります。

(+)*5                                     Toggles the base
>-                                        Sets up reverse tripwire
>>++>-->                                  Sets up basic decoys    
(+)*20                                    Makes a massive antioffset tripwire
(([)*150                                  Waits for a while
    <<<<                                  Goes to check on the other tripwire
    +[
      <                                   Bot found you and is furious
      ((+)*128 (>)*9 (+.)*55 (<)*9)*5     Tries to tie you up
      ((+)*128 (>)*10 (+.)*54 (<)*10)*5   And torture you
      ((+)*128 (>)*11 (+.)*53 (<)*11)*5   As it destroys the world
      ((+)*128 (>)*12 (+.)*52 (<)*12)*5
      ((+)*128 (>)*13 (+.)*51 (<)*13)*6
      ((+)*128 (>)*14 (+.)*50 (<)*14)*6
      ((+)*128 (>)*15 (+.)*49 (<)*15)*6
      ((+)*128 (>)*16 (+.)*48 (<)*16)*6
      ((+)*128 (>)*17 (+.)*47 (<)*17)*6
      ((+)*128 (>)*18 (+.)*46 (<)*18)*6
      ((+)*128 (>)*19 (+.)*45 (<)*19)*6
      ((+)*128 (>)*20 (+.)*44 (<)*20)*6
      ((+)*128 (>)*21 (+.)*43 (<)*21)*6
      ((+)*128 (>)*22 (+.)*42 (<)*22)*7
      ((+)*128 (>)*23 (+.)*41 (<)*23)*7
      ((+)*128 (>)*24 (+.)*40 (<)*24)*7
      ((+)*128 (>)*25 (+.)*39 (<)*25)*7
      ((+)*128 (>)*26 (+.)*38 (<)*26)*7
      ((+)*128 (>)*27 (+.)*37 (<)*27)*7
      ((+)*128 (>)*28 (+.)*36 (<)*28)*8
      ((+)*128 (>)*29 (+.)*35 (<)*29)*8      
    ]-
    >>>>)*2                                 Waits again
      <(+)*20                               Bot got stood up, is sad
      <(+)*20                               Sets up some decoys
      <(+)*20                               Grabs a knife
      <(-)*20                               Licks the blade
      <(-)*5                                Locks the house
      >>>>>>>>                              Goes to hunt you down
     (
       >                                    Start searching
       [
         +[+[+[                             Search from minus three
         ---
         -[-[-[                             To plus three
         (-)*17                             If that's no good, do an offset
         [+]                                Clear by adding
         [-.--]                             Just in case
         ]]]]]]                             I would duplicate the program to skip these like at
       ]                                    the bottom but the file would get too large
       [--.---]                             Also just in case
       -                                    Leave a small trail
     )*22
(
  ]                                         Skip the bracket closing
  <(-)*20                                   Bot found you and is happy
  <(-)*20                                   Has just the perfect presents for you
  <(-)*20                                   You like decoys right?
  <(+)*20                                   Here's a plus one in case you are sneaky
  <(-)*5
  >>>>>>>>                                  Time to hunt you down

  (>[+[+[+[----[-[-[(-)*17[+][-.--]]]]]]]][--.---]-)*22
)*300

現在のバージョン: 1.3 -チェックをTripwireの中に過去をこっそり敵のためにゲームを失うことを犠牲にして、小さなボードで良い結果を出すために編集

過去のバージョン: 1.2.1

(より明確なアルゴリズムが必要です:/)


1
OMG 411kは完全に展開され、削除されました:-O Chiperのコードはこれにのみかかっています。
シル

それが今のCipherの新しいコードで動作するようにするだけのコメントの数を変更
SP3000

最新の編集以降、括弧内の一致しない括弧は、ループロジックが略語ロジックと衝突するため、奇妙に動作します。私のような構造を変更することができます([)*300に戻って[[[ and so on
暗号14

うん@Cipher、それのために行く-ペーストビンバージョンはまさにまさにそれでなければなりませんが、
SP3000

1
3位はいい場所です。よくやった。
AndoDaan

5

Lightfoot Plodder-編集済み

Plodderに基づいて、このスピーディなベヒモスは、0以外の値に達するまで連続して0を「早送り」することができます(その時点で、予想どおりに爆発し始めます)。

より堅牢なスキミングアルゴリズムで改善されました。これにより、小さなデコイとそれ自体の大きなデコイを高速で転送できます。

編集#2:ゼロのポケットがさらに見つかった場合、スキミングに戻ることができるようになりました。

>(-)*4
>(-)*7
>(-)*4
>(+)*7
>(-)*17
>(+)*3
> -
>(-)*10
>(+)*16[-]<-
([
[>>
 [+
  [--
   [+++
    [<+>(+)*14[-]]
   ]
  ]
 ]<-
]>>
[(+)*126(+.)*4>]
<]+)*10

素敵な「便利な」サイズ変更:)
リリーチャン

@IstvanChung 非常に便利です。;)これ以上は、他のいくつかのボットにポイントを失って、あまりにも私を遅くしているでしょう。あなたがより大きくした場合、私はペースを維持しようとは思わない。
DLosc 14

まあ、私はそれがどのように機能するかを見るために少しだけサイズを上げました。Biggerはさらに大きなサイズを引き出すことができるかもしれませんが、徹底的にテストする時間はありません。幸運を!
リリーチョン14

クローキングボットに対する対策と、これが実際にBFプログラミングのように見えるという事実を愛してください:)
シル

5

消極的ランv2

戦略は簡単です。相手に彼女の旗がおとりであると考えさせ、ボードを通過してルーズ(トリップワイヤー/バイブレーターの一種)であると思わせるようにしてください。完全なラウンドを10回行った後、彼女はあきらめ、相手が自分の旗にいるかどうかを判断しようとします。彼女が使用する清算方法は、[-12,12]の特殊なケースであり、Lokeと同様にプロッディングを開始します。

>>-<<                                  set a flag
(.)*11                                 wait for sixteenth step
((-)*256)*10                           reduce by ten rounds
                                       We give up check flags
> [(>)*7                               detected fast rush mode
    (-[>[
        -[-[-[-[-[-[-[-[-[-[-[-[       from plus one to twelve
        (+)*12                         reduce by twelwe
        +[+[+[+[+[+[+[+[+[+[+[+[       from minus one to twelve
          (+)*66..(+)*41(+.)*17>       increase and plod
        ]]]]]]]]]]]]]]]]]]]]]]]]]-])*3 
  ](-)*31
>+[(>)*6                               detected fast rush mode
    (-[>[
        -[-[-[-[-[-[-[-[-[-[-[-[       from plus one to twelve
        (+)*12                         reduce by twelwe
        +[+[+[+[+[+[+[+[+[+[+[+[       from minus one to twelve
          (+)*66..(+)*41(+.)*17>       increase and plod
        ]]]]]]]]]]]]]]]]]]]]]]]]]-])*3 
  ](-)*21
[>[                                    propably a trapper so we move slow
    ..+..-(+)*119(+.)*17               plodd the first cell so we dont go to zero on low positive
    ([>[
        -[-[-[-[-[-[-[-[-[-[-[-[       from plus one to twelve
        (+)*12                         reduce by twelwe
        +[+[+[+[+[+[+[+[+[+[+[+[       from minus one to twelve
          (+)*66..(+)*41(+.)*17>       increase and plod
        ]]]]]]]]]]]]]]]]]]]]]]]]]-]-)*3 
  ](-)*17
]

雑学:Ránは北欧神話の海の女神で、海で死ぬ前に船乗りを連れて行きます。


5

ミッキーV4

V4では、更新されたボットに対して、V3と同じ方法を使用しましたが、同時実行数はより多くなりました(10ではなく30)。

BurlyBalderV3およびを含む60個すべてのボットに対して開発されましたLethalLoke(ただし、厳密な実装ではコンパイルできない2botsonecupは除きます)。

異なるランダムシードから始めた場合、大幅に異なるボットと成功率を発見しました。そこで、私はこれらの異なる出発点を母集団に分け、時折他家受粉させることにしました。

1400世代では、30の同時進化する人口がこのプログラムを作成しました。

++>------>->---<<<------------->------>->
---->------------->>--->------<----------
------<------<-<<--<------------->-------
-<-->------>------->----------->---------
----->-------->------->----------------[>
[--[-[+]]]>[--[+]]-]-------[>[--[-[+]]]>[
--[+]]-]<--<------>------->--------------
--[>[--[-[+]]]>[--[+]]-]<--<-------------
--------->------>->-<-----

このボットの勝率は、現在の作物に対して90.0%と計算します。(1135/125/0テープ長が勝ち/負け/引き分け)。

V3情報

計算された勝率89.2%(1124/62/74テープ長の勝ち/負け/引き分け)。

V2情報

生成プログラムには、プログラムの終わりのどの部分が未使用であるかを分析し、それから次の世代を生成する前にそれをトリミングします。これは、プログラムの使用部分でのみランダムな突然変異が発生するため、進化が速いことを意味します。

当時の現在の作物に対して72%。(892/204/143テープ長が勝ち/負け/引き分け)。

V1情報

31500世代、わずか12のボットが直面しました。65%(165/80/7テープ長の勝ち/負け/引き分け)。21種類のテープ長をすべて使用しています。

潜在的なボットは以下によってランク付けされます:

  • ほとんどの場合は勝ちます。
  • ほとんどのドロー。
  • 最短時間で描画されます。
  • 最短時間で勝ちました

トリビア

  • ミッキーは私の猫にちなんで命名され、
  • TSエリオットを言い換えると: The Naming of Cats is a difficult matter, It isn't just one of your brainfuck bots
  • 私のjava bf vmと遺伝的アルゴリズムはgithubにあります。
  • vmは、i7のシングルコアで4秒未満で完全なトーナメントを実行できます(注意-結果はトーナメントエンジンと必ずしも同じではありません)。

60個すべてのボットを使用する方が良いと思いませんか?
シルウェスター14

@Sylwesterたぶん、私はそれがとても遅いので主にしませんでした。これを行うには2時間かかりました。また、より多くのボットに対処しなければならないほど進化は遅くなりましたが。私はそれがトップの人を打つ場合、それはうまくいくと思いました。確認のために実際のトーナメントを実行することはできませんでした、Pythonのトラブル。だから... ...私はちょうどそれを投稿して見るだろうと思って
ウェストン

@westonたぶん私たちはあなたのPythonのトラブルであなたを助けることができますか?
暗号14

@Cipherありがとう、githubで問題を開いた github.com/redevined/brainfuck/issues/2
ウェストン

@Sylwester私のジェネレーターははるかに高速でマルチスレッドであるため、現在ほとんどのボットを使用しています。
ウェストン14

4

ギャンブラー

これは、私のGeronimoボットと密接に関連しています。しかし、Geronimoが確実なことをしているところでは、ギャンブラーは最善を尽くしてギャンブルをすることで、より速くしようとします:20番目のセルに行き、そこからゼロイングを開始します。

それは、アリーナがそれほど大きくないという理由だけで簡単に失う可能性があることを意味します。しかし、そうであれば、数サイクルが重要かもしれません。

(>)*19(>[-])*11

楽しいファクト:私は本当にすべてがどのように見えるボットの束入っ検討していた(>)*X(>[-])*Y場所X in 9..29とをY = 30 - X。しかし、20個のボットを入力するのは少し多すぎると思います:)または、2つのバージョンがあり、1つはゼロで[+]、もう1つはで実行し[-]ます。


13や14のような数字は、20よりも勝率が高いと思いませんか?
ムープ14

はい、多分。私はちょうど中間が欲しいです。おもしろいことに、右ではなく左に行けば、勝つチャンスはかなり減ります。反対を期待していたでしょう。
インゴバーク14

各ボットの戦いは、その後、他のボットにマッチするので、それらのさえ40はあなたのチャンスを持ち上げないだろうというくらいの-と私はコピー&ペーストの苦労していた:D
暗号

4

ダンボット

環境をいじり、それが戦うボットがすべてテープから消えることを望んでいる非常に愚かなボット。

(+)*50(>-)*7(([.])*50(+)*50>)*7([-])*256

(これが機能するかどうかはわかりませんが、エラーは発生しません!)

注釈付き(私が思うに):

(+)*50      Increase home cell by 50
(>-)*7      For next 7 cells, decrement once
(           Open loop
([.])*50    If cell is non-zero, do nothing. If cell is zero... Still do nothing? I'unno.
(+)*50      Now let's increment it fifty times for some reason.
>)*7        And let's do the above two instructions ten times more, in the next 7 cells
([-])*256    If the cell we're on is non-zero, decrement it continuously and hope it's the enemy.

(これが単一の戦いに勝った場合、私はよろめきます)


1
2行目では実際に加算によってセルがゼロになり、1行で7回減算されます。
誇りに思ってhaskeller 14

1
@proudhaskellerそのとおりです...それは私が少しの睡眠でBrainfuckのものをしようとするために得るものです。実際に適切に行う方法を実際に解決する代わりに、単純化しただけです。
Sellyme

4

CropCircleBot

[>>[+][-]-<[-][+]+][>[+][-]<[-][+]++]

このボットは、地球に配置されたミステリーサークルを通じてエイリアンによって送信された高度なアルゴリズムを使用します。それは人類を変え、大きな技術的進歩をもたらし、さらに多くの環境問題を解決します。


あなたは決して] [を使用してはならないことを知っていますか?
電卓

しません、理由を説明できますか?
-flawr

ループを抜けると、現在のセルは0になります。次に、ポインターのセルがまだ0なので、次のループをスキップします
CalculatorFeline

ああ、私はいつもループの終わりにチェックが起こると思っていましたか?
-flawr

また、最初に発生します。いくつかの実装では、[何もしませんが、それは完全に異なる言語です(esolang wikiのnewbiefuck)
CalculatorFeline

4

BeatYouMate

そして、誰もが最初に投稿したボットに勝つボットを投稿する必要があるため、5種類以上のデコイ敷設ボットがあります。

(>------>+++++++)*4>([(+)*6[-]]>)*21

4

CleverAndDetermined

>+>-(>+++[-])*21

いくつかの小さなトラップを設定し、反対側にレースオーバーし、ゼロより上または下のすべてをクリアしようとします。失敗し----ます。


+++以前[-]は、単純なtrapを避けるのが賢明です!
インゴバーク14

一致しないため例外をスローしました(、コメントのように扱うことはできますか?
暗号14

@Cipherそれを修正します。
isaacg 14

4

MetaJSRandomBot

+[[>-[->+]>>[-]>-<<[>][+]<]+<]->

このボットの背後にある考え方は、無用なものが多くない、まだ有効なjsコードである完全にランダムなものを作成することです。それを生成するために次のコード(JSFiddle link)を書きました。それがどれだけうまくいくかを見てみましょう=)

var nchars = 30;
var nbrack = 10;
var alphab = "+ - < >".split(' ');
var s = [];
for(var i=0;i<nchars;i++){
    s.push(alphab[(Math.random()*alphab.length)|0]);
}
var ind1,ind2;
for(var i=0;i<nbrack;i++){
    ind1 = (s.length*Math.random())|0;
    s.splice(ind1,0,'[');
    ind2 = ((s.length-ind1-1)*Math.random())|0 + ind1;
    s.splice(ind2,0,']');
}
s = s.join('')
for(var i=0;i<Math.max(nchars,nbrack);i++){//remove useless stuff
    s=s.replace('[]','');
    s=s.replace('+-','+');
    s=s.replace('-+','-');
    s=s.replace('<>','');
    s=s.replace('><','');
}
alert(s);

4

プロイセンルーレット

ロシアンルーレットは友人のプロイセンと賭けをし、今度は彼の番です。

>(+)*5(-.[>.[>(-)*10]]>>)*1000

メインループには2つのポインターデクリメントと1つのインクリメントのみがあります。これにより、テープの終わりから飛び出します。
コミンテルン14

2
これはまだそれ自体を捨てます。
誇りに思ってhaskeller 14

最初はプラスに続いてマイナスがあります。2つの無駄なサイクル。
ウェストン14

4

より大きい

軍拡競争が始まる!!

構築し、高さの壁を破壊し、両方の16ほとんどの競合他社よりも大きい18を、。また、クローカー、旗の擁護者、アンチオルタネーター、および手つかずの旗を装うボットを倒すための小さなロジックがあります

+>->+>+>-(>(-)*18>(+)*18)*2(>([(+)*18[-][-[+]]])*2)*21

注釈付きバージョン

Off by one
==========
Adjust own flag a little for fun
-

Decoy stage
===========
Build decoys

>->+>+>-        Add four quick walls to deter rushers
                Also throw off bots depending on the alternation
(>(-)*18
 >(+)*18)*2     Build four large decoys

Clear stage
===========
(               Repeat the following forever:
  >             Move forward
  ([            Skip if the space is zeroed already
      (+)*18    Bust negative decoys smaller than 18
      [-]       Clear
      [-[+]]    Check that the wall is actually cleared; if it isn't,
                clear in the opposite direction to defeat bots that try
                to sense our clear direction and defend the flag
  ])*2          Repeat the "non-zero" check to guard against the cloaker
)*21

3

PatientBot

部分的に深刻なボット。このボットは、100000サイクルの制限で勝利を試みます。いくつかのトラップを邪魔しながら敵の旗に行き、少し減らして戻って旗を守ります。

>++>->->+>+>->->+(>+[-[-[(<)*9--[<--](+)*10000]]])*20

1より大きいまたは-1より小さいものはすべてフラグであると見なされ、1に遭遇すると、元に戻ります。常に増加するだけで防御します。これは、ほとんどのプログラムが[]を使用してフラグが0になったかどうかを確認することを前提としているため、(+)* 100000の方がはるかに高速です。

編集: BF Joustインタープリターで動作させることはできません。私はあきらめる。多分あなたは私のコードを改善する方法を教えてください。

編集:ボットはフラグ2の直前にスポットを作成し、フラグを少しデクリメントした後、2を検索します。これは、ボットが前のセル以外の0セルを見つけるシナリオをキャンセルすることを意味します国旗。


あなたのボットは、最初は10個の '>'があるので、長さ10の(かなりまれですが、認めます)テープで自分自身を殺すようです。それとは別に[<]、ポインターの下のセルがゼロ等しくなるまで戻ることを繰り返すので、あまり良いアイデアではありません。これは、フラグの前のセルの1つであるか、ポインターがフラグに到達した場合に単に自殺します(フラグうまくいけばゼロではありません)。
暗号14

@Cipherボットは旗の直前の場所にトラップを置かないことに注意してください-ボットがそこに防御を構築するようにこのスポットをマークすることを考えました。もっと良い方法はありますか?bfjoustでは、敵がトラップをクリアし、ボットが停止する前に停止することがあります。
誇りに思ってhaskeller 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.