Jelly , 14 12 Bytes
J’ƲœṗZ⁻¦µU⁼
Probieren Sie es online!
Hintergrund
Zunächst betrachten wir die 0-basierten Indizes der Eingabezeichenfolge.
H H e H H e l e H H e l l l e H H e l l o l l e H
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Um die Zeilen des Dreiecks zu erhalten, können wir den String vor den Indizes 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 und 1 + 3 + 5 + 7 = 16 teilen . Da (n + 1) ² = n² + (2n + 1) , sind diese Summen genau die positiven, perfekten Quadrate in der Indexliste. Wenn wir den String auch vor 0 teilen , ist dies so einfach wie das Teilen vor allen auf 0 basierenden Indizes, die perfekte Quadrate sind.
Nach dem Aufteilen erhalten wir die folgenden Zeichenfolgen.
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Als nächstes ersetzen wir die leere Zeichenfolge am Anfang durch alle Zeichen in der ersten Spalte.
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Die Aufgabe beschränkt sich nun darauf, zu prüfen, ob das Umkehren aller Zeichenfolgen dasselbe Zeichenfolgenarray ergibt.
Wie es funktioniert
Zuerst J
erzeugt alle 1-basierten Indizes der Eingabezeichenfolge J
, dekrementiert sie dann mit ’
allen 0-basierte Indizes zu ergeben. Ʋ
Testet alle 0-basierten Indizes auf Rechtwinkligkeit. Für unser Beispiel von oben ergibt dies das folgende Boolesche Array.
1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Als nächstes rufen wir auf, œṗ
um die Eingabezeichenfolge zu partitionieren, z.
H H e H H e l e H H e l l l e H H e l l o l l e H
vor allen 1 ‚s (eigentlich alle truthy Elemente). In unserem Beispiel ergibt dies das folgende String-Array.
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
ist wohl der interessanteste Teil dieser Antwort. Lassen Sie uns zuerst die einfacheren analysieren Z1¦
.
¦
ist das spärlich schnell. Speziell 1
und Z
in diesem Fall werden zwei Links aus dem Stapel verbraucht . Zuerst Z
wird auf sein Argument angewendet: das String-Array von vorher. Z
ist das zip- Atom und liest das Zeichenkettenarray / 2D-Zeichenarray spaltenweise, was ergibt
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
Was früher links von der Eingabezeichenfolge und der ersten Spalte des Zeichenfolgenarrays war, wird jetzt zur ersten Zeichenfolge .
Nun ¦
guckt auf 1
und findet einen einzigen Index: 1 . Daher wird die erste Zeichenfolge im ursprünglichen Zeichenfolgenarray durch die erste Zeichenfolge im Rückgabewert von ersetzt Z
. Zeichenfolgen bei anderen Indizes bleiben unberührt.
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Lassen Sie uns dieses Array nennen A .
Wir haben Z⁻¦
stattdessen verwendet Z1¦
, aber das macht keinen Unterschied: ⁻
Vergleicht das Zeichenfolgenarray mit der Eingabezeichenfolge auf Ungleichheit und ergibt 1, da sie nicht gleich sind. Der Unterschied zwischen den beiden ist, dass Z⁻¦
es dyadisch ⁻
ist, weil es uns erlaubt zu schreiben œṗZ⁻¦
anstatt œṗ¹Z1¦
. Dies liegt daran, dass eine Dyade ( œṗ
) gefolgt von einer Monade ( œṗ¹Z1¦
) eine Verzweigung ist (die Monade wird auf das Argument / die Eingabezeichenfolge der Kette angewendet und der zurückgegebene Wert wird als das richtige Argument an übergeben œṗ
), während eine Dyade von einer anderen Dyade gefolgt wird (oder am Ende der Kette) ist ein Haken , dh sein rechtes Argument ist das Argument der Kette.
Sie müssen nur noch auf Palindromie prüfen. µ
beginnt eine neue (monadische) Kette, deren Argument A ist . Das Upend- Atom U
kehrt alle Strings in A um (aber nicht A selbst) und ⁼
vergleicht dann das Ergebnis mit A, um die Gleichheit zu gewährleisten . Der zurückgegebene Boolesche Wert 1 gibt ein vollständig palindromisches Dreieck an. andere Zeichenfolgen würden 0 zurückgeben .
Japt ,
252117 Bytes2 Bytes dank @obarakon gespeichert
Online testen!
Wie es funktioniert
Beachten Sie, dass wir nicht beide Seiten überprüfen müssen . Wenn die Seiten nicht gleich sind, ist mindestens eine der Reihen kein Palindrom.
quelle
05AB1E , 18 Bytes
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
gÅÉ£ÐíQs€¬āÈÏJÂQ*
gÅÉ£
du schlauer Fuchs ... Ich unterschätze dieselist-commands.py
Jelly ,
1816 BytesProbieren Sie es online!
Vielen Dank an Jonathan Allan für die nicht so offensichtlichen -2-Byte-Einsparungen.
quelle
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
½
überhaupt? JetztJ
macht es mehr Sinn ...JavaScript (ES6), 112 Byte
t
undu
sammle die Seiten, damit sie am Ende getestet werden können.quelle
C # 184 Bytes
Dachte, die Lösung sah gut aus, bis ich zum Palindrom-Teil kam
Ungolfed-Version:
quelle
e=..
in die for-Schleifenzeile wechseln , um ein Byte zu speichern? Es ist nicht notwendig, die Zeilenumbrüche in die Byteanzahl zu zählen, also gehe ich davon aus, dass Sie es nicht sind.....; i < s;e = f.Substring(s - k)){c+=....
Java 8,
358301 BytesInput ist a
String
, Output ist aboolean
.Erläuterung:
Probieren Sie es hier aus.
quelle
Jelly ,
2021 Bytes+2 Bytes - Ich habe Buggy-Code veröffentlicht :(
-1 Bytes - Vom Formen wie ungerade Ganzzahlen zur Partitionierung bei quadratischen Indizes übergegangen
Ein monadischer Link, der eine Liste von Zeichen akzeptiert und
1
(Truthy) oder0
(Falsey) zurückgibt .Hinweis: Hierbei wird der Teil der Spezifikation verwendet, der die Eingabe auf eine quadratische Länge beschränkt.
Probieren Sie es online! oder sehen Sie sich die Testsuite an .
Dies kann vereinfacht werden 17 Bytes indem bemerkt wird, dass, wenn alle Zeilen Palindrome sind, nur eine "Seite" überprüft werden muss (
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
), jedoch hat Erik der Outgolfer diese Tatsache bereits bemerkt und sie in ihrer Antwort verwendet, sodass ich ihnen die Dreieck-Konstruktionsmethode zum Speichern gegeben habe ein Byte dort.Darüber hinaus kann dies wiederum auf 16 Bytes verbessert werden, indem festgestellt wird, dass es der Partitionierung bei Wahrheitsindizes nichts ausmacht, wenn das linke Argument (
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
) einen Überschuss enthält .Wie?
quelle
Mathematica, 156 Bytes
Eingang
quelle
If[<stuff>, True, False]
mit nur ersetzen<stuff>
? Und ich denke,And@@(...)
ist kürzer alsCount[...,True]==s
, was auch bedeutet, dass Sie nichts
als Variable definieren müssen ."1202"
und"160625052"
) erhalte ich False Positives .PHP , 97 Bytes
Probieren Sie es online!
quelle
Java, 136 Bytes
Verwendet a
MutableList<Character>
aus Eclipse-Sammlungenquelle
Perl 5 , 81 + 1 (
-p
) = 82 BytesProbieren Sie es online!
Ausgaben
undef
(dh leer, null) für wahr, eine beliebige Zahl für falschquelle
Excel VBA, 87 Bytes
Anonyme VBE-Direktfensterfunktion, die Eingaben von der Zelle
[A1]
und Ausgaben in das VBE-Direktfenster übernimmtquelle
Python 2 ,
128118115 BytesProbieren Sie es online!
quelle