Wprowadzenie
Dla tych, którzy nie wiedzą, palindrom ma miejsce, gdy ciąg znaków jest równy ciągowi wstecz (z wyjątkiem interpunkcji, spacji itp.). Przykładem palindromu jest:
abcdcba
Jeśli to odwrócisz, otrzymasz:
abcdcba
Który jest taki sam. Dlatego nazywamy to palindromem. Aby palindromize rzeczy, spójrzmy na przykład ciągu:
adbcb
To nie jest palindrom. Aby palindromizować to, musimy scalić odwrócony ciąg w początkowy ciąg po prawej stronie początkowego ciągu , pozostawiając obie wersje nienaruszone. Im krótszy, tym lepiej.
Pierwszą rzeczą, którą możemy wypróbować, jest:
adbcb
bcbda
^^ ^^
Nie wszystkie znaki pasują, więc nie jest to właściwa pozycja dla odwróconego łańcucha. Idziemy o krok w prawo:
adbcb
bcbda
^^^^
To również nie pasuje do wszystkich znaków. Idziemy o krok dalej w prawo:
adbcb
bcbda
Tym razem wszystkie postacie pasują do siebie . Możemy połączyć oba ciągi, pozostawiając nienaruszone . Ostateczny wynik to:
adbcbda
To jest palindromized string .
Zadanie
Biorąc pod uwagę ciąg (zawierający co najmniej jeden znak) zawierający tylko małe litery (lub wielkie litery, jeśli lepiej to pasuje), wypisz ciąg palindromized .
Przypadki testowe
Input Output
abcb abcba
hello hellolleh
bonobo bonobonob
radar radar
hex hexeh
To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
źródło
obonobo
byłoby lepszym rozwiązaniem przypadku testowego.bono b o nob
to całe zdanie. Jaka jest różnica między Bogiem a Bono? Bóg nie błąka się po Dublinie udając Bono ;-)Odpowiedzi:
Galaretka,
1110 bajtówWypróbuj online!
Jak to działa
źródło
Pyth (commit b93a874), 11 bajtów
Zestaw testowy
Ten kod wykorzystuje błąd w bieżącej wersji Pyth, zatwierdzenie b93a874 . Błąd polega na tym, że
_IJ+zb
jest on analizowany tak, jakby byłq_J+zbJ+zb
, co jest równoważne z tym_I+zb+zb
, kiedy powinien (zgodnie z intencją projektu Pyth) być analizowany jakoq_J+zbJ
, co jest równoważne z_I+zb
. To pozwala mi zapisać bajt - po usunięciu błędu poprawny kod będzie.VkI_IJ+zbJB
. Zamiast tego wyjaśnię ten kod.Zasadniczo kod brutalny wymusza na wszystkich możliwych ciągach, dopóki nie znajdzie najkrótszego ciągu, który można dołączyć do danych wejściowych w celu utworzenia palindromu, i wysyła połączony ciąg.
źródło
Python, 46 bajtów
Jeśli ciąg znaków jest palindromem, zwróć go. W przeciwnym razie umieść pierwszą literę wokół wyniku rekurencyjnego dla pozostałej części ciągu.
Przykładowy podział:
źródło
s!=s[::-1]
)Haskell, 36 bajtów
Bardziej czytelnie:
Jeśli ciąg znaków jest palindromem, zwróć go. W przeciwnym razie umieść pierwszą literę wokół wyniku rekurencyjnego dla końca łańcucha.
Sznurek
s
jest podzielony nah:t
drugą osłonę, eliminując wypełniacz1>0
w tym przypadku. Jest to krótsze niżs@(h:t)
wprowadzanie danych wejściowych.źródło
Pyth -
1612 bajtów4 bajty zapisane dzięki @FryAmTheEggman.
FGITW, możliwe dużo golfa.
Pakiet testowy .
źródło
Brachylog ,
1665 bajtów (niekonkurencyjny)Wypróbuj online!
Kiedy zamieściłem moją wstępną odpowiedź, wciąż była na starej implementacji w Javie. Ponieważ przeprogramowałem wszystko w Prologu, teraz działa ono tak, jak powinno.
Wyjaśnienie
Propagacja wsteczna sprawia, że pierwsza
A
znaleziona dla niej prawidłowa wartość będzie najkrótsza, jaką można połączyć z Input, aby uczynić z niej palindrom.Alternatywne rozwiązanie, 5 bajtów
Jest to mniej więcej taka sama jak powyższa odpowiedź, z tym wyjątkiem, że zamiast stwierdzenia „Dane wyjściowe to konkatenacja danych wejściowych za pomocą ciągu znaków
A
”, stwierdzamy, że „Dane wyjściowe to ciągi znaków, dla których dane wejściowe są przedrostkiem danych wyjściowych”.źródło
JavaScript (ES6), 92 bajty
Oblicza i odcina nakładanie się oryginalnego ciągu znaków i jego odwrócenie.
źródło
Siatkówka oka,
2925Wypróbuj online!
Wielkie dzięki Martinowi za 11 bajtów zapisanych!
To po prostu tworzy odwróconą kopię łańcucha i wygładza je razem. Jedyną naprawdę wymyślną częścią tego jest metoda odwracania:
O^#r`.\G
która odbywa się za pomocą trybu sortowania. Sortujemy litery drugiego łańcucha (te, które nie są znakami nowej linii i są kolejne od końca łańcucha, dzięki\G
)) według ich wartości liczbowej, która, ponieważ nie ma liczb, wynosi 0. Następnie odwracamy kolejność wyników tego stabilnego sortowania z^
opcją. Wszystkie zasługi za fantazyjne użycie\G
należy do Martina :)źródło
CJam, 18 lat
Wypróbuj online
Wyjaśnienie:
źródło
Lua,
8988 bajtówPokonałem Javascript! \ o / Zapisano 1 bajt dzięki @LeakyNun ^^
Jest to pełny program, który przyjmuje dane wejściowe jako argument wiersza poleceń.
bez golfa
źródło
while
można usunąć?i=i+1end
?1end
jako liczba szesnastkowa. Zasadniczo nie można używać[abcdef]
bezpośrednio po liczbie, bez uznania jej za szesnastkową. Jest jeszcze jeden wyjątek0x
.Prolog, 43 bajty
Oczekiwany jest ciąg kodów jako dane wejściowe, np. W SWI-Prolog 7:
a(`hello`).
Wyjaśnienie
Jest to w zasadzie port mojej odpowiedzi Brachylog.
źródło
Oktawa,
7875 bajtówZaoszczędzono 3 bajty dzięki Eʀɪᴋ ᴛʜᴇ Gᴏʟғᴇʀ!
ideone wciąż zawodzi dla nazwanych funkcji, ale tutaj jest testowe uruchomienie kodu jako programu.
źródło
Perl, 37 bajtów
Na podstawie odpowiedzi xnora.
Obejmuje +2 za
-lp
Uruchom z wejściem na STDIN, np
palindromize.pl
:źródło
05AB1E , 18 bajtów
Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
Pyke, 15 bajtów
Wypróbuj tutaj!
źródło
J, 20 bajtów
To jest czasownik monadyczny. Wypróbuj tutaj. Stosowanie:
Wyjaśnienie
Używam faktu, że palindromizacja S to S + rewers (P) , gdzie P jest najkrótszym prefiksem S, którego usunięcie powoduje palindrom. W J trochę niezgrabne jest wyszukiwanie pierwszego elementu tablicy, który spełnia predykat; stąd indeksowanie.
źródło
Haskell, 68 bajtów
Przykład użycia:
f "abcb"
->"abcba"
.Przeszukuj
inits
dane wejściowei
(np.inits "abcb"
->["", "a", "ab", "abc", "abcb"]
), aż znajdziesz takie, w którym jest ono dołączane odwrotnie, abyi
zbudować palindrom.źródło
r=reverse
musisz iść wcześniejf i=
...?MATL ,
1716 bajtówLuźno zainspirowany odpowiedzią CJam @ aditsu .
Wypróbuj online!
Wyjaśnienie
źródło
Rubinowy, 44 bajty
Ta odpowiedź oparta jest na rozwiązaniach Python i Haskell xnor .
źródło
==s?s:
??
między?:
dla trójskładnikowego i?x == 'x'
substytucja stosowany od Ruby 1.9Oracle SQL 11.2, 195 bajtów
Bez golfa
źródło
Poważnie, 34 bajty
Ostatni znak to spacja niełamliwa (ASCII 127 lub
0x7F
).Wypróbuj online!
Wyjaśnienie:
źródło
C #, 202 bajtów
Próbowałem.
Nie golfowany:
Czy ktoś może dostarczyć mi jakieś pomysły na grupowanie dwóch wywołań funkcji .Reverse (). ToArray ()? Oddzielna metoda to więcej bajtów.
źródło
QBIC , 41 bajtów
Wyjaśnienie:
źródło
Haskell, 46 bajtów
Zastanawiam się, czy istnieje sposób na usunięcie nawiasu w
(f$tail l)++[l!!0]
...źródło