Étant donné un nombre N , afficher / renvoyer X de telle sorte que N + X soit un palindrome, où | X | doit être aussi petit que possible.
Palindrome: Un nombre est un palindrome, si sa séquence de chiffres est la même lors de la lecture de gauche à droite que lors de la lecture de droite à gauche.
95359
et 6548456
sont symétriques, 123
et 2424
ne le sont pas. Les nombres avec des zéros 020
non significatifs comme ne sont pas un palindrome.
L'entrée est un entier positif inférieur à 10 15 . Lisez-le depuis stdin, comme paramètre de méthode, peu importe.
La sortie doit être un entier (positif ou négatif) et doit être 0 si l'entrée est déjà un palindrom. Vous pouvez écrire votre sortie sur stdout, la renvoyer depuis une fonction ou ce que vous voulez. S'il y a 2 nombres (par exemple 2
et -2
) qui satisfont aux exigences, sortez un seul d'entre eux.
Exemples:
Input Output
3 0
234 -2
1299931 -10
126 5 or -5 (only one of them)
la source
N=10
la sortie peut êtreX=-1
ouX=1
?Réponses:
Pyth ,
2620Mis à jour pour répondre aux nouvelles règles.
Le programme s'exécute dans une boucle infinie qui teste chaque incrément possible, dans l'ordre 0, -1, 1, -2, -2 ...
Explication:
Exemple d'exécution:
Cela a pris 23 secondes.
Solution bonus, même nombre de caractères:
la source
[0, 1, -1, 2, -2, ...]
par une mise à jourZ=-Z+(Z<0)
?Rubis,
11184 octetsPrend le nombre comme seul argument de ligne de commande.
la source
CJam,
342925 octetsEssayez-le en ligne.
Exemples
Comment ça marche
la source
Haskell - 62
Enregistrez-le dans un fichier nommé
golf.hs
puis testez-le avec ghci:la source
x<-[0..]>>=(\v->[n+v,n-v])
? Il est plus court et en fait unPython 2.7,
98, 81Crée un palindrome à partir du numéro d'entrée, puis le soustrait de l'entrée pour trouver le delta.
usage:
non golfé et annoté:
la source
f(19) = -8
(palindrome11
), où il devrait être+3
fait22
.Perl 5,
93898887756344Non golfé:
Grâce aux suggestions de Dennis, il est descendu à 43 +
-p
= 44la source
-$a
est plus court que$a*-1
. 2. Si vous utilisez($a<1)
, il n'y a pas besoin de? :$a++
. 3. Si vous utilisez le-p
commutateur$_=<>
etprint$_
est implicite, vous pouvez donc supprimer la première instruction et remplacer la dernière par$_=$a+0
.-p
commutateur comme un octet supplémentaire, mais vous pouvez le récupérer en utilisant à la($a<1)-$a
place de-$a+($a<1)
.while
$/
au lieu de$a
, cela fonctionnera.05AB1E ,
1514 octets (-1 Merci à Emigna)Essayez-le en ligne!
Méthode:
la source
2äн
place deg;î£
.Java:
127109Itération de base, vérification à la fois négative et positive avant de passer au candidat suivant.
Pour entrée
123456789012345
, il revient-1358024
, à égal palindrome123456787654321
.Sauts de ligne:
la source
n+i+""
et enregistre les supports? Je pense que la priorité devrait être correcte.toString()
. Merci :)i=i<1?-i+1:-i
? Je l'appellerai "indécrément".Clojure, 92
Prend le premier d'une séquence paresseuse qui fonctionne à partir de 0 et n'inclut que des valeurs qui font des palindromes:
Session REPL-LPER:
la source
JavaScript,
175136117Simple.
p
renvoie vrai si un nombre donné est palindrome,f
recherche le plus proche.EDIT: Je l'ai également joué un peu plus au golf grâce à la douce astuce "indécrémentation" de Geobits dans la réponse Java ici.
Usage:
la source
p=n=>[...s=''+n].reverse().join('')==s f=n=>{r=t=0;while(!(p(n+r++)||p(n+t--)));return p(n+r-1)?r-1:t+1}
:)function
etreturn
sont des mots réservés terriblement longs ...s=>{for(i=0;[...s+i+""].reverse().join``!=s+i;i=i<0?-i:~i);return i}
. Stack-overflow sujette 61f=(s,i=0)=>[...s+i+""].reverse().join``==s+i?i:f(s,i<0?-i:~i)
J - 49 car
Une fonction mappant des entiers à des entiers.
Voici comment vous pourriez construire ce résultat, en trois parties. Voici l'affichage du J REPL: les lignes en retrait sont des entrées utilisateur et celles en retrait sont des sorties REPL. Et oui, J épelle le signe négatif avec un trait de soulignement
_
.Exemples:
Vous pouvez également faire en sorte que le golf préfère la solution positive au négatif quand elles sont égales, en changeant
_1 1
en1 _1
.la source
Javascript 86
Ceci est mon premier défi de codegolf. J'espère que cette solution est acceptable.
ungolfed:
n => { s = (n + '').split(''); for (i = 0, j = s.length - 1; i < j; i++,j--) s[j] = s[i]; return s.join('') - n }
Explication:Convertissez l'entrée n en chaîne et divisez.
Itérer sur les deux côtés du tableau résultant et copier le chiffre sur s [i] vers s [j] jusqu'à i <j. Cela se traduira par notre palindrome souhaité.
Regroupez le tableau et soustrayez n pour obtenir x
la source
s=(n+'').split('')
pours=[...(n+'')]
. raser 5 octetsf(19)=3
parce que 22 est le palindromique le plus proche, mais la fonction renvoie -8 pour convertir 19 en 11. btw[...n+'']
fonctionnera également pour -2 octets supplémentairesJavaScript (ES6), 84 octets
Mon premier défi de golf! Je sais que la solution plus courte et plus élégante a déjà été publiée par @Brian H., mais c'est une autre approche.
Code de test
Afficher l'extrait de code
la source
Brachylog , 8 octets
Essayez-le en ligne!
Le prédicat d'étiquette
≜
est vital ici, car en l'utilisant sur la sortie avant toute autre chose (bien qu'il soit vraiment invoqué sur la liste contenant l'entrée et la sortie), sa valeur absolue est minimisée, car au lieu de faire quelque chose de plus intelligent basé sur le contraintes, le programme devine chaque entier à partir de 0 jusqu'à ce qu'il puisse en trouver un qui fonctionne. Si≜
est omis, il apparaît au programme que 0 est un très joli palindrome, et il affichera toujours le négatif de l'entrée.la source
Groovy -
131111107 caractèresGolfé:
échantillons:
Non golfé:
la source
Python 2 - 76
Obtient le numéro d'entrée et génère une liste des différences entre l'entrée et chaque nombre entre
0
et2*i
uniquement si le nombre est palindromique.Il trie ensuite la liste par valeur absolue et imprime le premier élément.
la source
min
avec un argument de mot clé plutôt que de trier.C ++ 289
La fonction P vérifie les palindromes en utilisant la
<algorithm>
méthode.Non golfé:
la source
Mathematica 75
Peut probablement être joué au golf plus ..
Espaces non comptés et non nécessaires.
la source
CoffeeScript: 73
Explanation: This takes advantage of the fact that if we have a number of odd length (say 1234567),
x.slice(0, y)
won't include the middle digit butx.slice(0, -y)
will. JavaScript'sslice
probably shouldn't work this way, but it does.I was expecting CoffeeScript/JavaScript to have a better way to reverse a string, but the split/reverse/join method seems to be all there is.
la source
PHP, 56 bytes
takes input from command line argument; run with
-nr
.la source
javascript 68 bytes
HUGE props to @Beldraith for the algorithm, i'm posting this as an answer though, because it took me quite the time to get it to work in a single statement.
Any tips are welcome ;)
ungolfed
la source
(n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-n
, but also a non-obvious counterexample (19) exists ;)Python, 109
la source
123456789
causes it to fail, well below the 10^15 limit posted in the question.QBIC, 38 bytes, nc
Explanation:
The code reads an input, and then applies a modifier. It then tests to see if the number + modifier is a palindrome. Then, it flips the sigh on the modifier, re-applies that and tests again.
la source
Bash, 73 bytes
Input goes to the 1st command line argument:
la source
Axiom,
720594412 bytesThe byte count it is again this, but the algo it would be O(log(n)) because it would dipend only from the digit lenght of its input (and log10(n) would be near the lenght of the decimal digits of n). ungolfed and results
la source
Husk,
16 129 bytesThanks @H.PWiz for -4 bytes!
Try it online!
Explanation
la source
APL NARS 47 chars
this above search but algo can not be fast and right as the g below...
This
is a simple loop exit only when it find b≡⌽b so b is a string palindrome
la source
Python 2,
5554 bytesTry it online!
la source
Japt, 8 bytes
Try it
la source