Este desafío se basa en esta pregunta de Stackoverflow .
Con un número positivo como entrada, imprímalo como la suma de cada dígito multiplicado por su representación de potencia de 10.
Entrada
Un número, como un entero, una cadena o una lista de dígitos / caracteres.
- El número será estrictamente positivo.
- Si acepta el número como una cadena o lista, no comenzará con a
0
.
Salida
Una cadena que representa una suma de cada dígito de base 10 relevante, cada uno multiplicado por su respectiva potencia de base 10. Una suma se representa como a + b
. Si lo desea, puede usar hasta un espacio alrededor de cada lado del +
letrero. Los operandos se enumeran en orden descendente.
0
nunca puede ser un operando válido.- El
+
letrero (rodeado o no por espacios) puede no ser la parte inicial o posterior.
Ejemplos
Input Output
12 10 + 2
or 10+2
or 10 +2
or 10+ 2
9 9
123 100 + 20 + 3
10 10
101 100 + 1
Salidas inválidas
2 1 + 1
10 10 + 0
1 0 + 1
12 + 10 + 2
12 10 + 2 +
12 2 + 10
Este es el código de golf, por lo que gana el código más corto en bytes.
Respuestas:
Python 3:
838079 Bytes¡Pruébelo en línea!
Mi primera presentación de Code Golf.
-3 Bytes por ovs. Gracias por ese consejo útil :) -4 Bytes por mypetlion. Gracias por ese consejo de acortamiento :)
fuente
if'0'<t[i]
y cambiando su fórmula dex-i-1
ax+~i
. Aquí hay un enlace TIO con cambios paso a paso.print
instrucción aprint(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')
para guardar 1 byte.Jalea , 9 bytes
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6), 47 bytes
Toma la entrada como un entero.
Pruébalo en línea!
Comentado
fuente
R , 55 bytes
Suponiendo que todos los enteros estén por debajo de 1e10, que de todos modos es más grande que el entero máximo de 32 bits ...
Pruébalo en línea!
fuente
10^(nchar(n):1-1
teóricamente funcionaría para cualquier número entero ...Lenguaje de programación Shakespeare ,
807806805804 bytesPruébalo en línea!
-23 bytes si un carácter nulo puede salir primero
Explicación
fuente
Python 2 , 64 bytes
Pruébalo en línea!
Python 2 , 66 bytes
Pruébalo en línea!
fuente
Jalea ,
1211 bytesUn programa completo que acepta el número como una lista de dígitos (en formato Python) que imprime el resultado.
Pruébalo en línea!
¿Cómo?
Anterior @ 12 bytes:
fuente
Haskell,
6054 bytesEditar: -6 bytes gracias a Delfad0r.
Toma el número de entrada como una cadena.
Pruébalo en línea!
fuente
tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""
ahorra 6 bytes ¡ Pruébelo en línea! .05AB1E , 10 bytes
Implementación directa.
Entrada como lista de dígitos.
Pruébalo en línea!
Explicación
fuente
Python 2 , 64 bytes
Una función sin nombre que toma una lista de dígitos
n
, y devuelve una cadena.Pruébalo en línea!
enumerate(n)
produciría tuplas deindex, item
travésn
con un índice que comienza en0
.Sin embargo
enumerate
también tiene un índice de partida opcional como segundo argumento, estableciendo este a-len(n)
obtenemos índices (e
s) de-len(n)
,-len(n)+1
, ...,-1
.Esto significa que el número de ceros finales requeridos para cualquier elemento (
b
) es-1-e
, que es~e
así que~e*'0'
obtiene los ceros finales necesarios.`b`
obtiene una representación de cadena del dígito enterob
y+
concatena esto con esos ceros.if b
filtra las entradas conb==0
.'+'.join(...)
luego une las cadenas resultantes con+
caracteres.fuente
Python 2,
827371 bytes-9 bytes gracias a @ovs
-2 bytes gracias a @JonathanAllan
Pruébalo en línea
fuente
Haskell ,
565552 bytes-4 byte gracias a nimi .
Pruébalo en línea!
explicación
Pruébalo en línea!
fuente
Perl 6 , 38 bytes
Pruébalo en línea!
Bloque de código anónimo que toma una lista de dígitos y devuelve una cadena.
Explicación:
fuente
APL (Dyalog),
464140 bytes-5 bytes gracias a @dzaima
Función de prefijo anónimo. Toma la entrada como una cadena. TIO
(Esta es la primera vez que uso APL en PPCG, probablemente golfable. Además, ¡maldito sea, ceros!)
fuente
⎕IO←0
Retina , 19 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Listar todos los dígitos distintos de cero
Para cada dígito, agregue tantos ceros como dígitos restantes.
Separe cada resultado con
+
s en lugar de la nueva línea predeterminada.Retina 0.8.2 , 21 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Enumere todos los sufijos de la entrada que comienzan con dígitos distintos de cero.
Reemplace todos los dígitos finales con ceros.
Une los resultados con
+
s.fuente
C (gcc) ,
7169 bytesCada paso de la función recursiva resta la parte que imprimirá y pasa el resto del número.
Gracias a ceilingcat por la sugerencia.
Pruébalo en línea!
fuente
Brachylog ,
3532 bytes-3 bytes porque 0 no es una entrada válida
Pruébalo en línea! o testuite
Explicación
fuente
|∧Ṡ
del final. :)Brachylog v2, 15 bytes
Pruébalo en línea!
Muy, muy ineficiente.
De alguna manera, esto logra usar solo 6 bytes en lo que en la mayoría de los idiomas es la parte difícil (dividir el número en la forma a 10 b donde a es un solo dígito, en orden descendente) y un total de 9 bytes para "unirse con
+
"(que está incluido en la mayoría de los idiomas de golf, pero no en Brachylog).A diferencia de la mayoría de mis presentaciones de Brachylog (que son funciones), este es un programa completo, que toma información de entrada estándar y produce salida en salida estándar.
Explicación
(La razón que
wᵐ
se usa en lugar de la más normalc
es que estamos tratando con una lista heterogénea, que contiene números y cadenas, y en lugar de permitir que se mezclen, es más simple imprimirlos todos individualmente).El algoritmo aquí fuerza bruta sobre todas las particiones aditivas de la entrada hasta que encuentre una adecuada (!). Brachylog favorece la partición en menos posibilidades, y con las posibilidades ordenadas en orden ascendente, por lo que la primera solución que encontrará es el reverso de la solución que está planteando la pregunta. Entonces solo tenemos que revertirlo para obtener la solución que queremos.
fuente
Limpio , 73 bytes
Pruébalo en línea!
Define la función que
$ :: String -> String
toma una cadena y devuelve una cadena.fuente
Lienzo ,
1413 bytesPruébalo aquí!
fuente
Adjunto , 37 bytes
Pruébalo en línea!
Versión sin puntos (41 bytes):
Join&"+"##`\&:Id##`-&>Pairs@`'&0@Suffixes
Explicación
fuente
C (gcc), 87 bytes
Pruébalo en línea!
fuente
Powershell,
5552 bytesEl script espera una matriz de cadenas, cada cadena contiene un dígito. Script de prueba:
Salida:
fuente
Japt , 13 bytes
Toma la entrada como una matriz de dígitos.
Intentalo
Explicación
Alternativa
Toma la entrada como una matriz de cadenas de dígitos.
Intentalo
fuente
Java 10,
8278 bytesRespuesta de JavaScript del puerto de Arnauld (ES6) .
-2 bytes gracias a @ceilingcat .
-2 bytes gracias a Arnauld .
Pruébalo en línea.
Explicación:
fuente
n%m
asignado a una variable para facilitar la lectura.)m<n
debería funcionar.SNOBOL4 (CSNOBOL4) ,
134133129 bytesPruébalo en línea!
¡Salvó un byte completo al procesar cadenas en lugar de aritmética!
fuente
sed -E ,
10999977574 bytesCada línea de la entrada se considera un número separado. Pruébalo en línea .
Explicación:
... se puede jugar más golf, supongo.
fuente
01010101010
o000000
, de acuerdo con las especificaciones del desafío. ¿Eso ahorra bytes?Brainfuck, 147 bytes
Pruébalo en línea! (Deberá marcar la casilla marcada "!" Y escribir su entrada después de "!" En la segunda línea del código; de lo contrario, continuará solicitando entradas para siempre).
Probablemente no será la respuesta más corta o jugará golf lo más corto posible, pero fue muy divertido intentar hacer esto en Brainfuck, por lo que podría publicarlo.
Como señaló @JoKing, este programa no elimina los 0. Intentaré solucionar esto, pero puede ser bastante difícil.
Explicación:
fuente
APL (Dyalog Unicode) , 20 bytes
Pruébalo en línea!
Toma la entrada como un vector de dígitos. Salidas con un espacio antes y después de cada uno
+
, e incluye una cantidad variable de espacios iniciales.Este es un tren. Se divide en lo siguiente.
La primera función es
⌽
, esto invierte la matriz, por lo que se1 0 2
convierte2 0 1
.Luego entramos
(10×⊢)\
, que se aplica a la matriz invertida. Esta parte está inspirada en la respuesta de ngn al desafío Boustrophedonise. Tomando prestada la explicación de ngn, dado un vector de dígitosA B C ...
, la aplicación(10×⊢)\
en este vector da lo siguiente.En
2 0 1
,(10×⊢)\
da2 0 100
.Luego viene
0~⍨
. Esto elimina todos los0
s de la matriz, dando2 100
.Finalmente llega el
+
s.{⍵'+'⍺}/
es una reducción que comienza desde la derecha que concatena el argumento izquierdo con a+
, seguido del argumento derecho. Efectivamente, esto invierte la matriz al insertar+
s. Esto da100 '+' 2
, que se muestra como100 + 2
.fuente
MathGolf ,
121110 bytesPruébalo en línea!
Explicación
El primer comando no es necesario ya que la entrada se puede dar como una lista de dígitos.
Podría agregar un operador de multiplicación por pares que es un byte, pero que actualmente no es parte del lenguaje. Entonces podría eliminar un byte de esta solución.
fuente