战场上的所有机器人都突然被搞砸了,没人能解释原因。但是,只要他们仍然能够战斗,谁就会在乎-尽管Brainfuck是他们现在唯一能理解的语言。
自上次提交以来已经有一段时间了,所以我终于宣布BrainFuckedBotsForBattling的赢家:祝贺LymiaAluysia在NyurokiMagicalFantasy上获胜!
计分板
| 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年10月10日的最终成绩
EDIT6:由于过大的大小和运行时间而丢弃了日志。您可以通过取消注释中的行来自己生成它们RunThisTournament.py
。
EDIT5:在控制器中实现了缩写处理,不再有大量的运行时。这样做的副作用是数字和括号不再被视为注释。如果要提供带注释的版本,仍然可以使用它们,但是如果代码也有未注释的版本,这将非常有帮助,因此我不需要手动删除注释。谢谢!
EDIT4:更改了标题,因为该比赛已从热门网络问题中删除。感谢@Geobits指出这一点!
EDIT3:由于意外结果,在bf程序中删除的注释应立即修复。如果有人在删除自己的评论时遇到问题,请举报。
EDIT2:由于它在我相当慢的计算机上造成了运行异常,我将超时限制从100000个周期减少到10000个周期。并不是说有人将运行中的游戏的结果超出了这一点。
EDIT1:修复了转换脚本中的一个错误,该错误导致解释器不忽略注释程序中的数字。
描述
这是受BF Joust启发的Brainfuck锦标赛。两个机器人(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
两个机器人同时执行其动作,这被视为一个周期。10000个周期后或达到获胜条件之一后,游戏结束。如果其中一个程序结束,它只会停止执行操作直到游戏结束,但仍然可以获胜。
获奖条件
您的机器人在以下情况之一下获胜:
- 敌人的旗帜先于你的旗帜被清零
- 敌人将其指针移出磁带(
>
在您的旗帜上或<
独自执行) - 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对抗的唯一情况是,其速度足以使其敌人在对手建立大型诱饵之前到达其旗帜。