Introdução
O Connect Four é um jogo no qual você tenta obter quatro em sequência: horizontal, vertical ou diagonal. Neste código de golfe, tentaremos descobrir quem ganhou, considerando um tabuleiro de jogo. Sempre haverá um vencedor e apenas um vencedor.
Tarefa
Dado um quadro do Connect Four, descubra quem é o vencedor: X
ou Y
. Sempre haverá um vencedor e apenas um vencedor. O tamanho do tabuleiro sempre será de 6 por 7, como na figura do jogo.
Em um quadro, o quadro a seguir, nesse caso, X
é vermelho e Y
azul:
Sua entrada seria:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOXOO
OOOXXOO
OOXYYYY
Você pode separar as linhas do jogo por caracteres de nova linha (como acima), sem caracteres de divisão, dividir as linhas em uma matriz ou lista, ou pode inserir uma matriz de caracteres.
Saída correta para este exemplo:
Y
Y tem quatro seguidas; então, Y é o vencedor. Então, produzimos Y.
Casos de teste
Entrada:
OOOOOOO
OOOOOOO
OOOOOOO
OOOOOOO
OOYYOOO
OYXXXXO
Saída:
X
Entrada:
OOOOOOO
OOOOOOO
OOOOOOO
XXXXOOO
YXYYOOO
YXYYXYX
Saída:
X
Entrada:
YXYYXOO
XYXXYOO
XXXYYOO
YYYXXOO
XXYYYYO
XXYYXXO
Saída:
Y
Entrada:
OOOOOOO
OOOOOOO
OYOOOOO
OOYOOOO
OOOYOOO
OOOOYOO
Saída:
Y
Entrada:
OOOOOOO
OOOOOOO
OYOOOOX
OOYOOOX
OOOXOOX
OXOXYOX
Saída:
X
Pontuação
Menor número de bytes ganhos!
Respostas:
Geléia , 19 bytes
Experimente online!
O núcleo desta resposta é copiado da minha resposta para esta pergunta muito semelhante .
Explicação
Bastante simples: pegamos todas as linhas, colunas, diagonais e antidiagonais (como no validador n-rainhas), pegamos todas as substrings de comprimento 4 delas e as classificamos de maneira que a linha vencedora de 4 classifique o fim. (Precisamos do desempate, caso haja um
OOOO
adicional aoXXXX
orYYYY
.) Pegue o último elemento do último elemento e isso seráX
ouY
conforme necessário.fonte
Retina,
5148 bytesAgradecimentos a Martin Ender por salvar 3 bytes
Experimente Online!
Recebe entrada como uma lista de linhas separada por vírgula
fonte
(.{7}X){3}|XXX
a(.{7}X|X)\4\4
: tio.run/nexus/retina#fc4xCsMwDAXQPfcI2GC6NDS5QaeipcP/...\4
- você deseja repetir o efeito da.{7}
string, não da correspondência. (E grupos de equilíbrio seria provavelmente muito tempo.)Javascript (ES6), 54
55Editar 1 byte salvo graças @Arnauld
Eu apenas verifico se X é o vencedor, pois sempre haverá um vencedor e apenas um vencedor
Input é uma string com qualquer separador, como na resposta de @ Arnauld
fonte
Geléia ,
2522 bytesLeva uma lista de seqüências de caracteres (ou lista de lista de caracteres) formadas por
X
,Y
eO
(também funcionaria com substituições, de modo que o espaço tenha um ordinal inferior aos dois contadores).Experimente online! ou execute uma versão aumentada que use uma cadeia de linhas múltiplas.
Quão?
fonte
JavaScript (ES6),
777669 bytesEconomizou 7 bytes graças a Neil
Aceita entrada como uma string separada por algo , em que algo é basicamente qualquer caractere.
Casos de teste
Mostrar snippet de código
fonte
b.match()
? Deve economizar naRegExp
chamada.match()
estava fazendo uma conversão implícita paraRegExp
. Obrigado!Python 2 , 143 bytes
Leva uma lista de seqüências de caracteres ou uma lista de lista de caracteres. Codificado para 6 linhas por 7 colunas, conforme a especificação garante.
Experimente online!
fonte
PHP, 71 bytes
Versão Online
fonte
Python 2 ,
201143129128 128107 BytesDecidi adicionar horizontal, vertical e diagonal em uma lista e, em seguida, adicionar incremento e, em seguida, procurar por X por vezes. E como sempre haverá um vencedor, posso assumir que Y ganhou se X não. Este código leva uma matriz de todas as partes diferentes e lugares vazios.
Experimente online!
Créditos
fonte
i:] for
,i, r
,r] for
e1 for
.*(len(m)-1)
poderia ser*~-len(m)
. Como funciona.] for
e1 for
ainda estão lá.K (ngn / k) ,
5855 bytesExperimente online!
{
}
função com argumentox
+!6 7
todos os pares possíveis de 0..5 e 0..6{
}'
para cada um deles4#1-+!3 3
são 4 das 8 direções ortogonais:(1 1;1 0;1 -1;0 1)
3+[
]\&4
comece com uma lista de quatro zeros (&4
) e faça 3 etapas em cada uma das direçõesx+/:/:
comece de cada posição possível e siga as etapas em cada direção possível,/
concatenar. neste ponto, temos uma matriz de 4 listas de pares de coordenadas, algumas delas se estendendo além do quadrox ./:/:
procure as células correspondentes dex
88<
quais deles são"Y"
-s? (88 é o código ascii de"X"
)&/'
quais 4 listas consistem apenas de"Y"
-s? (e reduza cada)|/
existe pelo menos um desses? (ou reduzir)"XY"@
se falso retorno"X"
, se verdadeiro retorno"Y"
fonte
Zsh ,
207 ...159 bytesHistórico de versões: 4 iterações para ~ 25 bytes na primeira semana; mais 3 iterações para ~ 25 bytes 6 meses depois.
( primeiro ) ( segundo ) ( terceiro ) ( quarto ) ( quinto ) ( sexto )Experimente online!No rodapé, imprimo a placa de entrada e a matriz que construímos a partir dela para stderr. Role para baixo para depurar para vê-los. A matriz que construímos é muito mais longa agora, já
t
que um produto cartesiano com placa de entrada todas as chamadas. (Ei, encurtou o código em alguns bytes.)Há muito o que abordar aqui, então mudei os comentários (sexta edição) para uma essência anotada .
(tl; dr: concatena transposições da matriz original, mas mantenha-as separadas)
fonte