Todo está en el título ...
Tome como entrada un entero positivo n>=12
y ... haga lo que dice el título.
Sí, esto está en OEIS A187924 .
Algunos casos de prueba
12 -> 912
13 -> 11713
14 -> 6314
15 -> 915
16 -> 3616
17 -> 15317
18 -> 918
19 -> 17119
20 -> 9920
40 -> 1999840
100-> 99999999999100
Este es el código de golf . ¡El código más corto en bytes gana!
Respuestas:
Befunge, 81 bytes
Pruébalo en línea!
Puede manejar hasta n = 70 al menos, después de lo cual algunos valores comenzarán a desbordar el tamaño de celda de la pila en la mayoría de las implementaciones, y en aquellos que no lo hagan, tomará tanto tiempo que no vale la pena esperar para descubrirlo.
Dadas esas restricciones, ni siquiera nos molestamos en tratar de manejar valores de n mayores que 99, lo que significa que podemos probar más fácilmente si el valor termina en n simplemente comparando el módulo de valor 100 con n .
A continuación se muestra un desglose más detallado del código.
Leer n de stdin y guardar en la memoria.
Inicialice el valor de prueba v a 0 e inicie el bucle principal, incrementando v por adelantado.
Pruebe si
v%n == 0
, y si no, regrese al inicio del bucle principal.Pruebe si
v%100 == n
, y si no, regrese al inicio del bucle principal.Suma los dígitos en v agregando repetidamente v módulo 10 y dividiendo v entre 10.
Comprueba si la suma es igual a n , y si no, regresa al inicio del ciclo principal.
De lo contrario, salida v y salir.
fuente
05AB1E , 14 bytes
Pruébalo en línea!
Explicación
Las soluciones que requieren prefijos grandes se agotarán en TIO
fuente
JavaScript (ES6),
5554 bytesToma la entrada como una cadena. Necesita un navegador con soporte de recursividad de cola para obtener resultados más grandes. Editar: guardado 1 byte gracias a @Arnauld.
fuente
eval([s,...a].join`-`)?
también funcionaría, aunque no es más corto ...||
.Brachylog v2,
1210 bytesPruébalo en línea!
Esta es una presentación de función que toma entrada vía
.
y produce salida vía?
(lo contrario de la convención normal; todas las funciones de Brachylog tienen exactamente dos argumentos, que pueden ser argumentos de entrada o salida, pero el lenguaje no impone ningún uso de argumento en particular). Nosotros normalmente no consideramos convenciones para el uso del argumento para ser relevantes en PPCG .Explicación
Una versión anterior de esta solución tenía un caso especial (
Ḋ|
es decir, "devolver dígitos literalmente") para un solo dígito, pero la pregunta aparentemente indica que no tiene que verificar eso (gracias @DLosc por detectar esto), así que eliminé eso. (La solución tal como está escrita no funcionará en un solo dígito, ya que Brachylog no considerará 1 como una posibilidad para un desconocido en una multiplicación, para evitar bucles infinitos; sus multiplicaciones son arbitrarias).Entonces, esta respuesta ahora va para una traducción bastante directa de la especificación. Comenzando con
?
(la salida / número que estamos tratando de encontrar; un predicado de Brachylog siempre comienza implícitamente con?
) usamosa₁.
para afirmar que tiene.
(la entrada) como sufijo. Entonces;A×?
significa que podemos multiplicar (×
) el resultado por algo (;A
) para producir?
(la salida). Finalmente,ẹ+
suma (+
) los dígitos (ẹ
) de?
, y por defecto hay una aserción implícita al final de cada programa Brachylog que produce el resultado final.
. En otras palabras, este programa es ".
es un sufijo de?
,.
multiplicado por algo es?
,.
es la suma de dígitos de?
", que está muy cerca de una traducción literal del programa original.El
≜
es necesaria para el requisito de suma de dígitos a ser ejecutada. Supongo que algoẹ
no le gustan las incógnitas, por lo que≜
le dice a Brachylog que use un enfoque de fuerza bruta para esa parte del programa en lugar de álgebra.fuente
Haskell , 72 bytes
Pruébalo en línea!
Tenga en cuenta que el número encontrado menos n debe ser un múltiplo de n y 10 ^ de longitud (n).
Inspirado por Laikoni y totalmente humano
fuente
lcm n(10^length(show n))
alcm(10^length(show n))n
por 1 byteAlice , 35 bytes
Pruébalo en línea!
Explicación
Este programa tiene una mezcla e interacción realmente agradable entre el modo Cardinal (procesamiento de enteros) y Ordinal (procesamiento de cadenas).
El marco habitual para los desafíos con E / S decimal que operan principalmente en modo Cardinal:
Y el programa actual:
fuente
Java (OpenJDK 8) ,
13611010392 bytes-26 gracias a JollyJoker
-7 de nuevo gracias a JollyJoker
-11 gracias a Oliver Grégoire
Pruébalo en línea!
Tengo que amar Java! Bien podría ser que estoy usando un enfoque ineficiente, pero no tengo una función de suma de verificación incorporada y la doble conversión a Cadena para verificar el final del número cuesta bytes ...
Sin golf:
fuente
(""+i).endsWith(""+a)
Deberia trabajar.n/=10
en lugar den=n/10
también Además,i+=a
en el bucle for para que pueda omitir la verificación de divisibilidad.Mathematica, 72 bytes
-18 bytes de @MartinEnder
Pruébalo en línea!
Aquí hay otra versión de Martin Ender
Este enfoque puede subir
n=40
(41 excede el límite de iteración predeterminado)Mathematica, 65 bytes
Pruébalo en línea!
fuente
Python 2 , 74 bytes
Esta solución asume eso
n <= sys.maxint
.Pruébalo en línea!
fuente
str(x)
porx
back-ticks dos veces para ahorrar 6 bytes (¿cómo puede escapar de back-ticks dentro de back-ticks?).`
marca de barra invertida dentro de las marcas de retroceso.L
que podría estropear el algoritmo.C (gcc)
7169 bytes, falla en 100Lo intenté con long y% 1000 pero el tiempo de espera
-2 bytes gracias a steadybox
Pruébalo en línea
fuente
Casco ,
20 1917 bytes¡Gracias @Zgarb por -2 bytes!
Pruébalo en línea!
fuente
C # (.NET Core) ,
90 8483 + 18 = 101 bytesPruébalo en línea!
(""+n)
en algunos lugares yn.ToString()
en otros.fuente
n=>{for(int i=n;n%100!=i|n%i>0|(""+n).Sum(c=>c-'0')!=i;n++);return n;}
ahorra 20 bytes.n%100
? ¿Y sin>100
?Julia, 70 bytes
fuente
¬x=(n=x;while sum(digits(n))!=x||!endswith("$n","$x");n+=x;end;n)
Puede guardar 5 bytes con esto. Pruébalo en línea!Ohm v2 , 16 bytes
Pruébalo en línea!
fuente
Pip , 18 bytes
Algoritmo inspirado en la respuesta de Emigna . Pruébalo en línea!
Cómo funciona
fuente
JavaScript REPL (ES5),
6059 bytesfuente
Haskell , 75 bytes
Pruébalo en línea!
Explicación:
Me pregunto si la parte "termina en
n
" puede acortarse. También lo intentéshow n`elem`scanr(:)""(show x)
, pero es más largo.fuente
Ruby ,
65 63 5453 bytesPruébalo en línea!
fuente
Pyth ,
2221 bytesPruébalo aquí!
fuente
Haskell , 75 bytes
Pruébalo en línea!
fuente
PowerShell , 84 bytes
Pruébalo en línea!
Construcción simple pero comandos largos. Se agota el tiempo de espera de TIO para
n=100
, pero si establecemos explícitamentei
estar cerca, se genera correctamente.Este es solo un
for
ciclo simple que continúa siempre que cualquiera de las condiciones sea verdadera. Las tres condiciones son 1)$i%$n
, es decir, tenemos un resto; 2)$i-notmatch"$n$"
, es decir, no regex coincide con los últimos dos dígitos; y 3)([char[]]"$i"-join'+'|iex)-$n
, es decir, los dígitos sumados juntos no son iguales a$n
(verificados aquí por simple resta, ya que los valores distintos de cero son verdaderos). Dentro del bucle simplemente estamos incrementando$i
.Por lo tanto, si no tenemos un resto, la expresión regular coincide y los números son iguales, las tres condiciones lo son
$false
y salimos del ciclo. Como resultado, solo podemos dejar$i
en la tubería, y la salida es implícita.fuente
PHP, 73 + 1 bytes
Ejecutar como tubería con
-R
.recorre
$i
múltiples de<input>
hastasum_of_digits-<input>
ytail_of_i-$n
son falsos; Luego imprimei
.fuente
m4, 210 bytes
Define una macro
f
que calcula la respuesta. Es un poco lento, inutilizable, pero prometo que funciona.Pensé que m4 sería bueno porque trata los enteros como cadenas por defecto, pero esto es bastante malo.
fuente
Scala, 120 bytes
Esto funciona hasta
n = 70
, después de lo cual los enteros se desbordan. Para un carácter adicional,Int
puede cambiar aLong
ay permitir que se calculen los valoresn > 100
.Aquí está la versión ungolfing un poco más larga:
fuente
R , 115 bytes
Pruébalo en línea!
Terrible función R. Incrementa
F
(comienza en0
)n
hasta que se encuentra un valor que satisface las propiedades requeridas, que luego devuelve. El uso deany
en unadouble
expresión envía una advertencia para cada iteración del bucle, pero no afecta la corrección.Se agota el tiempo de espera en TIO para entradas lo suficientemente grandes (n = 55 o superior) pero debe calcular correctamente la solución dado el tiempo / espacio suficiente
fuente
Perl 5,
4644 + 1 (-p) = 45 bytes2 bytes guardados gracias a Xcali, no pude encontrar nada mejor
primera respuesta
Pruébalo en línea
fuente
Jalea ,
2221 bytesPruébalo en línea!
Editar: comprimido a una sola línea
Explicación
Me tomó muchas horas escribir porque estoy aprendiendo Jelly, pero ahora que he terminado, estoy muy satisfecho. Durante mucho tiempo no me di cuenta de que necesitaba el
¤
y simplemente no pude hacerlo funcionar. Mirar el código bien explicado [esto] [1] me ayudó a cerrar el trato. Muchas otras respuestas de Jelly en PPCG también me guiaron.fuente
Javascript, 224 bytes
function getNumber(x){if(x<12){return!1};const sumDigits=(x)=>x.toString().split('').map(Number).reduce((a,b)=>a+b,0);for(let i=2;i<9999;i++){if((x*i-x)%(Math.pow(10,x.toString().length))==0&&sumDigits(x*i)==x){return x*i}}}
Un-golf:Uso: 1. getNumber (12) 2. getNumber (13) 3. ....
fuente
getNumber
osumDigits
.J ,
3733 bytesPruébalo en línea!
Anteponer el contador de iteraciones es ~ 5 veces más rápido pero 5 bytes más:
Pruébalo en línea!
Incrementando en 100, 27 bytes :
Pruébalo en línea!
fuente
Python 2 , 70 bytes
Pruébalo en línea!
fuente