Todo número inteiro positivo pode ser expresso como a soma de no máximo três números inteiros positivos palindrômicos em qualquer base b ≥5. Cilleruelo et al., 2017
Um número inteiro positivo é palíndrico em uma determinada base se sua representação nessa base, sem zeros à esquerda, lê o mesmo para trás. A seguir, apenas a base b = 10 será considerada.
A decomposição como uma soma dos números palindrômicos não é única . Por exemplo, 5
pode ser expresso diretamente como 5
, ou como a soma de 2, 3
. Da mesma forma, 132
pode ser decomposto como 44, 44, 44
ou como 121, 11
.
O desafio
Dado um número inteiro positivo, produza sua decomposição de soma em três ou menos números inteiros positivos que são palíndricos na base 10.
Regras adicionais
O algoritmo usado deve funcionar para entradas arbitrariamente grandes. No entanto, é aceitável se o programa estiver limitado por restrições de memória, hora ou tipo de dados.
A entrada e a saída podem ser obtidas por qualquer meio razoável . O formato de entrada e saída é flexível, como de costume.
Você pode optar por produzir uma ou mais decomposições válidas para cada entrada, desde que o formato de saída seja inequívoco.
Programas ou funções são permitidos, em qualquer linguagem de programação . As brechas padrão são proibidas.
O menor código em bytes vence.
Exemplos
Como uma entrada pode ter muitas decomposições, esses são exemplos e não casos de teste. Cada decomposição é mostrada em uma linha 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
fonte
k=1
ek=3
.)k=1
(como no número original já é um palíndromo), isso significa que você está assumindo que os outros 2 números são ambos 0. Portanto, se 0 é aceitável como um dos números, qualquer número que deve ser feito comk=2
também iria trabalhar parak=3
se um dos três números é 0.Respostas:
Braquilog , 7 bytes
Experimente online!
Surpreendentemente, não é tão lento.
Explicação
fonte
.
na explicação e com o(.)
? Realmente não conheço Brachylog..
é a variável de saída.~+
,ℕᵐ
E↔ᵐ
são predicados que têm uma variável esquerda e direita. A duplicação desses.
simplesmente indica que a saída está envolvida diretamente em cada uma dessas três chamadas predicadas. A final(.)
está aqui para mostrar que a variável de saída é implicitamente a última variável do programa. Portanto, o último relacionamento declarado é realmente o.↔ᵐ.
que significa "mapear inversamente os resultados da saída na saída" .Python 2 ,
8279 bytesExperimente online!
fonte
Gelatina ,
121098 bytesExperimente online!
Como funciona
fonte
Python 2 , 117 bytes
Experimente online!
Imprime uma lista de listas, cada uma das quais é uma solução. Rod salvou 9 bytes.
fonte
c
com subtracções e utilizandofilter
filter(None
me bateu também enquanto eu estava fazendo o jantar, haha.c → n-a-b
é legal :)JavaScript (ES6),
115...8483 bytesSempre retorna uma matriz de três elementos, na qual entradas não utilizadas são preenchidas com zeros.
Casos de teste
Mostrar snippet de código
fonte
R, 126 bytes
145 bytesAgradecimentos a Giuseppe por jogar fora 19 bytes
Experimente online!
Explicação
R não possui uma maneira nativa de reverter seqüências de caracteres e muitas operações de sequência padrão não funcionam com números. Então, primeiro convertemos a série de números inteiros positivos (mais 0) em caracteres.
Em seguida, produzimos um vetor 0 e todos os palíndromos. A reversão de string requer dividir cada número por caracteres, revertendo a ordem do vetor e colando-os novamente sem espaços.
Em seguida, quero verificar todos os grupos de três (aqui é onde os 0s são importantes). Felizmente, R possui uma função de combinação integrada que retorna uma matriz, cada coluna em uma combinação.
Aplico a
colSums
função à matriz e mantenho apenas os elementos que são iguais ao alvo fornecido.Finalmente, como existem dois 0s, qualquer conjunto de dois números inteiros positivos será duplicado, então eu uso uma função exclusiva nas colunas.
A saída é uma matriz em que cada coluna é um conjunto de números inteiros palindrômicos positivos que somam ao valor alvo. É lento e retorna 0 quando menos de 3 elementos são usados.
fonte
Map
para gerar palíndromos!Gelatina , 14 bytes
Experimente online!
Muito, muito ineficiente.
fonte
Gelatina , 17 bytes
Experimente online!
-6 bytes graças ao HyperNeutrino.
Produz todas as formas. No entanto, a saída consiste em algumas duplicatas.
fonte
is palindrome
lolRŒḂÐfṗ3R¤YS⁼¥Ðf
Ohm v2 ,
131210 bytesExperimente online!
fonte
Mathematica, 49 bytes
Experimente online!
retorna todas as soluções
-2 ~ MartinEnder ~ bytes
fonte
#~IntegerPartitions~3~Select~AllTrue@PalindromeQ&
, Eu acho que?Haskell ,
908679 bytes-7 bytes graças a Laikoni!
Experimente online!
Retorna uma lista de todas as soluções com alguma duplicação.
fonte
mapM
e declarandof=filter
: Experimente online!Java (OpenJDK 8) , 185 bytes
Experimente online!
Remova 1 byte do TIO para obter a quantia correta, pois o envio não contém o
;
após o lambda.fonte
i++<--j
vez de++i<=--j
Próton , 117 bytes
Experimente online!
Produz uma solução
fonte
Pitão ,
16 1210 bytesExperimente aqui!
Como funciona
fonte
05AB1E , 17 bytes
Experimente online!
Produz o resultado em três listas da seguinte maneira:
Listas palindrômicas de comprimento 1 (o número original IFF é palindrômico).
Listas palindrômicas de comprimento 2.
Listas palindrômicas de comprimento 3.
fonte
Axioma, 900 bytes
código de teste
Se esse código precisar decompor o número X no palíndromo 1,2,3, o que esse código faz, tente próximo ao palíndromo N <X e decomponha XN no palíndromo 2; se esta decomposição de XN tiver sucesso, retorne 3 palíndromo encontrado; se falhar, tente o palíndromo anterior G <N <X e tente decompor o XG em 2 palíndromo etc. Código Ungolf (mas é possível que haja algum bug)
resultados:
fonte
Java (OpenJDK 8) , 605 bytes
Imprime enganos, mas eles não são proibidos
Experimente online!
fonte
APL (Dyalog) , 51 bytes
Experimente online!
fonte
05AB1E , 8 bytes
Experimente online!
Explicação:
fonte
Perl 6 , 51 bytes
Experimente online!
grep { $_ eq .flip }, 1 .. $_
produz uma lista de todos os números palíndricos de 1 ao número de entrada.3 Rxx
replica essa lista três vezes.[X]
reduz essa lista de listas com o operador de produtos cruzadosX
, resultando em uma lista de todas as três tuplas de números de palindrominco de 1 para o número de entrada.first *.sum == $_
localiza a primeira dessas três tuplas que soma ao número de entrada.fonte
xx 3
.Python 3 , 106 bytes
Experimente online!
No link TIO, usei uma versão mais rápida (mas com 1 byte de comprimento) que leva o primeiro resultado válido como gerador, em vez de criar a lista inteira de combinações possíveis e pegar a primeira.
fonte
Ruby , 84 bytes
Constrói uma lista de todas as combinações possíveis de 3 palíndromos de 0 a n, localiza o primeiro cuja soma corresponde e apaga os zeros.
Experimente online!
fonte
Adicionar ++ , 62 bytes
Experimente online!
~ 50 bytes jogavam golfe enquanto escrevia uma explicação. Define uma função lambda que retorna uma lista de listas contendo as soluções.
Como funciona
g
RÞg
g
A próxima seção pode ser dividida em mais três partes:
[1 2 3 4 ...]
[[1] [2] [3] [4] ... ]
k
Esta função basicamente não faz nada. Ele recebe dois argumentos e os agrupa em uma matriz. No entanto, a mesa rápida,
‽
é o truque de mágica aqui. É preciso duas listas e gera cada par de elementos entre essas duas listas. Então[1 2 3]
e[4 5 6]
gera[[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]
. Ele pega seu argumento funcional (nesse casok
) e executa essa função sobre cada par, que, nesse caso, simplesmente retorna os pares como estão.€bF
l
fonte