Hablemos de divisores ...
Dejando a un lado los cuadrados perfectos (por un momento), todos los enteros positivos se pueden expresar como el producto de 2 de sus divisores. Ejemplo rápido de 126: Aquí están todos los divisores de126

Como puede ver, todos los divisores se pueden emparejar. Esto es lo que llamaremos los pares divisores :
[1, 126], [2, 63], [3, 42], [6, 21], [7, 18], [9, 14]
Para este desafío, solo necesitaremos el último par de esta lista (que es el par central de la imagen):
[9,14]llamaremos a este par el par divisor MaxMin .
La diferencia de MaxMin Divisor Pair (DMDP) es la diferencia de los dos elementos del par, que es [9,14]=5
un ejemplo más 544. Los divisores son:
[1, 2, 4, 8, 16, 17, 32 , 34, 68, 136, 272, 544]
y DMDP (544) = 15 porque32-17=15
¿Qué pasa con los cuadrados perfectos ? Todos los cuadrados perfectos tienen DMDP = 0
Tomemos por ejemplo 64con divisores
{1, 2, 4, 8 , 16, 32, 64}
Como puede ver en este caso, el par divisor MaxMin es el [8,8]que DMDP=0
casi hemos terminado.
El reto
Dado un número entero n>0, genere cuántos enteros menores o iguales que 10000 , tienen DMDP menor que n
Casos de prueba
entrada -> salida
1->100 (those are all the perfect squares)
5->492
13->1201
369->6175
777->7264
2000->8478
5000->9440
9000->9888
10000->10000
20000->10000
Este es el código de golf. La respuesta más corta en bytes gana .

10000como segunda variable?Respuestas:
JavaScript (ES7), 60 bytes
Probablemente exceda su límite de recursión, por lo que puede preferir la versión iterativa para 70 bytes:
fuente
Jalea , 13 bytes
1 byte gracias a Jonathan Allan.
Pruébalo en línea!
fuente
ÆDạ"Ṛ$Ṃte ahorra un byteÆDạ:@¥⁸Ṃ(teníaạ"ṚṂ...ȷ4RÆDÇ€<⁸Spor 15 - demasiado similar - EDITAR: hmm o no, no:involucrado ... ¿qué piensas?)Java 8,
151111110101 bytes-10 bytes gracias a @Nevay .
Explicación:
Pruébalo aquí
fuente
for(i=1,i+=Math.sqrt(x);--i>0;)if(...para guardar 1 byte.n->{int r=0,x=10000,i;for(;x-->0;r-=i-n>>-1)for(i=x;i-->1;)if(x>=i*i&x%i<1){i=x/i-i;break;}return r;}x>=i*icomo alternativa para usarMath.sqrt, ya que esta es la segunda vez que juegas eso en mi código.R , 73
77bytesGracias a @Guiseppe por los 4 bytes
Pruébalo en línea!
Perdí la función vectorizar para calcular el DMDP y ahora está usando una aplicación sobre la función. Las verdades para los elementos que son menores que la entrada se suman para el resultado.
fuente
sum(sapply(1:1e4,function(x)min(abs((w=which(x%%1:x<1))-rev(w))))<scan())es un poco más cortoMathematica, 64 bytes
Pruébalo en Wolfram Sandbox
Uso
Explicación
Genere las listas de divisores, desde
1hasta10000. (las listas de divisores se ordenan automáticamente)Cuente las ocurrencias de elementos
a, de modo que ...(input) + (left one of the middle element(s)) > (right one of the middle element(s))Si solo hay un elemento central, izquierda = derecha.fuente
05AB1E ,
191817161512 bytesPruébalo en línea!
Explicación
fuente
MATL , 20 bytes
El código agota el tiempo de espera en TIO. Aquí hay un ejemplo ejecutado con el compilador fuera de línea:
fuente
R , 91 bytes
Adopta un enfoque diferente (peor) para calcular el DMDP que la solución de MickyT mediante el uso de indexación de matriz y
diffpara calcularlo. Pobre de mí.Pruébalo en línea!
fuente
Mathematica,
119115bytesMe finalmente conseguí esta cosa de trabajo y he estado tratando durante la última media hora. ._.
Ejecución de ejemplo
fuente
Caseses4bytes más corto:Tr[1^Cases[Last@#-First@#&/@(Take[Divisors@#,Round[{-.1,.1}+(1+Length@Divisors@#)/2]]&/@Range@10000),n_/;n<#]]&. Mira este consejo .Countes incluso más corto queCases.Count[Last@#-First@#&/@(Take[Divisors@#,Round[{-.1,.1}+(1+Length@Divisors@#)/2]]&/@Range@10000),n_/;n<#]&10^4o1*^4es más corto que10000, y/@Range@es equivalente a~Array~.Mathematica, 78 bytes
fuente
Caseses4bytes más corto:Tr[1^Cases[Table[#2-#&@@Quantile[Divisors@i,{.5,.51}],{i,10^4}],s_/;s<#]]&. Mira este consejo .Countes aún más corto:Count[Table[#2-#&@@Quantile[Divisors@i,{.5,.51}],{i,10^4}],s_/;s<#]&Casco , 19 bytes
No hay enlace TIO, ya que se agota el tiempo de espera. Esta versión usa 100 en lugar de 10000 y termina en un par de segundos.
Explicación
Husk no tiene divisores incorporados o soporte para notación científica todavía.
fuente
Japt ,
251917 bytesPruébalo
Explicación
Entrada implícita de entero
U.Genere una matriz de enteros (
õ) de 1 a 100 (L) al cuadrado.Pase cada uno a través de una función (donde
Xestá el elemento actual) que genera una matriz de los divisores (â) deX.Mapa sobre ese conjunto de divisores, donde
Zestá el elemento actual.Obtenga la diferencia absoluta (
a) deZyXdividida porZ.¿Alguno de los elementos (
d) en la matriz resultante es menor queU?Cuente los elementos de verdad y genere implícitamente el resultado.
fuente
Ruby, 62 bytes
Pruébalo en línea.
fuente
TI-BASIC, 46 bytes
Tenga en cuenta que TI-BASIC es un lenguaje tokenizado. Además, la E en la línea 2 es una E pequeña mayúscula, que se encuentra presionando 2ND +,.
El resultado estará en D y Ans inmediatamente después de la ejecución del programa. Si se va a mostrar,
Anssería suficiente agregar dos bytes más (nueva línea y ).fuente
Python 2 , 134 bytes
Pruébalo en línea!
Eugh ... necesito hacerlo mucho mejor.
fuente
len(filter(lambda n:n<i,...))consum(n<i for n in ....)Python 2 , 83 bytes
Un poco lento, usa 5 segundos por caso de prueba
Pruébalo en línea!
fuente
PHP, 94 + 1 bytes
Ejecutar como tubería
-nRo probarlo en línea .fuente
VB.NET (.NET 4.5)
116115bytesExplicación:
Una función que toma
ncomo parámetro y devuelve el resultado.Comienza en la raíz cuadrada y busca el número entero más cercano que se divide de manera uniforme (será el más pequeño de los
MaxMin Divisor Pair). Luego obtiene el mayor del par (i/s), encuentra la diferencia y compara con la entrada.Estrategias de golf utilizadas:
Dimes caro, por lo que cuantas menos variables declaro mejor.scomo un tipo integral, se echa al suelo por mí.^como exponente. Entonces, si bien10000tiene 5 caracteres,10^4solo tiene 4.return, se devolverá el valor de la variable de función. Así que guardo los caracteres al no declarar una variable separada y al no usar una declaración de retorno.ise suponeIntegerporque asigné un literal entero.Ase supone,Objectpero tan pronto como agrego un número entero, se comporta como unInteger.ifcomprobar que la diferencia es satisfactoria, agréguela directamente al resultado convirtiendo el valor booleano en un entero. Sin embargo, VB usa-1forTrue, así que resta para obtener el signo correcto.Modno serlo0. Tomar el módulo de un número negativo en VB.NET dará un resultado negativo. Pero, todo es positivo, así que puedo guardar un byte convirtiéndome<>en>.Bytepara almacenar eso, guardando bytes en la declaración usando un tipo con nombre más corto.Pruébalo en línea!
fuente
C # (.NET Core) , 104 bytes
Pruébalo en línea!
fuente