パブリック変数の何が問題になっていますか?


33

コードボット

私はプライベート変数とプロテクト変数が嫌いです。何でもアクセスしたい!

あなたが私のようであれば、この挑戦​​はあなたのためです!

他のボットと調和して連携し動作するボットを作成し、他のボットに必要なことをさせます。あなたはプログラマであり、物事がどのように機能するかを知っています。あなたの仕事は、できるだけ多くの他のボットをあなたのやり方に変換することです。

コード

ボットを作成するための24行のコードがあります。各ターン、すべてのボットは1行を順番に実行します。

各ボットはをA介して5つの変数を保存しますEAそしてB個人的な使用のためであり、C実行する次の行を記憶し、D現在の方向を記憶し、E乱数です。変数は0から始まりますが、を除きD、ランダムな値から始まります。すべての変数には、0〜23のみが格納されます。大きいまたは小さい数値は24で変調されます。

この投稿では、対戦相手を使用して、あなたが直面している隣接するボットになります

各行には、次の5つのコマンドのいずれかを含める必要があります。

  1. Flag何もしません。それが勝つ方法を除いて
  2. MoveボットをDth方向に移動します。ボットがすでにスペースを占有している場合、移動は発生しません
  3. Copy Var1 Var2 Var1の内容をVar2にコピーします
  4. If Condition Line1 Line2 条件が真の場合、Line1を実行し、そうでない場合はLine2
  5. Block Var1 変数への次の書き込みをブロックします

変数は次のように使用できます。

#Var変数を行番号として使用します。A17の場合、Copy #8 #A8行目の内容を17行目にコピーし *Varます。相手の変数を使用します。 Copy 5 *C対戦相手のC変数を設定して5 Var+Var、2つの変数を追加します。 Copy D+1 Dボットを右に回転させます

Dが方向として使用される場合、使用され[North, East, South, West][D%4]ます

これらの修飾子は連鎖できCopy *#*C #9ます。対戦者が実行する次の行を、9行目の独自のコードにコピー **Dします。対戦者の対戦相手のD変数を参照します。

条件は次のように評価されます。

  1. 場合Var
    1. VarがAthroughのC場合、Varがゼロ以外の場合はtrueを返し、そうでない場合はfalseを返します。
    2. Varがの場合DDth方向にボットがある場合はtrueを返し、そうでない場合はfalseを返します。
    3. VarがのE場合、Eが奇数であればtrueを返し、そうでなければfalseを返します
    4. Varがラインの場合、フラグラインの場合はtrueを返します
  2. 場合Var1=Var2
    1. 両方がA-Eで、同じ数に等しい場合にtrueを返します
    2. 両方がラインで、ラインタイプが等しい場合にtrueを返します
  3. 場合Var1==Var2
    1. 両方がA-Eで、同じ数に等しい場合にtrueを返します
    2. 両方がラインであり、同一である場合にtrueを返します(異なるボットのフラグは等しくありません)

各タイプの50個のボットは、次のパターンでトロイダルワールドに配置されます。

B...B...B...B...
..B...B...B...B.
B...B...B...B...
..B...B...B...B.

5,000ターンの各ゲームの後、各ボットのフラグがカウントされます。ボットに他のどのタイプのフラグよりも多くのフラグがある場合、ポイントを獲得します。Nボットが同点の場合、ポイントは与えられません。

10ゲームがあり、スコアは最後に蓄積されます。

サイドノート

行末コメントが許可されており、 //

行に追加するなど、意味をなさないことをしようとしても何もしません

存在しないボットで何かをしようとしても何もしません

の無限再帰は、If実行される行なしで終了します

If の値を変更しません C

A Blockは誰かが書き込みを試みるまで期限切れになりません

複数の変数と行を一度にブロックできます

Block変数を複数回入力すると、2番目のブロックステートメントが最初のステートメントとは異なるコード行にある限り、複数回ブロックされます。

引数の間(およびコマンドの後)にのみスペースを使用できます

ボットが24行より短い場合、Flagは残りの行になります。

サンプルプログラム

Copy 2 C        //Skip to the If line
Flag            //Where I'm storing my flag
Move            //Move in the D'th direction
If D #5 #2      //If there's a bot, copy code, otherwise, move!
Copy #1 *#E     //Copy my flag onto a random spot in my bot's code
Copy 2 C        //Skip back to the If line

このプログラムは、ここで Pythonコントローラーによって実行されます

Javaコントローラーはここ にあります。高速で、Python コントローラーよりもずっと良く見えます。

スコアボード:

  1. 6837 $コピー
  2. 3355 ロッキード
  3. 1695 マインドコントロール
  4. 967 ビザンチン
  5. 959 AttackOrElse
  6. 743 カドミリオン
  7. 367 インフルエンザ
  8. 251 TheCommonCold
  9. 226 メイガス
  10. 137 HideBlockAttack
  11. 129 RowBot
  12. 123 FastMoveCloneDodge
  13. 112 FastForwardClone
  14. 96 クイックフリーズ
  15. 71 RepairAndProtect
  16. 96 スーパーフリーズ
  17. 93 RovingVirus
  18. 80 ForwardClone
  19. 77 FreezeTag
  20. 68 パリンプセッテ
  21. 62 BlockFreezeAttack
  22. 51 ラッシュ攻撃ダッジ
  23. 46 ブロッカー
  24. 40 タレットメーカー
  25. 37 コピーキャット
  26. 37 神風
  27. 35 FlagInjector
  28. 33 RandomCopier
  29. 31 sidな
  30. 29 HappyAsAClam
  31. 25ナノウイルス
  32. 21 無効化
  33. 19 ナノビリス
  34. 17 BoringCopybot
  35. 16 Movebot
  36. 14 フラッグボット
  37. 13 中和剤
  38. 12 がん
  39. 9 DNAbot
  40. 9 寄生虫
  41. 8 メタインシディアス
  42. 8 ブランド変更
  43. 8 AdaptiveBot
  44. 8 ReproductionBot
  45. 8 KungFuBot
  46. 5 QuickFreezerbot
  47. 4 攻撃者

1
Javaをテストできるようになったら、これについてすべて説明します。
Wasmoo 14

2
私はあなたがコア戦争をプレイしたことがないと仮定しています。en.wikipedia.org/wiki/Core_War
matt_black 14

私はそれをプレイしていませんが、このチャレンジを書いている間、私はそれをかなり読みました。
ネイサンメリル14

Pythonコントローラーのパッチがあり、それをgithubでプッシュバックしようとしました...しかし、権限がありません/ gitを本当に知りません。パッチは、すべての「16」を「num_lines」に置き換えて、最後の8つの命令への書き込み/ジャンプアクセスを許可します。また、declare_flags()のタイ条件から「max_flag_count = 0」を削除します。これにより、3番目のボットとの双方向のタイが得られる場合がありました。
adipy 14

1
次の戦闘ラウンドがいつ実行されるかについてのETAはありますか?急ぐ必要はありません。興味があります。ありがとう。
COTO 14

回答:


13

フラッグボット

Flag

他のボットが自分のコードを私に与えるのに十分なほど良いのに、なぜ何もする必要がないのですか?


8

タグをフリーズ

Move
If D #3 #2
Copy 23 C
Copy 3 C
Copy #23 *#*C
Copy #21 *#*C+1
Copy #22 *#*C+2
Copy #21 *#*C+3
Copy #22 *#*C+4
Copy #21 *#*C+5
Copy #22 *#*C+6
Copy #21 *#*C+7
Copy #22 *#*C+8
Copy #21 *#*C+9
Copy #22 *#*C+10
Copy #21 *#*C+11
Copy #22 *#*C+12
Copy #21 *#*C+13
Copy #22 *#*C+14
Copy D+1 D
Copy 0 C
Flag
Flag
Copy C+23 C

敵をループでトラップし、フラグで埋め、次の敵に移動します。


Copy C+23 Cこれは、コードxDの最も悪質な行でなければなりません。
ランチャー14

興味ある。これは改善可能かもしれません。それらをフラグで埋めるのではなく、フラグで埋めるループをそれらに入れることができますか?それとも、フラグとしてカウントされませんか?
ランチャー14

それはきちんとした実行可能なアイデアですが、より複雑です。あなたはそれを使用するボットを書く必要があります:)
スパー

2
最後の質問に対する答えを知っていますか?Or would that not count as your flags?。フラグが自分のフラグとしてカウントされない場合、それは間違いなく良い解決策ではないからです
ランチャー

@Cruncherにフラグの1つを与えてコピーさせることができます。これはあなたのフラグの1つとしてカウントされます。
スパー14

8

寄生虫

なぜ他のボットを殺すのですか?このボットは、相手のコードを調べて、フラグのみを置き換えます。

Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag
Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag
Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag

8

$コピー

このボットは、COTOのロッキードと同じ技術の多くを使用しているため、恥知らずに借りて強化します。

これはC脆弱性を利用してブロックを破壊し、中和剤を元に戻します。このため、絶対名でも書かれています。Cシフトが回復した場合、これは壊れるかもしれませんが、シフトが一定である限り、それと戦うために書き直すことができます。

何らかの理由で、最後にループがないため、このボットは非常に優れたものになりました。

Block #C+A 
If D #7 #13        //If [enemy] Copy 0 ELSE block
If D #8 #0         //If [enemy] Freeze 0 ELSE block
If D #9 #6         //If [enemy] FreezeCheck ELSE Inc
Move
Copy 0 C
Copy A+5 A          //Inc
Copy 23 *C          //Copy 0
Copy #10 *#*C+23    //FreezeAttack
If *#*C==#10 #11 #5 //FreezeCheck: If [frozen] GOTO Copy Attack ELSE GOTO [1]
Copy C+23 C         //FREEZE
Copy 13 C           //GOTO Copy Attack
Copy 15 C           //Loop Copy Attack
Block #C+A
Copy D+3 *D             //Copy Attack: Spin Enemy
Copy 0 *B               //Set enemy counter (a la COTO)
Copy #*B+0 *#*C+*B+1    //Copy my lines
Copy #*B+1 *#*C+*B+2    //Copy my lines
Copy #*B+2 *#*C+*B+3    //Copy my lines
Copy *B+3 *B            //Inc counter
If *B==0 #19 #12        //Loop check
Copy D+1 D              //Turn myself

1
ボットv。3コンペティションでは、改良されたデザインに敬意を表して再度お会いします。;)
COTO 14

私はこれが全員のグループ努力であると正直に信じています。いくつかのボットがモデル化する必要がなければ、これは存在しません。興味深いことに、このボットの追加により、ブロッキングに依存するボットが破損し、フラグ交換に依存するボットが上昇したため、スコアボードが完全に再編成されました。
Wasmoo 14

ブロックの実際の動作と、このボットとロッキードがそれをどのように活用するかを誰かが要約できますか?
スパー14

HappyAsAClamで説明されているように、各行にはブロックが発生します。最も重要なことは、同じ値で呼び出されたブロックに対してスタックしないことCです。したがって、ブロックはIfステートメントから呼び出されたときにスタックされる可能性があり、これはここで使用されているエクスプロイトです。$ CopyはCopy、成功するまで何度も同じ行で実行することでブロック(ハマグリなど)を破壊します。これにより、ロッキードよりも有利になります。
Wasmoo 14

7

ロッキード

この特定のボット戦争への私の3番目の(そしておそらく最終的な)提出:ロッキードリアクター、または略して「ロッキード」。

Block #C+A
If D #C+7 #C+1
Block #C+A
Move
Copy A+5 A
If A==0 #C+12 #C+21
Copy C+17 C
Copy D+3 *D
Copy C+9 C
Copy C+21 C
Copy C+23 C
Copy #C+23 *#*C+2
Copy #C+22 *#*C+1
Copy 0 *A
Copy #*A+C+9 *#*C+*A+1
Copy *A+1 *A
If *A==0 #C+15 #C+17
Copy D+1 D
Copy C+5 C

@Wasmooに特に感謝します。彼は、「変数を複数回ブロックすると、2番目のブロックステートメントが最初とは異なるコード行にある限り、複数回ブロックされる」という発見を共有しました。単に真実ではない」エクスプロイト。私はそれを広く利用しています。

また、競争を管理し、シミュレータを公開してくれたNathan Merillに感謝します。シミュレーターはボットの調整に非常に貴重です。自分の目でそれをシミュレートしていなかったら信じられなかったでしょうが、最も概念的にマイナーなボット機能の追加または削除は、大成功と大失敗の違いを意味する可能性があります。それが良いことなのかどうか、私は引き裂かれています。


変数を複数回ブロックしても失敗します。ただし、次の場合にのみブロックに失敗します:同じ行を実行している(Ifその行を指すことは失敗しません)、同じ値をブロックしている(1行で変数1から24を増分変数でブロックできる)、およびブロックはまだリリースされていません(誰かがその変数を変更しようとしました)
Nathan Merrill 14

ブロック命令はブロックステートメントではなくIPに対応しているため、OPでステートメントを争います。したがって、1つのブロックステートメントで、すべての命令に最大24個の個別のブロックを設定できます。「2番目のブロックステートメントが最初のブロックステートメントとは異なるコード行にある限り」というOPの条項を「ペア(C<block target>)のブロックがまだ有効でない限り」に修正することを提出します。つまり、ブロックステートメントが置かれている行は、ブロックが直接実行される場合、Cブロック命令アドレスを除いて、スタックに関連しません。
COTO

1
このボットはすごい!最高のコンセプトをすべて1つにまとめます。敵を見つけるまで自分自身を保護し、敵を二重に凍結し、自分自身のコピーをターゲットにアップロードしてから、反対方向に解放します。シミュレーションでは、そのコピーの1つが破損したオリジナルを修復するのを見ました。うわー!素晴らしい仕事、COTO!
Wasmoo 14

6

アタックオアエルス

ビザンチンのような防御ロボットが非常にうまくいっているのを見て、私も防御ロボットを作ることにしました。

これには、敵が存在するかどうかに応じて、2セットのパターンがあります。

  • 敵が存在しない場合、敵はそのラインを3ターンブロックしてから移動します。
  • 敵がいる場合は、フラグのコピーと、敵にそのフラグをコピーさせるコードのコピー(弱いレプリケーター)を交互に行いますコピーし、そのフラグ
  • ループの終わりで、ランダムな方向に変わり、継続します
  • コードのほとんどの側面が重複しています

より多くのテストにより、いくつかの重要な概念が示されました。

  • 「ランダムにターン」のパフォーマンスは「右にターン」よりも劇的に優れていました(+2700を超える)
  • のブロック増分 A+7、他のどの増分よりも効果的であること示されています(次善策に対して+200)
  • 「直接攻撃」は「弱いレプリケーター」より優れていることが示されています(代替策よりも+900)
  • 「3-1-2-1」の防御は他の組み合わせよりも優れています(次善策に対して+200)
  • 重複した攻撃、ブロック、およびループコードによりスコアが向上します(重複していない場合に比べて+300)
  • 重複したブロックの増分はスコアを改善しません(重複した場合+400)

Java UIを介してグラフィカルにシミュレーションを観察すると、非常に役立ちました。ありがとうございました!以下は、新しく改善されたコードです。これ以上何もできないと思います。

Block #C+A          //Dynamic block for If statements
If D #20 #0
If D #19 #8
If D #20 #23
If D #19 #0
If D #20 #8
If D #19 #23
Copy A+7 A          //Increment dynamic block
Block #C+A          //Dynamic block for If statements
If D #19 #8
If D #20 #0
If D #19 #8
If D #20 #23
If D #19 #8
If D #20 #0
If D #19 #23
Copy E D            //Turn Random
Copy 23 C           //Loop to beginning
Copy 23 C           //Loop to beginning
Copy #22 *#*C+1     //Copy my flag to the enemy's next
Copy #21 *#*C+1     //Copy my flag to the enemy's next
Flag
Flag
Move

このボットは本当にすごかった。そして、GUIを歓迎します。
ネイサンメリル

2番目のループを含めるように更新し、パフォーマンスが劇的に向上しました。また、Javaでのブロックは、ブロックしたブロックに基づいているCことに気付きました。このボットにはに基づいた回転ブロックがあるためC、各コマンドで複数のブロックが発生します。これにより、このボットはさらに防御的になります。
Wasmoo 14

私の理解では、元の命令ごとに1つのブロックしか確立できないため、上記のコードはどの命令でも1つのブロックしか確立できませんでした(すべての命令で1つのブロックを確立するには24 * 17ターンかかります)。私の理解が間違っている場合、「変数を複数回ブロックすると、2番目のブロックステートメントが最初のコードとは異なるコード行にある限り、複数回ブロックされます」という言語になります。Wasmooのコードが任意の命令で複数のブロックを確立できる場合、このステートメントは(率直に言って)falseであるため、OPの修正が必要です。
COTO 14

@COTO:JavaシミュレーターはIf、リストに行ごとに1つのブロックを追加し、Cそれを呼び出した変数に入力します。したがって、Blockステートメントを実行する1ブロックと9 Ifを使用すると、ボットは各行で最大10ブロックを取得できます(少なくとも24 * 10 * 10ターンかかります)。おそらくOPはシミュレーションを正しく伝えませんでした。
Wasmoo 14

コアの概念を維持しながら、反復をさらに改善することを反映するために、コードを再度更新しました。これは、弱いレプリケーションから直接攻撃への切り替え、非複製から複製への切り替えなど、各反復でフォーラムをあふれさせるよりも良いと思いました。オリジナルを再投稿してほしい場合は、それを行うことができます。
Wasmoo 14

5

行ボット

Move
If D #7 #0
If D #7 #0
If D #7 #0
If D #7 #0
If D #7 #0
Copy 0 C
If D=*D #9 #8     //If they point in a different direction
Copy *D D           //fix that
If #A==*#A #10 #11  //Did we copy line A already?
Copy A+1 A          //If so, A++
Copy #A *#A         //else, copy it!

ロボットが見つかるまで移動します。
そのロボットを自分と同じ方向に設定します。
その後、そのコードをロボットにコピーします。
これにより、「Row Bot」ロボットの列が作成されます。:)


2つの(簡単に修正可能な)問題があります。まず、Ifステートメントを大文字にする必要があります。第二に、のいずれかの側にスペースがあってはならない=ように、D=*D
PhiNotPi 14

これは素晴らしいアイデアです。
スパー14

旗がなければ、勝つことはできません。
パエロエベルマン14

3
@PaŭloEbermannボットには最大24行のフラグが設定されているため、このボットには最後に12個の暗黙的なフラグがあります。
スパー14

5

スーパーフリーズ

Move                    // start moving!
Block #E
If D #12 #0             // 8 turns of attack or move
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
Copy D+1 D              // change direction
Copy 0 C                // start over
If *#*C==#23 #13 #14    // if opponent is frozen, give them a flag, otherwise freeze them
Copy #C+13 *#E          // give a flag to opponent
Copy #23 *#*C           // copy freeze line to opponent
Flag                    // 8 flags, one per If above
Flag
Flag
Flag
Flag
Flag
Flag
Flag                    
Copy C+23 C             // this line freezes any bot that executes it

このボットは、動作するまでその前のボットをフリーズしようとし続け、ランダムな行に一連のフラグを書き込み、その8ターン後に回転し、別の敵に移動します。


5

ビザンチン

フラグとメタブロック(つまり、重要なブロック命令のブロック)を含む最も機密性の高い命令に複数のブロックを設定する、非常に防御的なボット。

また、予測不能な方法で絶えず移動し、ベストエフォートベースで敵の多くの場所にフラグを立てます。

Block #A
Block #A+1
Block #A+2
Copy E D
Move
Block #A+3
Block #A+4
Move
Copy #22 *#*C+1
Copy E D
Move
Block #A+5
Block #A+6
Block #A+7
Move
Copy #22 *#23
Block #A+8
Block #A+9
Block #A+10
Copy #22 *#2
Copy A+14 A
Move
Flag
Copy #22 *#*C+12

シミュレートできないため、どのように実行されるかわかりません。しかし、それを試してみましょう。;)


免責事項

PhiNotPiから条件付きロジックは無料であると親切に通知される前に、これを書きました。ただし、ボットが多すぎることはないので、そのままにしておくことにしました。


このボットが勝っています!
ちょうど半分14

4

カドミリオン

「バトルロワイヤルでボットに入りました」と私は言います。「低速のボットによる攻撃を防ぐために、数ターンごとに移動します。」

「遅いボットとはどういう意味ですか?」PhiNotPiが尋ねます。

「条件付きロジックの長いチェーンの評価で立ち往生しているボット」と私は答えます。

「他の「if」ステートメントを含む他のステートメントにリダイレクトする「if」ステートメントは、すべて同じターンで実行されます」とPhiNotPi氏は言います。

「アセンブリコードの甘い虐殺ルール!」私は泣く。「だれがそのアイデアを思いついたのですか?」

...そしてカドミリオンがどのように生まれたのかという物語です。

Cadmyllion:単一の命令で無限に多くの条件式を評価するという超現実的な能力を幸福に活用するボット。

コード

If D #15 #19
Move
If D #16 #20
Copy D+3 D
Block #A
If D #15 #20
Copy A+1 A
If D #16 #1
Move
If D #15 #19
If D #16 #4
Copy E D
Block #A+12
Copy C+10 C
Flag
If *#0==#14 #17 #21
If *#0==#14 #18 #21
If *#*C+1==#14 #18 #22
Copy *C+11 *C
Block #A+6
Block #A+18
Copy #14 *#0
Copy #23 *#*C+1
Flag

4

メタインシディアス

このボットはフリーズしてから、敵をSparr's Insidious効率的なバージョンに変換します。これにより、敵は私にフラグを立てるボットになります。これはおそらく私が書いた中で最も複雑なボットであり、ひどい動作をすることを期待しています。ブロックするスペースがなく、コードに組み込まれたフラグは1つだけです。ボットを陰湿なクローンに変えるのにも時間がかかりすぎます。

最大の課題は、ボット内での位置に関係なく動作するように、潜行性クローンのコードを書くことでした。凍結が配置されている場所の最後から2番目のコードを貼り付けると、凍結が削除されます。

If D #2 #1
Copy 23 C
Copy #8 *#*C // freeze the opponent
Copy 9 A
Copy #A *#A+*C // copy the next line at the appropriate  line
Copy A+1 A
If A==0 #7 #23
Copy 23 C
Copy C+23 C
If D #C+2 #C+23 // the code for the Insidious clone starts here
Copy C+21 C
Copy C+2 C
If D #C+6 #C+22
If D #C+5 #C+22
If D #C+4 #C+20
If D #C+3 #C+19
If D #C+2 #C+18
Copy E D
Copy #C+7 *#*C
Flag
Copy C+3 A
Copy #C+22 #A
Copy A+1 A
Copy C+21 C // And ends here

それは賢いアイデアです。ただし、Moveコマンドは表示されません。ボットもスパムボットも移動しないということですか?
Wasmoo 14

Insidiousクローンは、ボットの元のコードの内容に応じて移動する可能性があります。スペースが限られているため、24行でこれを可能にするためにかなりの量の機能を廃棄する必要がありました。それは本当に何よりも精神的な運動でした。
オーバーアクター14

3

修理と保護

このボットは、新しく修復された行を保護しながら、独自のコードを修復します。

If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag
If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag
If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag

説明:

の初期値A0で、行には0〜23の番号が付けられています。場合はIf文を実行し、偽であるが、それが再び同じ行を実行しようとしません。コントローラーは、ボットが同じ行を2回実行することを許可しないため、ターンは終了し、Cにインクリメントされ1ます。

次の行Copy #A #A+8は、Ifステートメントの値に関係なく実際に実行されます。違いは、trueの場合は2回、falseの場合は1回実行されることです。行#A+8がブロックされると(最終的に発生します)、実際にコピーして2回実行すると、1回実行するとブロックが解除されます。次に、新しくコピーされた行がブロックされて保存されます。


みんなボットを理解しようとしていますが、行き詰まっています。の初期値はA何ですか?じゃない0?その場合、最初の行は行0と行16を比較しますが、OPの例のボットから理解したように、最初の行は行1ですよね?さらに、まだ最初の行#Cにあるこの行を参照しているので、Ifステートメントがfalseを返す場合、無限ループに陥っているということですか?
プランナパス14

@plannapusいくつかの説明を追加しました。
PhiNotPi 14

3

中和剤

このボットは、被害者にプログラム全体を書き換えさせ、0ポイントの価値を与えます。ウイルスが配置されると、次へと進みます。これは、焦土の勝利へのアプローチです。

If D #C+2 #C+3          // A: If [enemy exists] B else C
Copy C+22 C             // GOTO A
If *#*C==#7 #C+4 #C+5   // B: If [enemy was neutralized] D else E
Move                    // C: Move
Copy E D                // D: Turn Randomly
Copy #7 *#*C            // E: Neutralize enemy
Copy C+1 C              // Skip the next line
Copy #C #C+1            // Neutralizing Code [Copy this line to next line]

比較*#*C==#7は、相手のシフトを正しく調整するようには見えませんが、最終的にはボットは動きます。


Copy C+1 C1行をスキップするために必要なのはこれだけです。
ネイサンメリル14

2
「次の行をスキップする」とは、続行する前にボットが16ターンをかけてフラグ命令を実行することを意味します。Copy 23 C代わりに、最初の行にジャンプして戻りたい場合があります。
スパー14

「次の行をスキップ」は、「GOTO A」が上書きされた場合にのみ発生します。「A」を繰り返す、コードを複製する、「GOTO A」をブロックするなど、このボットをより攻撃的かつ防御的にする方法は他にもあります。ただし、このボットがまったく攻撃されても、とにかくほとんど死んでいます。
Wasmoo 14

3

陰湿な

Move
If D #4 #0
If D #4 #0
Copy 0 C
Copy 4 C
If D #12 #11
If D #12 #11
If D #12 #11
If D #12 #11
If D #12 #11
Copy D+1 D
If D #4 #3
Copy #C+8 *#*C
Flag
Copy C A
Copy #C+22 #A
Copy A+23 A
Copy C+21 C

@Cruncherに触発されたこのボットは、他のボットに小さなコードブロックを感染させ、他のボットをこのボットのフラグで満たします。これらのボットはさらに攻撃するためにアヒルに座っていますが、他の誰かに再感染すると、ほとんど私のフラグでいっぱいになります。

編集:ゴルフのサポートについては@PhiNotPi、効率のアドバイスについては@overactorに感謝


おめでとうございます!
bjb568 14

3

ハマグリとして幸せ

これはブロッキングの練習です。$Copyやってくるまで、それは非常にうまく機能しました。

ハマグリには22個のブロックコマンドがあります。なぜならAはループごとにシフトされる、ループを通過するたびに異なる行を参照します。これにより、各コマンドで1行おきにブロックをスタックでき、1行あたり最大22ブロックになります。したがって、完全に装甲されたハマグリを破壊するには、1行に22回書き込む必要があります。

たとえば#10、次の行により、ループを通じて毎回保護されます。

  • ループ0、A = 0 #10、ライン7で保護(7+0+3= 10)
  • ループ1、A = 7は、#10ライン0(で保護0+7+3= 10)
  • ループ2、A = 14 #10行17で保護(17+14+3= 34 = 10)
  • ループ3、#10ライン10で保護されたA = 21 (10+21+3= 34 = 10)

したがって、ループ3の行10が#104回ブロックされ、4回の書き込みが必要になりました#10ブロックれた後、ブロックを壊すにはであり、5番目は実際に行を上書きします。

ブロックはC値によってキー設定され、保護された行が同じ値によってすでにブロックされている場合はスタックしないことに注意してくださいC。したがって、各行に22ブロックが確立された後、ブロックはスタックしなくなります。

Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Copy A+7 A
Flag

3

マインドコントロール

遅すぎることはないでしょうか?

Block #C+D
If D #2 #0        // Scan for enemy
If *#E==#E #0 #5  // Attack if necessary
Copy D+5 D        // Turn
Copy 22+1 C       // Repeat
Copy 4+1 C        // ATTACK:
Copy #22+1 *#*C   //   Freeze
Copy #17 *#17     //   Upload the DOWNLOADER
Copy #18 *#18     //
Copy #21 *#19     //
Copy D+2 *D       //   FACE ME!!
Copy 17 *C        //   Start download
If E #0 #13
If E #0 #13
Copy 22+1 C
Flag
Flag
Copy *#B+20 #B+20         // DOWNLOADER
If *#B+20==#B+20 *#20 #19 //
Copy 22+1 C               //
Copy 1+B B                //
Copy 16 C                 //
Flag
Copy 23+C C        // FREEZE

MindControlは、ボットが他の方向からの攻撃に対して脆弱である間、私のプログラム全体を相手にコピーするのにかなりの時間がかかるという私の考えに基づいています。敵をスキャンしている間に、相手にプログラムをコピーさせてみませんか?

敵を見つけると、MindControlはすぐに敵を凍結して脱出を防ぎます。次に、ダウンローダーを対戦相手にアップロードし、被害者にMindControlのプログラム自体をダウンロードさせます。Bダウンローダーは、24行すべてをダウンロードするまで使用しないボットがほとんどないという事実を利用します。ダウンローダーが#19からCopy 16 Cに書き換えられるとCopy 23 C、被害者がすべての行をダウンロードし、それ自体を再起動することを意味します。

ボットの最初のバージョンにはブロックが含まれていません。そして、それは非常に脆弱であったため、ほとんどすべての変更が機能しなくなりました。そこで、Wasmooの$ Copy(COTOのLockheedに基づく)に基づいてブロックを追加することにしました。私が見つけた欠点は、オリジナルがコピーの間違いを修正するのが難しいということです。しかし、これは障害にはほど遠いものであり、スコアが大幅に増加したため、ブロックを維持しました。

更新

ダウンローダーを改善して、ブロックを回避するための書き換えが成功するまでダウンロードを試行し続けました。ダウンローダーをアップロードするのにもう1回転かかることを意味しますが、この変更後に私のスコアは2倍になりました!! 数字と議論することはできません。


別の更新。お気づきかもしれませんが、MindControlは、ターゲットとターゲットの間のランダムな線を比較することで、ターゲットを攻撃するかどうかを決定します。一致する場合、MindControlはターゲットがすでに感染していると見なし、そのままにします。(補足:以前は静的な線を比較に使用していましたが、多くの偽陽性と陰性が得られます)多くの偽陰性が得られることがわかりました。だから、私は==いくつかの些細な変更を悪用して行うことにしC+23ました23+C。プログラムは機能的に同じですが、の目で異なり==ます。MindControlには、他のボットの行と同一の行がないため、タッチされていないボットに100%ヒットします。繰り返しますが、スコアは大幅に増加しました。


ダウンローダーを再び改善しました。短いループで実行されるようになりました。(これは私のスコアと大きな相関関係があるようです)


ダウンローダーの改善。元のボットのコードを使用して、アップロードを高速化します。また、スコアを改善すると思われる2つのランダムブロックを追加しました


遅すぎることはない!
ネイサンメリル14

BrainWashに名前を変更することを検討しています...
TwiNight 14

または、バンカーHappyAsAClamを介してダウンローダーのバストを見た後、BunkerBuster
TwiNight 14

最初にダウンローダーをアップロードするというこのアイデアを試すことを考えていましたが、あなたほど小さくすることはできませんでした。よくやった!また、ロービングブロックデルタとしてのDの使用も気に入っています。コマンドを保存し、設計を高速化します。「移動」コマンドのないボットが非常にうまく機能することに驚いています。シミュレーションによれば、ボットは凝集する傾向がありますが、それが勝利戦略であることは知りませんでした。そして、私は同意します、ハマグリを壊すことについて独特な満足感があります。
Wasmoo 14

@Wasmoo当然のことながら、ダウンローダーの設計では、ボットが静止している必要があり、ボットが凝集します。私はそれを、成長するために他のボットに手を伸ばして同化する木の根と考えるのが好きです。しかし、俊敏性が$ CopyとLockheedが私を打ち負かした理由だと思います。
TwiNight 14

2

アタッカー

Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Flag

2

Movebot

Move
Copy 23 C
Flag

Flagbotに似ていますが、コードの贈答品を受け取りながら移動して、すべてのフラグに対応します。


2

再生ボット

このボットは、相手を凍結してから、他のボットを再起動する前にコード全体をそのボットにコピーしようとします。これは、対戦相手がブロッキングを使用している場合にも(ほとんど)動作するはずです。

If D #23 #22
Copy 23 C
Copy #18 *#*C
Copy #18 *#*C+1
Copy #18 *#*C
Copy #18 *#0
Copy #18 *#0
Copy 0 *C
Copy 0 *C
Copy 1 A
Copy #A *#*A
If D #12 #14
Copy A+1 A
Copy 9 C
Copy 23 C
Flag
Flag
Flag
Copy C+23 C
Copy D+1 D
Flag
If *#*C==#*C #19 #13
Move
If *#*C+1==#*C+1 #21 #13

条件にスペースがない
ネイサンメリル14

@NathanMerrillの落とし穴
オーバーアクター14

2

メイガス

メイガスは、自己増殖するウイルスに対する単純な試みです。他のボットのプログラムに自分自身をコピーしようとします。(負の数の削除、条件の修正、行のトリムのために編集されました。)

Block #A
Copy #A *#A
Copy A+1 A
If A #0 #4
Copy 0 *C
Flag
Move
Copy 0 C

負の値は許可されていません。Bには23を使用してください
ネイサンメリル

25、23ない使用してください
ネイサンメリル

誤解がない限り、それは23行目または24行目をブロックまたはコピーしません(注:最初のリビジョンからわずかに変更され、AはBではなく1ずつ増加します)
Isaac 14

0 = 24 1 = 25、-1 = 23あなたはそれが-1になりたい場合は、それは23でなければなりません
ネイサンメリル

0としか比較できないと思っていたので(以前は「=」の部分を逃したため、スキミングのせいだ)、Aが1で始まり25で終わるように変更されfor (int i = 1; i < 25; i++)ました。 。
アイザック

1

DNAbot

Flag
Copy 8 D
Copy 16 B
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Copy #23 *#*C
Copy A+1 A
Copy B+1 B
Copy D+1 D
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Move
Copy A+1 A
Copy B+1 B
Copy D+1 D
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Flag

このボットは、移動および攻撃中に独自のコードを修復します。




1

クイックフリーザーボット

敵の次に実行される行のフラグをコピーしようとします。攻撃する敵がいない場合は移動します。

Block #13
Block #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14   
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14   
Copy 23 C
If E #15 #16
Move
Copy #23 *#*C
Copy D+1 D

最初の2行は無効です。#13と#14が必要
ネイサンメリル

1

ブロック、フリーズ、攻撃

Block #A        // start block loop
Copy A+1 A      // loop A from 0 to 23
If A #3 #4      
Copy 23 C       // repeat block loop
Copy 5 C        // exit block loop to attack/move loop
Move
If D #11 #5     // attack or move
Copy A+1 A      // loop A from 0 to 23
If A #9 #10
Copy 5 C        // repeat attack/move loop
Copy 23 C       // exit attack/move loop to block loop
Copy 11 C       // start of attack routine
Copy #23 *#*C   // freeze opponent
Copy #19 *#E    // copy flag to opponent
Copy #20 *#E    // copy flag to opponent
Copy #21 *#E    // copy flag to opponent
Copy #22 *#E    // copy flag to opponent
Copy D+1 D      // change direction
Copy 5 C        // repeat attack/move loop
Flag
Flag
Flag
Flag
Copy C+23 C     // freeze instruction, for copying

24行すべてをブロックし、移動または攻撃のいずれかで24回ループしてから繰り返します。攻撃には、相手をフリーズさせようと試み、次に4つのフラグをランダムな場所にコピーしてから向きを変えることが含まれます。


1

非表示、ブロック、攻撃

このボットは、ブロックフリーズ攻撃に基づいています。いくつかのIfステートメントの配置を変更して、よりコンパクトにし、より多くのフラグを配置できるようにしました。また、ゲームの開始時にブロックする時間を購入するために逃げます。

Copy D+1 D
Move           //buy some time by moving to a more secure location
Block #A+2
Copy A+1 A
If A #11 #17
Copy #23 *#E
Copy #22 *#E
Copy #21 *#E
Copy #20 *#E
Copy #19 *#E
Copy D+1 D
Copy 1 C
Move
If D #14 #15
Copy 3 C
Copy 11 C
Copy #18 *#*C
If D #16 #15
Copy C+23 C
Flag
Flag
Flag
Flag
Flag

1

ロービングウイルス

If D #6 #16
Move
Copy 23 C
Flag
Flag
Flag
Copy 6 C
Copy A+23 A
Copy #A *#A                     //clone previous line to enemy
Copy 23 *C                      //freeze enemy
If A #6 #16                     //loop or turn then continue
Copy 0 *C                       //reboot enemy
Copy 23 C                       //start moving again
Flag
Flag
Flag
Copy D+1 D                      //turn
Flag
Flag
Flag
Flag
Flag
Flag
Copy 22 C                       //freeze instruction

このボットは、敵を見つけるまでさまよい、フリーズし、すべてのコードを独自のものに置き換え、フリーズを解除してから再びさまよう。


1

風邪

それは事実上すぐにあなたに感染し、あなたはそれを広めるでしょう。PhiNotPiのParasiteに基づいて、一般的なコールドは、フラグを自分の上にコピーできるかどうかほとんどすぐにチェックします。ランダム値がブロックできない場合はブロックします。相手がいない場合は少し動きます。

Block #22
If D #8 #5
If D #8 #5
If D #8 #5
Copy 23 C
If E #6 #7
Copy D+1 D
Move
If *#E=#22 #15 #9
If *#E+1=#22 #16 #10
If *#E+2=#22 #17 #11
If *#E+3=#22 #18 #12
If *#E+4=#22 #19 #13
If *#E+5=#22 #20 #14
If *#E+6=#22 #21 #23
Copy #22 *#E
Copy #22 *#E+1
Copy #22 *#E+2
Copy #22 *#E+3
Copy #22 *#E+4
Copy #22 *#E+5
Copy #22 *#E+6
Flag
Block #E

1

インフルエンザ

これは、風邪(私の寄生虫に基づいていた)に密接に基づいており、速度がわずかに向上しています。

Move
Block #23
If D #8 #0
If D #8 #0
If D #8 #0
If D #8 #7
Copy 0 C
Copy D+1 D
If *#E #9 #10
Copy #23 *#E
If *#E+1 #11 #12
Copy #23 *#E+1
If *#E+2 #13 #14
Copy #23 *#E+2
If *#E+3 #15 #16
Copy #23 *#E+3
If *#E+4 #17 #18
Copy #23 *#E+4
If *#E+5 #19 #20
Copy #23 *#E+5
If *#E+6 #21 #22
Copy #23 *#E+6
Block #E
Flag

私はこれがもたらす一種の違いを楽しみにしています。5行目の#5は無限ループを引き起こしますが、これらの#7も意図したものではないでしょう。
オーバーアクター14

@overactorありがとう、これらは余分な行を追加することによって作成されたエラーでした。
PhiNotPi 14

痛みを知っていますか。
オーバーアクター14

1

ブランド変更

Move
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
Copy 0 C
If *#E=#14 #11 #9
If *#E==#14 #13 #12
Copy D+1 D
Copy #14 *#E
Flag

このボットは、敵ボット内のフラグをランダムに見つけて友好的なフラグに置き換え、成功を検出した後、それらを無効にします。Cancerボットに触発されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.