To jest lustro: |
. Właśnie dowiedziałem się, że możesz przykleić lustro na środku sznurka, jeśli sznur może być dublowany! Na przykład ciąg abccba
. Jeśli przecinasz go na pół, dwie połówki to wzajemne odbicie lustrzane:
abc <--> cba
Możemy więc przykleić lustro na środku sznurka, a naszym nowym sznurkiem jest abc|cba
. Czasami tylko część ciągu może być dublowana na sobie. Na przykład ciąg „mirror”. Dwa r są dublowane, ale reszta ciągu nie jest. Zgadza się, po prostu usuniemy części ciągu, które się nie odbijają, i otrzymamy następujący ciąg:
r|r
Niektóre ciągi mogą być dublowane w wielu miejscach. Na przykład „Hello World, xyzzyx”. Lubię mieć dużo tekstu odbijanego w moim lustrze, więc musisz znaleźć najlepsze miejsce na umieszczenie mojego lustra. W takim przypadku powinieneś wypisać dłuższy dublowany ciąg i, podobnie jak w naszym ostatnim przykładzie, usunąć wszystko inne. Ten ciąg staje się:
xyz|zyx
Niektóre ciągi wyglądają tak, jakby mogły być dublowane, ale w rzeczywistości nie mogą. Jeśli ciąg nie może być nigdzie dublowany, nie powinieneś nic wyświetlać.
Wyzwanie:
Biorąc pod uwagę ciąg zawierający tylko ascii do wydrukowania, znajdź najlepsze miejsce na umieszczenie mojego lustra. Innymi słowy,
Znajdź największy podciąg palindromowy o równej długości, a następnie wyślij go za pomocą znaku potoku „|” w środku tego.
Dane wejściowe będą miały długość 1-50 znaków.
Możesz założyć, że dane wejściowe nie będą zawierać kopii lustrzanych |
ani nowych linii. Poza tym wszystkie postacie ascii do wydrukowania są uczciwą grą. Jeśli najdłuższy dublowany podciąg jest powiązany między dwoma podciągami, możesz wybrać, który ma zostać wydrukowany. Na przykład dla ciągu „abba ollo” musisz wypisać „ab | ba” lub „ol | lo”, ale nie ma znaczenia, który z nich wypisujesz. W łańcuchach rozróżniana jest wielkość liter, np. „ABba” nie powinna wypisywać „AB | ba”, powinna wypisywać pusty ciąg.
Próbka IO:
"Hello World" --> "l|l"
"Programming Puzzles and Code-Golf" --> Either "m|m" or "z|z"
"abcba" --> ""
"Hulluh" --> "ul|lu"
"abcdefggfedcba" --> "abcdefg|gfedcba"
"abcdefggfabc" --> "fg|gf"
"AbbA" --> "Ab|bA"
"This input is a lot like the last one, but with more characters that don't change the output. AbbA" --> "Ab|bA"
Jak zwykle jest to gra w golfa, więc obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach!
źródło
Odpowiedzi:
Pyth -
19171513 bajtówDzięki @FryAmTheEggman za uratowanie mi dwóch bajtów.
ARRGH specjalny przypadek braku odpowiedzi.Rozwiązałem to!Pakiet testowy .
źródło
:Q)
= Bignose05AB1E ,
191714 bajtówKod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Python 2,
10297 bajtówRaczej powolny i nieefektywny ... Sprawdź mniejsze przypadki testowe w Ideone .
źródło
JavaScript,
10099 bajtówlub
źródło
eval
?eval
aby uniknąćreturn
for
nie jest wyrazem, więc byłoby normalnie wymagają szelki orazreturn
Lua, 133 bajty
Zweryfikuj wszystkie przypadki testowe na Ideone.com .
źródło
t==t:reverse()
aby zapisać bajt :)Siatkówka , 66 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online! (Pierwszy wiersz umożliwia testowanie kilku przypadków testowych oddzielonych od linii).
Hmmm, znacznie dłużej niż chciałbym ...
źródło
JavaScript (ES6), 91
Mniej golfa
Test
źródło
Perl 5,
10510098 + 1 =10610199 bajtówChciałem tylko wypróbować rekursywne wyrażenia regularne. Potrzebuje
-p
opcji. Edycja: Zapisano (przekreślono 4) 7 bajtów dzięki @ msh210. (Brakujący bajt wynika z zapisania, które zostało zastąpione ostatnim zapisaniem @ msh210).źródło
@_=(@_,$1)
może byćpush@_,$1
. (2) Pomiń nowe linie i finał;
. (3) Podejrzewam, że jest krótszy warunek sortowania można użyć (jeśli nic innego, to przynajmniej może --- --- substytutem-
dla<=>
)-
i to nie zadziałało (prawdopodobnie potrzebuje parens dla pierwszeństwa, które pokonuje oszczędności).y...c>>1
luby...c/2
zamiastlength>>1
. (Nietestowane.)Python 2, 91 bajtów
Zamień
\x7f
na rzeczywisty znak DEL, którym jest ASCII 127 (kredyt dla Dennisa).Jest to zgodne ze strategią podobną do odpowiedzi Dennisa dotyczącej używania
max
i rekurencyjnego rozgałęziania w celu znalezienia najdłuższego przedziału palindromu. Ale zamiast tego znajduje lewą połowę, sprawdzając, czy odpowiadająca jej lustrzana prawa połowa przychodzi zaraz po niej, z własnoręcznie rozpoczętymi początkami .Funkcja zgaduje, czy pierwszy znak znajduje się w lustrzanej lewej połowie. Jeśli nie, po prostu upuszcza go i powtarza na pozostałej części. Jeśli tak, jest dodawany do stosu
p
odwróconych znaków. Jeśli łańcuch zaczyna się od stosu, łańcuch lustrzany jest generowany i uznawany za możliwe najdłuższe lustro. Aby uniknąć|
jako wyjścia, brane są pod uwagę tylko niepuste stosy.źródło
Galaretka , 17 bajtów
Wypróbuj online!
Zrobione z pomocą Mr. Xcodera i DJMcMayhem na czacie
Jak to działa
źródło
Haskell,
126111 bajtówźródło
TSQL
227223 bajtyZaszyfrowałem długość do maks. 99 bajtów, to zapisane bajty, ale spowolniłem. Jednak nadal ma przyzwoitą wydajność.
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
Python 2, 149 bajtów
Wypróbuj online
Ten program znajduje pierwszą połowę największego podłańcucha palindromowego o parzystej długości i wypisuje ten ciąg, a następnie a
|
, a następnie ten ciąg odwrócony. Jeśli nie ma odpowiedniego ciągu,t
będzie pusty i'|'*(L(t)>0)
przejdzie do pustego ciągu.źródło
Java 8,
294283232 bajtyWyjaśnienie:
Wypróbuj tutaj.
źródło