Vous recevez une chaîne qui contiendra des caractères az ordinaires. (Vous pouvez supposer que ce sera toujours le cas dans tous les tests et supposer que toutes les lettres seront également en minuscules). Vous devez déterminer combien de combinaisons uniques peuvent être faites des caractères individuels dans la chaîne et imprimer ce nombre.
Cependant, les lettres en double peuvent être ignorées lors du comptage des combinaisons possibles. En d'autres termes, si la chaîne donnée est "bonjour", alors simplement changer les positions des deux l
s ne compte pas comme une phrase unique, et ne peut donc pas être compté dans le total.
Le nombre d'octets le plus court gagne, avec impatience de voir des solutions créatives dans des langues autres que le golf!
Exemples:
hello -> 60
aaaaa -> 1
abcde -> 120
Réponses:
Python 2 ,
5048 octetsEssayez-le en ligne!
Aucun ennuyeux intégré! À ma grande surprise, c'est encore plus court que l'approche par force brute, calculant toutes les permutations avec
itertools
et prenant la longueur.Cette fonction utilise la formule
et le calcule à la volée. La factorielle dans le numérateur est calculée en multipliant par
len(s)
dans chaque appel de fonction. Le dénominateur est un peu plus subtil; dans chaque appel, nous divisons par le nombre d'occurrences de cet élément dans ce qui reste de la chaîne, garantissant que pour chaque caractèrec
, tous les nombres entre 1 et la quantité d'occurrences dec
(inclus) seront divisés par une seule fois. Étant donné que nous ne divisons qu'à la toute fin, nous sommes garantis de ne pas avoir de problèmes avec la division par défaut du plancher de Python 2.la source
05AB1E , 3 octets
Essayez-le en ligne!
Explication
la source
CJam , 4 octets
Essayez-le en ligne!
Explication
Lire la ligne sous forme de chaîne (
l
), les permutations uniques sous forme de tableau de chaînes (e!
), la longueur (,
), l'affichage implicite.la source
R ,
6965 octetsEssayez-le en ligne!
4 octets enregistrés grâce à Zahiro Mor dans les deux réponses.
Calcule directement le coefficient multinomial.
R ,
7268 octetsEssayez-le en ligne!
Utilise la fonction de distribution multinomiale fournie par
dmultinom
pour extraire le coefficient multinomial.Notez que l'habituel (golfeur)
x<-table(strsplit(s,""))
ne fonctionne pas dans l'dmultinom
appel pour une raison inconnue.la source
function(s,
!=factorial)(!nchar(s))/prod(!table(strsplit(s,"")))
marchera. le el () est redondant - la table sait rechercher les éléments ....JavaScript (Node.js) , 49 octets
t=t*
est utilisé au lieu det*=
pour éviter une erreur d'arrondi (l'arrondi|t
vers le bas du nombre) car ilt=t*
garantit que tous les résultats intermédiaires (selon l'opérateur) sont des nombres entiers.Essayez-le en ligne!
la source
t=t*
si vous voulez éviter cela.)aaadegfbbbccc
exactement due à l'erreur d'arrondi à virgule flottanteAPL (Dyalog Unicode) , 14 octets
Essayez-le en ligne!
Renvoie le résultat sous forme de singleton.
la source
⍴
->≢
pour lui faire retourner des scalaires simples,÷⍨/g⌸,g←!⊢∘≢
pour -2Japt ,
53 octets-2 octets grâce à @Shaggy
Essayez-le en ligne!
la source
â
.J ,
15, 14 octetsEssayez-le en ligne!
-1 octet grâce à FrownyFrog
la source
~.
peut être=
Gelée , 4 octets
Essayez-le en ligne!
Fait simplement ce qui a été demandé: trouver les permutations d'entrée, unifier et imprimer la longueur.
la source
C # (Visual C # Interactive Compiler) , 59 octets
Port de la réponse Python 2 de @ArBo .
Essayez-le en ligne.
la source
Brachylog , 3 octets
Essayez-le en ligne!
pᵘl
fait à peu près exactement la même chose.la source
Python 2 , 57 octets
Essayez-le en ligne!
Auto-documentation: renvoie la longueur de l'ensemble des permutations uniques de la chaîne d'entrée.
Python 3 , 55 octets
Le crédit va à Arbo sur celui - ci:
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 24 octets
Essayez-le en ligne!
Dfn simple, prend une chaîne comme argument.
Comment:
la source
Rubis , 41 octets
Essayez-le en ligne!
la source
to_a
f=
pièce. (Dans TIO, déplacez-le vers Header pour ne pas être compté.)Perl 5 , 43 octets
Utilise la méthode dans la réponse Python de @ ArBo.
Essayez-le en ligne!
la source
Perl 6 ,
3330 caractères (3431 octets)Whatever
Bloc assez simple .comb
divise la chaîne en lettres,permutations
obtient toutes les combinaisons possibles. En raison de la façon dont la contrainteSet
doit êtrejoin
éditée en premier (»
s'appliquejoin
à chaque élément de la liste).Essayez-le en ligne!
(la réponse précédente est utilisée
.unique
maisSet
garantit l'unicité et la numérise de la même manière, cela économise 3).la source
K (oK) , 12 octets
Solution:
Essayez-le en ligne!
Explication:
Utilise le oK intégré
prm
:... qui, en raison de
x^/:x
génère essentiellement les permutations de"helo"
non"hello"
, nous devons donc générer les permutations de0 1 2 3 4
, les utiliser pour indexer"hello"
puis prendre le compte de l'unique.la source
!-n
. à la fin de k5 et k6, il est devenuprm
. k7 (shakti)prm
aussi.Java 8,
103102 octetsPort de la réponse Python 2 de @ArBo .
-1 octet grâce à @ OlivierGrégoire en le rendant itératif au lieu de récursif.
Essayez-le en ligne.
En fait, générer toutes les permutations uniques dans un ensemble et obtenir sa taille serait de 221 octets :
Essayez-le en ligne.
la source
s->{int r=1,i=s.length();for(;i>0;)r=r*i/~-s.substring(--i).split(s.charAt(i)+"",-1).length;return r;}
.s->{long r=1,i=s.length();for(;i>0;)r=r*i/(s.chars().skip(--i).filter(c -> c==s.charAt(i)).count()+1);return r;}
mais sans succès jusqu'à présent ...MATL , 9 octets
Essayez-le en ligne!
Explication:
la source
j
devient ainsii
, qui peut être laissé implicite. En outre,&nx
enregistre un octet surZy1)
tio.run/##y00syfn/P9IholQtr@L/f/WM1JycfHUAOctave / MATLAB, 35 octets
Fonction anonyme qui prend un vecteur de caractères et produit un nombre.
Dans MATLAB, cela peut être raccourci à
size(unique(perms(s),'ro'),1)
(33 octets).Essayez-le en ligne!
Explication
la source
unique
déjà retourné des lignes uniques? Ou est-ce seulement pourtable
s?unique
, la linéarisation serait la première. Pour les tableaux, je pense que vous avez raison; Je ne savais pas ça!unique
dans MATLAB, il faut des lignes pourtables
; Runique
prend des lignes uniques de matrices ou de trames de données. Trop de langages de tableau avec les mêmes commandes qui font des choses légèrement différentes ...Retina 0.8.2 , 73 octets
Essayez-le en ligne! Utilise la formule de @ ArBo, mais évalue de droite à gauche car cela peut être fait en arithmétique entière tout en minimisant la taille des valeurs unaires impliquées. Explication:
Pour chaque caractère, comptez le nombre de doublons restants et le nombre de caractères supplémentaires, ajoutez-en un pour prendre en compte le caractère actuel et séparez les valeurs afin de savoir lesquels doivent être divisés et lesquels doivent être multipliés. .
Préfixez un 1 pour produire une expression complète.
Multipliez de façon répétée le dernier et l'avant-dernier nombre en divisant par l'avant-dernier numéro. Cela remplace les trois derniers chiffres.
Convertissez en décimal.
la source
K, 27 octets
K, 16 octets - pas une vraie réponse
Prenez 999999 permutations aléatoires de la chaîne d'entrée, prenez l'ensemble unique d'entre elles et comptez la longueur. La plupart du temps, il donnera la bonne réponse, pour les chaînes plus courtes.
Amélioré grâce à @Sriotchilism O'Zaic, @Selcuk
la source
999999
place de100000
?Wolfram Language (Mathematica) , 32 octets
Essayez-le en ligne!
Explication: La composition à droite avec
/*
applique ces trois opérateurs l'un après l'autre à l'argument de fonction, de gauche à droite:Characters
convertit la chaîne d'entrée en une liste de caractères.Permutations
fait une liste de toutes les permutations uniques de cette liste de caractères.Length
renvoie la longueur de cette liste de permutations uniques.Cette méthode est très inutile pour les chaînes longues: les permutations uniques sont en fait répertoriées et comptées, au lieu d'utiliser a
Multinomial
pour calculer leur nombre sans les répertorier.la source
F # (Mono) , 105 octets
Essayez-le en ligne!
la source
Pyth ,
54 octetsEssayez-le en ligne!
Cela suppose que l'entrée est un littéral de chaîne python. Si l'entrée doit être du texte brut, cette version à 5 octets fonctionnera:
Dans les deux cas, il calcule simplement toutes les permutations de l'entrée sous forme de liste, la déduplique et obtient le nombre d'éléments qu'elle contient, et imprime implicitement ce nombre.
-1 octet grâce à @ hakr14
la source
{
déduplique une liste pour un octet inférieur à.{
.J ,
1413 octetsEssayez-le en ligne!
1 octet grâce aux miles
la source
#(%*/)&:!#/.~
devrait sauver un autre octetPHP , 77 octets
Essayez-le en ligne!
Il s'agit essentiellement d'un port PHP de la réponse Python gagnante de @ ArBo, qui est ridiculement plus intelligent que la réponse récursive que j'avais à l'origine. Bravo!
la source
Ohm v2 , 4 octets
Essayez-le en ligne!
Explication
la source
Stax , 3 octets
Exécuter et déboguer
la source