Introdução:
Vi que havia apenas mais um desafio relacionado ao badminton no momento . Já que eu jogo badminton (nos últimos 13 anos), imaginei que adicionaria alguns desafios relacionados ao badminton. Aqui o primeiro:
Desafio:
Entrada: Dois números inteiros
Saída: Uma das três saídas distintas e exclusivas de sua própria escolha. Um indicando que a entrada é uma pontuação válida de badminton E o set terminou com um vencedor; um indicando que a entrada é uma pontuação válida de badminton E o conjunto ainda está em jogo; um indicando que a entrada não é uma pontuação válida de badminton.
No badminton, os dois (pares de) jogadores começam com 0 pontos, e você para quando um dos dois (pares de) jogadores atinge 21 pontos, com pelo menos 2 pontos de diferença, até um máximo de 30-29.
Portanto, todos esses pares de entradas possíveis (em qualquer ordem) indicam que é uma pontuação válida de badminton E o conjunto terminou:
[[0,21],[1,21],[2,21],[3,21],[4,21],[5,21],[6,21],[7,21],[8,21],[9,21],[10,21],[11,21],[12,21],[13,21],[14,21],[15,21],[16,21],[17,21],[18,21],[19,21],[20,22],[21,23],[22,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,30]]
E todos esses pares de entradas possíveis (em qualquer ordem) indicam que é uma pontuação válida de badminton, MAS o conjunto ainda está em jogo:
[[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[0,10],[0,11],[0,12],[0,13],[0,14],[0,15],[0,16],[0,17],[0,18],[0,19],[0,20],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],[1,16],[1,17],[1,18],[1,19],[1,20],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7],[2,8],[2,9],[2,10],[2,11],[2,12],[2,13],[2,14],[2,15],[2,16],[2,17],[2,18],[2,19],[2,20],[3,3],[3,4],[3,5],[3,6],[3,7],[3,8],[3,9],[3,10],[3,11],[3,12],[3,13],[3,14],[3,15],[3,16],[3,17],[3,18],[3,19],[3,20],[4,4],[4,5],[4,6],[4,7],[4,8],[4,9],[4,10],[4,11],[4,12],[4,13],[4,14],[4,15],[4,16],[4,17],[4,18],[4,19],[4,20],[5,5],[5,6],[5,7],[5,8],[5,9],[5,10],[5,11],[5,12],[5,13],[5,14],[5,15],[5,16],[5,17],[5,18],[5,19],[5,20],[6,6],[6,7],[6,8],[6,9],[6,10],[6,11],[6,12],[6,13],[6,14],[6,15],[6,16],[6,17],[6,18],[6,19],[6,20],[7,7],[7,8],[7,9],[7,10],[7,11],[7,12],[7,13],[7,14],[7,15],[7,16],[7,17],[7,18],[7,19],[7,20],[8,8],[8,9],[8,10],[8,11],[8,12],[8,13],[8,14],[8,15],[8,16],[8,17],[8,18],[8,19],[8,20],[9,9],[9,10],[9,11],[9,12],[9,13],[9,14],[9,15],[9,16],[9,17],[9,18],[9,19],[9,20],[10,10],[10,11],[10,12],[10,13],[10,14],[10,15],[10,16],[10,17],[10,18],[10,19],[10,20],[11,11],[11,12],[11,13],[11,14],[11,15],[11,16],[11,17],[11,18],[11,19],[11,20],[12,12],[12,13],[12,14],[12,15],[12,16],[12,17],[12,18],[12,19],[12,20],[13,13],[13,14],[13,15],[13,16],[13,17],[13,18],[13,19],[13,20],[14,14],[14,15],[14,16],[14,17],[14,18],[14,19],[14,20],[15,15],[15,16],[15,17],[15,18],[15,19],[15,20],[16,16],[16,17],[16,18],[16,19],[16,20],[17,17],[17,18],[17,19],[17,20],[18,18],[18,19],[18,20],[19,19],[19,20],[20,20],[20,21],[21,21],[21,22],[22,22],[22,23],[23,23],[23,24],[24,24],[24,25],[25,25],[25,26],[26,26],[26,27],[27,27],[27,28],[28,28],[28,29],[29,29]]
Qualquer outro par de números inteiros seria uma pontuação de badminton inválida.
Regras do desafio:
- A E / S é flexível, portanto:
- Você pode considerar a entrada como uma lista de dois números; dois números separados por meio de STDIN ou parâmetros de função; duas cordas; etc.
- A saída será três valores distintos e únicos de sua própria escolha. Pode ser inteiros (ou seja
[0,1,2]
,[1,2,3]
,[-1,0,1]
, etc.); pode ser booleano (ie[true,false,undefined/null/empty]
); pode ser caracteres / strings (ie["valid & ended","valid","invalid"]
); etc. - Especifique a E / S que você usou em sua resposta!
- Você pode levar os números inteiros de entrada pré-ordenados do menor para o maior ou vice-versa.
- Os números inteiros de entrada podem ser negativos; nesse caso, eles são obviamente inválidos.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Esses casos de teste são válidos e o conjunto foi encerrado:
0 21
12 21
21 23
28 30
29 30
Esses casos de teste são válidos, mas o conjunto ainda está em jogo:
0 0
0 20
12 12
21 21
21 22
Esses casos de teste são inválidos:
-21 19
-19 21
-1 1
12 22
29 31
30 30
42 43
1021 1021
b-61<~a<a>b/22*b-3
), você pode salvar 3 bytes.lambda a,b:-(a<0)|cmp(2+max(19,a)%30-a/29,b)
JavaScript (ES6),
55 5348 bytes(a)(b)
Experimente online!
fonte
C # (compilador interativo do Visual C #) ,
5352 bytesChamado como
f(max)(min)
. Retorna 3 para inválido, 1 para finalizado, 2 para contínuo.Guardado 1 byte graças a Kevin Cruijjsen
Experimente online!
fonte
Gelatina , 25 bytes
Experimente online!
Argumento à esquerda: mínimo. Argumento certo: máximo.
Inválido:
0
. Ongoing:1
. Terminou:2
.Explicação:
fonte
VDM-SL , 80 bytes
Essa função pega as pontuações ordenadas em ordem crescente e retorna o conjunto vazio se a pontuação for inválida ou o conjunto que contém se o conjunto está completo (então {true} se o conjunto estiver completo e válido e {false} se o conjunto estiver incompleto e válido)
Um programa completo para executar pode ser assim:
Explicação:
fonte
Java (JDK) ,
5948 bytesExperimente online!
Retorna um
Object
, que éInteger
0
válido para jogos inválidosBoolean
estrue
efalse
para jogos em andamento válidos e para jogos concluídos válidos, respectivamente. Leva a pontuação ordenada (e ao curry), com a pontuação mais alta primeiro.-2 bytes
invertendo a verificação de final de partida.-11 bytes
currying, usando operadores bit a bit e alguns truques de tipo de retorno de autobox - graças a @KevinCruijssenUngolfed
fonte
APL (Dyalog Unicode) , SBCS de 35 bytes
A função tácita infix onde terminou é 2, em andamento é 1, inválido é 0, pontuações menores e maiores são deixadas.
Experimente online!
Implementa as fórmulas matemáticas de Erik the Outgolfer combinadas em
e traduzido diretamente para o APL (que é estritamente associativo à direita, para evitar alguns parênteses):
Agora é equivalente a para qualquer função infix , para que possamos simplificar⊣ ⎕ ⊢ ⎕ ⎕
qual é a nossa solução;
(,≡30 31|,)×(⊢<2+X)×1+⊢>X←29⌊20⌈1+⊣
:⊣
o argumento da esquerda; um mais que; máximo de 20 e que; mínimo de 29 e que; atribui isso a ; o argumento correto é maior (0/1) ?; adicione um; ... multiplicar o seguinte por isso; mais dois ; é o argumento correto menor que esse (0/1); … multiplique o seguinte por isso; concatenam os argumentos; restos quando divididos por esses números;1+
20⌈
29⌊
X←
X
⊢>
1+
(
)×
2+X
X
⊢<
(
)×
,
30 31|
,≡
os argumentos concatenados são idênticos aos (0/1) ?;fonte
Montagem x86, 42 bytes
Recebe entrada
ECX
eEDX
registra. Observe queECX
deve ser maior queEDX
.Saída para
EAX
, onde0
significa que o jogo ainda está ativo,1
representando o jogo terminado e-1
(akaFFFFFFFF
) representando uma pontuação inválida.Ou, mais legível na Intel Syntax:
Curiosidade: essa função quase segue as regras da Convenção de Chamada C, sobre as quais os registros devem ser preservados, exceto que eu tive que pesar
EBX
para salvar alguns bytes no uso da pilha.Opcional (não incluído na contagem de bytes)
Adicionando os 6 bytes a seguir diretamente antes do início do código acima, você pode transmitir
ECX
eEDX
não ordenar:Qual é o seguinte na Intel Syntax legível:
fonte
Retina 0.8.2 , 92 bytes
Experimente online! O link inclui casos de teste. Recebe entrada em ordem crescente. Explicação: O primeiro estágio simplesmente converte de decimal em unário para que as pontuações possam ser comparadas corretamente. O segundo estágio contém seis padrões alternativos, agrupados em três grupos, para que três valores distintos possam ser gerados, que são
10
para vitória,01
para contínuo e00
ilegal. Os padrões são:fonte
APL (Dyalog Unicode) ,
3332 bytes SBCSExperimente online!
in: um par em ordem decrescente
out: 2 = em andamento, 1 = encerrado, 0 = inválido
testes roubados da resposta de Adám
fonte
Bash 4+,
97899188 bytesSuponha que as entradas estejam ascendendo. Conceitos usados da resposta do VDM-SL . Experimente Online
z==0
- jogo em andamentoz==1
- jogo concluídoz==2
- inválido-8 pela limpeza do suporte das
(( & | ))
condições+2 corrigindo um erro, graças a Kevin Cruijssen
-3 melhorias na lógica por Kevin Cruijssen
fonte
1
vez de2
para0 30
. Sua versão de 97 bytes estava funcionando corretamente; portanto, se você não conseguir corrigi-la, poderá reverter. Promovido para a versão 97. :)29 30
:( ele deve ser "concluído"i>29
deve estarj>29
no segundo ternário para corrigi-lo.