introduction
Dice 10,000 est un jeu de dés qui peut être joué avec 6 dés et quelque chose à écrire. Les joueurs lancent les dés plusieurs fois par tour et gagnent un score à la fin de celui-ci. Le joueur qui atteint 10 000 points en premier gagne la partie. Calculer le score d'un rouleau est votre travail dans ce défi.
Regardez ici pour les règles complètes.
Veuillez noter que les règles (en particulier le score) changent d'une région à l'autre car le jeu est largement connu. Nous utilisons les règles décrites ci-dessous.
Le défi
Étant donné une liste de six nombres de un à six représentant un lancer de dés, sortez leur score. Le score est calculé de la manière suivante:
- On compte 100 points
- Fives compte 50 points
- Les triplés comptent leur nombre multiplié par 100 points. Trois doubles donnent par exemple 200 points. Une exception sont trois qui comptent 1000 points.
- Six du même nombre comptent comme deux triplets comme décrit ci-dessus. Donc six trois donnent 600 points. Il en va de même pour le cas de bord avec ceux: Six ceux sont 2000 points.
- Un dé ne peut pas être utilisé plus d'une fois. Si un dé fait partie d'un triplet, il ne compte pas pour les autres scores. Les cinq dans un triplet ne comptent pas 50 points en plus des 500 points qu'ils donnent.
- Les triplets sont toujours comptés en premier pour maximiser le score. Donc trois cinq ne comptent jamais pour 150 points. Quatre cinq comptent pour un triplet et un cinq ordinaire, ce qui donne alors 550 points.
Remarques
- L'entrée contiendra toujours six nombres de un à six. Vous ne recevrez aucune entrée invalide.
- Les numéros peuvent être dans n'importe quel ordre. Vous ne pouvez assumer aucune commande spécifique.
Règles
- Le format d'entrée dépend de vous tant qu'il n'est pas prétraité.
- Fonction ou programme complet autorisé.
- Règles par défaut pour les entrées / sorties.
- Des échappatoires standard s'appliquent.
- Il s'agit de code-golf , donc le nombre d'octets le plus bas l'emporte. Tiebreaker est une soumission antérieure.
Cas de test
[1, 2, 3, 4, 5, 6] -> 150 [1, 1, 1, 2, 3, 5] -> 1050 [1, 1, 1, 1, 1, 1] -> 2000 [2, 2, 2, 2, 2, 2] -> 400 [6, 6, 1, 5, 5, 6] -> 800 [2, 3, 4, 6, 2, 4] -> 0 [1, 5, 1, 5, 1, 5] -> 1500 [5, 5, 5, 5, 2, 3] -> 550 [1, 1, 1, 1, 1, 5] -> 1250 [3, 3, 4, 4, 3, 4] -> 700
Réponses:
05AB1E ,
343130 octetsExplication
Essayez-le en ligne
la source
Python 2,
152148125 octetsSolution assez simple. Peut être joué au golf plus.
L.count
est un peu long, mais je n'ai pas pu supprimer le premier appel car L est mis à jour.Essayez-le en ligne - (tous les cas de test)
Non golfé:
Un crédit de golf à @Copper , en utilisant quelques conseils de son code
la source
PowerShell
v2 +v3 +,147144137133 octetsBarré 144 ressemble un peu à 144?
Prend l'entrée
$args[0]
et lasort
stocke$n
. Ensuite,while
il reste des éléments, nous évaluons unif
/else
.Si le premier élément (temp stocké dans
$x
pour sauvegarder quelques octets) correspond au troisième élément, nous avons un triple. Ajouter sur le$s
um le résultat d'une multiplication100*$x
plus un booléen900
uniquement si$x
c'est-eq
ual1
. Cela nous donne le nécessaire1000
pour trois. Ensuite, décollez les deux premiers éléments dans$a
, et$b
, et le reste dans$n
- la suppression du troisième élément du triple est traitée plus tard.Sinon, nous n'avons pas de triple, alors ajoutez
$s
résultat d'un autre ajout basé sur les booléens. Nous ajoutons50
si$x
est l'un1
ou l' autre5
, puis en ajoutons un autre50
si cela est-eq
utile1
. Cette section nécessite désormais la v3 + pour l'-in
opérateur.Dans les deux cas, nous avons encore un élément à supprimer, alors décollez le premier élément
$a
et laissez le reste$n
.Enfin, une fois la boucle terminée, placez-la
$s
sur le pipeline. La sortie est un impliciteWrite-Output
à la fin de l'exécution.Cas de test
la source
JavaScript (ES6),
8786 octetsTrie et stringifie l'entrée afin que les combinaisons de notation puissent être identifiées au moyen de l'expression rationnelle. Edit: 1 octet enregistré grâce à @Arnauld.
la source
s>>7
au lieu d's>111
enregistrer un octet dans la première versionPython 2 ou 3,
123 122 121 116 109 108 104 104 102 10097 octetsPython 2, 97 octets
Les cas de test sont sur idéone
Python 3, 97 octets
la source
Rubis,
8078 octetsEssayez-le en ligne!
-2 octets de @ezrast.
la source
i<2&&i=10
vous fait gagner 2 octets.Haskell,
130123 octetsCe n'est pas un défi pour Haskell. Je joue aussi au golf.
Merci à @nimi.
la source
Javascript (ES6),
8584 octetsCas de test:
la source
Python 3, 131 octets
Il s'agit d'une expression lambda; pour l'utiliser, affectez-le en ajoutant
f=
.Nous vérifions d'abord les triplets deux fois (en utilisant le module), en supprimant les triplets au fur et à mesure; puis nous ajoutons simplement les nombres de
5
et1
au score et le renvoyons.Essayez-le sur Ideone! (avec tous les cas de test)
Voici mon ancienne soumission Python 2:
Python 2,
176172 172171145136134133 octetsSauvegardé un octet sur la solution Python 2 grâce à @ mbomb007!
la source
print s
est plus court en Python 2.BASH (sed + bc) 161
Je voulais tout faire en sed, mais l'addition est vraiment difficile ...
Explication:
00
au premier numéro et supprimer l'autrepar exemple
1 2 1 3 1 4
->100 2 3 4
10
par1
puis1
par100
exemple
100
->10
->1000
ou1
->1
->100
5
non suivi par0
des50
0
+
+
s de0
bc
tout additionner.la source
Perl, 69 octets
Comprend +2 pour
-ap
Exécutez avec l'entrée sur STDIN:
dice10000.pl
:la source
C # (.NET Core) ,
228227 octetsEssayez-le en ligne!
Je sens que je me manque beaucoup, beaucoup d' optimisations potentielles, mais je l'ai fait , sauf un octet en multipliant par 10 à la fin. L'entrée doit être passée sous forme d'arguments de ligne de commande distincts.
la source
Perl 5
-ap
, 78 octetsEssayez-le en ligne!
la source