- Alice (A) et Bob (B) ont décidé de se battre.
- Chaque combattant a 10 points de vie.
- À tour de rôle, ils lancent un dé à 6 faces pour les dégâts.
- Ces dégâts sont retirés de la santé de leur adversaire.
- À la fin, soit Alice soit Bob, vaincra leur ennemi.
Montrez-moi comment s'est déroulée la bataille. Sortie de ces codes pour les actions qui ont eu lieu.
Attaque
B a A
^ Combatant
^ Action (attack)
^ Target
Rouleau
B r 4
^ Combatant
^ Action (roll)
^ Value
Changement de santé
A h 6
^ Combatant
^ Attribute (health)
^ Value
Gagner
A w
^ Combatant
^ Action (win)
Exemple de sortie:
A a B
A r 4
B h 6
B a A
B r 6
A h 4
A a B
A r 6
B h 0
A w
Voici les règles:
- Écrivez dans n'importe quelle langue.
- Un seul jet de dé devrait avoir une chance égale de produire l'un des nombres 1, 2, 3, 4, 5 ou 6.
- Alice commence toujours (Bob est chevaleresque, à l'ancienne).
- Générez une action pour chaque tour.
- Vous devez signaler les actions d'attaque, de roulis, de dégâts et de victoire.
- Les combattants sont en majuscules, les actions sont en minuscules.
- Il ne doit pas toujours produire le même résultat.
- Il doit y avoir au moins un caractère d'espacement entre un combattant en sortie, une action et une valeur.
- L'action de victoire a lieu lorsque l'adversaire a zéro ou moins de points de vie.
- Toutes les parties d'une action doivent être sur la même ligne.
- Il devrait y avoir une action par ligne.
- Le moins d'octets gagne.
Allez-y!
Réponses:
05AB1E , 49 octets
Essayez-le en ligne!
Explication
la source
Python 3 , 131 octets
Essayez-le en ligne!
-8 octets grâce à officialaimm
-2 octets grâce à ChooJeremy
la source
p=print
fera économiser environ 8 octets.randint(1,6)
pourrait être remplacé parid(X+Y)//3%6+1
, bien que la distribution ne soit pas tout à fait uniforme.C (gcc) ,
146141 octetsEssayez-le en ligne!
De-golf:
la source
a=65+t,b=66-t
?A*B>0
vous fera économiser quelques octets.A*B
permettra d'économiser encore plus, mais je suis un peu pressé. Je mettrai à jour le soirPython 3 , 127 octets
Il s'agit d'une amélioration de la réponse @HyperNeutrino qui ne rentrerait pas dans un commentaire. Voir l'explication ci-dessous.
Essayez-le en ligne!
Une quête épique pour un jet de dés en python plus court
TL; DR: Il est possible de raser 4 octets du jet de dés Python standard en utilisant le cryptage RSA.
Je voulais voir si le jet de dés Python standard ( 32 octets ) pouvait être raccourci un peu:
En particulier, il
id(x)
est très pratique d'apporter une valeur non déterministe au programme. Mon idée était alors de hacher en quelque sorte cette valeur pour créer un caractère aléatoire réel. J'ai essayé quelques approches, et l'une d'elles a porté ses fruits: le cryptage RSA .Le cryptage RSA, en raison de sa simplicité, ne nécessite que quelques octets:
m**e%n
. La valeur aléatoire suivante peut ensuite être créée en chiffrant la précédente. En supposant que la(e,n)
clé est disponible, le lancer de dés peut être écrit avec 22 octets :Cela signifie que nous avons environ 10 octets pour définir une clé RSA valide. Ici, j'ai eu de la chance. Au cours de mes expériences, j'ai commencé à utiliser le Mersenne prime M67 pour me rendre compte plus tard que Mersenne avait fait une erreur en incluant M67 dans sa liste. Il se révèle être le produit de
p=193707721
etq=761838257287
. J'avais trouvé mon module:Maintenant, l'exposant et le totient de Charmichael
(p-1)*(q-1)
doivent être coprimes. Heureusement encore, le premier nombre premier qui ne divise pas le total de n ne comporte qu'un seul chiffre: 7. Le lancer de dés peut alors être écrit en utilisant 28 octets (4 octets de moins que l'approche standard):Une bonne chose avec M67 est que la valeur aléatoire générée a 66 bits, ce qui est plus que le RNG 64 bits habituel. De plus, l'utilisation de RSA permet de remonter dans le temps en décryptant plusieurs fois la valeur courante. Voici les clés de chiffrement et de déchiffrement:
Je ne suis certainement pas un expert en statistiques ou en cryptographie, donc je ne peux pas vraiment dire si ce RNG vérifie ou non les critères de "bon hasard". J'ai écrit un petit benchmark qui compare l'écart type des occurrences des 1 à 6 lancers de dés en utilisant différents RNG. Il semble que la solution proposée fonctionne comme les autres.
la source
JavaScript (ES6), 122 octets
Essayez-le en ligne!
la source
Java (JDK 10) , 180 octets
Essayez-le en ligne!
Crédits
la source
var
? o.Ô J'ai vraiment besoin d'enquêter sur certaines des nouvelles spécifications bientôt. Quoi qu'il en soit, vous pouvez jouer au golf 4 octets en changeant le tableau de caractères en int-tableau:v->{var r="";int P[]={65,66},p=0,H[]={10,10},h=0;for(;H[0]*H[1]>0;)r+=r.format("%3$c a %4$c%n%3$c r %d%n%4$c h %d%n",h+=Math.random()*6-h+1,H[p]-=h,P[p],P[p^=1]);return r+=P[p^1]+" w";}
65 w
place deA w
. C'est pourquoi je l'ai extrait de laint ...
déclaration: jouer au golf quelques octets ;-)v->{var r="";int p=0,H[]={10,10},h=0;for(;H[0]*H[1]>0;)r+=r.format("%3$c a %4$c%n%3$c r %d%n%4$c h %d%n",h+=Math.random()*6-h+1,H[p]-=h,p+65,(p^=1)+65);return r+(p<1?"B":"A")+" w";}
( 181 octets )Perl 5 ,
938887 octetsEssayez-le en ligne!
la source
Rubis ,
122 120 96 9291 octetsEnregistré 1 octet grâce à Asone Tuhid .
Essayez-le en ligne!
la source
["A", "a", "B"]
? Si oui, j'ai cette solution de 96 octets.?(p [x,?w]):
par?p([x,?w]):
Java 8, 230 octets
Remarque: il y a déjà une réponse Java beaucoup plus courte, alors assurez-vous de voter pour la sienne ! Cependant, j'utilise une approche complètement différente, donc j'ai pensé qu'il valait également la peine d'être publié.
Explication:
Essayez-le en ligne.
la source
C (gcc) , 142 octets
Essayez-le en ligne!
la source
Lot, 174 octets
Explication:
%
les références de variable sont remplacées au moment de l'analyse. Cela présente deux avantages utiles:%d%-=r
soustraitr
de la variable nommée pard
(c.-à-d. référence indirecte)set c=%d%&set d=%c%
est tout simplement un échange direct.la source
PHP 7.1: 159 octets
Exécutez-le dans le navigateur ici!
PHP 5.6: 156 octets
Exécutez-le dans le navigateur ici!
Voici à quoi ressemble la solution PHP 5.6 avec le formatage et les commentaires:
la source
Bash, 178 octets
la source
F #,
238235 octetsJe pensais que j'allais bien, mais vous m'avez tous surclassé de loin!
Essayez-le en ligne!
Merci à Rogem pour le brillant conseil d'utiliser A * B> 0 au lieu de A> 0 && B> 0 (enlève 3 octets).
Merci également à officialaimm, dont la suggestion de prédéfinir printf dans la réponse Python m'a également aidé à réduire de quelques octets.
la source
A*B>0
permettra d'économiser encore quelques.Haskell , 204 octets
Ma tentative avec Haskell, je n'ai pas pu l'obtenir plus compétitif malheureusement
Essayez-le en ligne!
Explications:
la source
where m=b-x
peut être mis en garde:|m<-b-x=
.main=putStr=<<q"A "10"B "10.randomRs(1,6::Int)<$>getStdGen
. Vous pouvez également utiliser une liste et la concaténer pour vous débarrasser de la redéfinition(++)
. Le dernier où ne semble pas être bénéfique à simplement utiliserb-x
partout.Julia 0,6 , 175 octets
Essayez-le en ligne!
Version longue et non golfée:
la source
VBA,
222185179 octetsCette solution récursive implique 3 sous-marins
p est plus court que Debug.Print lorsqu'il est utilisé plus de 3 fois (seulement 4 dans cette solution)Edit: Maintenant que j'ai appris queDebug.?
c'est une alternative acceptable àDebug.Print
, ilDebug.?x
est plus court que d'appeler un Sub pour imprimer.C'était un défi amusant. Si vous connaissez un interprète en ligne comme TIO pour VB6 / VBScript / VBA, veuillez laisser un commentaire. Ensuite, je peux poster un lien vers une solution de travail.
Si vous souhaitez tester ce code et installer Microsoft Excel, Word, Access ou Outlook (Windows uniquement), appuyez sur Alt + F11 pour ouvrir l'IDE VBA. Insérez un nouveau module de code (Alt + I, M) et désactivez Option Explicit. Collez ensuite le code et appuyez sur F5 pour l'exécuter. Les résultats devraient apparaître dans la fenêtre Exécution (appuyez sur Ctrl + G si vous ne le voyez pas).
Edit 1: Suppression des espaces que l'éditeur VBA ajoutera automatiquement. Réduit de 37 octets
Édition 2: Suppression de Sub p () * pour enregistrer 6 octets après l'apprentissage
Debug.?
est une alternative acceptableDebug.Print
. L'appel d'un Sub pour gérer n'économiseDebug.?
que des octets après plus de six appels.la source