Une suite à ce défi
Étant donné un ensemble de dés mixtes, affichez la distribution de fréquence de tous les lancers et de la somme des nombres lancés sur chaque dé.
Par exemple, considérez 1d12 + 1d8
(lancer 1 dé à 12 faces et 1 dé à 8 faces). Les lancers maximum et minimum sont 20
et 2
, respectivement, ce qui est similaire au lancer 2d10
(2 dés à 10 faces). Cependant, il en 1d12 + 1d8
résulte une distribution plus plate que 2d10
: [1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 7, 6, 5, 4, 3, 2, 1]
versus [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
.
Règles
- Les fréquences doivent être répertoriées dans l'ordre croissant de la somme à laquelle la fréquence correspond.
- L'étiquetage des fréquences avec les sommes correspondantes est autorisé, mais pas obligatoire (car les sommes peuvent être déduites de l'ordre requis).
- Vous n'avez pas à gérer les entrées lorsque la sortie dépasse la plage représentable d'entiers pour votre langue.
- Les zéros au début ou à la fin ne sont pas autorisés. Seules les fréquences positives doivent apparaître dans la sortie.
- Vous pouvez prendre l'entrée dans n'importe quel format raisonnable (liste de dés (
[6, 8, 8]
), liste de paires de dés ([[1, 6], [2, 8]]
), etc.). - Les fréquences doivent être normalisées de sorte que le GCD des fréquences soit 1 (par exemple
[1, 2, 3, 2, 1]
au lieu de[2, 4, 6, 4, 2]
). - Tous les dés auront au moins un visage (donc a
d1
est le minimum). - Il s'agit de code-golf , donc le code le plus court (en octets) l'emporte. Les failles standard sont interdites, comme d'habitude.
Cas de test
Ces cas de test sont donnés comme input: output
, où l'entrée est donnée sous la forme d'une liste de paires [a, b]
représentant les a
b
dés à faces (donc [3, 8]
fait référence 3d8
et [[1, 12], [1, 8]]
fait référence 1d12 + 1d8
).
[[2, 10]]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[[1, 1], [1, 9]]: [1, 1, 1, 1, 1, 1, 1, 1, 1]
[[1, 12], [1, 8]]: [1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 7, 6, 5, 4, 3, 2, 1]
[[2, 4], [3, 6]]: [1, 5, 15, 35, 68, 116, 177, 245, 311, 363, 392, 392, 363, 311, 245, 177, 116, 68, 35, 15, 5, 1]
[[1, 3], [2, 13]]: [1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 37, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 1]
[[1, 4], [2, 8], [2, 20]]: [1, 5, 15, 35, 69, 121, 195, 295, 423, 579, 761, 965, 1187, 1423, 1669, 1921, 2176, 2432, 2688, 2944, 3198, 3446, 3682, 3898, 4086, 4238, 4346, 4402, 4402, 4346, 4238, 4086, 3898, 3682, 3446, 3198, 2944, 2688, 2432, 2176, 1921, 1669, 1423, 1187, 965, 761, 579, 423, 295, 195, 121, 69, 35, 15, 5, 1]
[[1, 10], [1, 12], [1, 20], [1, 50]]: [1, 4, 10, 20, 35, 56, 84, 120, 165, 220, 285, 360, 444, 536, 635, 740, 850, 964, 1081, 1200, 1319, 1436, 1550, 1660, 1765, 1864, 1956, 2040, 2115, 2180, 2235, 2280, 2316, 2344, 2365, 2380, 2390, 2396, 2399, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2399, 2396, 2390, 2380, 2365, 2344, 2316, 2280, 2235, 2180, 2115, 2040, 1956, 1864, 1765, 1660, 1550, 1436, 1319, 1200, 1081, 964, 850, 740, 635, 536, 444, 360, 285, 220, 165, 120, 84, 56, 35, 20, 10, 4, 1]
Réponses:
Gelée ,
147 octets-3 octets grâce à M. Xcoder (utilisation d'une plage implicite pour éviter de mener
R
; remplacement de réduire par le produit cartésien dyadique et d'aplatirp/F€
, avec le produit cartésien intégré à cet effet ,.Œp
)Un lien monadique reprenant une liste de faces de dés et renvoyant la distribution normalisée des sommes croissantes.
Essayez-le en ligne!
Comment?
Parcourt la liste des "tailles" de dés (implicitement) en fait leur liste de faces, puis obtient le produit cartésien de ces listes (tous les jets possibles de l'ensemble de dés), puis résume ces jets, obtient les groupes d'égaux indices (par valeur ascendante) et prend la longueur de chaque groupe.
Remarque: il n'y a qu'une seule façon de lancer le minimum (en lançant un sur chaque dé) et nous ne comptons pas deux fois les lancers, il n'est donc pas nécessaire d'effectuer une normalisation GCD.
la source
÷g/$
(n'est-ce pas toujours une seule façon d'obtenir le minimum ou le maximum?)ŒpS€µLƙ
MATL , 8 octets
L'entrée est un tableau de tailles de matrice (éventuellement répétées).
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Husk , 7 octets
L'entrée est une liste de dés. Essayez-le en ligne!
Explication
la source
Haskell , 54 octets
Essayez-le en ligne!
Haskell , 63 octets
Essayez-le en ligne!
Haskell , 68 octets
Essayez-le en ligne!
la source
Octave ,
88 69 5856 octetsComme mentionné dans la réponse de Haskell, cela utilise le fait que la distribution, par exemple, d'un dé à 3 côtés et d'un dé à 5 côtés est la convolution discrète des deux vecteurs
[1,1,1]
et[1,1,1,1,1]
. Merci @LuisMendo pour -11 octets de golf intelligent!Essayez-le en ligne!
Cette soumission utilise une approche récursive. Mais si vous utilisiez une boucle, elle serait légèrement plus longue:
la source
Haskell ,
80 7864 octetsCette solution a fini par être presque la même que celle de @ Sherlock9 dans le défi précédent avec l'approche peut-être plus naturelle. @xnor a une solution Haskell encore plus courte !
Explication:
Essayez-le en ligne!
Solution précédente:
Cela utilise la fonction de convolution discrète @AndersKaseorg . L'observation ici est que la distribution, par exemple, d'un dé à 3 côtés et d'un dé à 5 côtés est la convolution discrète des deux vecteurs
[1,1,1]
et[1,1,1,1,1]
.Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 26 octets
Essayez-le en ligne!
Une modification de ma réponse au défi précédent . Cela génère simplement tous les résultats possibles, les additionne et correspond aux résultats.
Pour le plaisir, nous pourrions l'écrire comme
Tally@*Total@*Thread@*Tuples@*Range
, mais c'est plus long.Wolfram Language (Mathematica) , 41 octets
Essayez-le en ligne!
C'est l'approche basée sur la convolution (ici, nous prenons des convolutions via le produit des fonctions génératrices -
1+x+x^2+...+x^(N-1)
est la fonction génératrice pour faire rouler un dN - puis prenons la liste des coefficients). Je l'inclus parce que la première solution n'est pas pratique pour les grandes entrées.la source
Mathematica, 44 octets
Sort les fréquences étiquetées avec les sommes correspondantes
Essayez-le en ligne!
-5 octets de Martin Ender
merci à Misha Lavrov de m'avoir fait savoir que "étiqueté" est valide
la source
Pyth , 12 octets
Essayez-le ici!
Comment?
la source
Gelée , 14 octets
Essayez-le en ligne!
L'entrée est une liste de valeurs de matrice. Je pourrais jouer au golf en volant
ĠL€
l'autre réponse de Jelly, mais je pourrais aussi jouer au golf pendant la première moitié et finir avec la même chose, donc je vais laisser les choses comme elles sontla source
Python 2 ,
120119 octetsEssayez-le en ligne!
Merci pour Mego / Jonathon Allan pour 1 octet.
la source
05AB1E , 11 octets
Essayez-le en ligne!
Comment ça marche
1 octet enregistré grâce à Emigna !
la source
O
au lieu de€˜
R , 51 octets
Essayez-le en ligne!
Prend une liste de dés et retourne un vecteur de fréquences nommé; les noms (valeurs des sommes des dés) sont imprimés au-dessus des fréquences.
R , 59 octets
Essayez-le en ligne!
Une
Reduce
approche plutôt que celle itérative ci-dessus.R , 62 octets
Essayez-le en ligne!
Une approche par convolution. Il donnera quelques avertissements selon lesquels il n'utilise que le premier élément de
D
l'expression,1:D
mais cela n'affecte pas la sortie. Si nous n'avions pas à prendre laRe
partie entière de la solution, ce serait 58 octets.la source
APL (Dyalog Classic) ,
1210 octets-2 merci à @ Adám
Essayez-le en ligne!
l'entrée
⎕
est une liste de N dés⍳⍵
est un tableau N-dimensionnel de vecteurs imbriqués - tous les lancers de dés possibles+/↑,
aplatit les tableaux et résume les lancers⊢∘≢⌸
compte le nombre de chaque somme unique, répertoriée dans l'ordre de leur première apparition, qui coïncide heureusement avec leur ordre croissantla source
⊢∘≢⌸+/↑,⍳⎕
Rubis , 72 octets
Essayez-le en ligne!
Prend une liste de dés en entrée. Sans aucun doute, il peut être joué au golf, mais pas trop mal.
la source
Pari / GP , 37 octets
Essayez-le en ligne!
la source
Propre ,
15414213610710085 + 13 = 98 octetsL'entrée est une liste de dés.
La réponse est sous la forme d'un lambda.
+13 octets de
import StdEnv
, qui importe le module nécessaire pour que cela fonctionne.Essayez-le en ligne!
la source
JavaScript (ES6), 83 octets
Prend l'entrée de chaque dé comme paramètre séparé.
la source
JavaScript (ES6),
7674 octetsPrend l'entrée comme une liste de dés.
Cas de test
Le traitement des deux derniers cas de test nécessiterait d'activer le TCO ou d'augmenter la limite de taille de pile par défaut du moteur JS.
Afficher l'extrait de code
Formaté et commenté
NB: Ceci est une version commentée de ma soumission initiale qui utilisait réduire (). C'est 2 octets de plus mais plus facile à lire.
la source
Clojure, 96 octets
La première entrée est une liste de nombre de dés, et la deuxième entrée est une liste de nombre de côtés sur chaque dé.
la source
Perl 5 , 94 octets
Essayez-le en ligne!
Le format d'entrée est une liste de dés séparés par des retours à la ligne. Ainsi, 1d10 + 2d8 entrerait comme:
la source
SageMath, 46 octets
Essayez-le en ligne
Il s'agit d'une adaptation de ma solution à l'autre défi . Il prend n'importe quel nombre de dés comme paramètres (par exemple
f(4,4,6,6,6)
pour2d4+3d6
) et retourne une liste.Python 2 + NumPy , 62 octets
Essayez-le en ligne!
Comme précédemment, j'ai inclus cette solution avec celle ci-dessus, car elles sont essentiellement équivalentes. Notez que cette fonction renvoie un tableau NumPy et non une liste Python, donc la sortie semble un peu différente si vous
print
le faites .numpy.ones(x)
est la façon "correcte" de créer un tableau à utiliser avec NumPy, et donc il pourrait être utilisé à la place de[x*[1]]
, mais il est malheureusement beaucoup plus long.la source