Palindrom to słowo, które jest jego własną odwrotnością.
Teraz są słowa, które mogą wyglądać jak palindromy, ale nie są. Na przykład rozważ słowo sheesh
, sheesh
nie jest palindromem, ponieważ jego odwrotność jest hseehs
inna, jednak jeśli uważamy, że sh
jest to jedna litera, to odwrotnie sheesh
. Tego rodzaju słowo nazwiemy półpalindromem.
W szczególności słowo jest pół-palindromem, jeśli możemy podzielić je na pewną liczbę fragmentów, tak że gdy kolejność fragmentów zostanie odwrócona, powstanie oryginalne słowo. (Dla sheesh
tych fragmentów są sh e e sh
) Będziemy również wymagać, aby żaden fragment nie zawierał liter z obu połówek słowa (w przeciwnym razie każde słowo byłoby pół-palindromem). Na przykład rear
nie jest pół-palindromem, ponieważ r ea r
ma fragment ( ea
), który zawiera litery z obu stron oryginalnego słowa. Uważamy, że centralny znak słowa o nieparzystej długości nie znajduje się po żadnej stronie słowa, dlatego w przypadku słów o nieparzystej długości znak środkowy musi zawsze znajdować się we własnej części.
Twoim zadaniem będzie sporządzenie listy liczb całkowitych dodatnich i ustalenie, czy są one półpalindromem. Twój kod powinien wypisywać dwie spójne nierówne wartości, jedną, jeśli dane wejściowe są semi-palindromem, a drugą w przeciwnym razie. Jednak sekwencja bajtów kodu musi być sama w sobie półpalindromem .
Odpowiedzi będą oceniane w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
[] -> True
[1] -> True
[2,1,2] -> True
[3,4,2,2,3,4] -> True
[3,5,1,3,5] -> True
[1,2,3,1] -> False
[1,2,3,3,4,1] -> False
[11,44,1,1] -> False
[1,3,2,4,1,2,3] -> False
Program do generowania większej liczby przypadków testowych.
Borious zauważył, że są one podobne do uogólnionych palindromów Smarandache . Więc jeśli chcesz trochę dalej czytać, to jedno miejsce na początek.
źródło
Odpowiedzi:
Retina 0.8.2 ,
8569 bajtówWypróbuj online! Wyjaśnienie:
Wybiera tryb dopasowania. W rzeczywistości Retina domyślnie ustawia tryb dopasowania dla programu jednowierszowego, ale druga kopia kodu zawsze by pasowała, gdyby nie te dodatkowe znaki.
Mecz musi zaczynać się od początku.
Uchwyć kilka serii znaków. Każdy bieg musi kończyć się przecinkiem.
Opcjonalnie dopasuj ciąg cyfr i przecinek.
Opcjonalnie dopasuj wszystkie przechwytywania w odwrotnej kolejności, wyświetlając każdy dopasowany.
Mecz musi kończyć się na końcu.
Cofnij, chyba że wszystkie przechwyty zostały przerwane. Działa, wymagając, aby dopasowanie wciąż znajdowało się na początku łańcucha, jeśli mamy przechwycone niepowodzenie, co jest niemożliwe.
źródło
Galaretka ,
2723 bajtówZwraca 1 dla półpalindromów, 0 w przeciwnym razie.
Wypróbuj online!
Jak to działa
źródło
Python 2 ,
157153147143 bajtów-4 bajty dzięki tsh .
Wypróbuj online!
źródło
x==x[::-1]
abylen(x)<2
zapisać 2 * 2 bajty; 143 bajty05AB1E ,
59474341 bajtów-12 bajtów dzięki @Emigna .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
2ä
øøε.œ} `, oszczędzając 6 bajtów.€
zamiast nich można użyćε }
. :)05AB1E , 37 bajtów
Wykorzystuje w przybliżeniu tę samą technikę, którą wymyślił Jonathan .
Wypróbuj online!
Pełny program Pobiera listę ze STDIN, wysyła 1 lub 0 do STDOUT.
Filtruj zachowaj partycje, które spełniają ...
Ten warunek: długości każdego (
€g
) są przechowywane na liście, której prefiksy (η
) są następnie sumowane (O
), co daje nam skumulowane sumy listy długości. Następnie pułapowa połowa maksimum tej listy jest wypychana na stos - ale z zachowaniem również oryginalnej listy (Z;î
), a jeśli występuje (å
) w sumach sumarycznych, funkcja zwraca wartość true.Dla każdego, porównanie (
Q
) z odwrócone, które są wypychane oddzielnie na stosie przez . Zwraca listę 0 i 1 s.Â
Maksymalny. Jeśli coś jest prawdą, to 1 jeszcze 0 . Zakończ wykonywanie. Wszystko, co następuje, jest całkowicie ignorowane.
źródło
Python 2 ,
275251205 bajtów-24 bajty dzięki @KevinCruijssen
-44 bajty dzięki @PostLeftGhostHunter
-2 więcej bajtów dzięki @KevinCruijssen
Zwraca wartość True dla pół-palindromu, w przeciwnym razie Brak
Wypróbuj online!
źródło
Galaretka ,
3332 bajty-1 Dzięki Erik the Outgolfer
Podziękowania również dla Dennisa za naprawę błędu i rozważenie zmiany szczegółów implementacji w Jelly.
Wydajność półpalindromów, wydajność
1
innych0
.Lub zobacz zestaw testowy .
Tylko kawałki są
ŒḂ
S ({3 III -4 p } {vs 29 p -30 p } bajtów), tak aby umożliwić kodu do analizowania.W jaki sposób?
Cała praca wykonywana jest po prawej stronie - „Główny link”:
źródło
Perl 6 ,
8779 bajtów-8 bajtów z kilkoma sztuczkami z odpowiedzi Jo Kinga
Wypróbuj online!
Odpowiedź portu JavaScript w tsh. Zwraca dwa różne obiekty Regex.
źródło
Ruby , 129 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 139 bajtów
Wypróbuj online!
źródło
C (gcc) (X86), 216 bajtów
Wypróbuj online!
p(L,a,n)
zwraca 0, jeśli tablicaa
długościL
jest półpalindromem, 1 w przeciwnym razie. Biorąc pod uwagę, że wszystkie prefiksy długości>n
są już sprawdzone, porównuje prefiks długościn
z sufiksem długościn
.p(L,a)
jest punktem wejścia.Niestety, bardziej interesujące rozwiązanie jest dłuższe:
224 bajty
Wypróbuj online!
Nie golfowany:
źródło
Japt , 66 bajtów
Japt Interpreter
Duże ulepszenie tej wersji, w rzeczywistości bije teraz większość praktycznych języków. Teraz działa na tablicy liczb całkowitych, ponieważ poprzednia metoda miała błąd.
Wyjaśnienie:
źródło
PHP 237 bajtów
funkcja rekurencyjna, zwraca
true
(dla danych wejściowych zawierających mniej niż dwa elementy) lub1
dla prawdy,0
dla fałszu. Wypróbuj online (zawiera podział).Rzeczywista długość kodu wynosi 118 bajtów; półpalindrom utworzony przez duplikację kodu.
Dla lepszej wydajności, należy wymienić
&
z&&
i wstawić!$x&&
przed++$i
.źródło
Scala, 252 bajty
Wypróbuj online!
PS. Najwyraźniej rozwiązanie jest 2 razy dłuższe tylko po to, aby spełnić wymóg, że kod źródłowy jest również półpalindromem.
PPS. Nie kandydat na golfa, ale czysto funkcjonalne rozwiązanie wykorzystujące dopasowanie wzorca:
źródło
Perl 6 , 81 bajtów
Wypróbuj online!
Zwraca wyrażenie regularne
/../
dla wartości True i wyrażenie regularne/^(.+)(.*)$0$/
dla wartości False. Działa podobnie do odpowiedzi nwellnhof , ale wcześniej konwertuje listę na ciąg znaków.źródło