Definamos una secuencia: la secuencia de suma de n dígitos (n-DSS) es una secuencia que comienza con n . Si el último número fue k , entonces el siguiente número es k + suma de dígitos (k) . Aquí están los primeros n-DSS:
1-DSS: 1, 2, 4, 8, 16, 23, 28, 38, 49, 62, 70...
2-DSS: 2, 4, 8, 16, 23, 28, 38, 49, 62, 70, 77...
3-DSS: 3, 6, 12, 15, 21, 24, 30, 33, 39, 51, 57...
4-DSS: 4, 8, 16, 23, 28, 38, 49, 62, 70, 77, 91...
5-DSS: 5, 10, 11, 13, 17, 25, 32, 37, 47, 58, 71...
6-DSS: 6, 12, 15, 21, 24, 30, 33, 39, 51, 57, 69...
7-DSS: 7, 14, 19, 29, 40, 44, 52, 59, 73, 83, 94...
8-DSS: 8, 16, 23, 28, 38, 49, 62, 70, 77, 91, 101...
9-DSS: 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99...
Para 1, esto es A004207 , aunque los primeros dígitos son diferentes debido a una definición ligeramente diferente. Para 3, es A016052 ; para 9, A016096 .
El desafío de hoy es encontrar la secuencia de suma de n dígitos más baja en la que aparece un número dado. Esto se llama "función colombiana inversa" y es A036233 . Los primeros veinte términos, comenzando con 1 son:
1, 1, 3, 1, 5, 3, 7, 1, 9, 5, 5, 3, 5, 7, 3, 1, 5, 9, 7, 20
Algunos otros buenos casos de prueba:
117: 9
1008: 918
Solo tiene que manejar enteros mayores que 0, y puede tomar entradas y salidas en cualquier formato estándar. Como de costumbre, este es el código de golf , por lo que gana la respuesta más corta en cada idioma.
Respuestas:
Haskell ,
1046463 bytes(-26 gracias a H.PWiz, adicional -14 gracias a Sriotchilism O'Zaic, -1 adicional gracias a cole)
Esta es una función.
Pruébalo en línea!
Explicación:
Secuencia de funciones compuestas que devuelve y + suma digital de y. Primero se convierte en cadena, luego hace gimnasia de mónada para obtener la suma de los personajes y el número original (gracias a Cole).
los
<*>
operador en este contexto tiene tipo y definiciónpara que podamos escribir lo anterior como
Esto
read . pure
convierte aChar
en un número, entonces(+) . read . pure :: Char -> Int -> Int
agrega un dígito a un valor acumulado. Este valor se inicializa al número dado en el pliegue.until
aplica repetidamente una función a su resultado (en este caso, la suma digital y + y) hasta que cumpla un requisito especificado por una función en el primer argumento. Esto le da al elemento y-DSS más pequeño que es mayor o igual a x.Lista perezosa infinita de y tal que el elemento y-DSS más pequeño> = x es en realidad x. Utiliza la notación de comprensión de la lista de Haskell (que también me había olvidado por completo, gracias a todos).
Primer elemento de esa lista, que es la y más pequeña que satisface el requisito del desafío.
fuente
fmap
en primer lugar me confunde un poco.Python 2 ,
7371 bytes-2 bytes gracias a Erik .
Pruébalo en línea!
fuente
l
ak>n
.Perl 6 , 44 bytes
Pruébalo en línea!
Solución ingenua que verifica cada secuencia hasta que encuentra una que contiene la entrada
Explicación:
fuente
Ruby , 51 bytes
Pruébalo en línea!
fuente
Jalea , 11 bytes
Pruébalo en línea!
Programa completo
fuente
MATL , 18 bytes
Pruébalo en línea! O verifique los primeros 20 valores .
Explicación
Para la entrada
i
, esto sigue aumentandon
hasta que se incluyan los primerosi
términos de lan
enésima secuenciai
. Es suficiente probar losi
términos para cada secuencia porque la secuencia está aumentando.fuente
Adelante (gforth) , 106 bytes
Pruébalo en línea!
Explicación del código
fuente
Pyth , 13 bytes
Pruébalo aquí o echa un vistazo a la suite de prueba .
Cómo funciona
fuente
fqQ.W<HQ+sjZ10
14 años. ¡Siempre me olvido de 'y s como una forma de obtener dígitos de un número entero!Jalea , 9 bytes
Un enlace monádico que acepta un entero positivo
n
que produce un entero positivoa(n)
, el colombiano inverso den
.Pruébalo en línea! O vea el conjunto de pruebas .
Cómo
Efectivamente, trabajamos hacia atrás, buscando repetidamente el valor que agregamos hasta que no podamos encontrar uno:
Usando
13
como ejemplo ...fuente
Python 2 , 85 bytes
Pruébalo en línea!
Esto ciertamente funciona para todos los casos de prueba, más todas las entradas 1..88 dadas en OEIS; pero aún no estoy seguro de que sea demostrablemente correcto. (Esta es una de mis quejas con respecto a la Iglesia de la Unidad de Pruebas :)).
fuente
a.index(n)
Wolfram Language (Mathematica) , 61 bytes
Pruébalo en línea!
fuente
MathGolf , 13 bytes
Pruébalo en línea!
¡Gran reto! Me hizo encontrar algunos errores dentro del comportamiento pop implícito de MathGolf, que agregó 1-2 bytes a la solución.
Para demostrar que esto siempre funcionará, es fácil ver eso
n <= input
, porqueinput
es el primer elemento de lainput
secuencia th. Técnicamente, no he demostrado que esta solución sea siempre válida, pero supera todos los casos de prueba que he probado.fuente
05AB1E , 13 bytes
Pruébalo en línea!
fuente
Limpio , 86 bytes
Pruébalo en línea!
Expandido:
Me molesta que
digitToInt d
sea más largo quetoInt d-48
fuente
C (gcc) , 102 bytes
Pruébalo en línea!
fuente
JavaScript, 65 bytes
Pruébalo en línea!
También funciona como C, pero cuesta un byte más
C (gcc) , 66 bytes
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) ,
83, 82 bytesPruébalo en línea!
fuente
Japt ,
1514 bytes¡El ternario para manejar casos donde
input=output
me molesta!Intentalo
fuente
cQuents , 18 bytes
Pruébalo en línea!
Explicación
fuente
Adelante (gforth) , 99 bytes
Pruébalo en línea!
En gran medida similar a la presentación de reffu (106 bytes) . Las partes de golf son:
Cómo funciona
fuente
Carbón , 26 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Utiliza el algoritmo de @ ChasBrown. Si eso no es válido, entonces para 29 bytes:
Pruébalo en línea! El enlace es a la versión detallada del código. Funciona calculando el primer miembro de cada secuencia de suma de dígitos como mínimo
n
. Explicación:Entrada
n
.Bucle hasta que nos encontramos con una secuencia de dígitos que contiene sumando
n
.La siguiente secuencia comienza con una más que el número de secuencias hasta ahora.
Bucle mientras que el miembro de la secuencia es menor que
n
.Agregue la suma de dígitos para obtener el siguiente miembro de la secuencia.
Empuje al miembro final a la lista.
Imprima el número de listas calculadas hasta que encontremos una que contenga
n
.fuente
Rojo , 103 bytes
Pruébalo en línea!
fuente
CJam , 25 bytes
Pruébalo en línea!
fuente
Gaia , 16 bytes
Pruébalo en línea!
Devuelve una lista que contiene el entero más pequeño.
Gaia , 16 bytes
Pruébalo en línea!
Utiliza la observación hecha por el Sr. Xcoder . No es más corto que el otro, pero es un enfoque interesante.
Gaia , 16 bytes
Pruébalo en línea!
Tercer enfoque que no utiliza
N-find
,#
pero sigue confiando en la misma observación que el enfoque intermedio. Devuelve un entero en lugar de una lista.fuente
Clojure , 106 bytes
Pruébalo en línea!
Esto es 99 bytes, pero da como resultado un desbordamiento de pila en entradas más grandes (tal vez ajustar la JVM ayudaría):
fuente
C # (compilador interactivo de Visual C #) , 75 bytes
Pruébalo en línea!
fuente
Casco ,
1410 bytes-4 gracias a @ H.PWiz
Pruébalo en línea!
fuente
€mΩ≥¹SF+dN
(sigo sintiendo que hay más corto)V£⁰m¡SF+dN
de tinta ,
130127 bytesPruébalo en línea!
-3 bytes
convirtiendo a un programa completo que toma entrada unaria.Esto se siente demasiado tiempo para no ser golfable.
Sin golf
fuente
C (gcc) ,
807978 bytesPruébalo en línea!
-2 de ceilingcat
fuente