Bei einer Zahl n
, schreiben Sie eine Funktion, die die kleinste Basis findet , b ≥ 2
so dass n
ein Palindrom in der Basis ist b
. Beispielsweise sollte eine Eingabe von 28
die Basis zurückgeben, 3
da die ternäre Darstellung von 28 1001 ist. Obwohl 93
sowohl in Basis 2 als auch in Basis 5 ein Palindrom vorliegt , sollte die Ausgabe 2
2 <5 sein.
Eingang
Eine positive ganze Zahl n < 2^31
.
Ausgabe
Geben Sie die kleinste Basis zurück b ≥ 2
, sodass die Basisdarstellung b
von n
ein Palindrom ist. Nehmen Sie keine führenden Nullen an.
Beispiele (Eingabe => Ausgabe):
11 => 10
32 => 7
59 => 4
111 => 6
Regeln
Der kürzeste Code gewinnt.
code-golf
palindrome
base-conversion
ntomlin1996
quelle
quelle
n
kann 1 sein und 2 ist kein Base 1 Palindrom. Jedes Positivn
ist jedoch einn + 1
Basenpalindrom.Antworten:
CJam , 19 Bytes / GolfScript, 23 Bytes
oder
Probieren Sie es online aus:
Beispiele
Wie es funktioniert
Für GolfScript
q~
ist~
,_
ist.
,b
istbase
,W
ist-1
undg
istdo
.quelle
GolfScript, 20 Zeichen
Ein anderer Ansatz mit GolfScript als mit Dennis . Es vermeidet die teure explizite Schleife für eine Entdeckung Betreiber. Versuchen Sie es online .
quelle
x = 1
oderx = 2
. Beide sind einstellige Basis-x + 1
Palindrome undx))
sollten daher behoben werden.Mathematica,
6766 BytesIch kann hier nicht wirklich mit GolfScript in Bezug auf die Codegröße mithalten, aber das Ergebnis für 2 32 wird im Grunde sofort zurückgegeben.
quelle
PalindromeQ
Japt ,
129 BytesSofern ich keinen Trick verpasst habe (es ist spät!), Sollte dies für alle Zahlen bis und mit mindestens funktionieren
2**53-1
.Bei meinen (zugegebenermaßen eingeschränkten und völlig zufälligen) Tests habe ich die bisherigen Ergebnisse auf Basis (!) Gebracht. Nicht schäbig , wenn man bedenkt JavaScript nur nativ unterstützt Basen zu .
11601
310,515
2
36
Versuch es
Erläuterung
Implizite Eingabe einer Ganzzahl
U
.Beginnen Sie mit
2
, und geben Sie die erste Zahl zurück, die true zurückgibt, wenn Sie die folgende Funktion durchlaufen. Dabei handeltX
es sich um die aktuelle ZahlIn
U
ein Array von Basisziffern konvertierenX
.Testen Sie, ob dieses Array ein Palindrom ist.
quelle
N.ì(n)
ich mit Basen besser umgehen kann als36
. Dank dafür.N.ì(n)
da wir rohe Ganzzahlen verwenden ;-)Python 2 (83)
Ich bin nicht sicher, welches Eingabe- / Ausgabeformat die Frage haben wollte. Ich habe eine Funktion geschrieben. Der Code verwendet eine optionale Eingabe
b
, um die aktuelle Basis zu verfolgen, die getestet wird. Diewhile
Schleifen wandeln die Zahl in eine Liste von Stellen in der Basis umb
.Die letzte Zeile wird zurückgegeben,
b
wennl
es sich um ein Palindrom handelt, und die nächste Zeile wird rekursiv ausprobiertb
. Der Boolesche Index-Trick funktioniert hier nicht, da dadurch beide Optionen unabhängig vom Booleschen Wert ausgewertet werden und die Rekursion niemals einen Tiefpunkt erreicht.quelle
JavaScript, 88 Bytes
Ungolfed:
quelle
Javascript, 105 Bytes
JSFiddle: http://jsfiddle.net/wR4Wf/1/
Beachten Sie, dass diese Implementierung auch für große Basen korrekt funktioniert. Beispielsweise wird
f(10014)
1668 zurückgegeben (10014 ist 66 in Basis 1668).quelle
s/var b=2,c,d/b=d=2/
6 weitere Bytes gewinnen;)Bash + Coreutils, 100 Bytes
Verwendet
dc
die Basisformatierung. Das Schwierige istdc
, dass sich das Format für n> 16 unterscheidet.Testfälle:
quelle
J - 28 Zeichen
Erklärt:
#.inv~
- Erweitern Sie das linke Argument bis zur Basis im rechten Argument.(-.@-:|.@)
- Geben Sie 0 zurück, wenn die Erweiterung palindrom ist, und 1, wenn dies nicht der Fall ist.(1+]^:)
- Erhöhen Sie das richtige Argument um eins, wenn wir 1 zurückgegeben haben, andernfalls wird keine Aktion ausgeführt.^:_
- Wiederholen Sie die obigen Schritte, bis keine Aktion mehr ausgeführt wird.&2
- Bereiten Sie das richtige Argument als 2 vor und machen Sie dies zu einer Funktion eines Arguments.Beispiele:
quelle
2+1 i.~[#.inv"*(-:|.@)~2+i.
für 27 Bytes. (Ich möchte es nicht separat veröffentlichen. Ich lasse es einfach hier.)R
12295 BytesDrei Jahre alte Lösung mit 122 Bytes:
Mit einigen Erklärungen:
quelle
Schale ,
119 BytesDanke @Zgarb für -2!
Probieren Sie es online!
Erläuterung
quelle
Hinweis: Pyth ist neuer als diese Frage, daher ist diese Antwort nicht gewinnberechtigt.
Pyth, 10 Bytes
Probieren Sie es hier aus.
quelle
Scala, 83 Bytes
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
quelle
Perl 5 , 84 + 1 (-p) = 85 Bytes
Probieren Sie es online!
quelle
JavaScript 72 Bytes
quelle
Mathematica 42 Bytes
Eine Variation von Martin Enders Beitrag. Nutzt
IntegerReverse
(in Version 10.3 verfügbar gemacht) das aufIntegerDigits
.quelle
Java 8, 103 Bytes
Erläuterung:
Probieren Sie es hier aus.
quelle