Introducción
Este es un desafío muy simple: simplemente cuente los divisores de un número. Hemos tenido un desafío similar pero más complicado antes, pero tengo la intención de que este sea de nivel de entrada.
El reto
Cree un programa o función que, dado un entero estrictamente positivo N
, emite o devuelve cuántos divisores tiene, incluidos 1 y N
.
Entrada: Un entero> 0. Puede suponer que el número puede representarse en el tipo numérico nativo de su idioma.
Salida: El número de divisores enteros positivos que tiene, incluido 1 y el número mismo.
Las presentaciones se puntuarán en bytes . Puede encontrar este sitio web a mano, aunque puede usar cualquier método razonable para generar su recuento de bytes.
Este es el código de golf , por lo que gana el puntaje más bajo.
Editar: ¡Parece que la respuesta Pyth de 5 bytes de FryAmTheEggman es la ganadora! Sin embargo, siéntase libre de enviar nuevas respuestas; Si puede obtener algo más corto, cambiaré la respuesta aceptada.
Casos de prueba
ndiv(1) -> 1
ndiv(2) -> 2
ndiv(12) -> 6
ndiv(30) -> 8
ndiv(60) -> 12
ndiv(97) -> 2
ndiv(100) -> 9
Tablas de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (p. Ej., Porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de los intérpretes por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
C ++C,4357564643 bytesSobre las sugerencias de Martin Büttner:
fuente
i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}
LabVIEW, 4938 Bytes
Bueno, obviamente no es adecuado para el golf de código, pero lo que sea, así que para mi primer post y el lolz aquí va.
fuente
.
que, estoy bastante seguro, significa un separador de miles, no un punto decimal (como es común en algunos idiomas).Haskell, 28 bytes
El truco aquí es probar si un resto está
0
usando la función de indicador0^
.Esto funciona porque cualquier potencia positiva de 0 es 0, mientras que 0 ^ 0 es combinatoriamente el producto vacío de 1.
Compare esto con el filtrado
fuente
Dyalog APL ,
76 bytesEs una función sin nombre que puede nombrarse y luego reutilizarse para cada
¨
caso de prueba ( ) de la siguiente manera:Explicación:
Cuente
≢
lo∘
único∪
del GCD∨
de sí mismo⊢
y cada uno de los enteros hasta⍳
.Gracias a ngn por guardar un byte.
Versión antigua:
+/0=⍳|⊢
Así es como funciona:
⍳|⊢
Argumento 1-a través del argumento división-resto0=
Booleano si 0 es igual al resto de división+/
Suma del booleano, es decir, recuento de unos.fuente
Python 2, 37 bytes
Una función recursiva. La entrada opcional
i
en el divisor que se está probando. La expresión(n%i<1)
prueba la divisibilidad, conTrue
(que es igual1
) para divisores. El resultado se agrega a la expresión recusiva parai+1
. Cuandoi==n
se alcanza, la división de piso entera sei/n
evalúa como1
, y ese valor se devuelve como el caso base, contando an
sí mismo como un divisor den
.38:
Una función anónima. Prueba todos los divisores posibles a
1
travésn
. Esto se desplaza hacia arriba a partir0
a travésn-1
derange(n)
usar-~
, lo que añade1
. Sumando los bools usa el hecho de que Python trataTrue
/False
como1
/0
.fuente
Retina , 17 bytes
Entrada en unario , salida en decimal.
Pruébalo en línea.
Cuando se invoca con una sola expresión regular, Retina simplemente cuenta las coincidencias. La expresión regular en sí coincide con una posición , donde el número unario a la izquierda es un divisor de toda la entrada. También estoy haciendo uso del hecho de que las búsquedas son atómicas, por lo que no necesito usar un
^
ancla.La primera mirada atrás simplemente captura todo el prefijo en grupo
1
. Esto nunca puede fallar, así que después de mirar hacia atrás sabemos que eso es lo que hay en el grupo 1 y que ya no cambiará más.La búsqueda anticipada luego verifica si podemos alcanzar el final de la cadena repitiendo la cadena capturada (nuestro divisor potencial) 0 o más veces.
fuente
J, 10 bytes
Este es un verbo monádico sin nombre. Calcula σ 0 (∏p k α k ) como ∏ (α k + 1) .
Pruébelo en línea con J.js .
Cómo funciona
fuente
q:
esté permitido, ya que resuelve una parte esencial del desafío. ¿Qué tal solo[:+/0=]|~1+i.
q:
.Golfscript,
19181713 bytesCon gracias a Martin Büttner .
Cómo funciona
también
De @Peter Taylor , también en 13 bytes.
Cómo funciona
fuente
~:X,{)X\%!},,
J,
131211 bytesMi primer golf en J. Todavía lo estoy aprendiendo.
Salvó un byte gracias a Dennis.
Se guardó un byte más gracias a randomra.
Explicación:
fuente
Arcyóu , 12 bytes
¡Que empiece la fiesta!
Esto usa la función incorporada
d/
. Aquí hay una versión sin el incorporado (27 bytes):Explicación:
fuente
CJam, 11 bytes
Pruébalo aquí.
Explicación
CJam no tiene una función integrada para esto, por lo que estamos haciendo una división de prueba.
Prima
Aquí hay una solución interesante en 12 bytes (que sospecho que podría ser más corta en un lenguaje como J):
El resultado es igual al número de veces que
n
aparece en unan x n
tabla de multiplicar:fuente
Matlab, 20 bytes
Realice
k mod n
para cadak = 1,...,n
, luego realicenot
(que convierte cada nonzer en cero y cada cero en 1) y sume todos esos valores.fuente
length(divisors(n))
.@(n)
para que sea una sumisión válidaJulia, 20 bytes
Esta es una función anónima que funciona de la siguiente manera: para cada entero desde 1 hasta la entrada, pruebe si el módulo de entrada del entero es cero. Si es así, el valor será
true
, de lo contrariofalse
. Sumamos los booleanos que se convierten implícitamente en enteros, produciendo el número de divisores.Una solución mucho más fresca (aunque también mucho más larga), incluida en aras de la integridad, es
Esto obtiene la factorización canónica de
n
, es decir\prod_{i=1}^k p_i^e_i
, y calcula la función del divisor comoτ(n) = \prod_{i=1}^k e_i + 1
.fuente
PARI / GP, 6 bytes
PARI / GP tiene una función incorporada para esto.
fuente
Pyth, 8 bytes
División de prueba simple.
Pruébelo en línea aquí .
fuente
Rubí, 27 bytes
Ejecución de muestra:
fuente
Octava,
2120 bytesfuente
nnz
, gran uso aquí =)Regex (.NET), 33 bytes
Suponiendo que la entrada y la salida están en unario, y la salida se toma de la coincidencia principal de la expresión regular.
Desglose de la expresión regular:
.*$
Ajusta el puntero al final de la cadena para que tengamos toda la entrada x en una dirección.(?<=^\2*(.+?(?>\2?)))
coincide de derecha a izquierda y comprueba el divisor haciendo un ciclo de x a 0.(.+?(?>\2?))
es una "variable" que comienza desde 1 en la primera iteración y continúa desde el número en la iteración anterior y recorre hasta x.^\2*
comprueba si x es un múltiplo de "variable".Básicamente tiene la misma idea que mi respuesta para Calcular Phi (no Pi) . Solo el cheque es diferente.
Prueba la expresión regular en RegexStorm .
fuente
Laberinto , 33 bytes
Pruébalo en línea.
Esto implementa la división de prueba. Agregaré una explicación completa más tarde. Probablemente no sea óptimo, pero estoy teniendo dificultades para encontrar algo más corto.
fuente
Perl 6 , 17 bytes
uso:
fuente
Javascript (ES6),
605742403937 bytesEsto probablemente se pueda jugar mejor al golf.
Edición 1: estaba en lo cierto. Se eliminaron las llaves después del bucle for.
Edición 2: Golfed a 40 bytes con gracias a manatwork y Martin Büttner .
Edición 3: guardar un byte basando la función en la respuesta C anterior.
Edición 4: Gracias a ן nɟuɐɯɹɐ ן oɯ y Neil , pero no puedo hacer que la evaluación funcione.
Editar 5: Olvidé eliminar la evaluación.
Prueba
fuente
var
palabras clave Más consejos en Consejos para jugar golf en JavaScript y Consejos para jugar golf en ECMAScript 6 .++i
yi++
, elija el primero (esto no tiene nada que ver con el golf). Tambiénn%i<1
debería guardar un byte.n=>{for(d=i=0;i<n;)n%++i<1&&d++;return d}
n%++i||++d
?PowerShell, 34 bytes
|
!
convirtiendo implícitamente el resultado del módulo como un booleano y luego invirtiéndolo usando los divisores para que se conviertan en $ true y se les permita pasar; usando el alias incorporado?
paraWhere-Object
()
y.Count
cuántos elementos pasaron por el filtrofuente
Jalea , 2 bytes (no competitiva (de nuevo))
Pruébalo en línea!
Creo que esto usa características implementadas después de la otra respuesta de Jelly. Sin embargo, comente si estoy equivocado (no puedo ver cada confirmación en la fila, ya sabes :))
fuente
Taxi, 2143 bytes
Pruébalo en línea!
Sin golf:
Explicación:
fuente
Japt , 3 bytes
-m
La bandera es para ejecutar todos los casos de prueba.Intentalo
fuente
Fórmula Excel,
4228 bytesEditar: me acabo de dar cuenta de que no necesito usar
INDIRECT
, ahorrando 14 bytes!Lo siguiente debe ingresarse como una fórmula de matriz ( Ctrl+ Shift+ Enter):
Donde N es el número a probar.
Ejemplos:
Explicación:
fuente
05AB1E , 2 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Bastante sencillo, pero aquí está de todos modos:
fuente
Mathematica, 16 bytes
Composición de funciones simples de empotrados.
fuente
Minkolang 0.13 , 16 bytes
Verifique todos los casos aquí.
Explicación
fuente