Escreva o código mais curto que calcule todos os movimentos (legais) possíveis do jogador atual a partir de uma determinada string FEN. O que é uma string FEN? (Wikipedia)
- O código mais curto vence, o idioma não importa.
- Movimentos de saída devem obedecer regras de xadrez de movimento , exceto en passant , roque, e promoção do peão.
- Ignorar cheque, xeque-mate e impasse, o rei também não pode ser capturado.
Você pode definir saídas de forma diferente como você deseja (por exemplo: A2-A4
, A2A4
, a2a4
, a2->a4
...)
Casos de teste:
# ENTRADA 1: rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR w KQkq - 0 1
# OUTPUT 1 A2-A4, A2-A3, B2-B4, B2-B3, C2-C4, C2-C3, D2-D4, D2-D3, E2-E4, E2-E3, F2-F4, F2-F3, G2-G4, G2-G3, H2-H4, H2-H3, B1-A3, B1-C3, G1-F3, G1-H3
# ENTRADA 2 7k / 8/8/8/8/8 / PP6 / Q1q4K w - - 0 1
# SAÍDA 2 A1-B1, A1-C1, A2-A3, A2-A4, B2-B3, B2-B4, H1-H2, H1-G1, H1-G2
Respostas:
Bytes C - 391
Recebe a entrada como argumentos da linha de comando e imprime em stdout com os quadrados rotulados de 0 a 63.
OK, eu tinha alguns minutos, então tentei excluir todos os bits relacionados à detecção do cheque. Eu acho que agora não é muito eficiente ...
Versão com detecção de verificação de 478 bytes
fonte
also here is how test case input boards look like
). Dada a posição na imagem, a saída do caso de teste original estava correta de acordo com as regras.Java 1455
fonte
Python 553
649678O recuo de dois espaços é o caractere de tabulação, que economiza 5 bytes.
Ocorre-me que você provavelmente pode fazê-lo avaliar movimentos razoáveis para uma dobra decente e mantê-la abaixo de 1024 bytes :) Comecei a examinar outras questões de xadrez , mas não parece haver uma pergunta sobre o mecanismo de xadrez codegolf ...
fonte
B1C3
eH2H3
no primeiro exemplo mostrado na pergunta.H2H3
, eu quis dizerG1H3
- em outras palavras, seus cavaleiros brancos estão apenas virando à esquerda.Python
638637 (482?) BytesNota: depois
def O(y):
houver uma nova linha e um caractere de tabulação antesif
Nota: usando o módulo zlib, é possível obter um código fonte Python válido de 482 bytes, simplesmente compactando a fonte real:
fonte
JavaScript (E6) 481
492 550Editar Corrigido um bug desagradável no movimento de cavaleiros. Muito trabalho para manter a contagem de bytes igual.
(Sem contar espaços iniciais e novas linhas mantidas para facilitar a leitura)
Menos Golfe
Teste no console do FireFox / FireBug
Resultado
fonte
JAVA
631599594Corrigido um erro na versão de 599 bytes (obrigado Jack por apontar isso!) E reduziu o código para 594 bytes.
Compilar:
javac F.java
Executar:
java F 6pk/6pp/8/8/8/p7/PP4pp/Q2p2pK w - - 0 1
Saída:
B2B3 B2B4 B2A3 A1B1 A1C1 A1D1 H1H2 H1G1 H1G2
fonte
3Q4/p4r1k/P4pp1/4P3/5n2/3P4/4BbbP/RN3KN1 w - - 0 0
não estou vendo movimentosF1F2
ouF1G2
o rei é capaz de capturar?