Un número triangular es un número que se puede expresar como la suma de enteros positivos consecutivos, comenzando en 1. También se pueden expresar con la fórmula n(n + 1) / 2, donde nhay algún entero positivo.
La contraparte digital de un número se calcula de la siguiente manera:
- Dividir un número en una matriz de sus dígitos, por ejemplo
613 => [6 1 3] - Para cada número en la matriz, calcule el
nnúmero triangular th;[6 1 3] => [21 1 6] - Suma la matriz resultante;
[21 1 6] => 28
Su tarea es, dado un número entero n, calcular repetidamente nla contraparte digitalangular, hasta que el resultado sea igual a 1, luego generar todos los valores calculados. Puede generar los valores en cualquier orden y con una inclusión opcional del número original al comienzo de la matriz. Este es un código de golf, por lo que gana el código más corto.
Casos de prueba
23 => 9 45 25 18 37 34 16 22 6 21 4 10 1
72 => 31 7 28 39 51 16 22 6 21 4 10 1
55 => 30 6 21 4 10 1
78 => 64 31 7 28 39 51 16 22 6 21 4 10 1
613 => 28 39 51 16 22 6 21 4 10 1
8392 => 90 45 25 18 37 34 16 22 6 21 4 10 1
11111 => 5 15 16 22 6 21 4 10 1
8592025 => 117 30 6 21 4 10 1
999999999 => 405 25 18 37 34 16 22 6 21 4 10 1

141y tienendígitos. El valor máximo que puede tener su contraparte digital es45n, por lo tantodigi-△(x) ≤ 45n < 45(1+log_10(x)), y parax > 141, tenemos45(1+log_10(x)) < x,digi-△(x) ≤ x-1por lo tantox > 141, para , y una vez que superamos el141límite, bueno, probamos la fuerza bruta a través de programas.Respuestas:
Casco , 6 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E ,
65 bytesPruébalo en línea! Editar: Guardado 1 byte gracias a @Emigna. Explicación:
fuente
€conS, puede omitir unoO.Lincluso se comporta de esa manera?J,
2019 bytesPruébalo en línea!
Emite también el número original.
Explicación
fuente
[:+/->1#.miau!APL (Dyalog) ,
232017 bytes3 bytes guardados gracias a @ngn
Pruébalo en línea!
¿Cómo?
⍵∪⍨- anteponer la matriz actual a la+/- la suma de∊- aplanado⍳¨- rangos de cada⍎¨⍕- dígito de la⊃⍵- valor anterior⍣≡hasta la convergencia El uso de∪(union) asegura que después de unir el primer 1, el siguiente será excluido debido a la unicidad establecida, y la matriz convergerá.fuente
1↓(soltar primero){+/∊⍳¨⍎¨⍕⎕←⍵}⍣≡sin obtener el último 1 impreso?Haskell,
514746 bytesPruébalo en línea!
Editar: @ H.PWiz guardó un byte. ¡Gracias!
fuente
Python 2 , 62 bytes
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) ,
4341 bytesPruébalo en línea!
Cómo funciona
La expresión
#.(#+1)/2&@IntegerDigits@#da la contraparte digital de#. HacemosEchola entrada, usamos la evaluación de cortocircuito&¶ detener si hemos alcanzado1, y de lo contrario recurrimos en la contraparte digital.-2 bytes gracias a Martin Ender por el
.truco: no tenemos que usarTrpara sumar los dígitos si reemplazamos la multiplicación#(#+1)/2por el producto escalar#.(#+1)/2.fuente
Tr:Echo@#>1&�[#.(#+1)/2&@IntegerDigits@#]&FixedPointListexcepto por cómo imprime el punto fijo dos veces). Parece que eso debería haber surgido antes.Wolfram Language (Mathematica) ,
494239 bytesGracias a Misha Lavrov por guardar 3 bytes.
Pruébalo en línea! (TIO necesita paréntesis alrededor
++ypor algún motivo. En mi instalación local de Mathematica funciona sin ellos, como debería).Imprime cada valor en su propia línea, precedido por
>>e incluye el número inicial.fuente
#//.x_:>(y=IntegerDigits@Echo@x).++y/2&. (... tal vez. Por alguna razón, a TIO no le gusta esto, ¿pero Mathematica está bien con eso?)#//.x_:>(y=IntegerDigits@Echo@x).(++y)/2&tiene 41 bytes y funciona en TIO. Pero mi copia de Mathematica no cree que los paréntesis sean necesarios.Ohm v2 ,
97 bytesPruébalo en línea!
Explicación
fuente
uinnecesario?}no va a dividir los dígitosRetina , 21 bytes
Pruébalo en línea! (Las salidas de los casos individuales no están bien separadas, pero cada salida termina con a
1.)Imprime cada número en su propia línea, en orden, incluido el número inicial.
Explicación
Esta es solo una configuración del programa.
{realiza el ciclo del programa hasta que no puede cambiar el resultado (lo que sucede una vez que lo hacemos1),:imprime el número antes de cada iteración y;evita que el resultado final se imprima dos veces al final del programa. EstaGes solo mi forma habitual de crear una etapa sin operaciones.Convierta cada dígito en unario y colóquelo en su propia línea.
Calcule el número triangular en cada línea, reemplazando cada uno
1con su prefijo. También podríamos usarM!&`1+aquí, lo que nos da todos los sufijos de cada línea.Cuente todos los
1s, que resume todos los números triangulares y convierte el resultado a decimal.fuente
Ruby,
60 4742 bytes-13 bytes por @JustinMariner
-5 bytes por @GB
Pruébalo en línea!
fuente
[*...]) y cambiar(k+1)a-~kpara guardar un total de 5 bytes: ¡ Pruébelo en línea! Además, puede ahorrar 8 más al cambiar a una función lambda anónima: ¡ Pruébelo en línea!.mapque no podía tomar matrices.Befunge-93 , 51 bytes
Pruébalo en línea!
James Holderness reformó hábilmente mi programa en una forma de 51 bytes. ¡Gracias!
fuente
Pushy ,
24222117 bytesPruébalo en línea!
Explicación
fuente
Japt ,
1917 bytesToma la entrada como un conjunto de elementos individuales.
Intentalo
fuente
R , 70 bytes
Pruébalo en línea!
Devuelve el valor original también.
R , 80 bytes
Pruébalo en línea!
No devuelve el valor original.
fuente
Lua , 91 bytes
Pruébalo en línea!
fuente
05AB1E ,
2012 bytesAhorró 2 bytes gracias a caird coinheringaahing
Pruébalo en línea!
Explicación
(versión antigua)
fuente
JavaScript,
6157 bytesPruébalo en línea!
fuente
Python 2 , 69 bytes
Pruébalo en línea!
fuente
Carbón , 18 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
cc , 62 bytes
Pruébalo en línea!
fuente
k , 19 bytes
Como era de esperar, funciona de manera similar a las soluciones APL y J ya publicadas
fuente
Jalea , 7 bytes
Pruébalo en línea!
DRFSµÐĿ: Programa completo / enlace monádico.ÐĿ: Haga un bucle hasta que los resultados ya no sean únicos (si algo diferente de 1 ocurriera dos veces, entonces la entrada dada no tiene un resultado definido, ya que nunca alcanzaría 1).D: Convierte de entero a decimal.R: Rango (1 indexado). VectorizaF: Flatten yS: Sum (µsolo crea una nueva cadena monádica)fuente
dc, 31 bytes
La función
mcalcula la función digitangular de su entrada;frepite esto hasta que el resultado llegue a 1.Tenga en cuenta que usamos la raíz de entrada para extraer dígitos; esto significa que funcionará en cualquier sistema base, no solo decimal.
Manifestación
fuente
Python 2 , 76 bytes
Pruébalo en línea!
fuente
Neim , 8 bytes
Explicación:
Pruébalo en línea!
Salida formateada
fuente
D , 140 bytes
Pruébalo en línea!
fuente
PHP, 71 + 1 bytes
Ejecutar como tubería
-nRo probarlo en línea . (requiere PHP 5.3 o posterior para el operador de Elvis)fuente
A?:B: si A es veraz entonces A else BAgregar ++ , 32 bytes
Pruébalo en línea!
No genera el primer valor
Cómo funciona
fuente
Perl 6 , 36 bytes
Pruébalo en línea!
Incluye el número de entrada en la lista de salida.
fuente