J’ƲœṗZ⁻¦µU⁼
Wypróbuj online!
tło
Zaczynamy od spojrzenia na indeksy ciągu wejściowego oparte na 0.
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
Aby uzyskać rzędy trójkąta, możemy podzielić ciąg przed wskaźnikami 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 i 1 + 3 + 5 + 7 = 16 . Ponieważ (n + 1) ² = n² + (2n + 1) , sumy te są dokładnie dodatnimi, idealnymi kwadratami na liście indeksów. Jeśli podzielimy również ciąg przed 0 , jest to tak proste, jak podzielenie przed wszystkimi indeksami opartymi na 0, które są idealnymi kwadratami.
Po podzieleniu otrzymujemy następujące ciągi.
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Następnie zastępujemy pusty ciąg na początku wszystkimi znakami w pierwszej kolumnie.
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Zadanie sprowadza się teraz do sprawdzenia, czy odwrócenie wszystkich łańcuchów daje tę samą tablicę łańcuchów.
Jak to działa
Najpierw J
generuje wszystkie indeksy 1 ciągu wejściowego J
, a następnie zmniejsza je, ’
aby uzyskać wszystkie indeksy 0. Ʋ
testuje wszystkie indeksy oparte na 0 na kwadratowość. W naszym przykładzie z góry daje to następującą tablicę boolowską.
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
Następnie wywołujemy œṗ
partycję ciągu wejściowego, np.
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
przed wszystkimi 1 (właściwie wszystkie prawdziwe elementy). W naszym przykładzie daje to następującą tablicę ciągów.
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
jest prawdopodobnie najciekawszą częścią tej odpowiedzi. Przeanalizujmy Z1¦
najpierw bardziej proste .
¦
jest rzadki szybki. Zużywa dwa łącza ze stosu, konkretnie 1
iw Z
tym przypadku. Pierwszy Z
jest stosowany do jego argumentu: tablicy ciągów z wcześniej. Z
jest atomem zip i odczytuje tablicę ciągów / tablicę znaków 2D według kolumn, dając
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
To, co kiedyś było lewą stroną ciągu wejściowego i pierwszą kolumną tablicy ciągów, staje się teraz pierwszym ciągiem .
Teraz ¦
zagląda 1
i znajduje pojedynczy indeks: 1 . Zatem pierwszy ciąg w oryginalnej tablicy ciągów jest zastępowany pierwszym ciągiem w wartości zwracanej przez Z
; ciągi przy innych indeksach pozostają niezmienione.
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Nazwijmy to tablica .
Użyliśmy Z⁻¦
zamiast Z1¦
, ale to nie robi różnicy: ⁻
porównuje tablicę ciągów z wejściowym ciągiem pod kątem nierówności, dając 1, ponieważ nie są one równe. Różnica między nimi polega na tym, że Z⁻¦
jest diademowa, ponieważ ⁻
pozwala nam pisać œṗZ⁻¦
zamiast œṗ¹Z1¦
. Wynika to z tego, że dyad ( œṗ
), po której następuje monada ( œṗ¹Z1¦
), jest rozwidleniem (monada jest stosowana do argumentu łańcucha / ciągu wejściowego, a zwracana wartość jest przekazywana jako właściwy argument œṗ
), podczas gdy za nią znajduje się inna diada (lub na końcu łańcucha) jest hakiem , tzn. jego prawy argument jest argumentem łańcucha.
Pozostało tylko sprawdzić palindromiczność. µ
rozpoczyna nowy łańcuch (jednowartościowy) kto jest argumentem jest . Odwracania atom cofa wszystkie ciągi w A (lecz nie sobie), a następnie porównuje wynik z A do równości. Zwrócony Boolean 1 wskazuje na w pełni palindromiczny trójkąt; inne ciągi zwracałyby 0 .U
⁼
Japt ,
252117 bajtówZaoszczędzono 2 bajty dzięki @obarakon
Przetestuj online!
Jak to działa
Pamiętaj, że nie musimy sprawdzać obu stron; jeśli boki nie są takie same, co najmniej jeden z rzędów nie jest palindromem.
źródło
05AB1E , 18 bajtów
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
gÅÉ£ÐíQs€¬āÈÏJÂQ*
gÅÉ£
ty chytry lisa ... Nie doceniam tychlist-commands.py
Galaretka ,
18 lat16 bajtówWypróbuj online!
Podziękowania dla Jonathana Allana za trywialne, ale nie tak oczywiste oszczędności w postaci 2 bajtów.
źródło
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
½
? TerazJ
ma to większy sens ...JavaScript (ES6), 112 bajtów
t
iu
zbierz boki, aby można je było przetestować na końcu.źródło
C #, 184 bajty
Myślałem, że rozwiązanie wygląda dobrze, dopóki nie dotarłem do części palindromowej
Wersja bez golfa:
źródło
e=..
do linii pętli for, aby zapisać bajt? Nie ma potrzeby liczenia nowych wierszy w liczbie bajtów, więc zakładam, że nie.....; i < s;e = f.Substring(s - k)){c+=....
Java 8,
358301 bajtówDane wejściowe to a
String
, dane wyjściowe toboolean
.Wyjaśnienie:
Wypróbuj tutaj.
źródło
Galaretka ,
2021 bajtów+2 bajty - wypuściłem błędny kod :(
-1 bajt - przeniesiono z formowania jak nieparzyste liczby całkowite do partycjonowania według kwadratowych indeksów
Monadyczny link akceptujący listę znaków i zwracający
1
(Prawda) lub0
(Falsey).Uwaga: wykorzystuje część specyfikacji, która ogranicza dane wejściowe do długości kwadratu.
Wypróbuj online!lub zobacz pakiet testowy .
Można to uprościć do 17 bajtów , zauważając, że jeśli wszystkie wiersze są palindromami, tylko jedna „strona” wymaga sprawdzenia (
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
), jednak Erik Outgolfer już zauważył ten fakt i wykorzystał go w swojej odpowiedzi więc im metodę budowy trójkąta bajt tam.Dodatkowo można to z kolei poprawić 16 bajtów , zauważając, że partycjonowanie według prawdziwych indeksów nie ma znaczenia, jeśli w lewym argumencie występuje nadmiar (
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
).W jaki sposób?
źródło
Mathematica, 156 bajtów
Wejście
źródło
If[<stuff>, True, False]
tylko<stuff>
? I myślę, żeAnd@@(...)
jest krótszy niżCount[...,True]==s
, co oznacza również, że nie musisz definiowaćs
jako zmiennej."1202"
i"160625052"
).PHP , 97 bajtów
Wypróbuj online!
źródło
Java, 136 bajtów
Korzysta
MutableList<Character>
z kolekcji Eclipseźródło
Perl 5 , 81 + 1 (
-p
) = 82 bajtyWypróbuj online!
Dane wyjściowe
undef
(puste, puste) dla wartości true, dowolna liczba dla falseźródło
Excel VBA, 87 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z komórki
[A1]
i dane wyjściowe do bezpośredniego okna VBEźródło
Python 2 ,
128118115 bajtówWypróbuj online!
źródło