CodeBots 2:事件驱动设计


11

欢迎使用Code Bots 2!

自上次代码漫游以来,您已经学到了教训。您试图找出更多的方法以更少的行数来适应更多的动作,现在您终于拥有了它。您将制作一个事件驱动的代码机器人。

您的漫游器必须由24行组成。每行遵循以下两种格式之一:

Condition:Action

要么

Action

您的漫游器还具有足够的存储空间来存储5个A通过命名的整数E。整数可以存储0到23之间的值。

每回合,您将执行line C除非其中一个条件为真。如果是这样,C则将包含条件为真的行号,然后将执行该行。在每个回合结束时,C将递增。

有可用条件:

  1. Start仅在第一回合才成立。您必须一次在您的代码中包含此代码
  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为假,则为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行返回条件类型

AB供您个人使用,C用于确定要在代码中执行的行,并D用作指示。每个值都D引用不同的正方形和方向对。E每次产生一个随机值。 D并且E将被初始化为随机值,否则0

使用的方向为[North,East,South,West][D%4]。您的对手是朝该方向紧邻的机器人。

您可以使用4种操作:

  1. MoveD沿th方向向前移动1格。如果那里有机器人,您将不会移动。
  2. Copy(A,B)会将变量复制ABB变量名除外,不能为数值。 AB不能为其他类型。复制行不会复制条件。
  3. Flag什么也没做。 代码中标记最多的机器人将获得分数。得分最高的机器人将获胜。
  4. If(C,L1,L2)L1如果C为true,则执行该行,否则执行L2C是一个条件,L1并且L2必须是直线。

大图景

每个机器人将有50个副本被投放到世界上。您的目标是让您的标志进入尽可能多的机器人。对于每个具有比其他任何标志类型更多的标志类型的机器人,您将获得一个分数。

机器人的位置如下:

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

将进行10场比赛,并且将在所有游戏中平均得分,从而确定获胜者。

旁注

如果有多个条件,Start则将立即执行紧随其后的条件

僵尸程序将被紧密打包,但您不会开始与另一个僵尸程序相邻。(技术上将与上一个CodeBots相同)

由于此挑战并未发布在沙盒中(不会给任何人带来优势),因此我保留更改小细节以保持公平或附加功能的权利。另外,如果CodeBots运行程序中存在错误,即使机器人依靠该错误获得成功,我也将对其进行更改。我正在努力做到公平

递归If语句将不会执行

如果您的漫游器短于24行,其余行将被填充 Flag

请记住,复制到自己的副本时C,该C值在回合结束时增加。

可以在此处找到CodeBots解释器。它包含一个.jar文件,以便于执行。只需将您的机器人添加到bots文件夹

分数

  1. 893.9博格
  2. 1.3懒惰
  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 CliqueBorg
  16. 0.0计算器
  17. 0.0测试宝
  18. 0.0模仿者

更新

现在,当您查看对手的代码时,代码行将旋转。这意味着,对手的第1行可能是第14行(或其他任何行)。机器人将有一个固定的偏移X量,当对手观看时,该偏移量将使其线偏移。对手的C变量也将偏移相同的X数量。 X在同一个游戏中不会改变,但是在不同游戏中会改变。


内森(Nathan):您是否可以查看“懒惰的母狮”以查看我报告的错误是否合法(或者我是否正要出去吃午餐)?不要着急 只要确保您知道提交即可。
COTO 2014年

@COTO对不起,学校发疯了。今晚我会尽力而为。
内森·美林

对于所有用逗号分隔的条件列表,可以将“全部”条件设为隐式。这将使阅读条目变得容易一些。
ccarton 2014年

我想我找到了您的错误。FuctionParser对象在HashMap中用作键,这意味着您需要适当的equals方法。这可以解决CliqueBot和可能的Lazy Lioness的问题。我向您发送了拉取请求。
ccarton 2014年

@ccarton HashMap仅记住值,不用于测试相等性
Nathan Merrill

Answers:


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

编辑:如果对手在我完成对战之前已移动,则重置A的小技巧。似乎并没有影响分数,但是这让我感觉更好。

编辑#2:添加了更完整的检查,以确保克隆过程已正确完成(第3行)

编辑#3:更新以处理新的随机偏移量。这里的困难在于,新克隆的代码将以随机偏移量放置,这意味着它们不知道自己行的位置。这意味着对我自己的行的所有引用都必须是相对于的This。对手的行号仍然可以是绝对的,因为它们仍然是随机的。


嘿,我们可以聊聊这个机器人吗?chat.stackexchange.com/rooms/17128/…–
Nathan Merrill

@Nathan,您在最近一次运行中是否使用了此条目的最新版本?
ccarton 2014年

我很惊讶这个机器人能够如此成功地感染其他机器人。我很想看看它的运作原理。
Sparr 2014年

@ccarton号 我没有意识到它已更新。正在运行。
内森·美林

@Sparr我添加了一些评论。希望这使跟踪变得更容易。由于克隆的指数效应,我认为该机器人非常有效。它感染的每个漫游器都会传播出去,并感染其他漫游器。同样,当受到损坏时,他们自然会尝试互相修复。
ccarton 2014年


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)A
MegaTom 2014年

@MegaTom完成;)
CommonGuy 2014年

3

CliqueBot

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价值来认识朋友,用标志填充其他人的台词。为了保留其自身标志之一的完整性,还花了一些时间(这部分很可爱,但可能不太有用)。

编辑:毫不奇怪,按分数判断,这里似乎有一个错误。

怀疑行是0索引的,而我的代码是1索引的。真的应该早点检查一下。在开始时添加了一个标志,以使所有内容都增加。


我想我在控制器中发现了错误。我向他发送了拉取请求。在他接受之前,您可以尝试使用我的叉子,并让我知道它是否适合您。
ccarton 2014年

该错误已在最新版本中修复。
内森·美林

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...的乐趣
参见

@Sieg Line仅复制动作,而不复制条件。
MegaTom 2014年

我的压倒战术:(
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))
MegaTom

@MegaTom我做了第一个不必要的添加,以使前几行的逻辑部分对齐。第二个原因是由于不知道Add可以采用多个参数。谢谢
Sparr 2014年

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)))

攻击旁边的任何机器人。


您的最后一行不能从条件复制到行。
内森·美林

@NathanMerrill我正在解决这个问题
MegaTom 2014年

OCon需要是OCond
Nathan Merrill 2014年

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行:请用Add(D,1)替换D + 1
Nathan Merrill

您假设Start在第0行上。现在,每个人都有动力将自己的开始放在第2行。这将导致愚蠢的升级/重新提交趋势:(
Sparr

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)

预测您将要做什么,然后执行。


请用Add(D,1)替换D + 1
Nathan Merrill 2014年

另外,您不能以命令行形式传递命令。您可能已在通过OLineLine
弥敦道美林

@NathanMerrill准备出发!(至少我认为是)
MegaTom 2014年

这个机器人确实使我的代码遇到了一些麻烦,但这是我的错,不是你的错。有一些错误,请放在Line周围2,而Add(D,1)不是D+1
Nathan Merrill

1

懒惰的母狮

最初只是我的“雌狮”,我第一次参加比赛时就因为在模拟器中一无所获而获得了“懒惰”的头衔。

实际上,她的嗜睡是由于一个错误(或者可能是我对事件模型的误解)造成的,其中前三行的情况(用于确保标志不被覆盖的简单奇偶校验)有时会莫名其妙地评估为true,将leo锁定在lemniscate循环中。当不存在相邻的漫游器时,BotAt()还会评估其他几个条件(尤其是那些依赖于该条件的条件)true。最后,MoveCopy指令显然通过模拟器步进时忽略。由于我的条件逻辑链有些史诗般的存在,因此我的代码模拟器中都有足够的错误空间。;)

无论如何,我都会将Lazy Lioness提交为错误诊断或模拟器调试的测试用例,这有望导致不太懒惰的Lioness的出现,然后我可以在对Bots的第一次正式提交时进行模拟和完善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
MegaTom 2014年

cliqueBot似乎有相同的问题。我认为这是一个编译器错误。
MegaTom

@MegaTom:Modified条件是无限循环的邀请。如果我不能使用奇偶校验,那么我将完全删除这些行。找出其他有用的东西来放入它们。;)
COTO 2014年

我想我在控制器中发现了错误。我向他发送了拉取请求。在他接受之前,您可以尝试使用我的叉子,并让我知道它是否适合您。
ccarton 2014年

1

哨兵

即兴表演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技术结合起来,创建一个即使行偏移也能够识别其自身副本的机器人。它还在相对的bot上最后执行的代码行(而不是第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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.