Chasse aux oeufs de Pâques
Bot trouver oeuf avant lapin trouver oeuf. Bot heureux.
Aperçu
Il s'agit d'un défi du roi de la colline en l'honneur de Pâques et de la tradition de la chasse aux œufs de Pâques!
Votre bot a une vision de deux espaces dans toutes les directions, y compris des diagonales, créant un carré 5x5 autour de vous que vous pouvez voir. Il recherche des œufs et celui qui en trouve le plus gagne!
Le tableau
Le plateau sera composé de o
s, qui sont des œufs de Pâques, #
s, qui sont des murs, *
s, qui sont d'autres joueurs, et s, qui sont des espaces vides.
- Ce sera un carré avec une longueur de bord
(number of entries) * 3
. - Il sera entouré de murs.
- À l'intérieur des murs, il y aura un assortiment de murs en ligne droite placés au hasard
#
, qui auront une longueur aléatoire entre 2 et 10 inclus. Il y en aura(number of entries) * 3
. - Les œufs seront ensuite placés au hasard. Il y en aura
(number of entries) * 4
, et ils ne seront générés que sur descarrés blancs ( ).
- Il doit y avoir au moins 7 entrées pour que le processus de génération de carte fonctionne correctement.
Voici un JSFiddle qui générera une carte aléatoire pour que vous puissiez tester. Voici un exemple, avec (number of entries) = 7
:
#####################
# o ##
# # o ##
# #o ###### ##
###### # ##
## o # # ##
## o# #o# o o##
## #o # # o # #
## # o # # # #
## ## # # o # #
## # # o # # #
## # o # ## # # #
## # # # #
# o # ## # #
# o oo ##o #
#o ####### oo ## #
# # # #
# o o o# #
# o #### o o#
# #
#####################
Une fois le plateau généré, chaque joueur est placé sur une case aléatoire (espace vide).
Contribution
Vous prendrez six lignes d'entrée. Les cinq premières lignes sont votre champ de vision (les espaces hors limites du plateau seront représentés par X
, et l'espace du milieu le sera toujours *
, vous), et la sixième ligne sera vide (au début).
Production
Vous allez produire trois lignes. Tout d'abord, la direction dans laquelle vous souhaitez vous déplacer:
1 2 3
8 YOU 4
7 6 5
(9 est un no-op si vous ne voulez pas bouger), second, un de A
ttack, C
lounter ou N
othing (cela sera expliqué en profondeur bientôt), et la troisième ligne sera n'importe quelle chaîne de longueur jusqu'à 1024 Ce sera la mémoire de votre bot. Vous pouvez l'utiliser pour tout ce que vous souhaitez, ou vous pouvez le laisser vide. Cette mémoire sera alors la sixième ligne d'entrée de votre programme lors de la prochaine exécution.
Toutes les autres lignes de sortie sont ignorées et s'il n'y a qu'une seule ligne, la seconde est supposée vide.
En mouvement
Le processus suivant est utilisé pour déterminer où vous avez déménagé:
- Si, lorsque vous vous déplacez, vous vous retrouvez dans un espace vide (
), votre joueur est placé dans cet espace.
- Si vous vous retrouvez dans un mur (
#
), votre coup est ignoré et vous perdez votre tour. - Si vous vous retrouvez dans un œuf (
o
) ou sur un joueur (*
), ces informations sont stockées et seront utilisées une fois que tout le monde aura déménagé.
Une fois que tout le monde a déménagé, les ambiguïtés sont résolues.
S'il y a deux joueurs qui ont atterri sur le même espace, un combat se produit! C'est là que le A
/ C
/ N
entre en jeu. A
ttack bat thing N
(attaque normale), othing N
beats C
ounter (vous ne pouvez rien contrer) et C
ounter beats A
ttack (contre-attaque). Le joueur qui remporte ce combat reste sur sa case et le joueur qui perd retourne sur la case d'origine sur laquelle il a commencé. En cas d'égalité, les deux joueurs retournent où ils étaient.
Si un joueur perdant ou à égalité retourne là où il était et qu'il y a un autre joueur là-bas, il n'y a pas de combat et l'autre joueur reviendra également à sa case d'origine. Si cet espace a un autre joueur, ce joueur revient en arrière, et cela continue jusqu'à ce que tous les joueurs soient dans des espaces différents.
S'il y a trois joueurs ou plus sur une case, ils retournent tous à leur position d'origine.
Si un joueur est toujours debout sur un œuf ...
- Si le joueur le choisit
A
, l'œuf est détruit. - Si le joueur a choisi
C
, rien ne se passe et le joueur revient à son espace d'origine. - Si le joueur a choisi
N
, le joueur ramasse l'œuf! Le score du joueur est incrémenté de un et l'œuf est retiré.
Les langues
Vous pouvez utiliser n'importe quelle langue disponible gratuitement sur Windows, OSX et Linux, pour assurer l'équité entre chaque candidat. Si le code n'est pas librement exécutable mais peut être compilé ou empaqueté dans un format qui est, veuillez également inclure ce format dans votre réponse. Idéalement, si vous pouvez compiler votre code dans un langage plus courant (par exemple CoffeeScript -> JavaScript), veuillez le faire.
Notation
Votre score sera le nombre moyen d'oeufs que vous collectez sur dix courses. Une course se termine lorsque tous les œufs sont collectés ou lorsque les (number of entries * 25)
tours sont passés. Je vais m'assurer manuellement qu'il est possible d'atteindre tous les œufs pour chaque carte (en générant continuellement des cartes jusqu'à ce que tous les œufs soient accessibles).
Tableau d'affichage
Un tableau de bord sera ajouté lorsque toutes les conditions suivantes seront remplies:
- Au moins sept entrées valides avec un score positif ou nul (non sous-évalué) ont été soumises
- Au moins 48 heures se sont écoulées depuis la création de ce défi (UTC 14:23)
Les règles ne changeront pas pendant cette période pré-concours, sauf pour ajouter des clarifications là où une règle n'était pas claire. Une fois le tableau de bord mis en place, le programme de test sera également affiché ici afin que vous puissiez tester vos entrées. Le code de test pour cela est toujours en cours, mais il est jouable et cela fonctionne. Voici le dépôt GitHub.
9
, il ne pourra jamais être attaqué de manière significative. Si un autre joueur (B) marche sur cette case et gagne, A sera replacé sur sa case d'origine (qui est la même). Mais maintenant, il y a un affrontement parce que A et B sont là, donc B doit retourner sur sa propre place. Le résultat est donc indépendant du combat réel, B revient toujours au carré initial et A reste toujours sur place. Cela me permettrait d'écrire les deux qui pourraient aider une autre soumission en bloquant un chemin pour tout le monde.