Chaque entier positif peut être exprimé par la somme d'au plus trois entiers positifs palindromiques dans toute base b ≥5. Cilleruelo et al., 2017
Un entier positif est palindrome dans une base donnée si sa représentation dans cette base, sans zéros non significatifs, lit la même chose en arrière. Dans ce qui suit, seule la base b = 10 sera considérée.
La décomposition en tant que somme de nombres palindromiques n'est pas unique . Par exemple, 5
peut être exprimé directement sous forme de 5
, ou sous forme de la somme de 2, 3
. De même, 132
peut être décomposé comme 44, 44, 44
ou comme 121, 11
.
Le défi
Avec un entier positif, produisez sa décomposition en trois entiers positifs ou moins qui sont palindromiques en base 10.
Règles supplémentaires
L'algorithme utilisé devrait fonctionner pour des entrées arbitrairement grandes. Cependant, il est acceptable que le programme soit limité par des restrictions de mémoire, de temps ou de type de données.
L'entrée et la sortie peuvent être prises par n'importe quel moyen raisonnable . Le format d'entrée et de sortie est flexible comme d'habitude.
Vous pouvez choisir de produire une ou plusieurs décompositions valides pour chaque entrée, à condition que le format de sortie ne soit pas ambigu.
Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites.
Le code le plus court en octets gagne.
Exemples
Puisqu'une entrée peut avoir plusieurs décompositions, il s'agit d'exemples plutôt que de cas de test. Chaque décomposition est affichée sur une ligne différente.
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
la source
k=1
etk=3
.)k=1
(comme dans le numéro d'origine est déjà un palindrome), cela signifie que vous supposez que les 2 autres nombres sont tous les deux égaux à 0. Donc, si 0 est acceptable comme l'un des nombres, tout nombre devant être effectué withk=2
fonctionnerait aussik=3
si l'un des trois nombres est 0.Réponses:
Brachylog , 7 octets
Essayez-le en ligne!
Étonnamment, pas si lent.
Explication
la source
.
dans l'explication, et le(.)
? Je ne connais pas vraiment Brachylog..
est la variable de sortie.~+
,ℕᵐ
et↔ᵐ
sont des prédicats qui ont une variable gauche et droite. La duplication de ceux-ci.
indique simplement que la sortie est directement impliquée dans chacun de ces 3 appels de prédicats. La dernière(.)
est ici pour montrer que la variable de sortie est implicitement la dernière variable du programme. Par conséquent, la dernière relation énoncée est réellement.↔ᵐ.
ce qui signifie "l'inverse de la correspondance sur les résultats de sortie dans la sortie" .Python 2 ,
8279 octetsEssayez-le en ligne!
la source
Jelly ,
121098 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Python 2 , 117 octets
Essayez-le en ligne!
Imprime une liste de listes, chacune d’elles constituant une solution. Rod a enregistré 9 octets.
la source
c
par des soustractions et utilisantfilter
filter(None
m'a frappé aussi pendant que je préparais le dîner, haha.c → n-a-b
is cool :)JavaScript (ES6),
115...8483 octetsRetourne toujours un tableau à trois éléments, où les entrées non utilisées sont complétées par des zéros.
Cas de test
Afficher l'extrait de code
la source
R, 126 octets
145 octetsMerci à Giuseppe pour le golf de 19 octets
Essayez-le en ligne!
Explication
R n'a pas de méthode native pour inverser les chaînes et de nombreuses opérations sur les chaînes par défaut ne fonctionnent pas sur les nombres. Nous convertissons donc d'abord la série d'entiers positifs (plus 0) en caractères.
Ensuite, nous produisons un vecteur de 0 et tous les palindromes. L'inversion de chaîne nécessite de scinder chaque nombre en caractères, d'inverser l'ordre du vecteur et de les recoller sans laisser d'espace.
Ensuite, je veux vérifier tous les groupes de trois (voici où les 0 sont importants), heureusement, R possède une fonction de combinaison intégrée qui renvoie une matrice, chaque colonne étant une combinaison.
J'applique la
colSums
fonction à la matrice et ne conserve que les éléments qui correspondent à la cible fournie.Enfin, comme il y a deux 0, tout ensemble de deux entiers positifs sera dupliqué et j'utilise une fonction unique sur les colonnes.
La sortie est une matrice où chaque colonne est un ensemble d’entiers positifs, pallindromiques, dont la somme correspond à la valeur cible. Il est paresseux et renvoie des 0 lorsque moins de 3 éléments sont utilisés.
la source
Map
générer des palindromes!Gelée , 14 octets
Essayez-le en ligne!
Très, très inefficace.
la source
Gelée , 17 octets
Essayez-le en ligne!
-6 octets grâce à HyperNeutrino.
Sorties de toutes les manières. Cependant, le résultat consiste en des doublons.
la source
is palindrome
lol intégréRŒḂÐfṗ3R¤YS⁼¥Ðf
Ohm v2 ,
131210 octetsEssayez-le en ligne!
la source
Mathematica, 49 octets
Essayez-le en ligne!
renvoie toutes les solutions
-2 ~ MartinEnder ~ octets
la source
#~IntegerPartitions~3~Select~AllTrue@PalindromeQ&
, Je pense?Haskell ,
908679 octets-7 octets grâce à Laikoni!
Essayez-le en ligne!
Renvoie une liste de toutes les solutions avec des doublons.
la source
mapM
et déclarantf=filter
: Essayez-le en ligne!Java (OpenJDK 8) , 185 octets
Essayez-le en ligne!
Supprimez 1 octet de TIO pour obtenir le montant correct, car la soumission ne contient pas
;
après le lambda.la source
i++<--j
lieu de++i<=--j
Proton , 117 octets
Essayez-le en ligne!
Sortie d'une solution
la source
Pyth ,
16 1210 octetsEssayez-le ici!
Comment ça fonctionne
la source
05AB1E , 17 octets
Essayez-le en ligne!
Affiche le résultat dans trois listes comme suit:
Listes palindromiques de longueur 1 (le nombre original IFF est palindromique).
Listes palindromiques de longueur 2.
Listes palindromiques de longueur 3.
la source
Axiome, 900 octets
code de test
Si ce code doit décomposer le nombre X en 1,2,3 palindrome, il essaye près du palindrome N <X et décompose XN en 2 palindrome; si cette décomposition de XN a réussi, renvoyer 3 palindrome trouvé; si cela échoue, essayez le palindrome précédent G <N <X et essayez de décomposer XG en 2 palindromes, etc.
résultats:
la source
Java (OpenJDK 8) , 605 octets
Imprime des dupes mais elles ne sont pas bannies
Essayez-le en ligne!
la source
APL (Dyalog) , 51 octets
Essayez-le en ligne!
la source
05AB1E , 8 octets
Essayez-le en ligne!
Explication:
la source
Perl 6 , 51 octets
Essayez-le en ligne!
grep { $_ eq .flip }, 1 .. $_
produit une liste de tous les nombres palindromiques de 1 au nombre entré.3 Rxx
reproduit cette liste trois fois.[X]
réduit cette liste de listes avec l'opérateur multi-produitX
, résultant en une liste de tous les 3-uplets de nombres palindrominc de 1 au nombre entré.first *.sum == $_
trouve le premier triplet de ce type qui correspond au nombre saisi.la source
xx 3
.Python 3 , 106 octets
Essayez-le en ligne!
Dans le lien TIO, j'ai utilisé une version plus rapide (mais une version plus longue d'un octet) prenant le premier résultat valide en tant que générateur, plutôt que de construire la liste complète des combinaisons possibles et de prendre le premier.
la source
Ruby , 84 octets
Construit une liste de toutes les combinaisons possibles de 3 palindromes de 0 à n, trouve le premier dont la somme correspond, puis élague les zéros.
Essayez-le en ligne!
la source
Ajouter ++ , 62 octets
Essayez-le en ligne!
~ 50 octets joués au golf lors de la rédaction d'une explication. Définit une fonction lambda qui renvoie une liste de listes contenant les solutions.
Comment ça fonctionne
g
RÞg
g
La section suivante peut être divisée en trois autres parties:
[1 2 3 4 ...]
[[1] [2] [3] [4] ... ]
k
Cette fonction ne fait fondamentalement rien. Il reçoit deux arguments et les encapsule dans un tableau. Cependant, la table rapide,
‽
est le tour de magie ici. Il faut deux listes et génère chaque paire d'éléments entre ces deux listes. Donc[1 2 3]
et[4 5 6]
génère[[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]
. Il prend ensuite son argument fonctionnel (dans ce cask
) et exécute cette fonction sur chaque paire, ce qui, dans ce cas, renvoie simplement les paires telles quelles.€bF
l
la source