Ceux d'entre vous qui aiment Numberphile connaissent bien le Dr James Grime, qui a décrit un jeu de dés non transitif sur sa chaîne .
Le jeu se compose de trois dés à 6 faces:
- Die 1: 3,3,3,3,3,6
- Die 2: 2,2,2,5,5,5
- Die 3: 1,4,4,4,4,4
Deux joueurs choisissent chacun un dé à utiliser. Ils les lancent et le dé supérieur gagne, le meilleur de tout.
Probablement, le dé 1 bat le dé 2 avec> 50% de chances. De même, le dé 2 bat le dé 3 et, fait intéressant, le dé 3 bat le dé 1.
Ecrire un programme de prise 1
, 2
ou 3
en entrée. Cela indique le dé choisi par l'utilisateur. Le programme choisit ensuite le dé qui battrait l'utilisateur et produirait les résultats de 21 lancers, et " Computer/User wins with x points
"
Règles
- Code-golf, vote comme bris d'égalité
- Vous devez utiliser RNG (ou des likes) pour simuler réellement les jets de dés.
- Je ne suis pas trop strict sur le format de sortie. Ce n'est pas grave tant que vous montrez les dés, séparés d'une manière ou d'une autre entre les 21 rouleaux (d'une manière différente de la façon dont vous séparez les dés dans le même rouleau), et sortez cette phrase ci-dessus.
- L'entrée peut être stdin, argument de ligne de commande, à partir de l'écran, etc.
Exemple
Contribution
1
Production
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 6
1 3
4 3
4 3
1 3
4 3
1 3
4 3
4 3
4 3
4 3
4 6
Computer wins with 16 points
Ici, l'utilisateur choisit le dé 1 et ses jets sont affichés dans la colonne de droite. Le programme choisit le dé 3 et le bat.
|Z-21×X
ce qui ne change pas le nombre de caractèresR - 228
Exemple d'exécution:
la source
summary.factor
partable
, en enregistrant 9 caractères.Mathematica
208172166159Espaces ajoutés pour plus de clarté
la source
Rubis 1,8, 165
getc
obtient la valeur ascii de l'entrée (ruby 1.8 uniquement), qui est heureusement modulo 3 congru à sa valeur entière.s
commence à 21, doncs.times{code}
s'exécuteracode
21 fois et retournera 21. À chaque itération, la boucle ajoute ou soustrait 1 de s en fonction de qui gagne, afin que nous puissions voir qui a gagné en voyant s'ils
s'est retrouvé en dessous de 21. Neat jusqu'ici , mais j'ai besoin de l'expression maladroite[s/=2,21-s].max
pour extraire le nombre réel de points. J'ai longtemps voulu faire de l'arithmétique avec la valeur de retour de<=>
, donc je suis quand même content.la source
Mathematica
234247Code
Usage
Explication
n
est le nombre 1, 2 ou 3 qui correspond au dé du joueur. Parce que n détermine également (mais n'est pas égal) le dé de l'ordinateur, nous pouvons générer tous les lancers de dés possibles lorsque n = 1, n = 2, n = 3. Nous pouvons également déterminer leurs probabilités respectives.Examinez les données juste après
RandomChoice
:Si le joueur tire le dé 1, les seuls résultats possibles sont les 4 paires suivantes
{{3, 1}, {3, 4}, {6, 1}, {6, 4}}
Les probabilités respectives de ces paires sont
{5, 25, 1, 5}/36
, C'est,{5/36, 25/36, 1/36, 5/36}
RandomChoice[<data>, 21]
sort 21 lancers des deux dés.la source
C,
205191Lit le choix de l'utilisateur depuis stdin.
la source
for(c=51-getchar(p=0);
,printf("%ser wins
), réorganisez expressionr
pour commencer(
et économiser de l' espace.(c+1)%3
->-~c%3
, rendrep
statique (initialisé à 0), supprimer{}
aprèsfor
(;
->,
en leur sein), utiliserp<11?:
deux fois à l'intérieurprintf
au lieu de l'attribuerp,q
.s,q
dans la boucleprintf
, et incrémenterp
ensuite, économisant ainsi les parenthèses. Modifiez également l'c
affectation à utiliser%3
ou%7
, en donnant un ordre différent de 0,1,2.Facteur
Avec comprend: 388
Sans: 300
Ouais, Factor n'est pas vraiment le langage à utiliser pour jouer au golf, mais c'est sympa.
la source
Python 182
la source
R 206
la source