CodeBots 2:イベント駆動設計


11

Code Bots 2へようこそ!

前回のコードボット以来、あなたはレッスンを学びました。より多くのアクションをより少ない行に収めるためのより多くの方法を見つけようとしましたが、ついにそれを手に入れました。イベント駆動型のコードボットを作成します。

ボットは24行で構成する必要があります。各行は、次の2つの形式のいずれかに従います。

Condition:Action

または

Action

あなたのボットはまた、名前の5つの整数格納するのに十分な記憶域持っAてしますE。整数には、0〜23の値を格納できます。

各ターンで、条件の1つが真Cない限り、lineを実行します。その場合、Ctrueの条件の行番号が含まれ、その行が実行されます。各ターンの終わりに、C増加します。

利用可能な条件があります:

  1. Start最初のターンのみに当てはまります。これを1回だけコードに含める必要があります
  2. BotAt(N) Nで定義された場所にボットがある場合はtrue
  3. Equals(A,B) AがBに等しい場合はtrueです。異なるタイプにできますが、そうであれば、等しくなりません。
  4. Modified(A)A最後のターン中にコピーされた場合はtrueです。 A変数名、行、または条件でなければなりません
  5. Any(C1,C2,...) 条件のいずれかが真の場合に真
  6. None(C1,C2,...) どの条件も真でない場合は真
  7. All(C1,C2,...) すべての条件が真の場合は真
  8. Not(C)Cがfalseの場合、trueです。C条件でなければなりません。

変数は、次の形式のいずれかになります。最初の9つは数値であり、このページでNを使用する場合は常に使用できます。

  1. ABCDE
  2. 0から23までの数
  3. This 現在の行番号を返します
  4. Add(N1,N2,...) すべての値の合計を返します
  5. Sub(N1,N2) N1-N2を返します
  6. Mult(N1,N2,...) すべての値の積を返します
  7. Div(N1,N2) N1をN2で割った値を返します
  8. Mod(N1,N2) N1 mod N2を返します
  9. OVar(N) 変数名を受け入れ、相手の変数を返します
  10. Line(N) コードのN行目を返します
  11. Type(N) コードのN番目の行タイプを返します(タイプはアクションの名前です)
  12. Cond(N) N行目に条件を返します
  13. CondType(N) N行目に条件タイプを返します(タイプは条件の名前です)
  14. OLine(N) 相手のコードのN行目を返します
  15. OType(N) 相手のコードのN番目の行タイプを返します
  16. OCond(N) N行目に条件を返します
  17. OCondType(N) N行目に条件タイプを返します

AそしてB、あなたの個人的な使用のためでCあり、あなたのコードで実行する行を決定するためにD使用され、方向として使用されます。の各値はD、異なる正方形と方向のペアを参照します。E毎回ランダムな値を生成します。 DそしてE、それ以外の場合はランダムな値に初期化されます0

使用される方向はになります[North,East,South,West][D%4]。あなたの対戦相手は、その方向の直近の正方形のボットです。

次の4つのアクションを使用できます。

  1. MoveDth方向に1マス前方に移動します。そこにボットがある場合、移動しません。
  2. Copy(A,B)変数AをにコピーしますBB変数名を除き、数値にすることはできません。 AそしてB異なったタイプにすることはできません。行をコピーしても条件はコピーされません。
  3. Flag何もしません。 コード内のフラグが最も多いボットがポイントを獲得します。最も多くのポイントを持つボットが勝ちます。
  4. If(C,L1,L2)trueのL1場合に行を実行しC、そうでない場合に実行しL2ます。Cは条件でありL1L2行でなければなりません。

大きな絵

すべてのボットの50コピーが世界に配置されます。あなたの目標は、フラグをできるだけ多くのボットに入れることです。他のフラグタイプよりもフラグタイプが多いボットごとに、ポイントを獲得します。

ボットは次のように配置されます。

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

10回のゲームが実行され、すべてのゲームでポイントが平均化され、勝者が決定されます。

サイドノート

複数の条件が適用される場合、最もすぐに続く条件Startが実行されます

ボットは密集しますが、隣のボットを開始しません。(技術的には最後のCodeBotsと同じ形式になります)

この課題はサンドボックスに掲載されていないため(誰にもメリットがないため)、公平性や追加機能のために細部を変更する権利を留保します。また、CodeBotsランナーにバグがある場合は、ボットがそのバグに依存して成功したとしても、それを変更します。私はできるだけ公平になろうとしています。

再帰Ifステートメントは実行されません

ボットが24行より短い場合、残りの行は Flag

あなた自身にコピーするときに覚えているCこと、Cあなたのターンの終了時にインクリメントされます。

CodeBotsインタープリターはこちらにあります。簡単に実行できるように.jarファイルが含まれています。ボットをボットフォルダーに追加するだけです

スコア

  1. 893.9ボルグ
  2. 1.3 LazyLioness
  3. 0.9ディフェンダー
  4. 0.5フラッガー
  5. 0.4 CliqueBot
  6. 0.4潜行性
  7. 0.3攻撃者
  8. 0.3ガード
  9. 0.3シングルターゲット
  10. 0.2 FreezeBot
  11. 0.2センチネル
  12. 0.2ドライブバイ
  13. 0.0反潜行性
  14. 0.0 MoveBot
  15. 0.0クリークボルグ
  16. 0.0電卓
  17. 0.0 TestBot
  18. 0.0模倣者

更新

敵のコードを表示すると、コードの行が回転するようになりました。つまり、相手のライン1はライン14(またはどのライン)でもかまいません。ボットのオフセットは固定されており、相手から見た時にX量だけラインをオフセットします。相手の変数も同じ量だけ相殺されます。 同じゲーム内では変化しませんが、ゲームごとに変化します。CXX


ネイサン:「レイジーライオネス」をチェックして、報告したバグが正当なものかどうか(または昼食に出かけただけかどうか)を確認できますか?急ぐ必要はありません。投稿内容を確認してください。
COTO 14

@COTO申し訳ありませんが、学校は狂っています。私は今夜​​それに到達しようとします。
ネイサンメリル14

「すべて」条件は、コンマ区切りの条件リストに対して暗黙的にすることができます。エントリの読み取りが少し簡単になります。
ccarton 14

私はあなたのバグを見つけたと思います。FuctionParserオブジェクトはHashMapのキーとして使用されているため、適切なequalsメソッドが必要です。これにより、CliqueBotとLazy Lionessの問題が修正されます。プルリクエストを送信しました。
ccarton 14

HashMapのは値のみをmemoizes @ccarton、それは平等をテストするために使用されていません
ネイサンメリル

回答:


13

ボルグ

他のすべてのボットをそれ自体のクローンに変換します。抵抗しても無駄だ。

Start:Copy(2,A)                               # Cloning will begin at line 2
All(Not(BotAt(D)),Not(Equals(2,A))):Copy(2,A) # Reset A if the opp left before we were done
Not(BotAt(D)):Move
All(Equals(Line(Sub(This,3)),OLine(0)),Equals(Line(Sub(This,2)),OLine(1)),Equals(Line(Sub(This,1)),OLine(2)),Equals(Line(This),OLine(3)),Equals(Line(Add(This,1)),OLine(4)),Equals(Line(Add(This,2)),OLine(5)),Equals(Line(Add(This,3)),OLine(6)),Equals(Line(Add(This,4)),OLine(7)),Equals(Line(Add(This,5)),OLine(8))):Copy(E,D) #  Check if cloning is complete
All(Equals(A,2),Not(Equals(OCond(1),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(1)) # Copy freeze cond to OLine(1) before cloning starts
All(Equals(A,2),Not(Equals(OLine(1),Line(Add(This,3))))):Copy(Line(Add(This,3)),OLine(1)) # Copy freeze line
Not(Equals(Cond(Add(Sub(This,6),A)),OCond(A))):Copy(Cond(Add(Sub(This,6),A)),OCond(A))    # Copy Cond(A) to OCond(A)
Not(Equals(Line(Add(Sub(This,7),A)),OLine(A))):Copy(Line(Add(Sub(This,7),A)),OLine(A))    # Copy Line(A) to OLine(A)
Equals(A,A):Copy(Add(A,1),A) # Increment A. It will wrap around all 24 lines before the completion check matches

編集:私は彼を完了する前に相手が移動した場合にリセットする小さな修正。スコアには影響しないようですが、気分が良くなります。

編集#2:クローン作成プロセスが適切に完了したことを確認するためのより完全なチェックを追加しました(3行目)

編集#3:新しいランダムオフセットを処理するように更新します。ここでの難点は、新しいクローンのコードがランダムなオフセットに配置されることでした。つまり、独自の行の場所がわからないということです。つまり、自分の行へのすべての参照は、相対(to This)でなければなりません。相手の行番号は、とにかくランダムであるため、依然として絶対的です。


ねえ、このボットについてチャットできますか?chat.stackexchange.com/rooms/17128/…–
ネイサンメリル

@Nathan、最新の実行でこのエントリの最新バージョンを使用しましたか?
ccarton

このボットが他のボットに非常にうまく感染できることに驚いています。私はそれがどのように機能するかの概要を見てみたいです。
スパー

@ccartonいいえ。私はそれが更新されたことを知りませんでした。再実行。
ネイサンメリル

@Sparrコメントを追加しました。従うのがより簡単になることを願っています。ボットは、クローニングの指数関数的な効果のために非常に効果的だと思います。感染した各ボットは消え、他のボットに感染します。また、ダメージを受けた場合、自然にお互いを修復しようとします。
ccarton 14


3

電卓

このボットはこのチャレンジの目標を理解していないため、敵の数を計算することにしました。

Equals(Mod(OVar(E),5),0):Copy(Add(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),1):Copy(Sub(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),2):Copy(Mult(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),3):Copy(Div(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),4):Copy(Mod(OVar(A),OVar(B)),OVar(D))
Start:Move

結果をOVar(D)notに入れるべきAです!
メガトム14

@MegaTom完了;)
CommonGuy

3

クリークボット

Flag
Start: Copy(11,B)
Not(Equals(Line(20),Line(21))): If(Equals(Line(21),Line(22)),Line(7),Line(8))
Not(Equals(Line(21),Line(22))): If(Equals(Line(20),Line(21)),Line(9),Line(10))
All(BotAt(D),Not(Equals(11,OVar(B)))): If(Equals(Line(20),OLine(OVar(C))),Line(10),Line(11))
Any(BotAt(D),Equals(E,B)): Copy(Add(D,1),D)
Equals(1,1): Move
Copy(Line(21),Line(20))
Copy(Line(20),Line(21))
Copy(Line(21),Line(22))
If(Equals(Line(20),OLine(Sub(OVar(C),1))),Line(5),Line(12))
Copy(Line(20),OLine(OVar(C)))
Copy(Line(20),OLine(E))

自分のB価値を介して友人を認識し、他の人の行をフラグで埋めます。また、独自のフラグの1つの整合性を保持するために、ある程度の長さになります(この部分はかわいいですが、おそらくあまり有用ではありません)。

編集:当然のことながら、スコアによって判断すると、どこかにバグがあるようです。

行のインデックスが0で、コードのインデックスが1であると思われます。それをもっと早くチェックすべきだったはずです。すべてを1つ上げるために、最初にフラグを追加しました。


コントローラーでバグを見つけたと思います。私は彼にプルリクエストを送りました。彼がそれを受け入れるまで、あなたが好きなら私のフォークを試して、それがあなたのために働くかどうか私に知らせてください。
ccarton 14

このバグは最新バージョンで修正されています。
ネイサンメリル

2

ディフェンダー

Start:Copy(0,A)
Copy(0,B)
Flag
Flag
All(Modified(Line(2)),Equals(A,0)):Copy(1,A)
Copy(Line(3),Line(2))
Copy(0,A)
Copy(10,C)
All(Modified(Line(3)),Equals(B,0)):Copy(1,B)
Copy(Line(2),Line(3))
Copy(0,B)
BotAt(D):Copy(Line(2),OLine(E))


2

アタッカー

Start:Move
BotAt(D):Copy(Line(Add(Mod(E,6),4)),OLine(E))
Any(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Move
None(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Copy(E,D)

BotAt(D):Copy(Line(X),OLine(E))ラインXが含まれている場所をEquals(1,1):Flag...楽しみのために
seequ

@Sieg Lineはアクションのみをコピーし、条件はコピーしません。
メガトム14

私の圧倒的な戦術:(
seequ

2

シングルターゲット

Start:Move
All(BotAt(D),Not(Equals(OVar(D),D))): Copy(D,OVar(D))
BotAt(D):Copy(Line(E),OLine(E))
Equals(A,A):Move

あなたを追い詰めて、フラグでいっぱいにします!


All条件が必要)
ネイサン・メリル

2

陰湿な

Start:Flag           # comments -->                                                                                 # why move when we can fit another flag here?
Equals(E,0):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                  # 1/24 chance to turn left or right
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(Sub(OVar(C),1)))    # Copy the freeze condition
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(Add(This,4))))):Copy(Line(Add(This,4)),OLine(Sub(OVar(C),1)))    # Copy the flag-copying line
All(BotAt(D),Not(Equals(OLine(Add(OVar(C),0)),Line(Add(This,Add(4,Mod(E,14))))))):Copy(Line(Add(This,Add(4,Mod(E,14)))),OLine(Add(OVar(C),0))) # copy one of my flags to them
BotAt(D):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                     # turn left or right if we've infected our target
Equals(A,A):Move                                                                                                    # move if all else fails, also infection freeze condition
Copy(Line(Add(This,1)),Line(Add(This,Mod(E,22))))                                                                   # infection line 1
Flag                                                                                                                # first of many flags

前回のコンテストの同じ名前のボットと同様のアイデア。別のボットに到達するまで移動し、それをループに凍結して、フラグで独自のコードを上書きします。今回は、感染したボットが連続した行ではなくランダムな行を上書きするため、感染プロセスの効果はやや低下しますが、はるかに高速になります。


Line(4)少し簡略化できます。Add(OVar(C),0)同じであるOVar(C)Add(This,Add(4,Mod(E,14)))同じですAdd(This,4,Mod(E,14))
メガトム14

@MegaTom前の行の論理部分を揃えるために、最初の不要な追加を行いました。2つ目は、Addが複数のパラメーターを取ることができることを知らなかったためです。ありがとう
Sparr 14

1

ガール

Start: Move
BotAt(D):IF(Equals(Line(7),OLine(C)),Line(6),Line(5))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
Copy(Line(7),OLine(OVar(C)))
Copy(Cond(7),OCond(Sub(OVar(C),1)))

隣のロボットを攻撃します。


最後の行は、条件から行にコピーできません。
ネイサンメリル14

@NathanMerrill私はただ...その固定された
MegaTom

OConする必要がありますOCond
ネイサンメリル14

1

フリーズボット

Start:Move
All(BotAt(D),Not(Equals(OCond(1),Cond(5)))):Copy(Cond(5),OCond(1))
All(BotAt(D),Not(Equals(OLine(1),Line(6)))):Copy(Line(6),OLine(1))
All(BotAt(D),Equals(Mod(OVar(A),24),0)):Copy(Add(D,1),D)
BotAt(D):Copy(Line(20),OLine(OVar(A)))
Equals(A,A):Move
Copy(Add(A,1),A)

ループに陥って、独自のA変数を非表示にし、フラグを設定して次の犠牲者に移動します。


3行目:追加でD + 1を交換してください(D、1)
ネイサンメリル

Startは行0にあると仮定しています。これで、誰もがStartを2行目にするインセンティブになります。これにより、ばかげたエスカレーション/再
送信の

1

模倣者

Start:Move
BotAt(D):If(OCond(0),OLine(0),Line(2))
If(OCond(1),OLine(1),Line(3))
If(OCond(2),OLine(2),Line(4))
If(OCond(3),OLine(3),Line(5))
If(OCond(4),OLine(4),Line(6))
If(OCond(5),OLine(5),OLine(OVar(C)))
Not(BotAt(D)):If(BotAt(Add(D,1)),Line(8),Line(0))
Copy(Add(D,1),D)

あなたがすることを予測し、それをします。


追加でD + 1を交換してください(D、1)
ネイサンメリル

また、コマンドを行として渡すことはできません。あなたはどちらかに合格する必要がありOLineLine
ネイサンメリル

@NathanMerrill準備完了!(少なくともそうだと思う)
MegaTom 14

このボットは本当に私のコードをいくつかのトラブルにさらしましたが、それはあなたのせいではなく、私のせいでした。いくつかのバグがありますが、入れてくださいLine周り2、とAdd(D,1)の代わりにD+1
ネイサンメリル

1

怠zyなライオン

当初は「Lioness」だけでしたが、コンテストに最初に提出したものは、シミュレーターに導入しても文字通り何もしないことで「lazy」というタイトルを獲得しました。

彼女の無気力は、実際にはバグ(またはおそらくイベントモデルに対する私の誤解)によるもので、最初の3行の条件(フラグが上書きされないことを確認するための単純なパリティチェック)が時々、trueレムニスカイトループでレオをロックします。他のいくつかの条件(特に条件に依存するBotAt()条件)もtrue、隣接するボットが存在しないときに評価されます。最後に、シミュレーターをステップスルーするときMoveCopyディレクティブは明らかに無視されます。私の条件付きロジックチェーンはやや叙事詩的であるため、コードシミュレータにバグの余地が十分にあります。;)

いずれにせよ、エラー診断またはシミュレーターデバッグのいずれかのテストケースとしてLazy Lionessを送信します。そうすることで、それほど怠yではないLionessの出現につながり、ボットへの最初の真正な提出としてシミュレートおよび改良できます。 v2の競争。

何もしない

All(Not(Equals(Line(18),Line(21))),Equals(Line(21),Line(22))):Copy(Line(21),Line(18))
All(Not(Equals(Line(21),Line(22))),Equals(Line(22),Line(18))):Copy(Line(22),Line(21))
All(Not(Equals(Line(22),Line(18))),Equals(Line(18),Line(21))):Copy(Line(18),Line(22))
All(Any(BotAt(Add(D,1)),BotAt(Add(D,2)),BotAt(Add(D,3))),Not(BotAt(D))):Move
All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,1))),All(BotAt(Add(D,1)),BotAt(Add(D,2)))),Not(BotAt(Add(D,3)))):Copy(Add(D,3),D)
Any(All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,3))),All(BotAt(Add(D,2)),BotAt(Add(D,3)))),Not(BotAt(Add(D,1)))),All(BotAt(Add(D,1)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19))))):Copy(Add(D,1),D)
All(BotAt(Add(D,3)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19)))):Copy(Add(D,3),D)
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Not(Equals(OLine(2),Line(19)))):Copy(Cond(20),OCond(2))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(3),Line(18)))):Copy(Line(18),OLine(3))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(4),Line(21)))):Copy(Line(21),OLine(4))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(0),Cond(22)))):Copy(Cond(22),OCond(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(0),Line(17)))):Copy(Line(17),OLine(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(1),Cond(21)))):Copy(Cond(21),OCond(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(1),Line(20)))):Copy(Line(20),OLine(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(2),Line(19)))):Copy(Line(19),OLine(2))
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Equals(OLine(2),Line(19))):Copy(Add(D,A),D)
Equals(E,1):Copy(Add(A,2),A)
Any(Equals(E,4),Equals(E,8)):Copy(Add(D,E,A),D)
Not(Equals(A,A)):Flag
Not(Equals(A,A)):Copy(Line(3),OLine(E))
Equals(A,A):Move
Any(Equals(E,4),Equals(E,5),Equals(E,6),Equals(E,7),Equals(E,8),Equals(E,9)):Flag
Any(Equals(E,10),Equals(E,11),Equals(E,12),Equals(E,13)):Flag
Start:Copy(1,A)

バグは見られませんModifiedが、Equals

cliqueBotにも同じ問題があるようです。コンパイラのバグだと思います。
メガトム14

@MegaTom:Modified条件は無限ループへの招待です。パリティチェックを使用できない場合は、行を完全に削除します。入れるのに役立つ何か他のものを見つけます。;)
COTO 14

コントローラーでバグを見つけたと思います。私は彼にプルリクエストを送りました。彼がそれを受け入れるまで、あなたが好きなら私のフォークを試して、それがあなたのために働くかどうか私に知らせてください。
ccarton 14

1

歩sent

の改善Gard。最初の8行にフラグがある近くのボットにヒットします。(つまり、すべての最も使用されるもの)

flag
flag
Start:Copy(11,B)
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):If(Equals(OVar(D),Add(D,2)),Line(7),Line(8))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
copy(D,OVar(D))
copy(Line(Mod(E,2)),OLine(Mod(E,8)))
Not(Equals(Line(0),Line(1))):copy(Line(Add(9,Mod(E,16))),Line(Mod(E,2)))

3行目にブラケットの位置が間違っていると思います。最初のNotは正しく閉じられていません。私はそれがあるべきだと思うAll(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
ccarton

1

クリークボルグ

Flag
BotAt(D): Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1): Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start: Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))

CliqueBotとBorgテクノロジーを組み合わせて、ラインオフセットにもかかわらず、自身のコピーを認識するボットを作成しようとしています。また、行0ではなく、反対側のボットで最後に実行されたコード行でコピープロセスを開始します。これが機能することを確認しますが、私はテストしていませんが、かなり複雑です)。


追加でプラスを交換し、マイナスサブとしてください
ネイサン・メリル

1

ドライブバイ

締め切り前に最後の試行。

Flag
Flag
BotAt(D):Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1):Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start:Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))
BotAt(D):Copy(Add(D,1),D)
Equals(1,1):Move
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.