Dado un entero positivo, encuentre su múltiplo entero positivo más pequeño, que es una corrida de 9 seguido de una corrida opcional de 0. En otras palabras, encuentre su múltiplo entero positivo más pequeño que coincida con la expresión regular /^9+0*$/
.
Por ejemplo, si el entero positivo dado es 2, entonces devuelve 90, ya que 90 es un múltiplo entero positivo de 2 y es el más pequeño que coincide con la expresión regular /^9+0*$/
.
Casos de prueba:
n f(n)
1 9
2 90
3 9
4 900
5 90
6 90
7 999999
8 9000
9 9
10 90
11 99
12 900
13 999999
14 9999990
15 90
16 90000
Este es el código de golf . La respuesta más corta en bytes gana. Se aplican lagunas estándar .
code-golf
arithmetic
Monja permeable
fuente
fuente
Respuestas:
Jalea ,
1311 bytesPruébalo en línea!
Cómo funciona
fuente
9
o0
en tu código?Python 2 ,
5554 bytesPruébalo en línea!
fuente
Python 2 , 51 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
474342 bytes-4 bytes gracias a @Arnauld
-1 byte gracias a @Luke
Pruebas
Solución recursiva (falla para 7, 13 y 14), 38 bytes
Llamado así
f(5)()
. Alcanza el tamaño máximo de pila de llamadas en Chrome y Firefox paran=7
,n=13
yn=14
.Mostrar fragmento de código
fuente
n=>eval('for(i=0;!/^9+0*$/.test(i);)i+=n')
Ruby , 36 bytes
Fuerza bruta: toma una eternidad para x = 17.
Pruébalo en línea!
fuente
Java 8,
6157 bytes-4 bytes (y una ejecución más rápida) gracias a @JollyJoker .
Explicación:
Pruébalo aquí
fuente
r%n
cheque,n->{int r=0;for(;!(""+(r+=n)).matches("9+0*"););return r;}
for(;!(""+r).matches("9+0*");r+=n)
Python 3 , 56 bytes
Pruébalo en línea!
fuente
Brachylog , 16 bytes
Pruébalo en línea!
Esto es bastante lento
Explicación
fuente
05AB1E , 10 bytes
Pruébalo en línea!
Simplemente sigue agregando la entrada a 0, hasta que el resultado menos los 9 iniciales iguales es igual a 0.
fuente
RProgN 2 , 18 bytes
Explicado
Pruébalo en línea!
fuente
Matemáticas , 71 bytes
Pruébalo en línea!
No es una solución de fuerza bruta muy interesante, pero supera la otra respuesta de Mathematica, que utiliza algunos trucos ingeniosos.
La única cualidad que tiene Mathematica con respecto a este desafío es el hecho de que
StringMatchQ
requiere una coincidencia completa, por lo que puedo hacerlo en9+0*
lugar de hacerlo^9+0*$
.fuente
"9"..~~"0"...
lugar deRegularExpression@"9+0*"
.Lote, 175 bytes
Toma entrada en STDIN. No es una solución de fuerza bruta, sino que de hecho se basa en mi respuesta a la fracción al decimal exacto, por lo que funcionará para 17, 19, etc., que de lo contrario superaría su límite de todos modos.
fuente
Mathematica, 127 bytes
Entrada
Salida
Aquí están los primeros 20 términos
fuente
Haskell , 53 bytes
f
toma y devuelve un entero.Pruébalo en línea!
Esto agota el tiempo para 17, que convenientemente está más allá de los casos de prueba. Una versión más rápida en 56 bytes:
Pruébalo en línea!
Cómo funciona
f
genera todos los múltiplos den
, convierte cada uno en una cadena, filtra aquellos con el formato correcto y luego toma el primero.La versión más rápida que en su lugar utiliza los números requeridos son de la forma
10^a-10^b
,a>=1
,a>b>=0
. Para fines de golf, también utiliza el hecho de que, para el mínimoa
, solo unob
puede funcionar, lo que le permite generar elb
s en el orden "incorrecto" un poco más corto.fuente
Ruby , 38 + 1 = 39 bytes
Usa
-p
bandera.-p
rodea el programa con:gets
almacena su resultado en$_
.eval
se usa para convertirlo en un número, ya que es más corto que.to_i
, luego se usa la fuerza bruta, incrementando $ _ hasta que coincida con la expresión regular."#{}"
está interpolando, es más corto que una.to_s
llamada, ya que eso requeriría paréntesis$_+=y
. Finalmente,$_
está impreso.Pruébalo en línea!
¡Pruebe todos los casos de prueba!
fuente
Dyalog APL, 34 bytes
Dfns recursivos, basados en la solución Python de Dennis .
fuente
C ++, 106 bytes
Forma detallada:
¡PRUÉBALO en línea!
fuente
[](int n){int T=9,j=10,m;while(t%n)if(t/j){t+=m/j;j*=10;}else{t=(t+1)*9;j=10;m=t;}return t;}}
toma 94 bytes. Esencialmente, trátelo como una tarea de función para guardar bytes, ahorrar en paréntesis innecesarios, usar la función lambda para guardar en la asignación de nombres y tipos.Python 2 , 79 bytes
Pruébalo en línea!
Algunas explicaciones Encuentra la forma natural más pequeña
10**n-10**b
con lan>b>=0
que divide la entrada.Algunos IO
fuente
PHP , 39 bytes
Pruébalo en línea!
PHP , 52 bytes
Pruébalo en línea!
fuente
Swift 3.0, Bytes: 121
Pruébalo en línea!
fuente
let r=
hacer? No veor
referido a ningún otro lugarPython 3 , 62 bytes
Esta función toma un número entero
n
y se inicializam
a cero. Luego, elimina todos los ceros de los extremosm
y comprueba si el resultado solo contiene 9, y devuelvem
si lo tiene. Si no, se añaden
am
y comprueba de nuevo, etc.Pruébalo en línea!
fuente
Java (OpenJDK 8) , 66 bytes, no se ahoga en 17
Pruébalo en línea!
Más largo que la solución de @ KevinCruijssen pero puede manejar números ligeramente más grandes. Calcula los números candidatos como 10 ^ 6 - 10 ^ 3 = 999000. Los largos de 64 bits siguen siendo el límite, rompiendo para n = 23.
Probablemente se pueda jugar un poco al golf, pero ya tardó demasiado en hacerlo funcionar ...
fuente
> <> , 35 bytes
Pruébelo en línea o mírelo en el parque de peces !
Asume que la entrada ya está en la pila. Funciona buscando números de la forma 10 a - 10 b , con a <b (sí, eso es un signo menor que, ¡toma menos bytes!) Hasta que sea divisible por la entrada, luego imprime 10 b - 10 a . Esto es mucho más rápido que el método de fuerza bruta (que sería difícil en> <> de todos modos).
fuente
V ,
1914 bytesPruébalo en línea!
Explicación
fuente
JavaScript (ES6),
5149 bytesNo es el enfoque más corto, pero es muy rápido.
fuente
Mathematica, 82 bytes
Usando el patrón de envío de la respuesta de @Jenny_mathy ...
Entrada:
Salida:
Y en relación con el argumento en los comentarios en la respuesta de @ Jenny_mathy con @ Phoenix ...
RepeatedTiming[]
de la aplicación a la entrada[17]
daentonces medio milisegundo. Yendo a una entrada un poco más grande
[2003]
:un poco menos de 4 segundos.
Tabla de prueba: en los primeros 30 enteros positivos, los resultados son
Explicación: La única magia aquí es el iterador personalizado ("iterador" en el sentido CS, no el sentido M'ma)
que actúa sobre las variables globales
x
, el número de "9" inicialesy
, el número de "0" finales yd
el número total de dígitos. Deseamos iterar a través del número de dígitos y, para cada elección de número de dígitos, comenzar con la mayoría de los "0" y los menos "9". Por lo tanto, lo primero que hace el código es inicializard
a 1, forzarx
a 1 yy
a 0. El iterador personalizado comprueba que la cadena de "0" se puede acortar. Si es así, acorta la cadena de "0" por uno y aumenta la cadena de "1" por uno. De lo contrario, incrementa el número de dígitos, establece el número de "0" en uno menos que el número de dígitos y establece el número de "9" en 1.d
es el valor deseado dey
.)fuente
Ti-Basic (TI-84 Plus CE),
4841 bytesLa entrada se
Prompt
edita durante el programa; salida se almacena enAns
.Explicación:
Intenta números de la forma (10 n ) (10 m -1) = 10 k -10 m , donde m + n = k comienza en 1 y aumenta, y para cada valor de k, intenta m = 1, n = k -1; m = 2, n = k-2; ... m = k, n = 0; hasta que encuentre un múltiplo de
X
.Esto funciona hasta 16; 17 da un error de dominio porque
remainder(
solo puede aceptar dividendos hasta 9999999999999 (13 nueves), y 17 debería generar 9999999999999999 (16 nueves).fuente
QBIC , 53 bytes
Explicación
fuente
C (gcc) , 126 bytes
Pruébalo en línea!
Algunas explicaciones Encuentra la forma natural más pequeña
10**n-10**b
con lan>b>=0
que divide la entrada.Algunos IO
fuente
Perl 5 , 23 + 2 (-pa) = 25 bytes
Método de fuerza bruta
Pruébalo en línea!
Es lento, pero es pequeño.
Método más eficiente:
41 + 2 (-pa) = 43 bytes
Pruébalo en línea!
Funciona bien para cualquier entrada, pero es un código más largo.
fuente