Yahtzee est un jeu joué avec cinq dés à six faces et une feuille de score avec treize cases différentes pour remplir un score. Chaque case a ses propres règles de score:
- 1s, 2s, 3s, 4s, 5s, 6s marquent tous des points égaux à la somme des dés respectifs (c'est-à-dire qu'un jet de [3, 2, 3, 1, 5] marqué comme 3s recevrait 6 points: 3 pour chaque 3).
- 3-of-a-kind et 4-of-a-kind (comme ils sonnent, trois ou quatre dés ont lancé les mêmes) marquent des points égaux à la somme des cinq dés.
- Full house (deux dés montrent une valeur, les trois autres en montrent une autre) marque 25 points
- Une petite ligne droite (quatre valeurs consécutives) marque 30 points
- Une grande ligne droite (toutes les valeurs consécutives) marque 40 points
- Yahtzee (tous les dés affichent la même valeur) marque 50 points
Le treizième (chance) a du sens dans le jeu, mais pas tant pour ce défi; en outre, le jeu a des bonus pour Yahtzees supplémentaires qui n'ont aucun sens ici. Parce que le défi est ...
Étant donné cinq dés en entrée (cinq entiers 1-6, l'entrée est cependant pratique, vous pouvez supposer que l'entrée est toujours valide), produisez le score le plus élevé possible pour cette `` main ''. Aux fins de ce défi, seules les méthodes de notation dans la liste ci-dessus sont valides (en particulier, le hasard n'est pas une case de score valide pour ce défi). Le score doit être affiché sous la forme de sa valeur numérique décimale, qu'il s'agisse d'un entier ou d'une représentation sous forme de chaîne, quel qu'il soit. Il doit être immédiatement reconnaissable comme un nombre. Les espaces blancs de début / fin sont très bien, il s'agit d'obtenir le score et non la présentation.
Code golf, donc la réponse avec le moins d'octets dans une langue donnée l'emporte. Failles standard interdites.
Cas de test
(Notez que ce sont tous indépendants, le défi est de marquer une «main» de dés):
in: 1 5 4 3 2
out: 40
in: 1 1 4 3 1
out: 10
in: 2 2 6 5 3
out: 6
in: 2 4 2 4 6
out: 8
in: 1 1 1 1 1
out: 50
in: 5 2 5 3 6
out: 10
in: 1 6 3 4 2
out: 30
in: 1 3 1 1 3
out: 25
in: 6 5 5 6 6
out: 28
in: 1 2 3 5 6
out: 6
Réponses:
R ,
146141 octetsEssayez-le en ligne!
Outgolfed par plannapus
Prend l'entrée sous forme de liste et renvoie le score.
ungolfed un peu:
la source
f(c(1,2,3,5,6))
échoue - il devrait donner 6 et au lieu de 30. Il semble que ce soit parce que vous comptez combien de paires (post-tri) diffèrent par une, ce qui est en fait quatre pour la séquence ci-dessus, même si ce n'est pas une ligne droite de quatre. Je pense que je suis tombé sur cela quand je l'ai fait comme exercice il y a quelque temps, et je devrais probablement ajouter cela comme cas de test ...Python 2 ,
187184167165 octets-17 octets grâce à @mypetlion
-2 octets grâce à @chrstphrchvz
Essayez-le en ligne!
la source
R,
136134 octetsGolfé sur 2 octets grâce à @Giuseppe !
Dentelé,
Quelques cas de test:
la source
factor
pendant une seconde chaude avant de me laisser distraire. Mais je pense que si j'utilise votre approche avecz
(s
dans ma réponse), je peux jouer la mienne à 134 ...all(y<4&y-1)
et en utilisant*
au lieu de[
, et en définissanty
inline plutôt qu'en tant qu'argument de fonction, et il passe toujours tous les cas de test: Essayez-le en ligne!max
et je pense que cela a sauvé l'octet de la mise eny
ligne.Lot, 359 octets
Explication:
Calculez le nombre de dés pour chaque numéro, plus le maximum, plus le total de tous les dés, plus le total le plus élevé de dés du même nombre.
Si tous les dés sont différents, cela peut être une longue ligne droite, mais cela doit être non
1
ou non6
.Sinon, ou si au plus deux dés sont identiques, cela peut être une courte ligne droite. Il doit y avoir au moins un
3
et un4
et aussi une combinaison des quatre autres nombres.S'il y a trois dés identiques, cherchez une maison pleine, depuis
3^2==1
. Cependant, certaines maisons pleines, comme les 6 et les 5, obtiennent un score plus élevé en tant que 3-of-a-kind.Sinon, ou s'il y en a quatre de même, marquez le total.
Et s'il y en a cinq pareils, alors Yahtzee!
Produisez le meilleur score.
la source
Gelée , 58 octets
Essayez-le en ligne!
la source
25.0
alors qu'aucun autre cas n'a de fuite.0
?2.5 × 10 = 25.0
(arithmétique flottante), tandis que les autres tels que30
sont inférés comme3 × 10 = 30
(arithmétique entière).× 10
s'agit de 2 octets,2.5
est de 2 octets exactement comme25
, et3,5,4
enregistre 3 octets de plus30,50,40
, donc 3 + 0 - 2 = 1 octet enregistré.Perl 6 , 159 octets
Essayez-le en ligne!
Étant donné que l'entrée peut être acceptée «mais c'est pratique», ma fonction la prend comme une instance de la
Bag
classe, qui est un conteneur avec une multiplicité. ABag
est également un conteneur associatif;$bag{$key}
renvoie combien de fois$key
se produit dans le sac.La majeure partie de la fonction n'est qu'une liste de fonctions qui évaluent chaque main Yahtzee possible, renvoyant le score de cette main ou zéro si les conditions de la main ne sont pas remplies.
|(1..6).map({ *{$_} * $_ })
est une liste de six fonctions qui évaluent les mains sur la base de répétitions des nombres 1-6. Le premier|
aplatit cette liste dans la liste environnante.{.kxxv.sum * ?.values.grep(* > 2) }
évalue les mains à 3 et 4 exemplaires..kxxv
sur unBag
retourne les touches répétées avec la multiplicité de chacun, récupérant la liste originale des jets de dé, et.sum
bien sûr additionne les dés. Cette somme est multipliée par une valeur booléenne (?
) qui est vraie si le sac.values
(c'est-à-dire les multiplicités) contient une valeur supérieure à 2.{ 25 * (6 == [*] .values) }
évalue la main entière de la maison. 25 est multiplié par une valeur booléenne qui est vraie si le produit des multiplicités est 6, ce qui pour cinq dés ne peut se produire que si l'un est 3 et l'autre est 2.30 * ?*{ 3 & 4 & (1 & 2 | 2 & 5 | 5 & 6) }
évalue la petite main droite. C'est uneWhateverCode
fonction; la deuxième étoile*
est laBag
. L'expression entre les accolades est la jonction des valeurs 3 et 4, et 1 et 2, ou 2 et 5, ou 5 et 6. La recherche de cette jonction dans lesBag
résultats entraîne une jonction des multiplicités correspondantes. Si les multiplicités de 3 et 4, et d'au moins 1 et 2, ou 2 et 5, ou 5 et 6, sont non nulles, la jonction est vraie lorsqu'elle est contrainte à un booléen (avec?
), et ce booléen est multiplié par 30 pour obtenir le score.40 * ?*{ 2 & 3 & 4 & 5 & (1 | 6) }
évalue de même la grande main droite. C'est plus simple car les dés doivent inclure chacun des nombres 2-5 et 1 ou 6.50 * (*.keys == 1)
évalue la main Yahtzee. C'est simplement 50 fois une valeur booléenne, ce qui est vrai si le nombre de dés distincts est égal à un.la source
Pip ,
6563 octetsPrend les dés comme cinq arguments de ligne de commande. Essayez-le en ligne!
Non golfé + explication
(Ceci est la version originale.)
la source
Rubis , 184 octets
Programme complet. Pour faciliter le test de l'entrée, ajoutez
$/=' '
en haut pour lire au format "chiffre séparé par des espaces". (191 caractères)J'ai posé la barrière de 200 octets et j'ai réussi à la détruire avec une dizaine d'octets restants, en toute simplicité!
Essayez-le en ligne!
Explication
Pas très bon cependant. J'espère que vous avez des connaissances Ruby ~
la source