Alak foi inventado pelo matemático AK Dewdney e descrito em seu livro de 1984, Planiverse. As regras do Alak são simples:
Alak é um jogo para dois jogadores jogado em um tabuleiro unidimensional com onze slots. Cada slot pode conter no máximo uma peça de cada vez. Existem dois tipos de peças, "x" e "o". x pertence a um jogador, o é ao outro. A configuração inicial da placa é:
xxxx___oooo
Os jogadores se revezam em movimento. A cada turno, cada jogador pode mover apenas uma peça, uma vez. Um jogador não pode deixar passar o seu turno. Um jogador pode mover qualquer uma de suas peças para o próximo slot desocupado, à sua direita ou esquerda, o que pode envolver saltar sobre os slots ocupados. Um jogador não pode mover uma peça para o lado do tabuleiro.
Se um movimento cria um padrão em que as peças do oponente são cercadas, em ambos os lados, por duas peças da cor do movedor (sem nenhum espaço em branco desocupado), essas peças cercadas são removidas do tabuleiro.
O objetivo do jogo é remover todas as peças do seu oponente, quando o jogo termina. A remoção de tudo menos um termina o jogo também, já que o adversário não pode cercá-lo com uma peça e, portanto, sempre perde alguns movimentos.
Encontrei este jogo online e fiquei pensando: ele pode ser jogado de golfe?
Regras do golfe
- Seu código deve seguir todas as regras do jogo, lidar com capturas, movimentação adequada etc. (a única exceção é que você não precisa adicionar um bot, mas você deve ter os dois jogadores controlados de alguma forma e um jogador deve ser humano).
- A entrada deve ser movida na peça X para a peça Y ou sair. Por exemplo, você pode usar
1 4
para dizer 'mover esta peça do ladrilho 1 para o ladrilho 4'.quit
terminaria o programa, apesar de usar Control- Cseria aceitável. Você também deve verificar se uma movimentação é inválida (saindo do quadro ou movendo-se para algum lugar em que você precisaria atravessar espaços desocupados para chegar ou enviar uma mensagem que não seja um par de blocos ouquit
). - Saídas para jogadores vencedores e inválida deve ser
P1 WINS
,P2 WINS
eINVALID
, respectivamente. (Todos esses são 7 caracteres.) - A saída deve mostrar a placa. É tudo o que é necessário.
- Não importa se você usa algum auxílio, como peças numeradas ou outras peças.
O desafio termina se:
- Uma resposta recebe 50 votos
- Uma resposta continua sendo a mais votada por 3 semanas e nenhuma outra resposta foi publicada nesse período
e o desafio tem pelo menos três respostas (por isso há uma concorrência real).
Regras do jogo
- O jogador à esquerda deve começar primeiro.
- Apenas uma peça ocupa um quadrado de cada vez. Você move a peça para a esquerda ou direita até atingir um espaço desocupado. O quadro não quebra e você não pode se mover por áreas desocupadas. Por exemplo:
xoo__o
. Aqui, ox
movimento à direita mudaria o quadro para_oox_o
.xxooo_
. Aqui, a extrema esquerdax
pode mover-se para render_xooox
, que captura oso
s, saindo_x___x
.x__oox
. Aqui, oso
s não são capturados (ainda há uma lacuna). A captura não é possível porque você não pode se mover por espaços desocupados. Ax
esquerda pode mover apenas um espaço, porque não há outras peças no meio (saindo_x_oox
).
- Várias peças adjacentes podem ser capturadas de uma só vez se o grupo estiver cercado pelas peças do oponente. Por exemplo, de
x_oox
para_xoox
capturará ambos seo
resultará em_x__x
. - Se após um movimento, você primeiro captura as peças do oponente , antes de verificar se sua própria peça deve ser removida. Veja dois exemplos:
o_oxx
paraoxox_
. Primeiro, o segundoo
é capturado eox_x_
, portanto, o primeirox
permanece no quadro.o_oox
paraoxoo_
. Desta vez, nenhum doso
s é capturado, então ox
é capturado.- Se você tiver apenas uma peça, o jogo termina, porque você não pode capturar com apenas uma peça.
Que os jogos comecem! Estou ansioso para ver o que você cria.
fonte
Respostas:
C,
617592 bytesDesvendado:
Eu realmente queria obter este em ~ 400 bytes, mas existem muitas regras aqui e o processamento de entrada acabou sendo desagradável. Definitivamente ainda não acabei com isso. Aqui está um conjunto de execuções de amostra que cobrem quase tudo:
Se eu interpretei algo errado, entre em contato!
fonte
printf("INVALID");
computs("INVALID");
,o<2||x<2
como<2|x<2
eprintf(b);while(!q){
comfor(printf(b);!q;){
PHP - 505
Os avisos devem ser suprimidos redirecionando
STDERR
para/dev/null
.Com espaço em branco são:
Com os casos de teste do BrainSteel:
fonte
/dev/null
./dev/null
.Python 2,
536509448441 bytesLigar via
a()
; movimentos devem ser inseridos no formuláriopiece,destination
(ou seja1,4
); saia com Ctrl-C. Se alguém pode ver mais potencial de golfe, sou todo ouvidos.fonte
SpecBAS - 718 bytes
O SpecBAS é uma versão atualizada do Sinclair / ZX BASIC que pode ser executada fora de um emulador. (Ainda interpretado).
Usei alguns dos novos recursos para diminuir o tamanho o máximo que pude.
A linha 12 configura um regex para procurar peças "imprensadas" usando IF em linha e a linha 18 usa a natureza envolvente do INC (em vez de dizer
INC p: IF p=3 THEN LET p=1
)Saída (não é possível copiar da viúva de saída, portanto, captura de tela)
fonte
C #, 730 bytes
Eu imagino que outras melhorias sejam possíveis. Por outro lado, interpretei a
INVALID
saída como finalizando a execução, portanto, talvez seja necessário corrigir esse problema para estar em paridade com outras respostas.fonte