BrainF *** edBotsForBattling-Brainf ***锦标赛


88

战场上的所有机器人都突然被搞砸了,没人能解释原因。但是,只要他们仍然能够战斗,谁就会在乎-尽管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对抗的唯一情况是,其速度足以使其敌人在对手建立大型诱饵之前到达其旗帜。


5
原来,我喜欢。我只是担心这不会足够的战略深度,但这可能只是我自己。
ɐɔıʇǝɥʇuʎs

11
使用Befunge会更有趣。
IchBinKeinBaum

6
我找到了一个BF Jousting 网页,该网页可以运行并可视化比赛。
PhiNotPi 2014年

4
感谢您主持此KOTH,Cipher。必须完成大量的工作,提交的内容太多。
AndoDaan 2014年

3
我想对所有人的参与表示感谢^^
Cipher

Answers:


18

Nyuroki魔法幻想

我认为是时候变得认真起来了〜我完成了一点HLL的编译器工作,以简化BF Joust程序的编写。这是我第一次认真尝试用它做点什么。该机器人的概念非常简单。它设置了一些极性不同的诱饵,然后由于中间有反向偏移的大摆动摆动而发疯。

哦,顺便说一句,相对于上一轮的比赛,预期得分约为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

编辑:我从Nyuroki挤出了更多的胜利。

编辑2:嘿,看,我又做了一次!

编辑3:在Arena.py中使用愚蠢的解析错误进行了一段时间的努力之后,我终于有了另一个改进〜这就是我所说的“认真起来的时间”。<3


似乎Loke需要一些调整:-)喜欢您的语言。是你们之间有空格在Arena.py的bug )*之间或*和数量?
Sylwester 2014年

@Sylwester更糟。循环到不该去的地方:github.com/redevined/brainfuck/pull/6
Lymia Aluysia 2014年

恭喜#1。92.5%的胜率将很难匹敌。
Sylwester 2014年

做得好,但这不是速记滥用吗?嵌套循环实际上是21阶乘= 5 * 10 ^ 19。换句话说,它实际上无法扩展为基本的头脑操。
weston 2014年

1
@weston是的。而就在最发达的BF过不去的山大多数程序(codu.org/eso/bfjoust/in_egobot -看看SMARTLOCK处,例如)是雪上加霜。这并不是什么大不了的事情,因为这是速记的要点。这使得由于纯粹的长度而无法实施的策略是可行的。:)
Lymia Aluysia 2014年

43

隐形装置机器人

该机器人基本上试图隐藏其基础,以便其他机器人可以直接越过它并离开磁带。

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

4
非常聪明,不得不调整我的机器人来解决这个问题。
Moop

2
我认为这是这里最聪明的方法之一。
Almo 2014年

+ f代表第一个掩体。在我做完Ràn之后,我没有注意到这一点,但它是相似的想法,不同的应用。
Sylwester

19

Burly Balder v3

魁梧的秃头是中等程度的奔忙。在进入紧急模式之前,它会诱捕两个大型诱饵。在高峰模式下,它有一个循环,每个零像元仅使用4个步骤;当非零像元时,对[-18,18]进行了案例分析,然后用107盲减,然后用清除[-.]。他以242个步骤清除了未更改的标志,比不确定的清除多114个,比未清除的清除-*128 少14个[-]。清除牢房后,他继续留下-2个诱饵的痕迹。他只有索引9的特殊情况,才能保存大小为10的游戏的某些步骤,并且为牢房留出1个诱饵。

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

琐事:鲍德是北欧神和奥丁的儿子。他主要以他的死亡故事而闻名:他为自己的安全而感到恐惧,因此其他神灵试图预测并防御一切威胁。最终,他被洛基(Loki)杀害,因为他们保护他免受剑和箭的伤害,却忘记了保护他免受槲寄生的侵害。


2
你的诱饵正在杀死我。做得好。
AndoDaan 2014年

1
@AndoDaan谢谢。你BeatYouMate很聪明 我担心大多数机器人的诱饵在下一轮中会变得更大,直到受到惩罚为止。然后我们可能会出现一些更酷的策略:)
Sylwester 2014年

2
诱饵大小增加的问题在于,它在较短的磁带上要与快速攻击的机器人在性能上进行权衡。在10个随机回合中,最有效的位置更有可能根据其他条目的攻击速度而变化。
Comintern

2
是的,您仍然是值得击败的人。
AndoDaan 2014年

4
@AndoDaan有这么多的北欧神支持我,随机竞技场的规模似乎对我有利:-)
Sylwester 2014年

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 2014年

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%。真好
IngoBürk2014年

是的,我移动(> +>-)* 9时移动了18次,所以它会掉下来。愚蠢的错误。
Moop

即使通过交替将单元格加/减为零来保护Geronimo,也根本不会改变我的获胜率。交流发电机可能是这里的赢家-它使用很少的液压缸来设置相当难以破解的陷阱。
IngoBürk2014年

嘿,如果我记错了,请纠正我,但是如果木板长10个,该机器人不会自动移出木板吗?在将任何内容设置为零之前,它先移动了10个正方形。
Boschman,2014年

11

因此,这里的其他人使用遗传算法尝试在此处创建程序。好吧……很久以前,我为IRC频道中的一座山丘编写了BF Joust进化器。我决定也试一下这个比赛〜

而且...与其他拥有进化器的人不同,我的进化器实际上可以对程序进行更多的更改,而不是重复计数。:)

NestDarwin(第309代)

到目前为止,这是我的开发人员提出的最佳结果。在这种情况下,我不确定嵌套结构有多大帮助,但是,像这样的结构正是evolver能够做到的。2014年8月27日的预期成绩为474点。(通过在所有21种磁带长度上进行战斗并乘以10/21来计算。请注意,由于该山丘上还有一个额外的程序,因此未将其标准化)

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

编辑:更改的程序列表,我想进入这座山。一夜之间就跑了进化者。:)


编辑2:我去手动分析了进化器的输出。尽管看起来非常不同,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
祝贺第一名。遗传算法程序是否能够将您当前的版本用作模板并继续使用新版本进行进一步改进?
Sylwester 2014年

出色的表现,排名第一。我很高兴有一个遗传算法(很好,它的生成物)在那里出现了!
2014年

现在,如果我们可以利用所有游戏的结果,进一步发展,增加一些机器学习...那么我们可怜的人类将不再有任何机会:P
Sp3000

@Sylwester之类的?我的内部表示使用了一个(经过深思熟虑的)基因激活系统,该系统应该让它演化出超结构(实际上,实际上不是这样)。我不能把最终程序放回去并恢复内部表示,但是我可以将指令放到一个基因中,并让它继续发展(但是这会有所帮助)。
Lymia Aluysia'Aug

@ Sp3000不幸的是,我的算法几乎无法在发达的#esoteric山上取得进展。如果我能做这样的事情会很好,但是,a,我在遗传算法方面的技能还不够好。当我清理完所有丑陋的骇客后,有一天我可能会释放我的演进者。
Lymia Aluysia 2014年

10

北极熊Mk II

北极熊有两种:被困的北极熊和被困他人的北极熊

尝试猜测对手的极性,然后使用该信息将对手锁定为无限循环。在简单的清除策略下效果很好,而在其他策略上则效果很好。可以很容易地避免陷阱,因此以后我可能会添加一些备份策略。

>++>- 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吗?
Sylwester 2014年

@Sylwester我不能,因为另一半使用,+而另一半使用-
米卡·拉米

北极熊在胶印清除方面效果不佳...虽然很棒的想法
Sp3000

@ Sp3000您确定吗?我尝试了几种偏移量和极性(例如[(+)*3[-]][(-)*6[+]]),并且效果很好(至少对于很小的偏移量)。
米卡·拉米2014年

哦,我知道这是怎么回事:/我正在尝试类似的程序,例如>>>>>>>>>((-)*4[+][--.]>)*21,仔细检查单元格,您(+/-)*290正在导致触发第二个非同步循环。不是偏移清除的故障。
Sp3000

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代码,并使您的机器人程序变得比必要的慢一些。如果这些点是故意的,请随时纠正我!
密码

哦,对。我很傻,谢谢您删除它们:p
mmphilips 2014年

9

有人在吗?

定期回头查看以确定敌人何时开始清除诱饵,然后冲向前方。

似乎做得不错,但是我不确定这是因为策略还是仅仅因为我要在清除之前为每个单元格添加10。

编辑:修复了逻辑问题。第一次编写“头脑操”程序。它不辜负它的名字。

>>>+<(+)*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)。在更长的磁带上,这是杀手.。现在对Lightfoot Plodder进行更多的改装...
DLosc 2014年

9

瓦力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

该机器人的有效性基于两个事实:

  1. 大多数漫游器不会更改其标志的初始值。
  2. 建造大型诱饵比清除它们更快。

这些墙正在杀死我
-Sp3000

9

致命洛克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))

琐事:洛克(Loki)是北欧神话中的神,喜欢与所有人一起玩耍并欺骗他们。他是一个变形者(进入动物和人类),通常按照自己的方式行事。在故事中,他经常与其他神灵一起旅行并协助其他神灵,并做一些小技巧并煽动事情。除了杀死Balder外,他还生了Hel(地狱/ Helvete的女神),野兽Fenrir和启动Ragnarok(北欧大决战)的Midgard蛇。

这个怎么运作

开始时,他制作了一个大的(-17)诱饵,然后一直制作+-样式以索引7。他从向前扫描到13,留下(+ 10,-32)+诱饵的踪迹,但是当他检测到一组时,他将中止。并启动中* 1紧急模式。如果未设置任何单元,他还将启动慢速* 3高峰模式。

* 1在中速模式下,他在索引7-13之一中检测到对手的活动,并且从索引2开始。一些对手留下零,而另一些则留下不同的值,现在他可以在诱饵被诱捕之前检测出对手的活动。索引2-6(-32,+ 10)+。如果单元格不是期望值(-1,1),或者他完成了所有诱饵操作,则进入快速* 2冲刺模式。

* 2他期望已检测到他的快速冲动模式,因此诱饵无法工作。我们希望我们已经设置的那些能够阻止对手,并专注于穿越对手的诱饵。他会根据先前的扫描[9,14]或索引9开始冲到我们知道的最远点,如果我们早于此。他对第一个诱饵有特殊情况,我们只添加120和plodd 27,因为他不想将tha值减小到零以下(如果是陷阱),但是对于每个诱饵,在我们以[-8,8]摆动明确之后,才增加在继续前进到下一个单元之前,执行120个步骤并进行27个步骤。

慢冲模式已删除,因为它不影响当前坡度的得分,并且使我的机器人小了一点(但不多)。


3
现在我们开始看到精神错乱。我喜欢。
Sp3000

@ Sp3000 YandereBotv2是我除了增加诱饵和摆动值之外还需要思考新问题的原因。与上个回合所有机器人相比,它在对抗障碍方面的获胜率更高,因此您对竞技场大小并不满意。
Sylwester 2014年

也许啊哈哈-我想我需要一个针对不断增加的诱饵尺寸的对策:/我真的很喜欢您有不同的模式
Sp3000

感叹。我必须让BF Joust的HLL更好地工作,这样我的进化者才能再次有机会。在#1〜恭喜
Lymia Aluysia

@LymiaAluysia谢谢。我更对Balder感到惊讶。我指望使用NestDarwin,YandereBot和Mickey的新版本:-)
Sylwester

8

杰罗尼莫

比kaine的BestOffense机器人更具攻击性,因为它没有建立任何防御能力。这里的策略是:别人会尝试变得聪明,但聪明需要周期。因此,让我们跳到我们知道敌人所在的那一部分,并清除我们发现的所有内容。

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

似乎赢得了OP的示例机器人和kaine的机器人的大部分比赛。


7

SternBot

现在事情开始了,一个真正的半严肃的机器人。解决其中一些机器人的相似性。

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

1
SternBot给了我奇偶性问题:(
Sp3000 2014年

7

什么都不做

最好的防御(...)是无知。

.

它什么也没做。

编辑:哇,我惊讶地发现它比所有bots的至少20%还要好得多=)(这是否意味着它使用了高级策略或....?)


2
其他一些机器人在小型场所自杀。例如。赌徒直接进入第20单元,在10-19的比赛中,即使对阵DoNothingBot
Sylwester,2014年

2
出于好奇,我通过测试器(播放所有磁带长度)对其他条目进行了测试。看哪可耻 ... +1
共产国际片

哈哈,谢谢您的分享-我原本可能会有一两个败类,但我没想到它会“击败”那么多机器人=)
虚假的

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

TruthBot

一个简单高效的机器人。
创建一些陷阱,然后销毁另一个标志。

(>++>----)*4
>----
>
(
++++
[-]
>
)*99

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

不耐烦的钢丝(又名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-已编辑为在较小的板上做得更好,但由于敌人在绊网检查期间潜行而损失游戏而损失了游戏

先前版本: 1.2.1

(我需要一个更好的清晰算法:/)


1
OMG 411k完全扩展和剥离:-O Chiper的代码就挂在这上面。
Sylwester 2014年

只是改变了一些的意见,以便它现在有密码的新代码的工作
SP3000

自从最近一次编辑以来,括号中不匹配的括号的行为很奇怪,因为循环逻辑与缩写逻辑发生了冲突。我可以将类似的构造更改([)*300[[[ and so on吗?
密码

@Cipher是的,继续吧-尽管pastebin版本应该正好是这样
-Sp3000

1
3rd是一个不错的地方。做得好。
AndoDaan 2014年

5

莱特富特粉-编辑

基于Plodder,这个快速的庞然大物可以快速“快进”连续的0,直到达到非零值为止(这时它开始按预期方式弯曲)。

现在,通过更强大的撇取算法进行了改进,该算法还可以快速转发较小的诱饵和自己的较大诱饵。

编辑#2:如果发现更多零位,现在可以返回浏览。

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

尼斯的“方便”尺寸更改:)
Lily Chung

@IstvanChung 非常方便。;)任何其他因素都会使我的速度减慢太多,并失去其他几个机器人的得分。如果您使Bigger更大,我认为我不会努力保持同步。
DLosc

好吧,我将尺寸稍作调整以了解其工作原理。我认为Bigger也许可以拉出更大的尺寸,但没有时间对其进行全面测试。祝好运!
莉莉·钟

喜欢针对Cloacking机器人的反制措施,以及它实际上看起来像是BF编程的事实:)
Sylwester 2014年

5

勉强的Ránv2

该策略很容易。试着让对手认为自己的旗帜是诱饵,并越过篮板而松动(一种绊网/振动器)。经过10个完整的回合后,她放弃并尝试确定对手是否在她的旗帜上,如果不是,她将做出-17诱饵直到撞到一个固定的格。她使用的清算方法是[-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相同的方法来处理更新后的漫游器,但并发数量更多(30个而不是10个)。

针对所有60种bot进行了开发,包括BurlyBalderV3LethalLoke(但不包括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 Elliot: The Naming of Cats is a difficult matter, It isn't just one of your brainfuck bots
  • 我的java bf vm和遗传算法在github上
  • 虚拟机能够在4秒内在i7的单个内核上运行一次完整的锦标赛(警告-结果并不总是与锦标赛引擎相同)。

使用全部60个机器人会更好吗?
Sylwester 2014年

@Sylwester也许,我主要不是因为它太慢了。花了两个小时来做​​到这一点。同样,尽管它发展得较慢,但它不得不应对的机器人更多。我想如果它能击败顶尖球员,那就做得很好。我无法运行实际比赛来确认python麻烦。因此以为我只是将其发布并看到...
weston 2014年

@weston也许我们可以为您解决python的麻烦?
密码

@Cipher感谢,我在github上开设了一个问题 github.com/redevined/brainfuck/issues/2
韦斯顿

@Sylwester我现在使用大多数机器人,因为我的生成器更快且具有多线程。
weston 2014年

4

赌徒

这与我的Geronimo机器人密切相关。但是在Geronimo玩的很确定的地方,赌徒试图通过做自己最擅长的事情来更快-赌博:进入第20个单元格,然后从那里开始归零。

这意味着仅仅因为竞技场不那么大就可能轻易输掉比赛。但是,如果是这样,那可能就是几个周期。

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

趣闻:我真的在考虑进入一堆看起来像(>)*X(>[-])*Y在哪里X in 9..29和的机器人Y = 30 - X。但我认为,进入20个机器人将是一个有点太多:)或的四十如果我有两个版本,其中一个零s的[+]和一个用做它[-]


像13或14这样的数字会不会给您比20更好的胜率?
Moop

也许吧。我只想中间。有趣的是,如果我只向左走而不是向右走,我的获胜机会就会大大降低。本来应该相反。
IngoBürk2014年

由于每个机器人都在与其他机器人进行斗争,所以即使是其中40个机器人也不会给您带来太多的机会-而且我很难复制和粘贴:D
Cipher

4

Dumbot

一个非常愚蠢的机器人,它只会破坏环境,并希望与之抗争的所有机器人都从磁带中消失。

(+)*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
您的第二行实际上会通过加法将单元格归零,然后连续减去七次。
骄傲的haskeller 2014年

1
@proudhaskeller你是对的...那就是我试图以很少的睡眠去做Brainfuck的东西。只是简化了工作,而不是实际解决问题。
Sellyme 2014年

4

CropCircleBot

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

该机器人使用先进的算法,该算法由外星人通过他们放置在地球上的麦田怪圈传播。它将改变人类并提供巨大的技术进步,甚至解决许多环境问题。


您知道您不应该使用] [,对吗?
CalculatorFeline

我不,你能解释为什么吗?
瑕疵的2016年

当你离开一个循环中,当前单元格为0。然后,你跳过下一个循环,因为在指针细胞仍为0
CalculatorFeline

哦,我一直以为检查发生在循环的结尾?
瑕疵的

它也发生在开始时。在某些实现中,[不执行任何操作,但那是一种完全不同的语言(esolang wiki上的newbiefuck)
CalculatorFeline

4

BeatYouMate

而且因为每个人都应该发布一个将击败他们发布的第一个机器人的机器人,所以这是一个5倍以上诱饵铺设的机器人:

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

4

聪明而坚定

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

设置一些小陷阱,然后越过另一侧,并尝试清除零以上或以下的所有内容。失败----


+++以前[-]确实很聪明,可以避免简单的陷阱!
IngoBürk2014年

由于无法匹配而引发异常(,我可以将其视为评论吗?
密码

@密码,我会解决的,对不起。
isaacg 2014年

4

MetaJSRandomBot

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

该机器人背后的想法是使某些东西完全随机,这仍然是一个有效的js代码,没有太多的用处。我编写了以下代码(JSFiddle链接)来生成它。让我们看看它的效果如何=)

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个增量-这将使您跳离磁带的末端。
Comintern

2
这仍然会自行解决。
骄傲的haskeller 2014年

刚开始时,您有一个加号,然后是一个减号。2个浪费的周期。
weston

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