Cada entero positivo puede expresarse como la suma de como máximo tres enteros positivos palindrómicos en cualquier base b ≥5. Cilleruelo et al., 2017
Un entero positivo es palindrómico en una base dada si su representación en esa base, sin ceros a la izquierda, lee lo mismo al revés. A continuación, solo se considerará la base b = 10.
La descomposición como una suma de números palindrómicos no es única . Por ejemplo, 5
se puede expresar directamente como 5
, o como la suma de 2, 3
. Del mismo modo, 132
se puede descomponer como 44, 44, 44
o como 121, 11
.
El reto
Dado un entero positivo, produce su descomposición de suma en tres o menos enteros positivos que son palindrómicos en la base 10.
Reglas adicionales
El algoritmo utilizado debería funcionar para entradas arbitrariamente grandes. Sin embargo, es aceptable si el programa está limitado por restricciones de memoria, tiempo o tipo de datos.
La entrada y la salida se pueden tomar por cualquier medio razonable . El formato de entrada y salida es flexible como de costumbre.
Puede elegir producir una o más descomposiciones válidas para cada entrada, siempre que el formato de salida sea inequívoco.
Se permiten programas o funciones , en cualquier lenguaje de programación . Las lagunas estándar están prohibidas.
El código más corto en bytes gana.
Ejemplos
Como una entrada puede tener muchas descomposiciones, estos son ejemplos en lugar de casos de prueba. Cada descomposición se muestra en una línea diferente.
Input -> Output
5 -> 5
2, 3
15 -> 1, 3, 11
9, 6
21 -> 11, 9, 1
7, 7, 7
42 -> 22, 11, 9
2, 7, 33
132 -> 44, 44, 44
121, 11
345 -> 202, 44, 99
2, 343
1022 -> 989, 33
999, 22, 1
9265 -> 9229, 33, 3
8338, 828, 99
fuente
k=1
yk=3
.)k=1
(como en el número original ya es un palíndromo), eso significa que está asumiendo que los otros 2 números son ambos 0. Entonces, si 0 es aceptable como uno de los números, cualquier número que deba hacerse conk=2
también funcionaríak=3
si uno de los tres números es 0.Respuestas:
Brachylog , 7 bytes
Pruébalo en línea!
Sorprendentemente no tan lento.
Explicación
fuente
.
en la explicación y el(.)
? Realmente no conozco Brachylog..
es la variable de salida.~+
,ℕᵐ
y↔ᵐ
son predicados que tienen una variable izquierda y derecha. La duplicación de esos.
simplemente indica que la salida está involucrada directamente en cada una de esas 3 llamadas predicadas. La final(.)
está aquí para mostrar que la variable de salida es implícitamente la última variable del programa. Por lo tanto, la última relación establecida es realmente lo.↔ᵐ.
que significa "mapeo inverso en los resultados de salida en la salida" .Python 2 ,
8279 bytesPruébalo en línea!
fuente
Jalea ,
121098 bytesPruébalo en línea!
Cómo funciona
fuente
Python 2 , 117 bytes
Pruébalo en línea!
Imprime una lista de listas, cada una de las cuales es una solución. Rod ahorró 9 bytes.
fuente
c
con sustracciones y usandofilter
filter(None
también me golpeó mientras preparaba la cena, jaja.c → n-a-b
es genial :)JavaScript (ES6),
115...8483 bytesSiempre devuelve una matriz de tres elementos, donde las entradas no utilizadas se rellenan con ceros.
Casos de prueba
Mostrar fragmento de código
fuente
R, 126 bytes
145 bytesGracias a Giuseppe por jugar golf en 19 bytes
Pruébalo en línea!
Explicación
R no tiene una forma nativa de revertir cadenas y muchas operaciones de cadena predeterminadas no funcionan en números. Entonces, primero convertimos la serie de enteros positivos (más 0) en caracteres.
A continuación, producimos un vector de 0 y todos los palíndromos. La inversión de la cadena requiere dividir cada número por caracteres, revertir el orden del vector y pegarlos nuevamente sin espacios.
A continuación, quiero verificar todos los grupos de tres (aquí es donde los 0 son importantes), afortunadamente R tiene una función de combinación incorporada que devuelve una matriz, cada columna en una combinación.
Aplico la
colSums
función a la matriz y mantengo solo los elementos que son iguales al objetivo suministrado.Finalmente, debido a que hay dos ceros, cualquier conjunto de dos enteros positivos se duplicará, por lo que utilizo una función única en las columnas.
La salida es una matriz donde cada columna es un conjunto de enteros positivos y palíndromos que suman el valor objetivo. Es vago y devuelve 0 cuando se usan menos de 3 elementos.
fuente
Map
para generar palíndromos!Jalea , 14 bytes
Pruébalo en línea!
Muy, muy ineficiente.
fuente
Jalea , 17 bytes
Pruébalo en línea!
-6 bytes gracias a HyperNeutrino.
Salidas de todas las formas. Sin embargo, la salida consta de algunos duplicados.
fuente
is palindrome
lol incorporadoRŒḂÐfṗ3R¤YS⁼¥Ðf
Ohm v2 ,
131210 bytesPruébalo en línea!
fuente
Mathematica, 49 bytes
Pruébalo en línea!
devuelve todas las soluciones
-2 ~ MartinEnder ~ bytes
fuente
#~IntegerPartitions~3~Select~AllTrue@PalindromeQ&
, ¿Yo creo que?Haskell ,
908679 bytes-7 bytes gracias a Laikoni!
Pruébalo en línea!
Devuelve una lista de todas las soluciones con alguna duplicación.
fuente
mapM
y declarandof=filter
: ¡ Pruébelo en línea!Java (OpenJDK 8) , 185 bytes
Pruébalo en línea!
Elimine 1 byte de TIO para obtener la cantidad correcta porque el envío no contiene el
;
después de lambda.fuente
i++<--j
lugar de++i<=--j
Protón , 117 bytes
Pruébalo en línea!
Produce una solución
fuente
Pyth ,
16 1210 bytesPruébalo aquí!
Cómo funciona
fuente
05AB1E , 17 bytes
Pruébalo en línea!
Emite el resultado en tres listas de la siguiente manera:
Listas palindrómicas de longitud 1 (el número original IFF es palindrómico).
Listas palindrómicas de longitud 2.
Listas palindrómicas de longitud 3.
fuente
Axioma, 900 bytes
código de prueba
Si este código tiene que descomponer el número X en 1,2,3 palíndromo, lo que hace este código es intentar cerca del palíndromo N <X y descomponer XN en 2 palíndromo; si esta descomposición de XN tiene éxito, devuelve 3 palíndromos encontrados; si falla, pruebe el palíndromo anterior G <N <X e intente descomponer XG en 2 palíndromes, etc. Código Ungolf (pero es posible que haya algún error)
resultados:
fuente
Java (OpenJDK 8) , 605 bytes
Imprime engañados pero no están prohibidos afaik
Pruébalo en línea!
fuente
APL (Dyalog) , 51 bytes
Pruébalo en línea!
fuente
05AB1E , 8 bytes
Pruébalo en línea!
Explicación:
fuente
Perl 6 , 51 bytes
Pruébalo en línea!
grep { $_ eq .flip }, 1 .. $_
produce una lista de todos los números palindrómicos del 1 al número de entrada.3 Rxx
replica esa lista tres veces.[X]
reduce esa lista de listas con el operador de productos cruzadosX
, lo que da como resultado una lista de todas las 3 tuplas de números de palindrominc del 1 al número de entrada.first *.sum == $_
encuentra la primera de esas 3 tuplas que suma al número de entrada.fuente
xx 3
.Python 3 , 106 bytes
Pruébalo en línea!
En el enlace TIO utilicé una versión más rápida (pero de 1 byte más larga) que toma el primer resultado válido como generador, en lugar de construir la lista completa de combinaciones posibles y tomar la primera.
fuente
Ruby , 84 bytes
Crea una lista de todas las combinaciones posibles de 3 palíndromos de 0 a n, encuentra la primera cuya suma coincide y luego elimina los ceros.
Pruébalo en línea!
fuente
Agregar ++ , 62 bytes
Pruébalo en línea!
~ 50 bytes de golf mientras escribía una explicación. Define una función lambda que devuelve una lista de listas que contienen las soluciones.
Cómo funciona
g
RÞg
g
La siguiente sección se puede dividir en tres partes más:
[1 2 3 4 ...]
[[1] [2] [3] [4] ... ]
k
Esta función básicamente no hace nada. Recibe dos argumentos y los envuelve en una matriz. Sin embargo, la tabla rápida
‽
es el truco de magia aquí. Toma dos listas y genera cada par de elementos entre esas dos listas. Entonces[1 2 3]
y[4 5 6]
genera[[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]
. Luego toma su argumento funcional (en este casok
) y ejecuta esa función sobre cada par, que, en este caso, simplemente devuelve los pares tal como están.€bF
l
fuente