Neste desafio, você deve desenhar o tabuleiro de xadrez abaixo e permitir movimentos.
1. Desenho
Cada quadrado branco possui espaços de 5x9.
Cada quadrado preto tem 5x9 dois pontos.
O quadro é cercado por uma borda de dois pontos.
As peças têm 5 caracteres de largura e ficam na linha inferior da praça no centro.
Os peões têm 4 caracteres de largura. Eles ficam ligeiramente fora do centro, à direita, com 3 quadrados em branco à esquerda e 2 quadrados em branco à direita. Eles ficam uma linha acima do fundo da praça.
Não deve haver espaços em branco fora da área do quadro, com exceção de uma nova linha de fuga opcional.
O tabuleiro e as peças de xadrez devem ser sorteados exatamente como mostrado, exceto que:
Você pode substituir os
:
quadrados pretos e a borda por um símbolo diferente e substituir as@
peças pretas por um símbolo diferente (mas não o mesmo usado para os quadrados pretos).Você pode mover os peões um caractere para a esquerda, se desejar.
.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: ::::::::: :::www::: _+_ ::::::::: ::::::::::
: |_|_| :: _,,::: (/) :::)@(::: )@( :::(/)::: _,, ::|_|_|:::
: |@| ::"- \~:: |@| :::|@|::: |@| :::|@|::: "- \~ :::|@|::::
: |@| :::|@|::: |@| :::|@|::: |@| :::|@|::: |@| :::|@|::::
: /@@@\ ::/@@@\:: /@@@\ ::/@@@\:: /@@@\ ::/@@@\:: /@@@\ ::/@@@\:::
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::()::: () ::::()::: () ::::()::: () ::::()::: () :
:::::)(::: )( ::::)(::: )( ::::)(::: )( ::::)(::: )( :
::::/@@\:: /@@\ :::/@@\:: /@@\ :::/@@\:: /@@\ :::/@@\:: /@@\ :
:::::::::: ::::::::: ::::::::: ::::::::: :
: ::::::::: ::::::::: ::::::::: ::::::::::
: ::::::::: ::::::::: ::::::::: ::::::::::
: ::::::::: ::::::::: ::::::::: ::::::::::
: ::::::::: ::::::::: ::::::::: ::::::::::
: ::::::::: ::::::::: ::::::::: ::::::::::
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::::::: ::::::::: ::::::::: ::::::::: :
: ::::::::: ::::::::: ::::::::: ::::::::::
: ::::::::: ::::::::: ::::::::: ::::::::::
: ::::::::: ::::::::: ::::::::: ::::::::::
: ::::::::: ::::::::: ::::::::: ::::::::::
: ::::::::: ::::::::: ::::::::: ::::::::::
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::::::: ::::::::: ::::::::: ::::::::: :
:::::::::: ::::::::: ::::::::: ::::::::: :
: ::::::::: ::::::::: ::::::::: ::::::::::
: () ::::()::: () ::::()::: () ::::()::: () ::::()::::
: )( ::::)(::: )( ::::)(::: )( ::::)(::: )( ::::)(::::
: /__\ :::/__\:: /__\ :::/__\:: /__\ :::/__\:: /__\ :::/__\:::
: ::::::::: ::::::::: ::::::::: ::::::::::
:::::::::: ::::::::: www :::_+_::: ::::::::: :
:::|_|_|:: _,, :::(/)::: ) ( :::) (::: (/) :::_,,::: |_|_| :
::::| |::: "- \~ :::| |::: | | :::| |::: | | ::"- \~:: | | :
::::| |::: | | :::| |::: | | :::| |::: | | :::| |::: | | :
:::/___\:: /___\ ::/___\:: /___\ ::/___\:: /___\ ::/___\:: /___\ :
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2. Movendo
As colunas são rotuladas como AH da esquerda para a direita e de 1 a 8 de baixo para cima. O usuário poderá inserir uma movimentação da seguinte forma:
<start column><start row><space><destination column><destination row>
Por exemplo, B1 C3
significa mover o cavaleiro para a praça em frente ao peão do bispo (supondo que o jogo acabou de começar).
Alternativamente, o sistema ICCF pode ser usado, no qual as colunas são rotuladas de 1 a 8 em vez de A a H. Portanto, o movimento do cavaleiro mencionado acima se torna 21 33
.
A imagem a seguir ( fonte ) esclarece os dois sistemas:
A jogada será executada e a nova prancha será exibida. Qualquer captura resultante deve ocorrer com o jogo de xadrez em movimento removendo o jogo de xadrez na praça de destino do tabuleiro.
Não há necessidade de verificar uma jogada de xadrez legal, pois isso já foi abordado em outros desafios: Menor programa de xadrez e Menor árbitro de xadrez Se o usuário tentar se mover de um quadrado vazio, seu programa ou função deve ignorar a jogada. Se o usuário tentar capturar uma peça aliada, você poderá ignorar o movimento ou permitir que a peça estacionária seja capturada.
Não há necessidade de apoiar en passant ou roque.
Você pode assumir que a entrada será bem formada, ou seja, sempre no formato descrito acima. As letras sempre estarão no mesmo caso, você pode decidir qual é o caso.
3. Pontuação e bônus
Isso é código de golfe. O menor código vence.
-10% de bônus se o seu programa ou função permitir promoção. O usuário digita uma terceira entrada, desta vez com uma das seguintes letras: QBR N. Isso só deve ser permitido se a movimentação terminar com um peão na última linha. O peão é trocado pela peça nomeada. QBRN.
-10% de bônus se o seu programa ou função implementar um movimento "desfazer" especial para a reversão de movimentos (desde o início do jogo, se necessário.) Obviamente, é possível para jogadores amadores fazer movimentos ilegais, e eles podem desejar desfazê-los. Você pode definir a entrada que o usuário deve fornecer para esse movimento "desfazer" (deve sempre ser o mesmo). O comportamento é indefinido se o usuário tentar desfazer além do início do jogo.
Soma de bônus, ou seja, se você optar pelos dois bônus, receberá -20%.
fonte
Respostas:
Oitava,
776688 bytes688:
{'foo','bar'}{i}
no lugar de um pouco mais['foo';'bar'](i,:)
Ainda nenhum dos bônus foi implementado.
Usa o sistema ICCF.
Pode não haver espaços à esquerda na descrição da movimentação e o campo de origem e destino deve ser separado por um único espaço em branco; portanto,
42 44
está correto, enquanto42 44
e42 44
não está.Versão um pouco não destruída:
fonte
Rubi,
715696693683 bytesEsta é uma solução bastante confusa, mas não tenho paciência para limpá-la ainda mais no momento.
Nenhum dos bônus foi feito.
Usa o sistema ICCF.
fonte
Pitão,
1136890753 bytesPedimos desculpas pela resposta parcial, mas sou um novato e gostei muito desse desafio. Eu sei que é provavelmente muito detalhado, mas aqui está o meu rascunho:
fonte
=
e, se umfor
ou umif
tiver apenas uma linha dentro, todos poderão seguir a mesma linha. Dê uma olhada em Dicas para jogar golfe em Python .