Relacionado: Programar mi horno microondas . Inspirado en Generar entrada de microondas perezosa .
El valor diferido del entero no negativo N es el menor de los enteros más cercanos a N, mientras que todos sus dígitos son idénticos.
Return (por cualquier medio) el valor perezoso de un (por cualquier medio) dado N .
N ≤ el entero más grande que su idioma representa en forma no exponente de forma predeterminada. 1000000 (Se pierden muchas soluciones interesantes debido a este requisito demasiado alto).
Casos de prueba:
0 → 0
8 → 8
9 → 9
10 → 9
16 → 11
17 → 22
27 → 22
28 → 33
100 → 99
105 → 99
106 → 111
610 → 555
611 → 666
7221 → 6666
7222 → 7777
El colega en cuestión demostró que no habrá lazos: excepto para el 11 de septiembre, el 99/111, etc. para los cuales uno es más corto que el otro, dos respuestas válidas consecutivas siempre están a una distancia impar, por lo que ningún número entero puede ser exactamente equidistante de ellos.
Number.MAX_SAFE_INTEGER
porque8e16 - 1
se expresa como8e16
. Lamentablemente, parece que la única forma sería codificar el resultado máximo. +1 no obstante.Jalea, 16 bytes
Pruébalo en línea!
Cómo funciona
fuente
Oracle SQL 11.2, 200 bytes
Sin golf
fuente
Pyth - 26 bytes
Esta respuesta no siempre devuelve el valor más pequeño en un empate, pero eso no está en las especificaciones, por lo que se espera una aclaraciónfijada para 3 bytes.Test Suite .
fuente
Pyth, 16 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
MATL , 25 bytes
Utiliza fuerza bruta, por lo que puede llevar un tiempo para grandes cantidades.
Pruébalo en línea!
fuente
Perl, 32
Basado en la hermosa solución JavaScript de Neil.
Comienza a fallar a las
5e15
fuente
Mathematica, 122 bytes
Función llamada x.
fuente
JavaScript (ES6), 59 bytes
Solución recursiva (56 bytes)
Esto es un poco más corto pero no funciona
n > 1111111110
porque se excede el tamaño máximo de la pila de llamadas, por lo que técnicamente no es válido.Explicación
Itera a través de cada número diferido hasta llegar al primero, que es mayor que
n
, luego se comparan
con este y el número anterior para determinar el resultado.fuente
Japt , 18 bytes
Pruébalo en línea!
Basado en la técnica de Neil.
Solución no competitiva :
fuente
*9+4 h /9|0
:-)05AB1E , 20 bytes
Pruébalo en línea!
fuente
Mathematica, 56 bytes
Función pura con primer argumento
#
, funciona para entradas de hasta10^6
.Para un entero no negativo
n
y un dígitod
,10^n-1 = 99...9
( tiempos9
repetidosn
), entoncesd(10^n-1)/9 = dd...d
( tiemposd
repetidosn
). Crea unTable
de los valores de0 <= n <= 6
y0 <= d <= 9
, a continuación, se aplana la tabla, se encuentra la lista de elementosNearest
a#
y toma elMin
.Creo que esta versión funcionará para enteros arbitrariamente grandes:
fuente