Un diagramme de Young est un arrangement de boîtes dans des lignes justifiées à gauche et des colonnes justifiées en haut. Pour chaque case, tous les espaces au-dessus et à gauche sont occupés.
XXXXX
XXX
XXX
X
La longueur de crochet d'une boîte est le nombre de boîtes à sa droite dans sa ligne, et en dessous dans sa colonne, se comptant également une fois. Par exemple, la deuxième boîte a une longueur de crochet de 6:
X****
X*X
X*X
X
Voici toutes les longueurs de crochet:
86521
532
421
1
Votre objectif est de calculer le produit des longueurs de crochet, ici 8*6*5*2*1*5*3*2*4*2*1*1 = 115200
.
(Lisez la formule de la longueur du crochet si vous souhaitez savoir pourquoi cette expression est importante.)
Entrée: collection de tailles de lignes sous forme de nombres comme [5,3,3,1]
ou sous forme de symbole unaire répété comme [[1,1,1,1,1], [1,1,1], [1,1,1], [1]]
ou "XXXXX XXX XXX X"
. Vous pouvez vous attendre à ce que la liste soit triée par ordre croissant ou décroissant, comme vous le souhaitez. La liste sera non vide et ne contiendra que des entiers positifs.
Sortie: Le produit des longueurs de crochet, qui est un entier positif. Ne vous inquiétez pas des débordements d'entiers ou de l'exécution.
Les éléments intégrés traitant spécifiquement des diagrammes de Young ou des partitions entières ne sont pas autorisés.
Cas de test:
[1] 1
[2] 2
[1, 1] 2
[5] 120
[2, 1] 3
[5, 4, 3, 2, 1] 4465125
[5, 3, 3, 1] 115200
[10, 5] 798336000
{ee::+W%}_q~%z%:+:*
(19 octets) Format d'entrée:[[1][1 1 1][1 1 1][1 1 1 1 1]]
%
: PJ, 24 octets
25 octets (avec explication):
Prend la saisie sous forme de liste de listes ascendantes de chiffres unaires similaires à l'exemple
[[1], [1,1,1], [1,1,1], [1,1,1,1,1]]
.Usage:
Méthode
Résultats intermédiaires affichés sur l'entrée
1 1 1 1 1;1 1 1;1 1 1;1 (5,3,3,1 in unary)
( c'est pour une version précédente avec des longueurs décroissantes mais en utilisant la même méthode ):Version explicite de même longueur:
Essayez-le en ligne ici.
la source
Pyth - 21 octets
Je perd beaucoup d'octets dans le calcul vertical. Je vais me concentrer sur le golf.
Prend l'entrée comme
[5, 3, 3, 1]
.Essayez-le ici en ligne .
la source
Pyth, 18 octets
Prend les entrées dans l'ordre croissant, comme
[1, 3, 3, 5]
.Manifestation.
Solution alternative, 19 octets
la source
Python 2,
8988 octets(Merci à @xnor pour un octet fou sauvegardé en combinant
p
etj
)Le
d.get
me semble un peu suspect, mais sinon je suis relativement heureux avec cela. J'ai essayé d'autres approches, comme la récursivité et le zippage, mais c'est la seule que j'ai réussi à obtenir moins de 100.Prend l'entrée de STDIN comme une liste dans l'ordre croissant, par exemple
[1, 3, 3, 5]
.la source
Haskell, 68 octets
Exemple d'utilisation:
p [5,4,3,2,1]
->4465125
f
balaye de gauche à droite en multipliant la longueur du crochet le plus à l'extérieur par un appel récursif à lui-même où chaque élément de la liste d'entrée est réduit de1
(en le supprimant en atteignant0
).p
balaye de haut en bas en multipliantf
la liste entière parp
la queue.la source
R, 174 octets
Alors ... Cette solution est assez longue et pourrait probablement être plus jouée. Je vais y penser !
Non golfé:
la source
Python 2,
135128 octetsCela prend une liste de types Python de stdin:
Il s'agit d'une implémentation très canonique, mais je n'ai jusqu'à présent rien trouvé de plus intelligent. J'ai le sentiment qu'il y aura des solutions beaucoup plus courtes même avec de "vrais" langages de programmation.
Nous obtenons le nombre de cases dans chaque ligne en entrée. Cette solution compte d'abord le nombre de cases dans chaque colonne, qui est stocké dans
c
(c'est en fait le nombre moins 1 pour simplifier son utilisation dans le calcul ultérieur). Ensuite, il itère sur toutes les cases et multiplie les longueurs de crochet. La longueur du crochet lui-même est triviale à calculer une fois que vous avez le nombre de cases dans chaque ligne et colonne.la source
m
?JavaScript ( ES6 ) 69
Une fonction prenant un tableau d'entiers dans l' ordre croissant .
Exécutez l'extrait de code pour tester (Firefox uniquement)
la source
Python,
9591 octetsCeci est une implémentation Python de la réponse Haskell de nimi . Suggestions de golf bienvenues.
la source
z and _ or 1
commez==[]or _
quandz
est une liste, en utilisant le fait queTrue==1
. Les déclarations de fonctions de Python sont plus verbeuses que Haskell, donc cela donne souvent un bon gain pour définir une seule fonction récursive qui fait à la fois les boucles récursives intérieure et extérieure, bien que je ne sache pas dans quelle mesure cela est possible ici.