Bei einer gegebenen Zahl N wird X ausgegeben / zurückgegeben, so dass N + X ein Palindrom ist, wobei | X | muss so klein wie möglich sein.
Palindrom: Eine Zahl ist ein Palindrom, wenn die Ziffernfolge beim Lesen von links nach rechts gleich ist wie beim Lesen von rechts nach links.
95359
und 6548456
sind symmetrisch 123
und 2424
nicht. Zahlen mit führenden Nullen wie 020
sind kein Palindrom.
Die Eingabe ist eine positive Ganzzahl kleiner als 10 15 . Lies es aus stdin, als Methodenparameter, was auch immer.
Die Ausgabe muss eine Ganzzahl (positiv oder negativ) sein und sollte 0 sein, wenn die Eingabe bereits ein Palindrom ist. Sie können Ihre Ausgabe auf stdout schreiben, von einer Funktion zurückgeben oder was auch immer Sie möchten. Wenn 2 Zahlen (z. B. 2
und -2
) vorhanden sind, die die Anforderungen erfüllen, geben Sie nur eine davon aus.
Beispiele:
Input Output
3 0
234 -2
1299931 -10
126 5 or -5 (only one of them)
quelle
N=10
die Ausgabe kannX=-1
oderX=1
?Antworten:
Pyth ,
2620Aktualisiert, um den neuen Regeln zu entsprechen.
Das Programm läuft in einer Endlosschleife, die jedes mögliche Inkrement testet, in der Reihenfolge 0, -1, 1, -2, -2 ...
Erläuterung:
Beispiellauf:
Dies dauerte 23 Sekunden.
Bonuslösung, gleiche Zeichenanzahl:
quelle
[0, 1, -1, 2, -2, ...]
ein Update durchzuschleifenZ=-Z+(Z<0)
?Ruby,
11184 BytesNimmt die Zahl als einziges Befehlszeilenargument.
quelle
CJam,
342925 BytesProbieren Sie es online aus.
Beispiele
Wie es funktioniert
quelle
Haskell - 62
Speichern Sie es in einer Datei mit dem Namen
golf.hs
und testen Sie es dann mit ghci:quelle
x<-[0..]>>=(\v->[n+v,n-v])
? Es ist kürzer und macht es zu einemPython 2.7,
98, 81Erstellt ein Palindrom aus der Eingangsnummer und subtrahiert dieses dann von der Eingabe, um das Delta zu finden.
Verwendung:
ungolfed und kommentiert:
quelle
f(19) = -8
(Palindrom11
), wo es sein soll+3
zu machen22
.Perl 5,
93898887756344Ungolfed:
Dank Dennis 'Vorschlägen auf 43 +
-p
= 44 gesunkenquelle
-$a
ist kürzer als$a*-1
. 2. Wenn Sie verwenden($a<1)
, ist dies nicht erforderlich? :$a++
. 3. Wenn Sie den-p
Schalter verwenden$_=<>
undprint$_
implizit sind, können Sie die erste Anweisung löschen und die letzte in ändern$_=$a+0
.-p
Switch als ein zusätzliches Byte zu zählen, aber Sie können ihn zurückholen, indem Sie($a<1)-$a
anstelle von verwenden-$a+($a<1)
.while
$/
anstelle von verwenden$a
, wird es funktionieren.05AB1E ,
1514 Bytes (-1 Dank an Emigna)Probieren Sie es online!
Methode:
quelle
2äн
anstelle von verwendeng;î£
.Java:
127109Grundlegende Iteration, die sowohl das Negative als auch das Positive überprüft, bevor zum nächsten Kandidaten übergegangen wird.
Bei der Eingabe
123456789012345
kehrt es-1358024
zum gleichen Palindrom zurück123456787654321
.Zeilenumbrüche:
quelle
n+i+""
und rettet die Klammern? Ich denke, dass der Vorrang richtig sein sollte.toString()
. Danke :)i=i<1?-i+1:-i
? Ich werde es "Unverschämtheit" nennen.Clojure, 92
Nimmt die erste aus einer Lazy-For-Sequenz, die von 0 bis 0 arbeitet und nur Werte enthält, die Palindrome erzeugen:
REPL-LPER-Sitzung:
quelle
JavaScript,
175136117Einfach.
p
Gibt true zurück, wenn eine bestimmte Zahl ein Palindrom ist, undf
sucht die nächstgelegene.EDIT: Ich habe es auch ein bisschen mehr golfen, dank des süßen "Indecrement" -Tricks von Geobits in der Java-Antwort hier.
Verwendung:
quelle
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
undreturn
sind schrecklich lange reservierte Worte ...s=>{for(i=0;[...s+i+""].reverse().join``!=s+i;i=i<0?-i:~i);return i}
. Stack-Overflow anfällig 61f=(s,i=0)=>[...s+i+""].reverse().join``==s+i?i:f(s,i<0?-i:~i)
J - 49 Zeichen
Eine Funktion, die Ganzzahlen Ganzzahlen zuordnet.
Hier ist, wie Sie dieses Ergebnis in drei Teilen erreichen können. Dies ist die Anzeige des J REPL: Eingezogene Zeilen sind Benutzereingaben und ausgezogene sind REPL-Ausgaben. Und ja, J schreibt das negative Vorzeichen mit einem Unterstrich
_
.Beispiele:
Sie können auch die Golf machen die positive Lösung über die negativen bevorzugen , wenn sie gleich sind, durch eine Änderung
_1 1
zu1 _1
.quelle
Javascript 86
Dies ist meine erste Codegolf-Herausforderung. Hoffe, diese Lösung ist akzeptabel.
ungolfed:
n => { s = (n + '').split(''); for (i = 0, j = s.length - 1; i < j; i++,j--) s[j] = s[i]; return s.join('') - n }
Erläuterung: DieEingabe n wird in String konvertiert und aufgeteilt.
Iterieren Sie über beide Seiten des resultierenden Arrays und kopieren Sie die Ziffer von s [i] nach s [j], bis i <j ist. Dies führt zu unserem gewünschten Palindrom.
Füge das Array wieder zusammen und subtrahiere n, um x zu erhalten
quelle
s=(n+'').split('')
zus=[...(n+'')]
. 5 Bytes zu rasierenf(19)=3
Weil 22 am nächsten palindrom ist, gibt die Funktion -8 zurück, um 19 in 11 umzuwandeln. Übrigens funktioniert[...n+'']
das auch für zusätzliche -2 BytesJavaScript (ES6), 84 Byte
Meine erste Golf Challenge! Ich weiß, dass die kürzere und elegantere Lösung bereits von @Brian H. gepostet wurde, aber dies ist ein anderer Ansatz.
Code testen
Code-Snippet anzeigen
quelle
Brachylog , 8 Bytes
Probieren Sie es online!
Das Label-Prädikat
≜
ist hier von entscheidender Bedeutung, da es in der Ausgabe verwendet wird, bevor irgendetwas anderes passiert (obwohl es in der Liste, die die Eingabe und die Ausgabe enthält, tatsächlich aufgerufen wird), und sein absoluter Wert minimiert wird, weil es nicht auf der Grundlage von smarter vorgeht Einschränkungen Das Programm errät jede Ganzzahl ab 0, bis es eine findet, die funktioniert. Wenn dies≜
weggelassen wird, wird dem Programm klar, dass 0 ein sehr schönes Palindrom ist, und es wird immer das Negative der Eingabe ausgegeben.quelle
Groovy -
131111107 ZeichenGolf gespielt:
Probeläufe:
Ungolfed:
quelle
Python 2 - 76
Ruft die Eingabenummer ab und generiert eine Liste der Unterschiede zwischen der Eingabe und jeder Zahl zwischen
0
und2*i
nur dann, wenn die Zahl palindrom ist.Anschließend wird die Liste nach dem absoluten Wert sortiert und das erste Element gedruckt.
quelle
min
ein Schlüsselwortargument verwenden, anstatt zu sortieren.C ++ 289
Funktion P prüft nach
<algorithm>
Methode auf Palindrome .Ungolfed:
quelle
Mathematica 75
Wahrscheinlich kann mehr golfen werden ..
Leerzeichen werden nicht gezählt und nicht benötigt.
quelle
CoffeeScript: 73
Erläuterung: Dies nutzt die Tatsache aus, dass bei einer ungeraden Länge (z. B. 1234567)
x.slice(0, y)
die mittlere Ziffer nicht enthalten ist, dies jedoch der Fallx.slice(0, -y)
ist. JavaScript sollteslice
wahrscheinlich nicht so funktionieren, aber es funktioniert.Ich hatte erwartet, dass CoffeeScript / JavaScript eine bessere Möglichkeit bietet, einen String umzukehren, aber die Methode split / reverse / join scheint alles zu sein, was es gibt.
quelle
PHP, 56 Bytes
Nimmt Eingaben vom Kommandozeilenargument entgegen; renn mit
-nr
.quelle
Javascript 68 Bytes
RIESIGE Requisiten an @Beldraith für den Algorithmus, ich poste dies jedoch als Antwort, weil ich ziemlich viel Zeit gebraucht habe, um es in einer einzigen Anweisung zum Laufen zu bringen.
Irgendwelche Tipps sind willkommen;)
ungolfed
quelle
(n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-n
aber es gibt auch ein nicht offensichtliches Gegenbeispiel (19);)Python, 109
quelle
123456789
führt dazu, dass der Fehler deutlich unter dem in der Frage angegebenen Grenzwert von 10-15 liegt.QBIC , 38 Bytes, nc
Erläuterung:
Der Code liest eine Eingabe und wendet dann einen Modifikator an. Anschließend wird geprüft, ob der Modifikator number + ein Palindrom ist. Dann wird der Seufzer auf den Modifikator geworfen, erneut angewendet und erneut getestet.
quelle
Bash, 73 Bytes
Die Eingabe erfolgt in das erste Befehlszeilenargument:
quelle
Axiom,
720594412 BytesDie Byteanzahl ist es wieder, aber das Algo wäre es O (log (n)), weil es nur von der Ziffernlänge seiner Eingabe abhängt (und log10 (n) wäre nahe der Länge der Dezimalstellen von n ). ungolfed und ergebnisse
quelle
Schale ,
16 129 BytesDanke @ H.PWiz für -4 Bytes!
Probieren Sie es online!
Erläuterung
quelle
APL NARS 47 Zeichen
diese obige suche kann aber algo nicht schnell und richtig sein wie die g unten ...
Dies
ist nur dann ein einfacher Loop-Exit, wenn b≡⌽b gefunden wird, also b ein String-Palindrom ist
quelle
Python 2 ,
5554 BytesProbieren Sie es online!
quelle
Japt , 8 Bytes
Versuch es
quelle