Objectif:
Étant donné deux créatures avec des capacités de combat facultatives, renvoyez des valeurs uniques mais cohérentes qui représentent les créatures mortes, le cas échéant.
Contribution:
#Longest form:
[[P,T, "<abilities>"], [P,T, "<abilities>"]]
#Shortest form:
[[P,T], [P,T]]
Chaque créature sera donnée sous forme de [P,T,"<abilities>"]
. Ce sera dans le formulaire [P,T]
, [P,T,""]
ou [P,T,0]
s'il n'a pas de capacités, votre choix sur le formulaire. P est un entier> = 0, T est un entier> = 1. <abilities>
est un sous-ensemble de "DFI"
, ou peut être représenté via un seul numéro / chaîne de bits si vous le souhaitez. L'ordre des drapeaux dépend également de vous.
Mécanique de combat:
Chaque créature a deux statistiques, Puissance et Robustesse dans cet ordre, et des capacités optionnelles. La puissance d'une créature est> = 0. La ténacité d'une créature est> = 1.
Chaque créature inflige simultanément des blessures égales à sa puissance à la créature adverse (à moins que l'une n'ait une première frappe). Si la valeur est supérieure ou égale à l'endurance de l'adversaire, il mourra (sauf s'il est indestructible).
Exemple: Alice est un 2/2
, Bob est un 3/4
, les deux sans capacités. Alice fera 2 dégâts à Bob et en prendra 3 en retour. La ténacité d'Alice est de 2 donc elle mourra, la ténacité de Bob est de 4 donc elle vivra.
Il n'y a que 3 capacités optionnelles que nous considérerons pour cela (bien qu'il y en ait plus dans le jeu). Ce seront des drapeaux à un caractère:
- [D] eathtouch: Toute quantité de dégâts (X> 0) est considérée comme mortelle.
- [F] première frappe: Inflige d'abord ses dégâts, capable de tuer l'autre créature avant qu'elle ne puisse attaquer. Si les deux créatures ont la première frappe, résolvez le combat normalement.
- [I] indestructible: aucun montant de dégâts n'est considéré comme mortel, y compris Deathtouch.
Production:
Toute valeur cohérente pour chacun des quatre cas suivants. Veuillez indiquer les quatre valeurs dans votre réponse. Exemple de valeur de retour en parens:
- Aucune créature n'est morte (0)
- 1ère créature morte (1)
- 2ème créature morte (2)
- Les deux créatures sont mortes (3)
Règles:
- L'entrée est garantie d'avoir deux créatures correctement formatées.
- Si vous utilisez des personnages pour des capacités, vous pouvez supposer qu'ils sont ordonnés comme vous le souhaitez, mais publier l'ordre utilisé le cas échéant.
- Si vous utilisez un nombre / chaîne de bits pour les capacités, postez l'encodage que vous utilisez. par exemple:
111
estD/F/I
,7
estD/F/I
, etc. - Si une créature n'a pas de capacités, elle peut aussi être prise comme
[P,T, ""]
ou équivalent en nombre - Failles standard interdites
- C'est le code-golf donc le code le plus court gagne.
Exemples:
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
la source
D => 0, F => 1, I => 2
Réponses:
Perl 5 , 248 octets
... sans espaces ni nouvelles lignes:
Essayez-le en ligne!
Ma version non golfée avec les dix tests de @Veskah (OP), les tests réussissent:
la source
JavaScript,
137125120111 octetsJ'utilise des nombres bitmap pour les capacités D = 4 F = 2 I = 1 ne le
"DFI"
serait7
. Ma sortie est Ni Mort0
, 1ère Mort1
, 2ème Died2
, deux sont morts3
.Tests avec:
Ce fut mon premier code de travail
Ce que j'ai réduit à cet intermédiaire:
la source
JavaScript (ES6),
8376 octetsPrend l'entrée comme 6 arguments distincts: 2 x (Puissance, Robustesse, Capacités). Les capacités sont attendues sous forme de masques de bits avec:
Essayez-le en ligne!
Commenté
la source
C (gcc) ,
11411395 bytesBeaucoup de golf grâce au plafond et à Logern.
Compilez avec
-DZ=P,T,F,p,t,f)
.Essayez-le en ligne!
Nous vérifions (indépendamment, en raison de la symétrie des mécanismes de combat) si chacune des créatures survit au combat, ce qui se produit si l'une ou l'autre est vraie:
(Les anciennes conditions sont plus importantes).
Les entrées sont la puissance et l'endurance en tant qu'entiers, et les capacités en tant que champ de bits (1 = indestructible, 2 = contact avec la mort, 4 = première frappe), la sortie est également un champ de bits (1 = la première créature survit, 2 = la deuxième créature survit).
la source
-DZ=P,T,F,p,t,f)
96 octets - Essayez-le en ligne!P=…
au lieu dereturn …
et supprimer la nouvelle ligne vous amène à 85 octets.&&
,||
par bits&
,|
Retina 0.8.2 , 123 octets
Essayez-le en ligne! Lien inclut les cas de test, même si je l' ai substitué
9
à99999
la vitesse. L'entrée utilise les lettresDFI
bien queD
doit précéderI
. La sortie est au format1
pour survit et0
pour matrices. Explication:Convertissez les statistiques en unaire.
Échangez temporairement les statistiques.
Deux
F
s annulent.Le toucher mortel réduit la résistance de l'adversaire à 1.
Indestructible abaisse la puissance de l'adversaire à 0.
Redéfinissez la ténacité, vous avez donc maintenant P2, T1, F1; P1, T2, F2
Si la force est supérieure à la puissance de l'adversaire, elle survit.
Si les deux mouraient, celui avec First Strike survit.
Sinon, First Strike ne fait aucune différence.
la source
C ++,
177131127121 121 octetsVoici ma solution pas si courte en C ++. Les capacités sont de 3 bits pour chaque créature:
Et il renvoie simplement 0 : si personne ne meurt, 1 : si les premières créatures meurent , 2 : si la deuxième créature meurt et 3 : si les deux créatures meurent.
Essayez-le en ligne!
C ++,
8581 octets (Alternative)En trichant légèrement et en capturant les variables dans lambda et en ne les passant pas comme arguments, il est possible de descendre à 81 octets. Je ne sais pas si c'est une solution acceptable, donc je la poste comme alternative.
Essayez-le en ligne!
la source
Perl 5, 245 octets
Courir avec
-lapE
Non golfé:
"Deathtouch" se traduit par "votre puissance est maintenant multipliée par la ténacité de votre ennemi", et "indestructible" se traduit par "la puissance de votre ennemi est désormais nulle", ce dernier ayant préséance. Le code exécute deux tours, l'un où seuls les premiers attaquants peuvent attaquer et l'autre où seuls les non-premiers attaquants peuvent attaquer. Si le premier round entraîne un décès, le second round ne se produit pas. Puisque nous avons déjà traité du contact mortel et indestructible au début, la "mort" est aussi simple que de vérifier si la ténacité est supérieure à zéro ou non.
la source