C'est un été sec dans la prairie. Les quatre agriculteurs de la région se rendent compte qu'ils peuvent accaparer le marché au maïs en brûlant les récoltes de leurs voisins. Mais ils ont besoin d'une stratégie pour le faire; c'est là que vous intervenez.
Votre tâche consiste à écrire un bot pour dire aux agriculteurs quoi brûler. Le but est de terminer le jeu avec la plus grande surface de terre non brûlée. Le terrain de jeu est une grille 32x32. Chaque cellule peut être l'une des suivantes:
. - Ground
@ - A bot
# - Ash
W - Wet ground
1,2,3,4,5, or 6 - Fire
Le feu augmente d'intensité de 1 à chaque tour. Une fois qu'il est 3 ou plus, il mettra le feu aux cellules à côté (horizontalement ou verticalement). Après que le feu ait touché 6, il se transforme en cendre.
À chaque tour, les bots reçoivent comme STDIN les éléments suivants: bot commençant x, bot commençant y, bot position actuelle x, bot position actuelle y et le tableau, séparés par des retours à la ligne. Un exemple:
8
22
6
24
................................
................................
................................
.....................1..........
....................1#1.........
...................1#363........
....................16@1........
.....................31.........
................................
.........1.1....................
........15#62...................
........15@2....................
.........32.....................
................................
................................
................................
................................
................................
................................
................................
................................
................................
....4.1.........................
.....1#3........................
.....@3.........................
.....W..........................
................................
................................
................................
................................
................................
................................
(dans ce cas, vous êtes le bot en bas à gauche).
Vous devez générer trois caractères, avec un retour à la ligne facultatif, représentant les éléments suivants:
Déplacer - l'un des L, R, U, D, or S (stay)
Action - l'un des B (burn), P (pour water) or X (do nothing)
Direction - l'une des L, R, U, D or S
- contrôle la cellule sur laquelle vous effectuez l'action
Le feu n'affecte pas les robots.
L'ordre des tours est le suivant: tous les bots se déplacent; tous les robots exécutent des actions; puis les règles environnementales se produisent. Si vous versez de l'eau sur le sol, elle sera mouillée ( W
) pendant un tour. Le feu ne se propage pas au sol humide. Si vous versez de l'eau sur un sol humide, elle restera humide. Si vous versez de l'eau en feu, elle redevient un sol ordinaire. Vous ne pouvez rien faire pour cendre.
Les tours se déroulent avec 4 bots à la fois. Le tour se termine après 50 tours, ou quand un bot manque de terrain non brûlé, selon la première éventualité. Votre score est calculé comme le nombre de cellules au sol ou au sol humide dans le carré 9x9 centré sur l'endroit où votre bot a commencé.
Voici un exemple de bot; il choisit les trois lettres au hasard et finit généralement par brûler ses propres champs.
RandomBurner:
#!/usr/bin/env python
import random
print random.choice('LRUDS')+random.choice('BPX')+random.choice('LRUDS')
Règles:
- Aucun accès au système de fichiers en dehors de votre propre dossier.
- Vous pouvez écrire dans des fichiers si vous avez besoin de stocker des données persistantes entre les tours, mais seulement jusqu'à un maximum de 1 Ko par bot
- Vous ne pouvez pas écraser le bot de quelqu'un d'autre
- Si vous produisez un mouvement invalide, votre bot restera immobile. Si vous générez une action non valide, votre bot ne fera rien.
- Veuillez vous en tenir aux langues courantes qui peuvent être exécutées sur une boîte OSX ou Linux.
Le code du contrôleur peut être trouvé ici.
Premiers résultats:
Average of 15 rounds:
---------------------
81 Farmer
56 CautiousBot
42 GetOff
41 Visigoth
40 DontBurnMeBro
37 FireFighter
35 Pyro
11 Protector
Mise à jour : ajout de Farmer, CautiousBot, GetOff, FireFighter et Pyro.
la source
Réponses:
Wisigoth
Wisigoth essaie de brûler ses ennemis au sol. Il espère le faire avant que quiconque arrive sur ses terres.
Courir:
python visigoth.py
Ceci est ma première entrée, la critique constructive est appréciée!
la source
min
là où j'aurais dû avoirmax
. Je l'ai corrigé.Java, protecteur
Tente d'entourer son champ d'une clôture de cendres.
Edit: Amélioration de la logique un peu. Cela ne fera probablement pas de différence.
Placer dans un fichier nommé
Protector.java
.Compiler avec:
javac Protector.java
Exécuter avec:
java Protector
la source
GetOff, Python
GetOff veut juste garder sa terre pour lui, et il n'a pas peur de chasser ces foutus robots partout sur sa terre, en les jetant avec son pistolet à eau jusqu'à leur départ. Bien que sa propriété ne soit pas violée, il fait de son mieux pour s'assurer que sa terre ne soit pas brûlée.
la source
a < b < c
syntaxe fonctionne- t-elle en Python? Je pensais que cela équivaut à(a < b) < c
, qui est soit1 < c
ou0 < c
. Corrigez-moi si je me trompe. (Trouvé dans la première conditionnelle de la boucle du bot.)1<3>2
évalue àTrue
sur ma machine (si c'était pour les grouper cela retournerait faux:1>2
et1<1
sont les possibilités).Agriculteur, Java
Le fermier ne se soucie que de ses récoltes. Il surveille constamment son champ pour d'éventuels incendies ou envahisseurs.
la source
isFire
vous pouvez utiliser à laCharacter.isDigit
place.Pyro, python
Pyro aime le feu. Pyro aime le feu. Pyro vit dans le feu. Je pense "Pyro de TF2". Pyro aime brûler des choses. Il ne brûlera pas son propre territoire, mais il essaiera de s'en sortir, en utilisant un simple algorithme de "pathfinding".
la source
DontBurnMeBro
Une autre entrée Python. Garanti de ne pas être le premier à mourir (je pense).
la source
P
pasW
.Pompier, Java
Combat tous les incendies.
la source
Keeper, Python 2
Pourrait être simplifié, mais je suis fatigué.
Le Gardien essaie de protéger son champ du mal. Si un incendie apparaît, il se précipite vers lui et l'éteint aussi vite qu'il le peut.
Je peux également ajouter un logement pour les incendies entrants.
la source
ValueError: min() arg is an empty sequence
- il lance des erreurs si rien n'est encore en feu.CautiousBot, Node.js (ES5)
Ce bot s'éteint et essaie de mettre le feu aux terres des autres bots. Il repose même au-dessus du feu pendant 3 ticks pour le cacher! Cependant, on ne peut jamais être trop prudent, il s'assure donc toujours qu'il est suffisamment proche pour éteindre les incendies sur son propre terrain.
Remarques:
state.json
stocké dans son répertoire de travail, utilisé pour stocker des informations sur les positions initiales des autres bots et pour déterminer la durée de masquage d'un tir démarré. Cela doit être supprimé une fois le tour terminé (par exemple, lorsqu'un bot a gagné). Sinon, le bot sera confus au prochain tour. (Faites-moi savoir si cela enfreint les règles.)split
module.la source
Error: Cannot find module 'split'
. J'utilise Node.js v0.10.30.cd botdir
npm install split
pour une raison quelconque, le nœud n'aime pas qu'il soit installé à l'échelle mondiale pour moi, mais vous pouvez également essayer cela