Herausforderung
Inspiriert von diesem Video
Wie Sie vielleicht wissen, ist ein Palindrom ein Wort, das vorwärts und rückwärts geschrieben ist. Das Wort "PULP" ist kein Palindrom, aber wenn es in Morsecode übersetzt wird (wobei der Abstand zwischen den Buchstaben entfernt wird), wird "PULP" zu ". Das ist ein Palindrom. Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die eine Zeichenfolge akzeptiert und zurückgibt, ob dieses Wort ein Palindrom im internationalen Morsecode ist.
A: .-
B: -...
C: -.-.
D: -..
E: .
F: ..-.
G: --.
H: ....
I: ..
J: .---
K: -.-
L: .-..
M: --
N: -.
O: ---
P: .--.
Q: --.-
R: .-.
S: ...
T: -
U: ..-
V: ...-
W: .--
X: -..-
Y: -.--
Z: --..
Regeln
Eingang
Die Eingabe kann in jedem vernünftigen Format erfolgen. Die Eingabezeichenfolge enthält in jedem Fall nur Buchstaben, die Sie bevorzugen. Die Zeichenfolge enthält keine Leerzeichen, Zahlen oder Satzzeichen.
Ausgabe
Ihr Programm sollte 1 von 2 konstanten und unterschiedlichen Ergebnissen ausgeben, je nachdem, ob es sich bei der Eingabe um ein Palindrom handelt, z. B. True / False, 1/0, HOTDOG / NOTHOTDOG
Wertung
Dies ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes. Standardlücken sind verboten.
Testfälle
Eingabe => Ausgabe
"PULP" => True
"RESEARCHER" => True
"HOTDOGS" => True
"" => True
"A" => False
"RACECAR" => False
"PROGRAMMING"=> False
"PUZZLES" => False
quelle
Antworten:
Gelee , 28 Bytes
Probieren Sie es online!
Ich habe diese Antwort mit einem Blick auf eine dieser Zeilen geschrieben (lesen Sie die Zeilen von rechts nach links, und Sie erhalten meine magische Zeichenfolge!):
quelle
73,540,211,105,102,870,315,464,559,332nd
... was ?! Wie haben Sie diese Nummer gefunden? Auch wie dauert das nicht ewig zu laufen?00ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Jelly verfügt über integrierte Funktionen, um eine Permutation in eine solche Zahl und eine solche Zahl wieder in eine Permutation umzuwandeln. Siehe Fakultätszahlenbasis auf Wikipedia.00ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jelly ,
35 32 2725 Bytes-2 dank Dennis (Verschieben Sie die Permutation zu vermeiden
%32
)Nimmt die Eingabe in Großbuchstaben vor; Ausgabe ist
1
für wahr,0
für falsch.Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
Wie?
Vorherige 35-Byte-Lösung (Eingabe auch in Großbuchstaben) ...
quelle
Dyalog APL , 24 Bytes
Probieren Sie es online!
dfns
hört nie auf zu überraschenquelle
MBASIC , 325 Bytes
Erster Versuch, bevor die großen Kanonen hier ankommen :-)
Ausgabe
quelle
JavaScript (Node.js) , 111 Byte
Probieren Sie es online!
quelle
Perl 6 , 87 Bytes
Probieren Sie es online!
Wandelt das Wort in eine Reihe von Einsen und Nullen um und überprüft, ob es palindrom ist.
Erläuterung:
quelle
Python 3 ,
172148104 BytesErster Code Golf überhaupt. Bitte seien Sie nett und bieten Sie Hilfe an :)
Dies basiert auf der C # -Antwort: /codegolf//a/175126/83877 . Ich habe die gleichen Ideen auf Python 3 angewendet. Ich habe mein Bestes gegeben, um den Code zu testen, aber ich bin mir sicher, dass ich noch viel mehr tun kann.
EDIT 1: Vielen Dank an @Stephen und @Cowabunghole, dass sie mir geholfen haben, Leerzeichen und unnötigen Code zu entfernen.
EDIT 2: Danke @JoKing für den Vorschlag, es in binärer Form zu tun. Dies ist ein wirklich netter Trick, bei dem '-' und '.' sind nicht einmal notwendig. Dies führte zu einer enormen Byteverringerung.
Lösung
Probieren Sie es online!
quelle
while i > 0:
umwhile i>0:
2 Bytes zu speichern. Ich könnte mich auch irren, aber ich denke, Sie können alles> 0
aufheben und einfach nutzenwhile i:
. Zweitens kann sich die Anweisung in der while-Schleife in derselben Zeile wie die while-Anweisung befinden, wodurch die neue Zeile und der Einzug gespeichert werden. Letztendlich ist dies überall ein schrecklicher Ratschlag, außer beim Code-Golfen. Wenn Sie jedoch Python 2 anstelle von Python 3 verwenden, können Sie 1 Byte von der Verwendung/
anstelle der//
Teilung einsparen .~-i
anstelle von verwendeni-1
. Dies ist die gleiche Anzahl von Bytes, aber Sie können dann die Klammern weglassen, wodurch 2 Bytes eingespart werden.-
und zu verwenden.
. 105 BytesPyth,
3533 BytesDer Code enthält nicht druckbare Zeichen. Hier ist also ein Hexdump.
Probieren Sie es online aus. Testsuite.
Erläuterung
Ab
."
dem Ende des Codes wird das Morse-Alphabet mit Punkten als\x08
und Bindestrichen als\x07
und durch Tabulatoren getrennt generiert .c
teilt die Zeichenfolge durch die Tabulatoren.XzG
übersetzt (X
) die Eingabe (z
) aus dem Alphabet (G
) in dieses "Morse-Alphabet".s
fasst die Morsezeichen zusammen. Für leere Eingaben wird 0 zurückgegeben, dies ist jedoch kein Problem._I
prüft, ob sich das ErgebnisI
bei Umkehrung (_
) nicht ändert ( ). Prüft bei leerer Eingabe, ob sich 0 beim Negieren nicht ändert.quelle
Retina 0,8,2 , 87 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Alle Morsecodes für die Buchstaben in diesem Satz enden mit
.
.Alle Morsecodes für die Buchstaben in diesem Satz enden mit
-
.Ersetzen Sie jeden Buchstaben durch den Buchstaben, dessen Morsecode das Präfix dieses Buchstabens ist (hier
E
undT
werden einfach über das Unescaped gelöscht_
, aber normalerweise würden sie in Leerzeichen umgewandelt). Zum BeispielP
steht der Morse-Code fürW
mit einem Extra.
am Ende; Wir haben das.
oben Gesagte hinzugefügt , und jetzt müssen wir nur noch das dekodierenW
.Wiederholen Sie die obigen Schritte, bis keine Buchstaben mehr vorhanden sind.
Wenn das erste und das letzte Zeichen identisch sind, löschen Sie beide.
Wiederholen Sie diesen Vorgang für so viele übereinstimmende Zeichen.
Wenn dies ein Palindrom war, ist höchstens noch ein Zeichen übrig.
quelle
Wolfram Language (Mathematica) , 107 Bytes
Probieren Sie es online!
Ähnlich wie bei dieser Gelee-Antwort: Wir betrachten Morse-Code als binär und schreiben einen String auf,
" ETIANMSURWDKGOHVF L PJBXCYZQ"
in dem die Position eines Zeichens in binär den Morse-Code angibt. Aber mit einer zusätzlichen 1 voran, weil wir unterscheiden wollenS = 000
undH = 0000
zum Beispiel. Dann wird##2&@@@
gleichzeitig diese führende 1 beseitigt und abgeflacht.quelle
05AB1E , 37 Bytes
Probieren Sie es online!
Kodiert das Alphabet in Basis 3, konvertiert in Basis 255:
Basis 255:
Im Grunde zerlege ich es auf den Nullen, konstruiere die Zeichenfolge nach Position und überprüfe auf Palindrom.
quelle
C # (.NET Core) , 191 Byte
Probieren Sie es online!
Ein Teil dieser Antwort wurde von Nick Larsen Morsecode Golf angepasst . Basierend auf den Kommentaren zu der Antwort könnte dies möglicherweise weiter verbessert werden.
Ungolfed:
quelle
PowerShell ,
204.187ByteProbieren Sie es online!
Fehler auf Null-Zeichenfolge ... Kann jemand dabei helfen?
Testcode (Nachdem der Code in einen Skriptblock eingeschlossen und der Variablen $ Z zugewiesen wurde ...):
Ausgabe:
quelle