Ich kam spontan auf die Idee, eine Reihe von Herausforderungen an Benutzer zu stellen, die dazu beigetragen haben, dass die PPCG-Community für alle oder nur für mich ein angenehmer Ort ist. : P
Wenn Sie den Namen von Dennis in ein Array von 1
s und 0
s konvertieren, in dem sich jeder Konsonant 1
und jeder Vokal befindet 0
, ist das Array [1, 0, 1, 1, 0, 1]
symmetrisch. Daher besteht Ihre Herausforderung darin, festzustellen, welche anderen Namen dies sind.
Herausforderung
Entfernen Sie bei einer vorgegebenen ASCII-Zeichenfolge alle Zeichen, die keine Buchstaben sind, und stellen Sie fest, ob die Konfiguration von Vokalen und Konsonanten symmetrisch ist. y
ist kein Vokal.
Bitte beachten Sie, dass es sich bei Ihrem Programm nicht unbedingt um einen solchen String handeln muss.
Testfälle
Dennis -> truthy
Martin -> truthy
Martin Ender -> truthy
Alex -> falsy
Alex A. -> truthy
Doorknob -> falsy
Mego -> falsy
Referenzimplementierung
Dieser Python 3-Code gibt in einem Testfall die richtige Ausgabe aus. Es ist so unrühmlich, wie ich es schaffen könnte, ohne lächerlich zu sein.
Python 3
s = input()
l = []
for c in s:
if c in 'AEIOUaeiou':
l.append(0)
elif c in 'BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz':
l.append(1)
print(l == list(reversed(l)), end = '')
quelle
Antworten:
05AB1E , 9 Bytes
Probieren Sie es online!
-2 danke an Adnan .
Dies greift Jellys Schmerzpunkt genau an. Es verwendet
l
undA
1-Byte - Äquivalente für JellyŒl
undØa
jeweils.quelle
AÃ
nachá
undDR
nach ersetzenÂ
.á
, wusste nicht wasÂ
, danke!00
zuFF
jenen 256 Zeichen finden Sie in der Antwort JellyJelly , 11 Bytes
Probieren Sie es online!
Alternative Versionen:
Natürlich muss eine Herausforderung, die Dennis schätzt, eine Antwort in einer seiner Sprachen haben.
quelle
x86-32-Bit-Maschinencodefunktion,
42 bis41 ByteDerzeit die kürzeste Antwort in einer anderen Sprache als Golf, 1B kürzer als @ streetsters q / kdb + .
Mit 0 für wahr und ungleich Null für falsch:
4140 Bytes. (Speichert im Allgemeinen 1 Byte für 32-Bit, 2 Byte für 64-Bit).Mit Zeichenfolgen mit impliziter Länge (C-terminiert mit 0):
4544 Bytesx86-64-Maschinencode (mit 32-Bit-Zeigern wie dem x32-ABI):
4443 Byte .x86-64 mit Zeichenfolgen impliziter Länge, immer noch 46 Byte (die Shift / Mask-Bitmap-Strategie ist jetzt ausgeglichen).
Dies ist eine Funktion mit C-Signatur
_Bool dennis_like(size_t ecx, const char *esi)
. Die Aufrufkonvention ist etwas ungewöhnlich und liegt in der Nähe von MS Vectorcall / Fastcall, weist jedoch unterschiedliche Arg-Register auf: String in ESI und Länge in ECX. Es blockiert nur seine Argumente und EDX. AL enthält den Rückgabewert, wobei die hohen Bytes Garbage enthalten (wie in den SysV x86- und x32-ABIs zulässig). IDK, was die ABIs von MS zu High-Garbage sagen, wenn Bool oder enge Ganzzahlen zurückgegeben werden.Erklärung des Algorithmus :
Durchlaufen Sie die Eingabezeichenfolge, filtern und klassifizieren Sie sie in ein boolesches Array auf dem Stapel: Prüfen Sie für jedes Byte, ob es sich um ein alphabetisches Zeichen handelt (falls nicht, fahren Sie mit dem nächsten Zeichen fort), und wandeln Sie es in eine Ganzzahl von 0-25 (AZ) um. . Verwenden Sie diese 0-25-Ganzzahl, um eine Bitmap von Vokal = 0 / Konsonant = 1 zu überprüfen. (Die Bitmap wird als 32-Bit-Sofortkonstante in ein Register geladen.) Schieben Sie 0 oder 0xFF auf den Stapel entsprechend dem Bitmap-Ergebnis (tatsächlich im Low-Byte eines 32-Bit-Elements, das möglicherweise in den oberen 3 Bytes Müll enthält).
Die erste Schleife erzeugt ein Array von 0 oder 0xFF (in mit Garbage aufgefüllten Dword-Elementen). Führen Sie die übliche Palindromprüfung mit einer zweiten Schleife durch, die anhält, wenn sich die Zeiger in der Mitte kreuzen (oder wenn beide auf dasselbe Element zeigen, wenn eine ungerade Anzahl alphabetischer Zeichen vorhanden ist). Der sich nach oben bewegende Zeiger ist der Stapelzeiger, und wir verwenden POP zum Laden + Inkrementieren. Anstelle von compare / setcc in dieser Schleife können wir nur XOR verwenden, um dasselbe / unterschiedliches zu erkennen, da es nur zwei mögliche Werte gibt. Wir könnten (mit OR) akkumulieren, ob wir nicht passende Elemente gefunden haben, aber ein Early-Out-Zweig für Flags, die von XOR gesetzt wurden, ist mindestens genauso gut.
Beachten Sie, dass die zweite Schleife die
byte
Operandengröße verwendet , sodass es egal ist, welchen Abfall die erste Schleife außerhalb des Low-Bytes jedes Array-Elements hinterlässt.Es verwendet den undokumentierten
salc
Befehl , um AL von CF auf die gleiche Weise zu setzen, wie dies der Fallsbb al,al
wäre. Es wird von jeder Intel-CPU unterstützt (außer im 64-Bit-Modus), sogar von Knight's Landing! Agner Fog listet das Timing auch für alle AMD-CPUs (einschließlich Ryzen) auf. Wenn also x86-Anbieter darauf bestehen, dieses Byte Opcode-Speicherplatz seit 8086 zu belegen, können wir es auch nutzen.Interessante Tricks:
bt
, inspiriert von einer netten Compiler-Ausgabe fürswitch
.stosb
.cmp
/salc
ist keine Option, dasalc
nur für CF funktioniert und 0xFF-0 CF nicht festlegt. Istsete
3 Bytes, würde aber dieinc
externe Schleife vermeiden , bei einem Nettokosten von 2 Bytes (1 im 64-Bit-Modus) )) vs. xor in the loop und fixieren mit inc.Dies ist wahrscheinlich auch eine der schnellsten Antworten, da keines der Golfspiele wirklich zu weh tut, zumindest für Zeichenfolgen mit weniger als ein paar tausend Zeichen, bei denen die 4x-Speichernutzung nicht viele Cache-Fehlschläge verursacht. (Es kann auch vorkommen, dass Antworten verloren gehen, die für nicht Dennis-ähnliche Zeichenfolgen vorzeitig beendet werden, bevor alle Zeichen durchlaufen werden .) Ist
salc
langsamer alssetcc
bei vielen CPUs (z. B. 3 Uops vs. 1 bei Skylake), aber eine Bitmap-Überprüfung mitbt/salc
ist immer noch schneller als eine String-Suche oder ein Regex-Match. Und es gibt keinen Start-Overhead, daher ist es für kurze Streicher extrem billig.Dies in einem Durchgang zu tun, würde bedeuten, den Klassifizierungscode für die Aufwärts- und Abwärtsrichtung zu wiederholen. Das wäre schneller, aber größer. (Wenn Sie schnell sein wollen, können Sie mit SSE2 oder AVX2 natürlich 16 oder 32 Zeichen gleichzeitig machen, wobei Sie den Compare-Trick weiterhin anwenden, indem Sie den Bereich an den unteren Rand des vorzeichenbehafteten Bereichs verschieben.)
Testen Sie das Programm (für ia32 oder x32 Linux) , um diese Funktion mit einem cmdline-Argument aufzurufen, und beenden Sie es mit status = return value.
strlen
Implementierung von int80h.org .Eine 64-Bit-Version dieser Funktion könnte verwenden
sbb eax,eax
, die nur 2 Bytes anstelle von 3 für istsetc al
. Es würde auch ein zusätzliches Byte fürdec
odernot
am Ende benötigen (da nur 32-Bit 1-Byte-Inc / Dec-R32 hat). Mit dem x32-ABI (32-Bit-Zeiger im langen Modus) können wir REX-Präfixe immer noch vermeiden, obwohl wir Zeiger kopieren und vergleichen.setc [rdi]
kann direkt in den Speicher schreiben, aber das Reservieren von ECX-Bytes Stapelspeicher kostet mehr Code als das spart. (Und wir müssen uns durch das Ausgabearray bewegen. Benötigt[rdi+rcx]
ein zusätzliches Byte für den Adressierungsmodus, aber wirklich brauchen wir einen Zähler, der für gefilterte Zeichen nicht aktualisiert wird, also wird es schlimmer sein.)Dies ist die YASM / NASM-Quelle mit
%if
Bedingungen. Es kann mit-felf32
(32-Bit-Code) oder-felfx32
(64-Bit-Code mit dem x32-ABI) und mit impliziter oder expliziter Länge erstellt werden . Ich habe alle 4 Versionen getestet. In dieser Antwort finden Sie ein Skript zum Erstellen einer statischen Binärdatei aus einer NASM / YASM-Quelle.Um die 64-Bit-Version auf einem Computer ohne Unterstützung für das x32-ABI zu testen, können Sie die Zeigerregs in 64-Bit ändern. (Dann subtrahieren Sie einfach die Anzahl der REX.W = 1-Präfixe (0x48 Byte) von der Anzahl. In diesem Fall benötigen 4 Befehle REX-Präfixe, um mit 64-Bit-Registern zu arbeiten.) Oder rufen Sie es einfach mit dem
rsp
und dem Eingabezeiger im niedrigen 4G-Adressraum auf.Ich habe versucht, mit DF (der Richtungsfahne, die
lodsd
/scasd
und so weiter steuert ) herumzuspielen , aber es schien einfach kein Gewinn zu sein. Die üblichen ABIs erfordern, dass DF beim Funktionseintritt und -austritt gelöscht wird. Angenommen, beim Betreten gelöscht, aber beim Verlassen gesetzt, wäre Betrug, IMO. Es wäre schön, LODSD / SCASD zu verwenden, um die 3-Byte-Größe zu vermeidensub esi, 4
, insbesondere in Fällen, in denen kein hoher Müll vorhanden ist.Alternative Bitmap-Strategie (für Zeichenfolgen mit impliziter Länge von x86-64)
Es stellt sich heraus, dass dies keine Bytes spart, da es
bt r32,r32
immer noch mit hohem Müll im Bit-Index funktioniert. Es ist einfach nicht dokumentiert, wie esshr
ist.bt / sbb
Verwenden Sie eine Verschiebung / Maske, um das gewünschte Bit von der Bitmap zu isolieren, anstatt das Bit in die / aus der CF zu holen.Da dies in AL am Ende 0/1 ergibt (statt 0 / 0xFF), können wir die notwendige Invertierung des Rückgabewerts am Ende der Funktion mit
xor al, 1
(2B) stattdec eax
(auch 2B in x86-64) durchführen erzeugen immer noch einen richtigenbool
/_Bool
Rückgabewert.Dadurch wurde 1B für x86-64 mit Zeichenfolgen impliziter Länge eingespart, da die hohen Bytes von EAX nicht auf Null gesetzt werden müssen. (Früher habe ich
and eax, 0x7F ^ 0x20
den Rest von eax mit einem 3-Byte-Code in Großbuchstaben geschrieben und auf Null gesetztand r32,imm8
. Jetzt verwende ich jedoch die 2-Byte-Sofort-mit-AL-Codierung, die die meisten 8086-Befehle haben, wie ich es bereits getan habe für diesub
undcmp
.)Es verliert an
bt
/salc
in 32-Bit - Modus, und explizite Zeichenfolge der Länge benötigen ECX für die Zählung so ist dies dort entweder nicht funktionieren.Aber dann habe ich gemerkt, dass ich mich geirrt habe: arbeitet
bt edx, eax
immer noch mit Hochmüll in eax. Es scheint Masken der Verschiebung zählen die gleiche Art und Weiseshr r32, cl
nicht (nur auf der Suche bei dem niedrigen 5 Bits cl). Dies unterscheidet sich davonbt [mem], reg
, dass der Zugriff außerhalb des Speichers, auf den durch den Adressierungsmodus / die Adressierungsgröße verwiesen wird, als Bitstring behandelt werden kann. (Crazy CISC ...)Intels Insn-Set-Ref-Handbuch dokumentiert die Maskierung nicht. Daher ist es möglicherweise undokumentiertes Verhalten, das Intel derzeit beibehält. (So etwas ist nicht ungewöhnlich.
bsf dst, src
Mit src = 0 bleibt dst immer unverändert, auch wenn dokumentiert ist, dass dst in diesem Fall einen undefinierten Wert enthält. AMD dokumentiert tatsächlich das Verhalten von src = 0.) Ich habe es mit Skylake und Core2 getestet. und diebt
Version arbeitet mit nicht-Null-Müll in EAX außerhalb von AL.Ein guter Trick ist hier
xchg eax,ecx
(1 Byte), um die Zählung in CL zu bekommen. Leider ist BMI2shrx eax, edx, eax
5 Bytes , verglichen mit nur 2 Bytes fürshr eax, cl
. Für die Verwendung wirdbextr
ein 2-Byte-Wertmov ah,1
(für die Anzahl der zu extrahierenden Bits) benötigt, daher sind es wieder 5 + 2 Byte wie bei SHRX + AND.Der Quellcode ist nach dem Hinzufügen von
%if
Bedingungen ziemlich chaotisch geworden . Hier ist das Zerlegen von x32-Zeichenfolgen mit impliziter Länge (unter Verwendung der alternativen Strategie für die Bitmap, also immer noch 46 Byte).Der Hauptunterschied zur expliziten Länge liegt in der ersten Schleife. Beachten Sie, wie es ein
lods
davor und am unteren Rand gibt, anstatt nur eines am oberen Rand der Schleife.quelle
Netzhaut ,
49 4745 BytesProbieren Sie es online!
2 Bytes gespart dank Neil.
Weitere 2 Bytes dank Martin gespeichert.
Entfernt Nichtbuchstaben und ersetzt Vokale durch 1 und Konsonanten durch 2, um konsistente Werte zu erhalten. Entfernt dann wiederholt das erste und das letzte Zeichen, wenn sie gleich sind. Wenn dies nicht der Fall ist, war das Wort symmetrisch, wenn noch ein oder null Zeichen übrig sind.
quelle
\D
2
Ihnen die Arbeit ein paar BytesT`lL`2
?PHP, 82 Bytes
Probieren Sie es online!
quelle
(bool)
und entfernen , um 1 Byte zu sparen.$s=
==$s
(bool)
mit nur0||
zu sagen , falsch, oder ... stattdessen Speichern 3 weitere Bytes.\w
für Wortzeichen anstelle von verwendena-z
?\w
enthält Ziffern, Unterstriche und Buchstaben. Dies wird nicht funktionieren und[^/p{L}]
ist länger als[^a-z]
plus i. Ich vergleiche die umgekehrte Zeichenfolge mit der Zeichenfolge,$s
die zum Erstellen des Booleschen erforderlich istMATL, 14 Bytes
Probieren Sie es bei MATL Online aus .
Hier ist eine leicht modifizierte Version, um alle Testfälle zu überprüfen.
Erläuterung
quelle
Haskell,
84757469 Bytes-10 danke an @nimi
-5 danke an @Zgarb
Das Listenverständnis ersetzt jeden Buchstaben durch einen Booleschen Wert und entfernt alle anderen Zeichen. Der erste Teil prüft, ob die resultierende Liste ein Palindrom ist oder nicht.
Probieren Sie es online!
quelle
filter
folgende,map
auch wenn Sie nicht poitfrei wechseln müssen. 2) Das<$>id
ist überflüssig.f x=(==)<*>reverse$[elem c"aeiouAEIOU"|c<-x,c
elem['A'..'Z']++['a'..'z']]
.c
und"
für ein weiteres Byte löschen.c`elem`['A'..'Z']++['a'..'z']
kann auf'@'<c,c<'{','`'<c||c<'['
Pyth,
1815 BytesProbieren Sie es hier aus.
-2 dank KarlKastor und anschließend -1.
quelle
_I/L"aeiou"@Grz0
(mit dem Invarianzoperator I)z
, ich werde zitierte Eingabe übernehmen)Brachylog , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
Alice , 28 Bytes
Probieren Sie es online!
Ausgaben
1
als wahr und nichts als falsch.Erläuterung
Jeder Befehl in diesem Programm wird im Ordnungsmodus ausgeführt, jedoch mit einer leichten Drehung in der Vorlage, mit der ich ein Byte speichern kann. Wenn ein Zeilenumbruch ein akzeptabler Wahrheitswert ist, kann ich mit derselben Methode ein weiteres Byte speichern.
Linearisiert sieht das Programm wie folgt aus:
quelle
Python 3 ,
7271 Bytes-1 Byte dank @ovs
Probieren Sie es online!
quelle
def f(s):s=[c in'AEIOU'for c in s.upper()if'@'<c<'['];return s==s[::-1]
für 71 BytesJavaScript (ES6),
72 bis69 Byte3 Bytes gespart dank Neil
Gibt einen Booleschen Wert zurück.
Testfälle
Code-Snippet anzeigen
quelle
2
.+''
überhaupt zum Schluss? Das würde stattdessen 3 Bytes einsparen.Mathematica, 113 Bytes
quelle
PalindromeQ@StringReplace[#,{Characters@"aeiouAEIOU"->"1",LetterCharacter->"0",_->""}]&
GolfScript , 42 Bytes
Probieren Sie es online!
Der schwierige Teil besteht darin, sowohl das Groß- als auch das Kleinbuchstaben in einer Zeichenfolge zu generieren, die wir in einer Filterfunktion verwenden, um die Buchstaben aus der Eingabe herauszufiltern. Zum Glück, da Strings in GolfScript nur Codepoint-Arrays mit einer speziellen Eigenschaft sind, können wir die Codepoints nur auf effiziente Weise generieren. So generieren wir sie:
Zunächst erzeugen wir den Bereich [0..122], wobei 122 der Codepunkt für ist
z
. Dann nehmen wir die Elemente vom Element bei Index 65 ab. 65 ist der Codepunkt fürA
. Im Moment haben wir [65..122]. Alles in Ordnung, bis auf einige unerwünschte Codepunkte ([91..96]). Also machen wir zuerst ein Duplikat dieses Bereichs. Dann nehmen wir die Elemente ab Index 26 und haben [91..122]. Danach erhalten wir die Elemente bis einschließlich Index 5. Jetzt haben wir [91..96]. Schließlich entfernen wir diese Elemente aus unserem [65..122] und verlassen uns auf [65..90, 97..122]. Das sind die Codepunkte, die wir wollen.Nachdem wir die obere / untere Alphabet-Codepunktliste erstellt haben, setzen wir unsere Filterfunktion fort. Die Funktion wird jedem Zeichen in der Eingabezeichenfolge zugeordnet, die stattdessen, wie eingangs erwähnt, als Codepunkt analysiert wird. Also haben wir jetzt im Wesentlichen
[codepoint, [65..90, 97..122]]
. Um herauszufinden, ob charcodepoint
ein Buchstabe ist, nehmen wir einfach seinen Index in die Liste, die wir erstellt haben. Wenn es nicht da ist, werden wir-1
stattdessen als Index erhalten.Im Moment erhalten wir nur dann einen Falsey-Wert, wenn
codepoint == 65
, dh der erste Index unserer Liste, nur dann der Index 0 wäre. Dieses Problem wird jedoch durch ein einzelnes Inkrement behoben, und wenn diescodepoint
in unserer Liste enthalten ist, werden wir es tun Holen Sie sich den Index + 1, der immer eine positive Zahl ist, also immer wahrheitsgemäß. Wenn er nicht vorhanden ist, erhalten Sie -1 + 1 = 0, dh falsch.Schließlich wenden wir die von mir beschriebene Funktion auf jedes Zeichen der Eingabe an und nehmen nur die Zeichen, für die die Funktion ein wahres Ergebnis zurückgegeben hat.
Als nächstes müssen wir feststellen, ob jedes Zeichen ein Vokal oder ein Konsonant ist. Da die Vokale kleiner sind als die Konsonanten, ist das Erstellen einer Folge von Vokalen, damit wir auf diese Bedingung prüfen, kürzer als das Erstellen einer Folge von Konsonanten, sodass wir prüfen, ob jedes Zeichen ein Vokal ist. Um jedoch zu überprüfen, ob die Boolesche Liste palindrom ist, benötigen wir Boolesche Werte, die wir nicht nur durch Verwendung des Index + 1 erhalten, da dies zu einer beliebigen Anzahl von [1..10] führen kann, wenn das Zeichen ein Vokal ist. Und wie die meisten Golfsprachen hat auch diese keine
bool
Funktion. Also verwenden wir einfachnot not x
, danot
immer ein Boolescher Wert zurückgegeben wird. Aber warte; Müssen wir wirklich bestimmte Boolesche Werte haben? Danot
immer ein Boolescher Wert zurückgegeben wird, entfernen wir einfach den zweitennot
, und tatsächlich prüfen, ob jedes Zeichen ein Konsonant ist? Ja, genau das werden wir tun!Nach der Prüfung, die eine Liste von Booleschen Werten zurückgibt, prüfen wir, ob diese erhaltene Boolesche Liste ein Palindrom ist. Dazu werden wir bei dieser Herausforderung aufgefordert. Was ist die Definition eines Palindroms? Ja, ein Palindrom ist eine Liste oder Zeichenfolge, die der Umkehrung entspricht. Wie überprüfen wir das? Ganz einfach, wir duplizieren es, machen es umgekehrt und vergleichen es mit der ursprünglichen Liste. Das Ergebnis ist schließlich , was unser Code zurückgeben soll.
quelle
PHP , 87 Bytes
Regex kostenlose PHP-Version. Ein "Vokal" wurde hinzugefügt, da Stripos 0 zurückgeben können, was in PHP falsch ist.
Fehler behoben von Jörg.
Probieren Sie es online!
quelle
for(;a&$c=$argn[$p++];)ctype_alpha($c)?$s.=stripos(_aeiou,$c)?0:1:0;echo$s==strrev($s);
aber es wird das richtige Ergebnis für Zeichenfolgen, die Null enthaltenq / kdb +,
4238 BytesLösung:
Beispiel:
Erläuterung:
Bearbeitungen:
reverse
für k Äquivalent|:
quelle
CJam , 26 Bytes
Probieren Sie es online!
-1 dank Esolanging Fruit .
quelle
26,'af+
mit'{,97>
einem Byte zu speichern.Braingolf,
43 Bytes-1 Byte danke an Erik den Outgolfer
Es stellte sich heraus, dass ich die
P
ganze Zeit schon vor dieser Herausforderung war.J
Obwohl sie vor dieser Herausforderung erstellt wurden, wurden sie vor der Herausforderung nicht zum Github gezwungen und sind daher immer noch nicht konkurrierend.Erläuterung:
quelle
n
?Alex A.
?Python 2, 83 Bytes
Definiert eine Funktion, die entweder
True
oder gibtFalse
quelle
"aeiouAEIOU".__contains__
anstelle von verwendenlambda y:y.lower()in"aeiou"
.CJam , 79 Bytes
Erstbesucher! (Ich habe getan was ich konnte)
Probieren Sie es online!
quelle
Python 3 ,
928774726968 BytesProbieren Sie es online!
quelle
for c in s
s
Variable entfernen , indem Sies
in der zweiten Zeileinput().lower()
Ruby, 57 Bytes
Probieren Sie es online!
quelle
Bash , 82 Bytes
Probieren Sie es online!
Erhält den Namen als Parameter, entfernt Nicht-Buchstaben, ersetzt Vokale durch 0, Nicht-Vokale noch 0 durch 1 und vergleicht diese umgekehrt.
Könnte ein bisschen mehr Golf spielen, wenn es um die doppelte oder dreifache Substitution geht
Der Beendigungsstatus ist 0 für wahr und 1 für nein.
quelle
i=${i^^*};
Konvertierti
in neueren Bash-Versionen in Großbuchstaben. Aber ich denke, es spart dir nur eina-z
und einaeiou
, was weniger ist als die 10B, die es kostet.Japt v2.0a0,
1911 BytesProbieren Sie es online aus
Erläuterung
quelle
APL (Dyalog) ,
3433 BytesProbieren Sie es online!
Golfen im Gange.
quelle
819⌶⍨∘1
(⊢≡⌽)
PowerShell, 108 Byte
quelle
Axiom, 126 Bytes
Prüfung
quelle
Pyke, 12 Bytes
Probieren Sie es hier aus!
quelle
PowerShell, 87 Bytes
Holen Sie sich eine Kopie der Zeichenfolge, in der Vokale 0 und Konsonanten 1 sind, und vergleichen Sie diese Zeichenfolge mit einer umgekehrten Version, die mit einer Zeichenfolge verknüpft ist, wobei alle Sonderzeichen entfernt sind
Ausgabe:
quelle
Netzhaut , 47 Bytes
Probieren Sie es online!
Dies ist nur ein anderer Ansatz für Zeichen, die keine Buchstaben sind
quelle