O xadrez hexagonal descreve uma família de variantes de xadrez jogadas em um tabuleiro em que as células são hexágonos em vez dos quadrados tradicionais. Existem muitas dessas variantes; neste desafio, focaremos na variante de Gliński, que é a mais comum.
O tabuleiro é composto de três cores (para que a mesma cor não compartilhe uma borda), com as bordas dos hexágonos voltadas para os jogadores. O quadro possui 11 arquivos, marcados com letras a
a l
(carta j
não é usada) e 11 fileiras (que dobram 60 ° no arquivo f
). As classificações 1
em 6
cada uma contêm 11 células, a classificação 7
possui 9 células, a classificação 8
possui 7 e assim por diante. A classificação 11
contém exatamente uma célula: f11 . (Se ajudar, pense em cada classificação como formando um "V" muito amplo.)
Aqui está um exemplo de quadro do quadro, com o cavaleiro na célula central. As células marcadas com um ponto são os movimentos legais desse cavaleiro em particular. O cavaleiro se move de maneira semelhante ao xadrez "normal", dois para baixo e um para cima. Em termos de xadrez hexagonal, é um movimento ortogonal (através de uma aresta), depois um movimento diagonal na mesma direção (o movimento mais próximo da mesma cor). Por exemplo, com o cavaleiro abaixo, um movimento ortogonal "para cima" para o marrom claro é então acompanhado por um movimento diagonal "para cima e para a direita" ou "para cima e para a esquerda" para o marrom mais próximo.
Do domínio público via https://commons.wikimedia.org/wiki/File:Glinski_Chess_Knight.svg
Este cavaleiro está posicionado em f6 e os movimentos legais são assim
c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5
Entrada
Uma única entrada dando a célula inicial do nosso cavaleiro. Pode ser como uma única sequência "b6"
, como duas "b", "6"
, etc., em qualquer formato conveniente . As letras de entrada podem ser maiúsculas ou minúsculas - sua escolha.
Resultado
Uma lista dos movimentos válidos que um cavaleiro nesse local pode fazer. Pode ser como uma matriz de seqüências de caracteres, uma única sequência com um delimitador inequívoco e consistente, sequências separadas por novas linhas etc., o que for mais conveniente. A saída não precisa necessariamente estar em ordem classificada e pode estar em maiúscula ou minúscula - sua escolha.
Regras
- Suponha que não haja outras peças no tabuleiro ou interfira nos movimentos. Estamos nos concentrando apenas no cavaleiro.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Exemplos
b6
a3, c4, d5, d9, e7, e8
f6
c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5
f11
d8, e8, g8, h8
i1
f2, f3, g4, h4, l2, k3
fonte
Respostas:
JavaScript (ES6), 184 bytes
Pega o arquivo
F
como um caractere e a classificaçãoR
como um inteiro na sintaxe de curry(F)(R)
. Retorna uma matriz de seqüências de caracteres.Quão?
Etapa 1: converter arquivo / classificação em coordenadas cartesianas
Convertemos as coordenadas hexagonais do xadrez em coordenadas cartesianas (x, y) com x em [0 .. 10] e y em [0 .. 20] :
Etapa 2: aplicar os vetores de movimentação
Abaixo está a lista dos vetores de movimento no sistema cartesiano:
Aplicamos cada uma delas às coordenadas de origem (x, y) e obtemos uma lista de coordenadas de destino (X, Y) .
Etapa 3: testar as coordenadas de destino
Agora precisamos verificar quais coordenadas alvo estão realmente localizadas dentro do quadro. Isso é feito testando X + Y e X - Y :
As coordenadas são válidas se todas as seguintes comparações forem verdadeiras:
Também devemos verificar se X está em [0 .. 10] . Isso não é feito explicitamente porque
s[X]
é indefinido, se não for, o que eventualmente resulta em um valor falso que é filtrado.Etapa # 4: converter novamente em coordenadas hexagonais de xadrez
Finalmente, as coordenadas alvo válidas são convertidas novamente em coordenadas hexagonais de xadrez, usando o inverso das fórmulas descritas na etapa 1.
Casos de teste
Mostrar snippet de código
fonte
Lote. 403 bytes
Ajusta o sistema de coordenadas, embora de uma maneira diferente da resposta de @ Arnauld. A
c
sub-rotina aproveita a simetria tentando o reflexo no espelho de cada movimento. (Eu também tentei girar, mas isso levou muitos bytes.)fonte
JavaScript (ES6), 184 bytes
Pensei em portar minha solução Batch para o ES6 para ver como ela se comparava ... não esperava que fosse tão perto ...
fonte
CJam, 77
Experimente online
Visão geral:
Estou usando um sistema de coordenadas que se parece com a..f e 1..6 no lado esquerdo, estendido sem dobrar, com letras substituídas por números e alterado para ser baseado em 0 (b3 → [1 2], g1 → [6 1], k3 → [9 6]). Os movimentos relativos neste sistema são [1 3], [2 -1], [2 3] e seus reflexos (negativos e trocados, por exemplo, [1 3] → [-1 -3], [3 1], [- 3 -1]). Uma posição [xy] resultante é válida se [xyz] ⊂ [0 1 .. 10] em que z = x-y + 5.
fonte
Dyalog APL, 72 bytes
experimentar
cria uma lista
a
de todas as células válidas:'A1' 'A2' ... 'L6'
a
é usado para entrada e saídaconstrói uma lista
j
das coordenadas correspondentesa
em um sistema em que o eixo x está aoA6-L1
longo de y ao longoF1-F11
uma terceira coordenada imaginária é a diferença dos dois primeiros
se a célula de entrada é convertida em cordas
0 0 0
, um cavaleiro pode se mover para aquelas células cujo produto das cordas é 6 ou -6fonte
Python 3.6, 149
Uma função anônima chamada com duas strings para o arquivo e a classificação; retorna uma lista de strings.
Ungolfed:
fonte