Hintergrund
Inspiriert von Ich bin ein Palindrom. Bist du? , wo es die schockierende Tatsache gibt, dass " ()()
kein Palindrom ist, sondern ())(
", fragte ich mich, was stattdessen ist ()()
und die Antwort ist einfach: Es ist eine Saite mit einer vertikalen Symmetrieachse!
Die Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die einen String S (oder das entsprechende Äquivalent in Ihrer Sprache) als Eingabe verwendet, auf Symmetrie entlang der vertikalen Achse prüft und dementsprechend einen Wahrheits- oder Falschwert zurückgibt . Sie können alle angemessenen Mittel verwenden , um die Eingabe zu übernehmen und die Ausgabe bereitzustellen.
Reflexionssymmetrie
Reflexionssymmetrie um eine vertikale Achse (oder Links-Rechts-Symmetrie) bedeutet, dass das reflektierte Bild der ersten Hälfte der Zeichenfolge mit der zweiten Hälfte der Zeichenfolge identisch ist, wenn Sie einen Spiegel vertikal in der exakten Mitte der Zeichenfolge platzieren.
Die folgenden Zeichenfolgen sind beispielsweise um eine vertikale Achse reflexionssymmetrisch:
()()
()()()
[A + A]
WOW ! WOW
OH-AH_wx'xw_HA-HO
(<<[[[T*T]]]>>)
(:)
)-(
())(()
qpqp
während die folgenden nicht sind:
())(
((B))
11
+-*+-
WOW ! wow
(;)
qppq
Regeln des Wettbewerbs
• Ihr Programm oder Ihre Funktion empfängt nur druckbare ASCII-Zeichen. Sie können die leere Zeichenfolge (die natürlich symmetrisch ist!) Als legale Eingabe einfügen oder nicht, was für Sie besser ist.
• Folgende ASCII-Zeichen können in Bezug auf die vertikalen Achsen als symmetrisch angesehen werden (beachten Sie den Anfangsraum und den Unterschied zwischen Groß- und Kleinbuchstaben):
!"'+*-.:=AHIMOTUVWXY^_ovwx|
Die ASCII-Zeichen, die als "gespiegelt" betrachtet werden können, und die entsprechenden Zeichen sind:
()<>[]{}qpbd/\
Beachten Sie, dass, da sie gespiegelt sind, können Sie beide haben ()
als auch )(
, /\
und \/
etc.
Alle anderen druckbaren ASCII-Zeichen müssen als asymmetrisch und ohne gespiegeltes entsprechendes Zeichen betrachtet werden.
• Dies ist eine Code-Golf- Herausforderung: Je kürzer Ihr Programm ist, gemessen in Bytes, desto besser in jeder Programmiersprache.
• Ein großes Lob an Leute, die ein symmetrisches Programm erstellen!
Hinweis : Bei dieser Frage handelt es sich nicht um ein Duplikat von "Convenient Palindrome" , bei dem nach palindromen Zeichenfolgen gesucht werden muss, bei denen Klammern gespiegelt sind. Diese Frage unterscheidet sich aus zwei Gründen:
1) Es handelt sich um eine Einschränkung der anderen Frage in Bezug auf nicht in Klammern gesetzte Zeichen, da nur symmetrische Zeichen in umgekehrter Reihenfolge auftreten können.
2) Da es auf dem Konzept der Symmetrie und nicht auf dem Konzept des "bequemen Palindroms" basiert, können gespiegelte Zeichen in beiden Reihenfolgen auftreten, dh []
und ][
, und dies unterscheidet das zu lösende Programm von Programmen, die das andere Problem lösen .
8
als "symmetrisch" angesehen?Antworten:
JavaScript (ES6),
130125113 ByteBearbeiten: 5 Bytes dank @Arnauld gespeichert. Dank @YairRand wurden weitere 11 Bytes gespeichert.
quelle
includes()
? Wie/[- !"'+*.:=AHIMO^_ovwx|T-Y]/.test(c)
.[...s].reverse().map(...)
um:s::[].map().reverse()
die neuen ES-next-Funktionen zu nutzen. linkJelly ,
6962 BytesProbieren Sie es online!
Alle Testfälle
-7 Bytes dank @JonathanAllan
Wie es funktioniert
quelle
¢FiЀ;1Ạðaµ¢yU⁼
->¢Ff@ð¢yU⁼
...}pd\”,Ṛ$Fœs©2Ff@ð®yU⁼
...}pd\”,Ṛ$F©f@ð®œs2¤yU⁼
wohl netter ist)Python 3,
211208195 Bytes13 Bytes dank Jonathan Allan gespeichert.
quelle
2*x
undrange(7)
; 3. Verwenden Sie die Multiplikation, um den>2
Test zu vermeiden . 4. Verwenden Sie bitweise nicht auflen(S)
, um dasnot
von zu vermeidennot len(S)%2
; 5. Verwenden Sie die Tatsache , dass''in'blah'
istTrue
die Zeichenfolge Multiplikation zu ermöglichen~len(S)%2*s[len(S)//2]in s
.SOGL V0.12 , 88 Bytes
Probieren Sie es hier aus!
~ 24 Bytes zum Hinzufügen von
qpbd
Spiegelung und 6 Bytes für(x-1 XOR 1) + 1
: /quelle
Kotlin 1.1,
201199 BytesVerschönert
Prüfung
Kann nicht mit TIO ausgeführt werden, da 1.1 nicht unterstützt wird
quelle
Python 2 ,
182167163162160158 BytesProbieren Sie es online!
2 Bytes dank Jonathan Allan gespeichert
Erklärung Zuerst müssen wir die Liste aller Zeichen erstellen, die keine Symmetrie haben (das Zeichen selbst:,
A
... oder ein anderes Zeichen(
für)
, ...):m("","")
Gibt eine Zeichenfolge mit allen verfügbaren Zeichen zurück.m("","").translate(None," \t!\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w))
Entfernt aus allen verfügbaren Zeichen die Zeichen, die eine Symmetrie haben.Dann ordnen wir jedes Zeichen seinem symmetrischen Zeichen zu und entfernen die Zeichen, die kein symmetrisches Zeichen haben
s.translate(m(t+w,w+t),<chars that don't have a symmetric>)
Wenn das Ergebnis der umgekehrten Zeichenfolge entspricht, haben wir eine symmetrische Zeichenfolge.
quelle
t
undw
auf die Flucht verzichten können, zw="(<]{\pb"
. Speichern Sie ein weiteres Byte mitfrom string import*;m=maketrans
(ich persönlich gehe für eine neue Zeile, wenn das;
nicht Bytes speichert). Außerdem brauchen Sie die Funktion nicht zu benennen, solange sie wiederverwendbar und nicht rekursiv ist, wodurch weitere 2f=
, aber Ihre Version ist sauberer.Perl 5 , 102 + 1 (-p) = 103 Bytes
Probieren Sie es online!
quelle
Scala , 140 Bytes
Probieren Sie es online!
quelle