Schreiben Sie ein Programm, das aus zwei Ganzzahlen liest, wobei jede neue Zeile beendet wird, im Folgenden "number" und "radix" genannt, und:
- Druckt jede feste Nachricht , die Sie wollen , wenn die Zahl ein Palindrom in diesem radix (zB
true
,t
,1
) - Druckt jede andere feste Nachricht , die Sie wollen , wenn die Nummer nicht ein Palindrom in diesem radix (zB
false
,f
,0
, etc.) - Diese Meldungen müssen für jeden Lauf gleich sein, es gibt jedoch keine Regeln dafür, was sie sein müssen (was auch immer für das Golfen am besten ist).
- Sie können davon ausgehen, dass die Eingabe gültig ist, zwei positive ganze Zahlen. "Anzahl" wird nicht überschreiten
2147483647
, "Radix" wird nicht überschreiten32767
. - Sie dürfen keine externen Ressourcen verwenden, aber Sie können jede mathematische Funktion verwenden, die standardmäßig in Ihrer Sprache enthalten ist.
Hinweis: Ein Radix ist nur die Basis der Zahl.
Probeläufe:
16
10
false
16
3
true
16
20
true
121
10
true
5
5
false
12346
12345
true
16781313
64
true
16781313
16
true
code-golf
decision-problem
base-conversion
palindrome
durron597
quelle
quelle
Antworten:
Doppelmerkmal J (23 Zeichen) und K (19 Zeichen)
Die beiden Sprachen sind sowohl im Allgemeinen als auch in diesem speziellen Golf sehr ähnlich. Hier ist das J:
,~1
- Hängen Sie die Nummer 1 an sich selbst an und erstellen Sie das Array1 1
.1!:1
- Lesen Sie zwei Zeichenfolgen von der Tastatur ein (1!:1
ist zu lesen und1
ist das Dateihandle / die Nummer für die Tastatureingabe).".
- Konvertieren Sie jede Zeichenfolge in eine Zahl.#.^:_1~/
-F~/ x,y
bedeutet zu findeny F x
. UnserF
ist#.^:_1
, das die Basiserweiterung durchführt.(-:|.)
- Entspricht das Argument (-:
) seiner Umkehrung (|.
)?1
für ja,0
für nein.Und hier ist das K:
0::'``
- Lesen Sie (0::
) eine Zeichenfolge für jede ('
) Zeile von der Konsole ein (`
ist das Dateihandle dafür)..:'
- Konvertieren Sie (.:
) jede ('
) Zeichenfolge in eine Zahl._vs/|
- Kehren Sie das Zahlenpaar um, so dass der Radix vor der Zahl liegt, und fügen Sie dann (/
) die Basiserweiterungsfunktion_vs
("Vektor vom Skalar") zwischen ihnen ein.a~|a:
- Weisen Sie diese resultierende Erweiterung zua
und prüfen Sie, ob siea
mit (~
) umgekehrt (|
) übereinstimmt . Wieder1
für ja,0
für nein.quelle
GolfScript, 10 Zeichen
Für GolfScript ist das einfach, wenn wir es auf einfache Weise tun. Die Ausgabe ist
0
/1
für false / true.quelle
APL (20)
Ausgänge
0
oder1
zB:Erläuterung:
⎕{
...}⎕
: zwei Zahlen lesen, an die Funktion übergeben.⍵
ist die erste Nummer und⍺
ist die zweite Nummer.⌊1+⍺⍟⍵
:floor(1+⍺ log ⍵)
, Anzahl der Stellen, die zur Darstellung⍵
in der Basis erforderlich sind⍺
.⍺/⍨
: die Basis für jede Ziffer, also⍺
repliziert durch die gerade berechnete Zahl.⍵⊤⍨
:⍵
in der angegebenen Basis darstellen (unter Verwendung von Zahlen, damit es für alle Werte von funktioniert⍺
).≡∘⌽⍨
: Überprüfen Sie, ob das Ergebnis der Umkehrung entspricht.quelle
Perl,
82777369 BytesDie Eingabenummern werden als Eingabezeilen von STDIN erwartet und das Ergebnis wird als
1
oder geschrieben0
, wobei die erstere bedeutet, dass die erste Zahl ein Palindrom in ihrer Darstellung der gegebenen Basis ist.Bearbeiten 1: Mit
$=
spart einige Bytes, da es intern in int konvertiert wird.Bearbeiten 2: Der Smartmatch-Operator
~~
vergleicht die Array-Elemente direkt, sodass die Konvertierung in eine Zeichenfolge nicht erforderlich ist.Edit 3: Optimierung durch Entfernen einer unnötigen Variablen.
65 Bytes : Wenn die leere Zeichenfolge als Ausgabe für zulässig ist
false
, können die letzten vier Bytes entfernt werden.Ungolfed Version
Der Algorithmus speichert die Ziffern der konvertierten Zahl in einem Array
@a
. Dann wird die Zeichenfolgendarstellung dieses Arrays in umgekehrter Reihenfolge mit dem Array verglichen. Leerzeichen trennen die Ziffern.quelle
$=
lassen Sieint
Schritt peitschen ... Und Frage stehen füranything you want
so nichts könnte sein, was Sie wollen ;-)$=
wird in dieser Antwort auch als Tipp auf die Frage "Tipps zum Golfen in Perl" gegeben . Die Rücksendung0
kostet 6 zusätzliche Bytes, aber ich hatte den Eindruck, dass eine feste Nachricht nicht leer sein soll.silence
Javascript 87
n
Argument ist die Zahl,b
Argument ist der Radix.quelle
Salbei, 45
Wird in der interaktiven Eingabeaufforderung ausgeführt
Druckt,
True
wenn es sich um ein Palindrom handelt, drucktFalse
andersquelle
Perl
54 5662Getestet werden:
wird geben:
Also diese Ausgabe
1
für dentrue
Fall, dass ein Palindrom gefunden wird und nichts anderes.Ungolfing:
Nota :
$_
ist der aktuelle Zeilenpuffer und zu Beginn leer.$=
ist eine reservierte Variable, die ursprünglich für den Zeilendruck verwendet wird. Dies ist ein Zeilenzähler. Diese Variable ist also eine Ganzzahl . Jede Berechnung dazu würde zu einer abgeschnittenen Ganzzahl führen, wie wenn sieint()
verwendet würde.$-
wurde zum Spaß verwendet, nur um keine traditionellen Buchstaben zu verwenden ... (etwas mehr Verschleierung) ...quelle
Mathematica
7743IntegerDigits[n,b]
repräsentiert n als eine Liste von Ziffern in Basis b. Jede Basis-b-Ziffer wird dezimal ausgedrückt.Zum Beispiel ist 16781313 kein Palindrom in Basis 17:
Es ist jedoch ein Palindrom in Basis 16:
Wenn die geordneten Paare in den obigen Beispielen eingegeben wurden,
würden zurückkehren
quelle
Integer
Haskell (80 Zeichen)
Nennen Sie es mit
pali $number $radix
. Richtig, wenn die Zahl ein Palindrom ist, falsch, wenn nicht.quelle
Ruby - 76 Zeichen
quelle
Perl 6 , 27 Bytes (22 ohne stdin / out)
Probieren Sie es online aus!
Perl6, König der lesbaren Golfplätze (Gölfe?) (Und auch einige nicht so lesbare).
Perl 6- Funktion (nicht stdin / stdout), 22 Bytes
Probieren Sie es online aus!
quelle
base
in meiner Antwort nicht verwendet habe, ist, dassbase
nur bis zur Basis 36 unterstützt wird, und die Frage fragt, ob Radixe bis zu32767
dg - 97 Bytes
Dg ausprobieren :
Erklärt:
quelle
C
140132quelle
puts(m)
Würde einfach richtig funktionieren?printf("%d",m);
wird um 8 Zeichen kürzer sein.Haskell - 59
Wenige Änderungen an Max Rieds Antwort.
quelle
Pyth , 4 Bytes
Probieren Sie es hier aus oder sehen Sie sich eine Testsuite an (dauert ca. 10-15 Sekunden).
quelle
Gleichstrom, 39 Bytes
Die Länge ist natürlich ein Palindrom (
33₁₂
).Die Zahl und der Radix sollten sich oben auf dem Stapel befinden (in der aktuellen Zahlenbasis). Die Zahl muss mindestens 0 und der Radix mindestens 2 sein. Die Ausgabe erfolgt,
t
wenn es sich um ein Palindrom handelt undf
wenn nicht. Da dies in der Herausforderung nicht angegeben ist, habe ich angenommen, dass Zahlen niemals führende Nullen haben (daher kann jede Zahl, die mit endet,0
kein Palindrom sein).Erläuterung
Als volles Programm:
quelle
LaTeX, 165 Bytes
Beispiel bei desmos.com
k
Der Radix ist ein einstellbarer EingangWenn
f(x)=0
,x
ist ein Palindrom in der Basisk
.quelle
Perl 6 , 34 Bytes
-4 Bytes dank PhilH
Probieren Sie es online aus!
quelle
05AB1E ,
43 BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
C (gcc) , 79 Bytes
Probieren Sie es online aus!
Heruntergewirtschaftet
Basierend auf der Tatsache, dass für ein Palindrom die Umkehrung der Zahl gleich der Zahl selbst sein muss.
Angenommen, Sie haben die dreistellige Nummer ABC in einer Basis. Das Multiplizieren mit der Basis führt immer zu ABC0 und das Teilen durch die Basis in AB mit C als Rest. Um die Zahl umzukehren, nehmen wir die am weitesten rechts stehende Ziffer von der ursprünglichen Zahl und fügen sie rechts in die umgekehrte Zahl ein. Um Platz für diese Ziffer zu schaffen, multiplizieren wir die Umkehrung vorher mit der Basis.
Grundsätzlich:
quelle