Objetivo:
Dadas duas criaturas com habilidades de combate opcionais, retorne valores únicos, mas consistentes, que representam quais criaturas morreram, se houver.
Entrada:
#Longest form:
[[P,T, "<abilities>"], [P,T, "<abilities>"]]
#Shortest form:
[[P,T], [P,T]]
Cada criatura será dada na forma de [P,T,"<abilities>"]
. Será na forma [P,T]
, [P,T,""]
ou, [P,T,0]
se não tiver habilidades, sua escolha na forma. P é um número inteiro> = 0, T é um número inteiro> = 1. <abilities>
é um subconjunto de "DFI"
, ou pode ser representado por um único número / cadeia de bits, se desejar. A ordem das bandeiras também depende de você.
Mecânica de Combate:
Cada criatura tem duas estatísticas, Poder e Resistência nessa ordem, e habilidades opcionais. O poder de uma criatura é> = 0. A Robustez de uma criatura é> = 1.
Cada criatura causará simultaneamente dano igual ao seu poder à criatura oponente (a menos que alguém tenha um primeiro ataque). Se o valor for maior ou igual à resistência do oponente, ele morrerá (a menos que seja indestrutível).
Exemplo: Alice é um 2/2
, Bob é um 3/4
, ambos sem habilidades. Alice causará 2 de dano a Bob e receberá 3 de dano em troca. A dureza de Alice é 2, então ela morre, a dureza de Bob é 4, e ela vive.
Existem apenas três habilidades opcionais que consideraremos para isso (embora haja mais no jogo). Estes serão sinalizadores de um caractere:
- [D] eathtouch: qualquer quantidade de dano (X> 0) é considerada letal.
- [Primeiro] primeiro ataque: causará seu dano primeiro, capaz de matar a outra criatura antes que ela possa atacar de volta. Se ambas as criaturas tiverem primeiro ataque, resolva o combate normalmente.
- [I] n destrutível: Nenhuma quantidade de dano é considerada letal, incluindo Deathtouch.
Resultado:
Qualquer valor consistente para cada um dos quatro casos a seguir. Indique os quatro valores na sua resposta, por favor. Exemplo de valor de retorno em parens:
- Nenhuma criatura morreu (0)
- 1ª criatura morta (1)
- 2ª criatura morta (2)
- Ambas as criaturas morreram (3)
Regras:
- A entrada é garantida para ter duas criaturas formatadas corretamente.
- Se você estiver usando personagens para habilidades, você pode assumir que eles estão ordenados como quiser, mas postar o pedido usado, se relevante.
- Se você estiver usando um número / sequência de bits para habilidades, poste a codificação que está usando. por exemplo:
111
éD/F/I
,7
éD/F/I
, etc. - Se uma criatura não possui habilidades, também pode ser considerada como
[P,T, ""]
ou número equivalente - Lacunas padrão proibidas
- Isso é código-golfe, então o código mais curto vence.
Exemplos:
Input: [[2,2], [1,1]]
Output: 2nd Dies
Input: [[0,2], [0,1]] #0/2 vs 0/1
Output: Neither Die
Input: [[2,1], [2,1]] #2/1 vs 2/1
Output: Both Die
Input: [[1,1, "D"], [2,2]] #1/1 Deathtoucher vs 2/2
Output: Both Die
Input: [[2,2], [0,1, "D"]] #2/2 vs 0/1 Deathtoucher
Output: 2nd Dies
Input: [[2,2], [1,1, "DF"]] #2/2 vs 1/1 Deathtouch First-striker
Output: 1st Dies
Input: [[0,2, "D"], [0,1, "DF"]] #0/2 Deathtoucher vs 0/1 Deathtouch First-striker
Output: Neither Die
Input: [[2,2], [2,2, "F"]] #2/2 vs 2/2 First-striker
Output: 1st Dies
Input: [[2,2, "I"], [1,1, "DF"]] #2/2 Indestructible vs 1/1 Deathtouch First-striker
Output: 2nd Dies
Input: [[9999,9999], [1,1, "I"]] #9999/9999 vs 1/1 Indestructible
Output: Neither Die
Input: [[2,2, "F"], [1,1, "F"]] #2/2 First-Striker vs 1/1 First-Striker
Output: 2nd Dies
#9/9 Deathtouch, Indestructible First-Striker vs 9/9 Deathtouch, Indestructible First-Striker
Input: [[9,9, "DFI"], [9,9, "DFI"]]
Output: Neither Die
fonte
D => 0, F => 1, I => 2
Respostas:
Perl 5 , 248 bytes
... sem espaços e novas linhas:
Experimente online!
Minha versão ungolfed com os dez testes do @Veskah (OP), passa nos testes:
fonte
JavaScript,
137125120111 bytesEu estou usando números de bitmap para habilidades D = 4 F = 2 I = 1 do
"DFI"
seria7
. Minha saída é Nem morrer0
, 1 morrer1
, 2 morrer2
, ambos morreram3
.Testes com:
Este foi o meu primeiro código de trabalho
Que reduzi a esse intermediário:
fonte
JavaScript (ES6),
8376 bytesAceita entrada como 6 argumentos distintos: 2 x (Potência, Robustez, Habilidades). Habilidades são esperadas como máscaras de bits com:
Experimente online!
Comentado
fonte
C (gcc) ,
11411395 bytesMuito golfe graças ao ceilingcat e ao Logern.
Compile com
-DZ=P,T,F,p,t,f)
.Experimente online!
Verificamos (independentemente, devido à simetria da mecânica de combate) se cada uma das criaturas sobrevive ao combate, o que acontece se uma for verdadeira:
(As condições anteriores são mais importantes).
As entradas são poder e resistência como números inteiros, e habilidades como campo de bits (1 = Indestrutível, 2 = toque da morte, 4 = primeiro ataque), a saída também é um campo de bits (1 = primeira criatura sobrevive, 2 = segunda criatura sobrevive).
fonte
-DZ=P,T,F,p,t,f)
96 bytes - Experimente online!P=…
vez dereturn …
e remover a nova linha leva a 85 bytes.&&
,||
com bit a bit&
,|
Retina 0.8.2 , 123 bytes
Experimente online! Fazer a ligação inclui casos de teste, embora eu tenha substituído
9
para99999
para a velocidade. A entrada usa as letras,DFI
emboraD
deva precederI
. A saída está no formato1
para sobreviver e0
morrer. Explicação:Converta as estatísticas para unário.
Troque as estatísticas temporariamente.
Dois
F
s cancelam.Toque da Morte reduz a Robustez do oponente para 1.
Indestrutível reduz o poder do oponente para 0.
Mude a resistência novamente, agora você tem P2, T1, F1; P1, T2, F2
Se a resistência for maior que o poder do oponente, ela sobrevive.
Se ambos morrerem, aquele com o primeiro ataque sobrevive.
Caso contrário, First Strike não faz diferença.
fonte
C ++,
177131127121 bytesAqui está a minha solução não tão curta em C ++. As habilidades são de 3 bits para cada criatura:
E simplesmente retorna 0 : se ninguém morre, 1 : se as primeiras criaturas morrem, 2 : se a segunda criatura morre e 3 : se as duas criaturas morrem.
Experimente Online!
C ++,
8581 bytes (Alternativo)Trapaceando e capturando um pouco as variáveis no lambda e não transmitindo-as como argumentos, é possível reduzir para 81 bytes. Não sei se essa é uma solução aceitável, então eu a publico como uma alternativa.
Experimente Online!
fonte
Perl 5, 245 bytes
Correr com
-lapE
Ungolfed:
"Toque mortífero" se traduz em "seu poder agora é multiplicado pela resistência do seu inimigo" e "indestrutível" se traduz em "o poder do seu inimigo agora é zero", com o último precedente. O código executa duas rodadas, uma onde apenas os atacantes começam a atacar e a outra, onde apenas os que não atacam podem atacar. Se o primeiro turno resultar em morte, o segundo turno não acontece. Como já lidamos com o toque da morte e é indestrutível no início, a "morte" é tão simples quanto verificar se a resistência é maior que zero ou não.
fonte