Le Craps est un jeu de dés assez simple souvent joué dans les casinos. Même si vous n'êtes pas un joueur (ce que je ne suis pas), c'est toujours un jeu assez intéressant. Voici les règles:
Au début d'une partie de Craps, il y a ce qu'on appelle le round de sortie . Le joueur lance deux d6 (dé à six faces) et les deux jets de dé sont ajoutés. Si le résultat est 7 ou 11, la personne gagne automatiquement (c'est ce qu'on appelle un naturel ). Si le résultat est 2, 3 ou 12, la personne perd automatiquement (c'est ce qu'on appelle le crapping out ). Sinon, le résultat est défini comme le point pour le point rond.
Après cela, le tour de points commence. Pendant le tour de points, le joueur doit lancer en continu 2 d6s jusqu'à ce que la personne lance un 7 ou son point du tour précédent. Si la personne obtient un 7, elle perd. S'ils roulent leur point, ils gagnent.
Défi
Implémentez un programme simple qui simule un jeu de craps. Si la personne lance un naturel ou un crap-out pendant le round de come-out, le programme devrait sortir "Natural:" ou "Crapping out:" suivi du dé et puis quitter. Sinon, il devrait afficher "Point:" suivi du point. Ensuite, pendant le round de points, il devrait sortir chaque jet de dé jusqu'à ce qu'un 7 ou le point soit atteint. Si la personne gagne, elle devrait sortir "Pass"
; s'ils perdent, il devrait sortir "Don't Pass"
.
Implémentation de référence
Groovy, 277 octets
def a={return Math.random()*6+1};int b=a()+a();(b<4||b==12)?{println"Crapping out: "+b}():{(b==7||b==11)?{println"Natural: "+b}():{println"Point: "+b;for(;;){int x=a()+a();println x;(x==7)?{println"Don't Pass";System.exit(0)}():{if(x==b){println"Pass";System.exit(0)}}()}}()}()
Exemples de sorties
Natural: 7
Crapping out: 3
Point: 9
4
8
11
9
Pass
et
Point: 5
3
7
Don't Pass
C'est le code-golf , donc le code le plus court l'emporte.
(AVERTISSEMENT: ce défi n'est pas destiné à promouvoir le jeu en aucune façon. N'oubliez pas, la maison gagne toujours.)
You can't make your program shorter by picking a random number between 1 and 12 for the die roll; it must be two numbers picked between 1 and 6.
- Qu'en est-il de choisir une valeur aléatoire dans [1, 12] à partir d'une distribution identique à l'ajout de deux valeurs aléatoires uniformes dans [1, 6]?Réponses:
Rubis 164
Assez simple. Caractéristiques intéressantes:
Les cas de crapping out sont résumés comme
r%12<4
et les cas naturels restants sont résumés commer%4==3
.La chaîne initiale est stockée dans
c
et les rouleaux suivants ne sont pris que si c'est plus tard alphabétiquement que la lettre unique?P
(qui ne se produit que pourPoint
.)la source
Python 3, 190 octets
Ceci est basé sur la réponse de Celeo ; J'ai remplacé de longs conditionnels par un nombre magique qui code une LUT pour chaque numéro, j'ai réutilisé une variable et fait quelques autres golfs divers. Encore de la place pour le golf; il est probablement possible d'obtenir moins de 170.
Je n'ai pas essayé d'utiliser Python 2, donc je ne sais pas si ce serait plus court.
la source
C99,
366312293277 octetsCeci est mon premier post ici, donc je vais supposer que cela peut être amélioré de beaucoup.
Version étendue
Comme vous pouvez le voir, il existe ici une bonne redondance qui peut très probablement être supprimée.
Remerciements à @Mego pour avoir aidé à réduire ce nombre.
la source
a
et de l'b
utilisation de la méthode de soustraction avec les opérateurs ternaires.Python 2,
226224 octetsPremière passe et il y a beaucoup de code:
Merci à Mego pour 2 octets!
la source
PHP
230228218199192188 octets186 octets sans le
<?
Première tentative de code golf! Vous ne savez pas si l'utilisation
</br>
serait autorisée? Comme cela ne fonctionnerait pas dans une console (comme une nouvelle ligne). Faites-moi savoir si cela n'est pas autorisé et modifiera mon code.EDIT (16-8-16): Après m'être amélioré au codegolf, j'ai remarqué quelques améliorations possibles. Cela fonctionne toujours en utilisant l'interface de ligne de commande. Remplacé
</br>
par une entrée difficile.la source
Javascript 262
la source
Perl 5 , 140 octets
Essayez-le en ligne!
la source
PowerShell ,
181183179178167165 octets-10 octets grâce à mazzy
-2 octets grâce à Xcali
Essayez-le en ligne!
Version déroulée:
Il y a quelques points de friction de moins maintenant que la logique de création de liste a été reconstruite dans un commutateur. Je pense que c'est toujours une bonne approche. +2 octets corrigeant un bogue.
la source
-notin (7,$z)
n'est pas pertinente pour la règleDuring the point round, the player must continuously roll ... the previous round
. Maintenant, la boucle se termine à$m
égalité7
ou au premier tour.Come-out
tour et c'est votre numéro cible pour tout lePoint
tour. Leprevious round
fait référence auCome-out
tour1?
de votre regex de craps.R, 197 octets
Non golfé
la source
Pyth , 108 octets
Essayez-le en ligne!
Premier passage, on peut sans doute trouver quelques économies.
la source
Enchantements runiques , 151 octets
Essayez-le en ligne!
Après avoir corrigé un bug concernant les nombres aléatoires (il se réensemencait à chaque fois
'RA
appel, et la graine était l'heure du système, ce qui entraînait des exécutions massives de valeurs répétées), cela fonctionne correctement.Explication
L'entrée est sur la deuxième ligne, car la première ligne jusqu'à
B͍
est une fonction pour lancer deux dés et les additionner.Flux de programme, avec quelques redirections enveloppantes et enroulées déroulées pour plus de lisibilité
Il n'y a que 4 instructions NOP (
{:}≠...?\.6?
) qui seraient très difficiles à supprimer en raison de l'espace requis sur les autres lignes (à savoir la longueur de la"Don't "
chaîne).la source