Alak a été inventé par le mathématicien AK Dewdney et décrit dans son livre Planiverse de 1984. Les règles d'Alak sont simples:
Alak est un jeu à deux joueurs joué sur un plateau unidimensionnel avec onze emplacements. Chaque emplacement peut contenir au plus une pièce à la fois. Il existe deux types de pièces, "x" et "o". les x appartiennent à un joueur, les o à l'autre. La configuration initiale de la carte est:
xxxx___oooo
Les joueurs se déplacent à tour de rôle. A chaque tour, chaque joueur ne peut déplacer qu'une seule pièce, une fois. Un joueur ne peut pas laisser passer son tour. Un joueur peut déplacer n'importe laquelle de ses pièces vers le prochain emplacement libre à sa droite ou sa gauche, ce qui peut impliquer de sauter par-dessus les emplacements occupés. Un joueur ne peut pas déplacer une pièce du côté du plateau.
Si un coup crée un motif où les pièces de l'adversaire sont entourées, des deux côtés, par deux pièces de la couleur du déménageur (sans emplacement vide inoccupé), alors ces pièces entourées sont retirées du plateau.
Le but du jeu est de retirer toutes les pièces de votre adversaire, point auquel le jeu se termine. La suppression de tout sauf un met également fin au jeu, car l'adversaire ne peut pas vous entourer d'une seule pièce, et perdra donc toujours en quelques mouvements de toute façon.
J'ai trouvé ce jeu en ligne et je me demandais: peut-il être joué au golf?
Règles du golf
- Votre code doit suivre toutes les règles du jeu, gérer les captures, se déplacer correctement, etc. (la seule exception est que vous n'avez pas besoin d'ajouter un bot, mais vous devez avoir les deux joueurs contrôlés d'une manière ou d'une autre et un joueur doit être humain).
- L'entrée doit être déplacer la pièce de la tuile X vers la tuile Y ou quitter. Par exemple, vous pouvez utiliser
1 4
pour dire «déplacer cette pièce de la tuile 1 à la tuile 4».quit
mettrait fin au programme, bien que l'utilisation de Control- Csoit acceptable. Vous devez également vérifier si un mouvement n'est pas valide (en sortant du plateau ou en vous déplaçant quelque part où vous devrez traverser des espaces inoccupés pour vous rendre ou envoyer un message qui n'est pas une paire de tuiles ouquit
). - Sorties pour les joueurs gagnants et invalides doivent être
P1 WINS
,P2 WINS
etINVALID
, respectivement. (Ce sont tous 7 caractères.) - La sortie doit montrer la carte. C'est tout ce qu'il faut.
- Peu importe si vous utilisez des aides comme des tuiles numérotées ou d'autres pièces.
Le défi prend fin si:
- Une réponse obtient 50 votes
- Une réponse reste le plus voté pendant 3 semaines, et aucune autre réponse n'a été publiée pendant cette période
et le défi a au moins 3 réponses (donc il y a une vraie compétition).
Règles du jeu
- Le joueur de gauche doit commencer en premier.
- Une seule pièce occupe un carré à la fois. Vous déplacez la pièce vers la gauche ou la droite jusqu'à ce qu'elle touche un espace inoccupé. Le plateau ne s'enroule pas et vous ne pouvez pas vous déplacer dans les zones inoccupées. Par exemple:
xoo__o
. Ici, lex
déplacement vers la droite changerait le conseil d'administration en_oox_o
.xxooo_
. Ici, la plus à gauchex
pourrait se déplacer pour céder_xooox
, ce qui capture leso
s, en partant_x___x
.x__oox
. Ici, leso
s ne sont pas capturés (il y a encore un écart). La capture n'est pas possible car vous ne pouvez pas vous déplacer dans les espaces inoccupés. Lax
gauche ne peut déplacer qu'un espace, car il n'y a pas d'autres pièces entre les deux (en partant_x_oox
).
- Plusieurs pièces adjacentes peuvent être capturées à la fois si le groupe est entouré par les pièces de l'adversaire. Par exemple, de
x_oox
à_xoox
capturera à la foiso
s et entraînera_x__x
. - Si après un coup, vous capturez d'abord les pièces de l' adversaire , avant de vérifier si votre propre pièce doit être retirée. Prenons deux exemples:
o_oxx
àoxox_
. Tout d'abord, le secondo
est capturé,ox_x_
donc le premierx
reste sur le plateau.o_oox
àoxoo_
. Cette fois, aucun deso
s n'est capturé, donc lex
est capturé à la place.- Si vous n'avez qu'une seule pièce, le jeu se termine, car vous ne pouvez pas capturer avec une seule pièce.
Que les jeux commencent! J'ai hâte de voir ce que vous proposez.
la source
Réponses:
C,
617592 octetsDémêlé:
Je voulais vraiment obtenir celui-ci en ~ 400 octets, mais il y a beaucoup de petites règles ici et le traitement d'entrée s'est avéré assez désagréable. Je n'en ai définitivement pas fini avec ça. Voici un ensemble d'exécutions qui couvre à peu près tout:
Si j'ai mal interprété quelque chose, faites-le moi savoir!
la source
printf("INVALID");
parputs("INVALID");
,o<2||x<2
aveco<2|x<2
etprintf(b);while(!q){
avecfor(printf(b);!q;){
PHP - 505
Les avis doivent être supprimés en redirigeant
STDERR
vers/dev/null
.Avec un espace sain:
Avec les cas de test de BrainSteel:
la source
/dev/null
./dev/null
.Python 2,
536509448441 octetsAppelez via
a()
; les mouvements doivent être saisis dans le formulairepiece,destination
(c.-à-d.1,4
); quittez avec Ctrl-C. Si quelqu'un peut voir plus de potentiel de golf, je suis à l'écoute.la source
SpecBAS - 718 octets
SpecBAS est une version mise à jour de Sinclair / ZX BASIC qui peut s'exécuter en dehors d'un émulateur. (Toujours interprété).
J'ai utilisé certaines des nouvelles fonctionnalités pour réduire la taille autant que possible.
La ligne 12 met en place une expression régulière pour rechercher des morceaux "pris en sandwich" en utilisant IF en ligne et la ligne 18 utilise la nature enveloppante de INC (plutôt que de dire
INC p: IF p=3 THEN LET p=1
)Sortie (impossible de copier à partir de la fenêtre de sortie, donc capture d'écran)
la source
C #, 730 octets
J'imagine que d'autres améliorations sont possibles. D'un autre côté, j'ai interprété la
INVALID
sortie comme mettant fin à l'exécution, donc je devrai peut-être résoudre ce problème pour être en parité avec les autres réponses.la source