Aujourd'hui dans ma classe de statistiques, j'ai trouvé que certaines factorielles peuvent être simplifiées lorsqu'elles sont multipliées ensemble! Par exemple:5! * 3! = 5! *3*2 = 5! *6 = 6!
Votre travail:
Étant donné une chaîne contenant uniquement des nombres arabes et des points d'exclamation, simplifiez mon factoriel à sa chaîne la plus courte possible, dans le moins d'octets pour votre langue, codez le style de golf.
Contribution
Une chaîne contenant uniquement des nombres arabes et des points d'exclamation. Les factorielles pour l'entrée ne dépasseront pas 200!. Les factorielles n'auront pas plus d'une factorielle par nombre. L'entrée peut être considérée comme une liste d'entiers.
Production
Une chaîne éventuellement raccourcie, qui a la valeur équivalente sur l'entrée. L'ordre est sans importance. La notation factorielle est un must, mais vous n'êtes pas obligé d'utiliser plus d'un symbole factoriel par nombre.
Cas de test
In: 3!2!2!
Out: 4!
In 2!3!2!0!
Out: 4!
In: 7!2!2!7!2!2!2!2!
Out: 8!8!
In: 23!3!2!2!
Out: 24!
Also: 4!!
In: 23!3!2!2!2!
Out: 24!2!
In: 127!2!2!2!2!2!2!2!
Out: 128!
In: 32!56!29!128!
Out: 29!32!56!128!
Bonne chance
1!1!
juste une chaîne vide?Réponses:
Gelée ,
1718 octetsUn lien monadique prenant et retournant une liste des nombres (s'en tient à l'option un factoriel par nombre)
Essayez-le en ligne!
Comment?
Une version golfée (bien qu'écrite indépendamment) de la solution de Pietu1998.
la source
Gelée , 19 octets
Essayez-le en ligne!
Rapide et sale. Très lent, même le
23!2!3!2!
cas de test est un tronçon. E / S sous forme de listes d'entiers.Explication
la source
Nettoyer ,
397... 317 octetsEssayez-le en ligne!
Cela prend un
[Int]
, détermine les facteurs premiers du résultat et réduit les facteurs pour trouver la plus petite représentation, en utilisant le plus grand facteur à n'importe quel stade comme valeur de référence pour le prochain terme factoriel. Il ne terminera pas certains cas de test sur TIO, mais il est assez * rapide et peut les exécuter tous en moins de 3 minutes sur un ordinateur portable de milieu de gamme.* pour un
O((prod(N)!)^sum(N))
algorithme de complexitéla source
> <> , 66 octets
Essayez-le en ligne!
Pas efficace, ne trouve pas la plus petite chaîne et l'interpréteur ne gère pas très bien les nombres extrêmement grands. Mais au moins j'ai essayé? Prend l'entrée comme une liste de nombres à travers le
-v
drapeau.Il calcule d'abord la valeur de l'entrée en factorisant chaque nombre et en les multipliant ensemble. Ensuite, il trouve la plus grande factorielle qui se divise proprement dans le total et le produit. Répétez jusqu'à ce qu'il obtienne un nombre premier (qu'il sort) ou un 1 et quitte le programme. Pour cette raison, il ne trouve parfois pas la représentation la plus courte du nombre, par exemple, le cas de test
7!2!2!7!2!2!2!2!
retourne10!224
au lieu de8!8!
car il trouve que le total est divisible par 10! premier.la source
Rubis ,
240 237233 octetsC'est incroyablement inefficace
Accepte un tableau d'entiers en entrée
Renvoie une chaîne et choisit l'option la plus courte entre, disons
'720!'
,'6!!'
et'3!!!'
Essayez-le en ligne!
la source