Alak fue inventado por el matemático AK Dewdney y descrito en su libro de 1984 Planiverse. Las reglas de Alak son simples:
Alak es un juego de dos jugadores que se juega en un tablero unidimensional con once máquinas tragamonedas. Cada ranura puede contener como máximo una pieza a la vez. Hay dos tipos de piezas, "x" y "o". Las x pertenecen a un jugador, las o al otro. La configuración inicial de la placa es:
xxxx___oooo
Los jugadores se turnan para moverse. En cada turno, cada jugador puede mover solo una pieza, una vez. Un jugador no puede dejar pasar su turno. Un jugador puede mover cualquiera de sus piezas a la siguiente ranura desocupada a su derecha o izquierda, lo que puede implicar saltar sobre las ranuras ocupadas. Un jugador no puede mover una pieza del costado del tablero.
Si un movimiento crea un patrón en el que las piezas del oponente están rodeadas, en ambos lados, por dos piezas del color del motor (sin ninguna ranura vacía desocupada que interviene), entonces esas piezas rodeadas se eliminan del tablero.
El objetivo del juego es eliminar todas las piezas de tu oponente, momento en el cual el juego termina. Quitar todo menos uno también finaliza el juego, ya que el oponente no puede rodearte con una sola pieza, por lo que siempre perderá en unos pocos movimientos de todos modos.
Encontré este juego en línea y me preguntaba: ¿se puede jugar al golf?
Reglas del golf
- Su código debe seguir todas las reglas del juego, manejar capturas, movimientos adecuados, etc. (la única excepción es que no tiene que agregar un bot, pero debe tener a ambos jugadores controlados de alguna manera, y un jugador debe ser humano).
- La entrada debe ser mover la pieza en el mosaico X al mosaico Y, o salir. Por ejemplo, puede usar
1 4
para decir 'mover esta pieza en la casilla 1 a la casilla 4'.quit
terminaría el programa, aunque usar Control- Csería aceptable. También debe verificar si un movimiento no es válido (saliendo del tablero o moviéndose a un lugar en el que tendría que cruzar los espacios desocupados para llegar o enviar un mensaje que no sea un par de fichas oquit
). - Salidas para los jugadores ganadores y no válidos deben ser
P1 WINS
,P2 WINS
yINVALID
, respectivamente. (Todos estos son 7 caracteres). - La salida debe mostrar el tablero. Eso es todo lo que se requiere.
- No importa si usa ayudas como fichas numeradas u otras piezas.
El desafío termina si:
- Una respuesta obtiene 50 votos
- Una respuesta sigue siendo la mejor votada durante 3 semanas, y no se publicaron otras respuestas en ese momento
y el desafío tiene al menos 3 respuestas (por lo que hay una competencia real).
Reglas del juego
- El jugador de la izquierda debe comenzar primero.
- Solo una pieza ocupa un cuadrado a la vez. Mueves la pieza hacia la izquierda o hacia la derecha hasta que golpea un espacio desocupado. El tablero no se ajusta y no puedes moverte por las áreas desocupadas. Por ejemplo:
xoo__o
. Aquí, elx
movimiento hacia la derecha cambiaría el tablero a_oox_o
.xxooo_
. Aquí, el extremo izquierdox
podría moverse para ceder_xooox
, lo que captura elo
s, yéndose_x___x
.x__oox
. Aquí, loso
s no se capturan (todavía hay una brecha). La captura no es posible porque no puede moverse a través de espacios desocupados. Elx
de la izquierda solo podía moverse un espacio, porque no hay otras piezas en el medio (al salir_x_oox
).
- Se pueden capturar varias piezas adyacentes a la vez si el grupo está rodeado por las piezas del oponente. Por ejemplo, desde
x_oox
a_xoox
capturará amboso
y dará como resultado_x__x
. - Si después de un movimiento, primero capturas las piezas del oponente , antes de verificar si tu propia pieza debe eliminarse. Toma dos ejemplos:
o_oxx
aoxox_
. Primero, el segundoo
es capturadoox_x_
, por lo que el primerox
permanece en el tablero.o_oox
aoxoo_
. Esta vez, ninguno de loso
s se captura, por lo quex
se captura en su lugar.- Si solo tienes una pieza, el juego termina, porque no puedes capturar con solo una pieza.
¡Que empiecen los juegos! Espero ver lo que se te ocurre.
fuente
Respuestas:
C,
617592 bytesDesenredado:
Realmente quería obtener este en ~ 400 bytes, pero hay muchas pequeñas reglas aquí y el procesamiento de entrada terminó siendo bastante desagradable. Definitivamente no he terminado con esto. Aquí hay un conjunto de ejecuciones de muestra que cubre casi todo:
Si he malinterpretado algo, ¡hágamelo saber!
fuente
printf("INVALID");
conputs("INVALID");
,o<2||x<2
cono<2|x<2
yprintf(b);while(!q){
confor(printf(b);!q;){
PHP - 505
Los avisos deben suprimirse redirigiendo
STDERR
a/dev/null
.Con espacio en blanco sano:
Con los casos de prueba de BrainSteel:
fuente
/dev/null
./dev/null
.Python 2,
536509448441 bytesLlamar a través de
a()
; los movimientos deben ingresarse en la formapiece,destination
(es decir,1,4
); Salga con Ctrl-C. Si alguien puede ver más potencial de golf, soy todo oídos.fuente
SpecBAS - 718 bytes
SpecBAS es una versión actualizada de Sinclair / ZX BASIC que puede ejecutarse fuera de un emulador. (Aún interpretado).
He utilizado algunas de las nuevas funciones para reducir el tamaño tanto como pude.
La línea 12 establece una expresión regular para buscar piezas "intercaladas" usando IF en línea y la línea 18 usa la naturaleza envolvente de INC (en lugar de decir
INC p: IF p=3 THEN LET p=1
)Salida (no se puede copiar desde la ventana de salida, así que captura de pantalla)
fuente
C #, 730 bytes
Me imagino que son posibles nuevas mejoras. Por otro lado, interpreté el
INVALID
resultado como finalizando la ejecución, por lo que es posible que deba solucionar ese problema para estar a la par con otras respuestas.fuente