Achtung: Dies ist KEINE "Hey, lass uns einen Kuchen in ASCII-Kunst zeichnen" -Herausforderung! Bitte lies weiter;)
Vor einiger Zeit hatte ich Geburtstag, jetzt bin ich 33 Jahre alt.
So gibt es diese unangenehme soziale Tradition, die darin besteht, Familie und Freunde einzuladen, zahlenmäßige Kerzen auf einen Kuchen zu setzen, Lieder zu singen und Geschenke zu öffnen.
33
--------
Anstelle von Zahlen kann ich das Binärsystem verwenden, um Standardkerzen zu setzen: Ich lege 6 davon auf den Kuchen und zünde zwei davon an.
100001
--------
Ich kann sehen, dass sowohl Dezimal- als auch Binärzahlen meines Alters palindrom sind!
Herausforderung
Ich möchte wissen, ob eine andere Zahl mit Kerzen auf einen Kuchen gesetzt werden kann und palindromisch, dezimal und binär sein kann.
Schreiben Sie ein Programm / eine Funktion, um zu testen, ob eine Zahl sowohl dezimal als auch binär palindrom ist . Aber warten Sie, es gibt noch mehr: In Binärform zählen führende Nullen für den Test!
Eingang
Eine Dezimalzahl x, die ich testen möchte, ob es sich um eine Geburtstagspalindromie mit 0 <x <2 32 -1 handelt. (Ja, die Menschen in meiner Dimension leben sehr lange.)
Ausgabe
Wahrheit, wenn es genau diese beiden Bedingungen erfüllt, Falsey sonst:
- Die dezimale Darstellung der Zahl ist ein Standardpalindrom
- Die binäre Darstellung der Zahl ist ein Standardpalindrom, und das Hinzufügen von führenden Nullen kann dabei hilfreich sein
Testfälle
1 > 1 => Truthy
6 > 110 (0110) => Truthy
9 > 1001 => Truthy
10 > 1010 (01010) => Falsey, 10 is not palindromic
12 => 1100 (001100) => Falsey, 12 is not palindromic
13 => 1101 (...01101) => Falsey, neither 13 nor 1101 are palindromic
14 => 1110 (01110) => Falsey, 14 is not palindromic
33 > 100001 => Truthy
44 > 101100 (..0101100) => Falsey, 101100 is not palindromic
1342177280 > 1010000000000000000000000000000 (00000000000000000000000000001010000000000000000000000000000) => Falsey, 1342177280 is not palindromic (but the binary representation is)
297515792 > 10001101110111011101100010000 (000010001101110111011101100010000) => Truthy
Regeln
- Standardlücken sind nicht zulässig
- Integrierte Bibliothekskonvertierungen und -tests sind zulässig
- Das ist Code-Golf , der kürzeste Code-Gewinn!
Viel Glück und schließlich alles Gute zum Geburtstag!
quelle
0b01010000000000000000000000000000
ist es also nicht palindromisch, da mehr Nullen hinzugefügt werden müssten und somit 2 ^ 32-1 überschritten würden. In diesem Fall wäre es hilfreich, so etwas wie1342177280
einen Falsey-Testfall hinzuzufügen .1342177280
ist nicht dezimal palindromisch, also Falsey. BearbeitenAntworten:
05AB1E , 7 Bytes
Probieren Sie es online! oder als Test Suite
Erläuterung
quelle
Python 3 , 59 Bytes
Probieren Sie es online!
-3 Bytes dank Rod
-3 Bytes dank Connor Johnston
quelle
JavaScript (ES6), 65 Byte
Rückgabe
0
oder1
.Wie?
Die Hilfsfunktion g () nimmt eine ganze Zahl b als Eingabe und testet, ob n ein Palindrom in der Basis b ist . Wenn b nicht angegeben ist, wird n vor dem Testen in eine Zeichenfolge konvertiert .
Wir gehen in der Binärdarstellung der nachfolgenden Nullen rid n durch Isolierung des niedrigstwertigen 1 mit
n&-n
und Dividieren n durch die sich ergebende Menge.Lustige Tatsache: Es ist wahr,
0
weil(0/0).toString(2)
gleich"NaN"
, was ein Palindrom ist. (Aber0
Ist aber trotzdem keine gültige Eingabe.)Testfälle
Code-Snippet anzeigen
quelle
Mathematica,
5249 BytesProbieren Sie es auf Wolfram Sandbox
Verwendung
Erläuterung
Version mit eingebautem
PalindromeQ
quelle
Pyth - 13 Bytes
Test Suite .
quelle
_MI
und verwendenjQ2
, um 2 Bytes zu speichern:_MI,.sjQ2Z`
Japt , 14 Bytes
Online testen!
Erläuterung
quelle
sêQ *(¢w)sêQ
undsêQ &¢w n sêQ
297515792
(die umgekehrte Binärdatei, die in eine Dezimalzahl konvertiert wurde, ist für JS einfach zu groß) ...Proton , 57 Bytes
Probieren Sie es online!
quelle
APL,
2731 BytesWie funktioniert es Mit 6 als Argument ...
Versuchen Sie es auf TryAPL.org
quelle
{(⌽¨≡⊢)⍕¨⍵,⊂(⌽↓⍨~⊥~)2⊥⍣¯1⊢⍵}
(es ist eine gute Form, einen Link zum Ausführen der gesamten Testsuite bereitzustellen)Gelee , 8 Bytes
Probieren Sie es online!
quelle
ȧ
odera
stattdessen,µ
weil dies sonst immer wahr sein wird.Brachylog , 7 Bytes
Probieren Sie es online!
Das ist eine Menge von
↔
...Erläuterung
Mit der impliziten Eingabe und Ausgabe lautet der Code:
?↔?ḃc↔.↔.
quelle
APL (Dyalog Classic) , 26 Byte
Erläuterung
Probieren Sie es online!
quelle
Perl, 53 +3 (-pal) Bytes
versuche es online
quelle
Pyt , 10 Bytes
Gibt [1] zurück, wenn wahr, [0], wenn falsch
Probieren Sie es online!
Erläuterung:
quelle
Netzhaut , 72 Bytes
Probieren Sie es online! Link enthält Testfälle. Funktioniert, indem ein unäres Duplikat der ursprünglichen Nummer erstellt wird, aber
_
s verwendet wird, damit es nicht durch z11
. B. eine Eingabe von verwechselt wird . Die unäre Zahl wird dann in "binär" umgewandelt und nachfolgende Nullen entfernt. Palindrome werden dann nacheinander abgeschnitten und die letzte Stufe prüft, ob noch etwas übrig ist.quelle
Mathematica, 70 Bytes
quelle
Schale , 14 Bytes
Probieren Sie es online!
Ungolfed / Erklärung
quelle
Gaia , 10 Bytes
Probieren Sie es online!
Erläuterung
Anstatt mit führenden Nullen in der Binärdatei zu prüfen, überprüfe ich ohne die nachfolgenden Nullen.
quelle
C (gcc) , 105 Bytes
Probieren Sie es online!
quelle
return
durch ersetzenn=
. ( 95 Bytes. )C # (.NET Core) ,
130 129 179173 + 23 BytesEin paar Dinge, danke an Ed Marty, der darauf hingewiesen hat, dass ich nach so vielen Nullen suchen muss, die vor einem Palindrom gepolstert sind. Und ich muss sicherstellen, dass ich bis zu x ^ 32 -1 überprüfen kann .
Probieren Sie es online!
quelle
return
und(
für 129 Bytesusing System;
undusing System.Linq
Python 2 , 56 Bytes
Probieren Sie es online!
Verwendet die
strip
Methode von Python, um sowohlbin(..)
die führenden0b
als auch die nachfolgenden Nullen der Ausgabe der Binärzahl zu entfernen (da diese immer ein übereinstimmendes Bit haben).quelle
Pyth ,
2522191817 Bytes-
3678 Bytes durch weiteres Erlernen der SpracheErläuterung:
Ich bin mir sicher, dass man damit Golf spielen kann, daran werde ich arbeiten.
Test Suite
quelle
PHP, 69 + 1 Bytes
Laufen Sie als Pipe mit
-nR
Echoes die ursprüngliche Eingabe für Wahrheit / nichts für Falsey
Probieren Sie es online!
quelle
Oktave ,
6866 BytesProbieren Sie es online!
Erstangebot von Octave.
Wir erstellen im Grunde genommen ein Array, das die Zahl als Dezimalzeichenfolge und die Zahl als Binärzeichenfolge enthält, wobei nachstehende Nullen entfernt werden. Dann erstellen wir ein Array mit denselben Zeichenfolgen, wobei jedoch die Binär- und Dezimalzahlen gespiegelt werden. Schließlich werden beide Arrays verglichen und das Ergebnis ist entweder wahr, wenn sie übereinstimmen (beide Palindrome) oder falsch, wenn sie nicht übereinstimmen (eines oder beide nicht Palindrome).
flip
anstelle vonfliplr
.quelle
APL2 (nicht Dyalog), 36 Bytes
Zunächst sei B die 32-Bit-Darstellung von N:
Dann spiegle B und finde die Position der 1. 1:
Lassen Sie dann so viele Stellen von B weg. Dadurch bleibt die korrekte Anzahl führender Nullen erhalten.
Führen Sie dann FIND und eine OR-REDUCTION durch, um festzustellen, ob das zugeschnittene B einen eigenen Spiegel enthält.
Betrachten wir nun N, die Dezimalstelle. Der am weitesten links stehende Ausdruck konvertiert N in einen Zeichenvektor und prüft, ob er seinem eigenen Spiegel entspricht.
Schließlich verbindet ein UND die beiden Prüfungen.
In APL2 kann ich kein ordentliches Lambda herstellen, also habe ich einen Einzeiler geschrieben und den Zuweisungspfeil eingefügt. Hoffe, das betrügt nicht.
quelle
⎕
) anhängen , um es stattdessen zu einem vollständigen Programm zu machen? Können Sie auch verkürzen(N≡⌽N←⍕N)^∨/(B↓⍨1⍳⍨⌽B)⍷B←(32⍴2)⊤N←⎕
?Java 8,
105104 BytesErläuterung:
Probieren Sie es hier aus.
quelle