Tous les robots de l'arène de combat ont soudainement été pris au piège et personne ne peut expliquer pourquoi. Mais peu importe, tant qu'ils sont encore capables de se battre - même si Brainfuck est la seule langue qu'ils comprennent maintenant.
Cela fait un moment depuis la dernière soumission alors je vais enfin annoncer le gagnant de BrainFuckedBotsForBattling: Félicitations à LymiaAluysia pour sa victoire avec NyurokiMagicalFantasy!
Tableau de bord
| 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 |
Résultats finaux du 09.10.2014
EDIT6 : Journaux supprimés en raison de leur taille et de leur temps d'exécution extrêmes. Vous pouvez les générer vous-même en décommentant les lignes RunThisTournament.py
.
EDIT5 : Gestion des abréviations implémentée dans le contrôleur, plus de temps d'exécution énorme. Cela a pour effet secondaire que les nombres et les parenthèses ne sont plus traités comme des commentaires. Vous pouvez toujours les utiliser si vous souhaitez fournir une version annotée, mais il serait très utile qu'il existe également une version non commentée de votre code . Je n'ai donc pas besoin de supprimer les commentaires manuellement. Merci!
EDIT4 : Changement du titre, car le tournoi a été retiré des questions brûlantes du réseau. Merci à @Geobits pour l'avoir signalé!
EDIT3 : Les commentaires supprimés dans les programmes bf, dus à un résultat inattendu, devraient être corrigés maintenant. Si quelqu'un a un problème avec la suppression de ses commentaires, veuillez le signaler.
EDIT2 : Puisqu'il a provoqué une exécution arcanique sur mon ordinateur très lent, j'ai réduit la limite de délai d'attente de 100 000 cycles à 10 000 cycles. Ce n’est pas que quiconque ait tourné le résultat d’un jeu en cours au-delà de ce point de toute façon.
EDIT1 : Correction d'un bug dans le script de conversion empêchant l'interprète d'ignorer les nombres dans les programmes commentés.
La description
Il s’agit d’un tournoi Brainfuck inspiré par BF Joust . Deux robots (programmes Brainfuck) se battent dans une arène représentée par une bande mémoire. Chaque cellule peut contenir des valeurs comprises entre -127 et 128 et être renvoyées à leurs limites (donc 128 + 1 = -127).
Les instructions valides sont similaires à Brainfuck ordinaire, ce qui signifie:
+ : 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
L’arène a une taille de 10 à 30 cellules qui est choisie de manière pseudo-aléatoire à chaque bataille. Aux deux extrémités se trouve un "drapeau" qui a une valeur initiale de 128, alors que toutes les autres cellules sont mises à zéro. Le but de votre bot est de mettre le drapeau de l'ennemi à zéro pendant 2 cycles consécutifs avant qu'il ne zéros votre drapeau.
Chaque bot commence à son propre drapeau, qui est la cellule [0] de son propre point de vue. L'adversaire est situé de l'autre côté de la bande.
[ 128 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 128 ]
^ ^
my bot other bot
Les deux robots exécutent leur action simultanément, ceci est considéré comme un cycle. Le jeu se termine après 10000 cycles ou dès que l’une des conditions gagnantes est atteinte. Si l'un des programmes arrive à son terme, il cesse tout simplement de faire son travail jusqu'à la fin du jeu, mais peut toujours gagner.
Conditions gagnantes
Votre bot gagne dans l'une des conditions suivantes:
- Le drapeau de votre ennemi est mis à zéro avant le vôtre
- Votre ennemi déplace son pointeur hors de la bande (s'exécute
>
sur votre drapeau ou<
sur le sien) - La valeur de votre drapeau est plus éloignée de 0 que la valeur du drapeau de votre adversaire après 10000 cycles
Règles
Votre message doit contenir un nom pour votre bot et son code.
- Vous pouvez utiliser la syntaxe d'abréviation suivante pour rendre votre code plus lisible:
- Par exemple,
(+)*4
est identique à++++
, ceci est valable pour toute instruction, à l' exception des crochets non appariés entre parenthèses, car la logique de la boucle entre en conflit avec la logique de l'abréviation. S'il vous plaît utiliser[-[-[-
au lieu de([-)*3
- Par exemple,
- Tout autre caractère qu'un
+-><[].
commentaire est donc ignoré, à l'exception()*
des abréviations.
Les bots qui ne suivent pas les règles seront exclus du tournoi.
- Seul le brainfuck de base est autorisé, aucune autre variante prenant en charge des procédures ou des opérations arithmétiques
- Le code source de votre bot ne doit pas contenir de crochets incomparables
Vous pouvez vous informer sur les stratégies de base, mais n'utilisez pas le code de quelqu'un d'autre pour votre propre bot.
Notation
Le score d'un bot est déterminé par le nombre de victoires contre tous les autres robots. Une rencontre entre deux robots consiste en 10 correspondances avec différentes longueurs de bande mémoire, ce qui donne un score maximum de 10 points par rencontre. Un match nul ne donne aucun point pour ce match.
Programme de contrôle
Vous pouvez trouver le programme de contrôle sur github, ainsi que les journaux complets des batailles. Le classement sera affiché ici une fois généré.
N'hésitez pas à cloner le référentiel et essayez vous-même votre bot contre les autres. Utilisez python Arena.py yourbot.bf otherbot.bf
pour exécuter une correspondance. Vous pouvez modifier les conditions avec les indicateurs de ligne de commande -m
et -t
. Si votre terminal ne prend pas en charge les séquences d'échappement ANSI, utilisez l' --no-color
indicateur pour désactiver la sortie en couleur.
Exemple de robots
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
Le DecoyBot remportera chaque match avec une longueur de bande supérieure à dix, étant donné que le FastClearBot peut éviter les petits leurres, mais pas les plus grands. La seule situation dans laquelle le FastClearBot peut gagner contre DecoyBot, c'est quand il est assez rapide pour atteindre le drapeau de l'ennemi avant que son adversaire ait construit de grands leurres.