Se le da una cadena, que contendrá caracteres az ordinarios. (Puede suponer que este será siempre el caso en cualquier prueba, y asumir que todas las letras también estarán en minúsculas). Debe determinar cuántas combinaciones únicas se pueden hacer de los caracteres individuales en la cadena e imprimir ese número.
Sin embargo, las letras duplicadas pueden ignorarse al contar las combinaciones posibles. En otras palabras, si la cadena dada es "hola", simplemente cambiar las posiciones de los dos ls no cuenta como una frase única y, por lo tanto, no puede contarse hacia el total.
¡El conteo de bytes más cortos gana, esperando ver algunas soluciones creativas en idiomas que no sean de golf!
Ejemplos:
hello -> 60
aaaaa -> 1
abcde -> 120

Respuestas:
Python 2 ,
5048 bytesPruébalo en línea!
No hay complementos aburridos! Para mi sorpresa, esto es incluso más corto que el enfoque de fuerza bruta, calculando todas las permutaciones con
itertoolsy tomando la longitud.Esta función usa la fórmula
y lo calcula sobre la marcha. El factorial en el numerador se calcula multiplicando por
len(s)en cada llamada a la función. El denominador es un poco más sutil; en cada llamada, dividimos por el número de ocurrencias de ese elemento en lo que queda de la cadena, asegurando que para cada carácterc, todos los números entre 1 y la cantidad de ocurrencias dec(inclusive) se dividirán por exactamente una vez. Como nos dividimos solo al final, tenemos la garantía de no tener ningún problema con la división de piso predeterminada de Python 2.fuente
05AB1E , 3 bytes
Pruébalo en línea!
Explicación
fuente
CJam , 4 bytes
Pruébalo en línea!
Explicación
Lea la línea como una cadena (
l), permutaciones únicas como una matriz de cadenas (e!), longitud (,), visualización implícita.fuente
R ,
6965 bytesPruébalo en línea!
4 bytes guardados gracias a Zahiro Mor en ambas respuestas.
Calcula el coeficiente multinomial directamente.
R ,
7268 bytesPruébalo en línea!
Utiliza la función de distribución multinomial proporcionada por
dmultinompara extraer el coeficiente multinomial.Tenga en cuenta que lo habitual (golfista)
x<-table(strsplit(s,""))no funciona dentro de ladmultinomllamada por un motivo desconocido.fuente
function(s,!=factorial)(!nchar(s))/prod(!table(strsplit(s,"")))trabajará. el () es redundante - la tabla sabe buscar los elementos ...JavaScript (Node.js) , 49 bytes
t=t*se usa en lugar det*=evitar el error de redondeo (|tredondea el número hacia abajo) comot=t*garantía de que todos los resultados intermedios (a nivel del operador) son números enteros.Pruébalo en línea!
fuente
t=t*si desea evitarlo.)aaadegfbbbcccdebe exactamente al error de redondeo de punto flotanteAPL (Dyalog Unicode) , 14 bytes
Pruébalo en línea!
Devuelve el resultado como un singleton.
fuente
⍴->≢para que regrese escalares simples,÷⍨/g⌸,g←!⊢∘≢por -2Japt ,
53 bytes-2 bytes gracias a @Shaggy
Pruébalo en línea!
fuente
â.J ,
15, 14 bytesPruébalo en línea!
-1 byte gracias a FrownyFrog
fuente
~.puede ser=Jalea , 4 bytes
Pruébalo en línea!
Simplemente hace lo que se le pidió: encontrar permutaciones de entrada, uniquificar e imprimir la longitud.
fuente
C # (compilador interactivo de Visual C #) , 59 bytes
Puerto de la respuesta Python 2 de @ArBo .
Pruébalo en línea.
fuente
Brachylog , 3 bytes
Pruébalo en línea!
pᵘlhace casi exactamente lo mismo.fuente
Python 2 , 57 bytes
Pruébalo en línea!
Autodocumentado: devuelve la longitud del conjunto de permutaciones únicas de la cadena de entrada.
Python 3 , 55 bytes
El crédito va a ArBo en este caso:
Pruébalo en línea!
fuente
APL (Dyalog Unicode) , 24 bytes
Pruébalo en línea!
Dfn simple, toma una cadena como argumento.
Cómo:
fuente
Ruby , 41 bytes
Pruébalo en línea!
fuente
to_af=parte. (En TIOPerl 5 , 43 bytes
Utiliza el método en la respuesta Python de @ ArBo.
Pruébalo en línea!
fuente
Perl 6 ,
3330 caracteres (3431 bytes)WhateverBloque bastante sencillo .combdivide la cadena en letras,permutationsobtiene todas las combinaciones posibles. Debido a la forma en que la coerciónSetdebe serjoineditada primero (se»aplicajoina cada elemento de la lista)Pruébalo en línea!
(se utilizó la respuesta anterior
.uniqueperoSets garantiza la unicidad y numera la misma, por lo que ahorra 3).fuente
K (oK) , 12 bytes
Solución:
Pruébalo en línea!
Explicación:
Utiliza el oK incorporado
prm:... que, debido a que
x^/:xbásicamente genera las permutaciones de"helo"no"hello", por lo tanto, necesitamos generar las permutaciones de0 1 2 3 4, usarlas para indexar"hello"y luego tomar la cuenta de lo único.fuente
!-n. a finales de k5 y k6 se convirtióprm. k7 (shakti)prmtambién lo ha hecho .Java 8,
103102bytesPuerto de la respuesta Python 2 de @ArBo .
-1 byte gracias a @ OlivierGrégoire haciéndolo iterativo en lugar de recursivo.
Pruébalo en línea.
En realidad, generar todas las permutaciones únicas en un conjunto y obtener su tamaño sería de 221 bytes :
Pruébalo en línea.
fuente
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;}pero sin éxito hasta ahora ...MATL , 9 bytes
Pruébalo en línea!
Explicación:
fuente
jconvierte eni, que puede dejarse implícito. Además,&nxguarda un byte sobreZy1)tio.run/##y00syfn/P9IholQtr@L/f/WM1JycfHUAOctava / MATLAB, 35 bytes
Función anónima que toma un vector de caracteres y produce un número.
En MATLAB esto se puede acortar a
size(unique(perms(s),'ro'),1)(33 bytes).Pruébalo en línea!
Explicación
fuente
uniqueya había devuelto filas únicas? ¿O es solo paratables?uniquese linealizarían primero. Para las mesas creo que tienes razón; Yo no lo sabia!uniqueen MATLAB se toman filas paratables; Runiquetoma filas únicas de matrices o marcos de datos. Demasiados idiomas de matriz con los mismos comandos que hacen cosas ligeramente diferentes ...Retina 0.8.2 , 73 bytes
Pruébalo en línea! Utiliza la fórmula de @ ArBo, pero evalúa de derecha a izquierda, ya que esto se puede hacer en aritmética de enteros mientras se minimiza el tamaño de los valores unarios involucrados. Explicación:
Para cada carácter, cuente cuántos duplicados restantes hay y cuántos caracteres más hay, agregue uno a cada uno para tener en cuenta el carácter actual y separe los valores para que sepamos cuáles se deben dividir y cuáles se deben multiplicar. .
Prefije un 1 para producir una expresión completa.
Multiplica repetidamente el último y el tercer último número mientras divide por el segundo último número. Esto reemplaza los últimos tres números.
Convierte a decimal.
fuente
K, 27 bytes
K, 16 bytes: no es una respuesta real
Tome 999999 permutaciones aleatorias de la cadena de entrada, tome el conjunto único de ellas y cuente la longitud. La mayoría de las veces dará la respuesta correcta, para cadenas cortas.
Mejorado gracias a @Sriotchilism O'Zaic, @Selcuk
fuente
999999lugar de100000?Wolfram Language (Mathematica) , 32 bytes
Pruébalo en línea!
Explicación: La composición derecha con
/*aplica estos tres operadores uno tras otro al argumento de la función, de izquierda a derecha:Charactersconvierte la cadena de entrada en una lista de caracteres.Permutationshace una lista de todas las permutaciones únicas de esta lista de caracteres.Lengthdevuelve la longitud de esta lista de permutaciones únicas.Este método es muy derrochador para cadenas largas: las permutaciones únicas se enumeran y cuentan, en lugar de usar a
Multinomialpara calcular su número sin enumerar.fuente
F # (Mono) , 105 bytes
Pruébalo en línea!
fuente
Pyth ,
54 bytesPruébalo en línea!
Esto supone que la entrada es un literal de cadena de Python. Si la entrada debe ser texto sin formato, esta versión de 5 bytes funcionará:
De cualquier manera, solo calcula todas las permutaciones de la entrada como una lista, la deduplica y obtiene el número de elementos en ella, e imprime ese número implícitamente.
-1 byte gracias a @ hakr14
fuente
{deduplica una lista para un byte menor que.{.J ,
1413 bytesPruébalo en línea!
1 byte gracias a millas
fuente
#(%*/)&:!#/.~debería guardar otro bytePHP , 77 bytes
Pruébalo en línea!
Esto es básicamente solo un puerto PHP de la respuesta ganadora de Python de @ ArBo que es ridículamente más inteligente que la respuesta recursiva que tenía originalmente. ¡Bravo!
fuente
Ohm v2 , 4 bytes
Pruébalo en línea!
Explicación
fuente
Stax , 3 bytes
Ejecutar y depurarlo
fuente