Dada uma entrada de quatro números inteiros x 1 , y 1 , x 2 e y 2 , determine se um rei branco no xadrez (com coordenadas ( x 1 , y 1 )) poderia pegar um peão preto (com coordenadas ( x 2 , y 2 )) e capturá-lo se o peão estiver se movendo para promover a uma rainha o mais rápido possível.
As coordenadas do quadro são as seguintes:
first coordinate (x)
12345678
1 .#.#.#.#
2 #.#.#.#.
3 .#.#.#.#
second 4 #.#.#.#.
coordinate 5 .#.#.#.#
(y) 6 #.#.#.#.
7 .#.#.#.#
8 #.#.#.#.
Suponha que seja branco se mover (a vez do rei) e que ambos os jogadores joguem da melhor maneira (o rei se moverá o mais rápido possível para pegar o peão, e o peão se moverá o mais rápido possível para promover). As coordenadas de entrada sempre serão distintas e o peão nunca começará com uma coordenada y de 8.
O rei move um quadrado em qualquer direção a cada turno (pode se mover na diagonal), e o peão pode mover apenas um espaço para a frente (diminuir sua coordenada y), a menos que esteja na sua posição inicial (com nosso sistema de coordenadas, coordenada y de 7), caso em que pode mover dois espaços para a frente.
A entrada pode ser fornecida como uma cadeia de caracteres separada por espaço em branco / vírgula, uma matriz de cadeias / números inteiros ou quatro argumentos de função / linha de comando / etc. As coordenadas podem ser dadas na ordem que for mais conveniente / golfe (assim, aceitar entrada como [y 2 , y 1 , x 1 , y 2 ] é bom desde que seja consistente). A saída deve ser um valor verdadeiro ou falso .
Como esse é o código-golfe , o código mais curto em bytes vence.
Casos de teste de verdade :
5 3 3 2
6 1 1 7
3 3 3 2
4 1 4 7
7 7 1 7
1 8 1 7
Casos de teste de falsidade :
6 4 3 2
8 8 1 7
3 4 3 2
x1 y1 x2 y2
?1 8 1 7
, onde o rei captura antes que o peão possa mover dois espaços. Eu acho que todas as respostas agora entendem errado. Essa situação dificulta muito o problema.Respostas:
Gelatina , 33 bytes
Este programa lê as coordenadas a partir
x2\nx1\ny2\ny1
de STDIN. Experimente online!Versão não concorrente
Infelizmente, o intérprete Jelly teve um erro quando esta pergunta foi publicada. O referido bug impediu que ele aceitasse mais de dois argumentos da linha de comando. A versão mais recente do Jelly pode resolver a tarefa especificada em 23 bytes .
Experimente online!
fonte
Python 2,
5340O rei tem coordenadas
(x, y)
e o peão(p, q)
.Existem três casos significativos:
O peão está no rank 7 e o rei no rank 8. Para capturar o peão, o rei deve estar no mesmo arquivo ou em um adjacente.
Resultado:
q = 7 ⋀ y = 8 → |x - p| ≤ 1
O peão está no posto 7. Para capturar o peão, o rei deve estar dentro de seis arquivos.
Resultado:
q = 7 → |x - p| ≤ 6
O peão está em uma posição mais baixa. Para capturar o peão, o rei deve ser capaz de alcançar a praça de promoção no máximo um movimento após o peão.
Resultado:
q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q
Minha solução é justamente essas condições. Espero que não haja erros neste momento.
fonte
abs
commax(y-1,x-p,p-x)
?f(1,8,1,7)
serTrue
porque o rei imediatamente captura o peão? Eu acho que há uma sutileza em que a linha 7 do peão não pode ser tratada como a linha 6 se o rei capturar imediatamente.or
e-2
.Prolog,
4842 bytesCódigo:
Exemplos:
Não é um mau desafio para o Prolog em comparação com a maioria.
Editar: salvou 6 bytes mudando para a fórmula usada na resposta Python 2 do grc .
Infelizmente, o Prolog não pode encadear comparações, pois o python pode e a divisão inteira é 1 byte mais longa que a divisão float.
Experimente online aqui
fonte
JavaScript (ES6), 52
Espero ter salvo bytes não usando Math.abs, Math.min, Math.max
O peão na linha sete pode escapar do movimento de 2 espaços, se e somente se o rei não estiver em uma coluna próxima - é por isso que há uma verificação
d
antes de substituir 7 por 6.Caso de teste para execução no console:
Resultado:
[true, true, true, true, false, false, false]
fonte
Ruby, 50 bytes
Os argumentos são (rei x, rei y, peão x, peão y), todos os números inteiros.
fonte