Podany ciąg s
zwraca najmniejszy ciągły podciąg, który można usunąć, aby utworzyć palindrom.
Przykłady:
800233008 -> 2
racecarFOOL -> FOOL
abcdedcba -> (empty string)
ngryL Myrgn -> "L " (or " M")
123456789 -> 12345678 (or 23456789)
aabcdbaa -> c (or d)
[[]] -> [[ (or ]])
a -> (empty string)
Sugestie dotyczące przypadków testowych od użytkowników (jeśli znajdziesz przypadek krawędzi nie wymieniony na liście, opublikuj komentarz):
aabaab -> b | Suggested by Zgarb, some returned "aa".
Zasady
- Na wejściu pojawią się tylko drukowalne znaki ASCII (bez nowych linii, uprość to).
- Naprawdę nie jest regułą, ale uwaga
<>
,/\
,()
,[]
i{}
nie są palindromy.
To jest golf golfowy , najmniejsze wygrane w liczbie bajtów.
Adnan odebrał +100 nagród
code-golf
string
palindrome
Urna Magicznej Ośmiornicy
źródło
źródło
aabaab
[[]]
jest palindrom?]][[
. Pomyśl, żeaabb
to to samo, tylko różne postacie.Odpowiedzi:
Galaretka , 16 bajtów
Wypróbuj online!
Jak to działa
źródło
J , 24 bajty
Wypróbuj online!
Wyjaśnienie
źródło
(;"e f)&>
czasownik testowy?Wolfram Language (Mathematica) ,
5351 bajtówLiczba bajtów zakłada kodowanie CP-1252.
Wypróbuj online!
Definiuje jednoargumentowy operator
±
(lub funkcjęPlusMinus
). Dane wejściowe i wyjściowe są listami znaków. Dla wygody zestaw testów wykonuje konwersję zi na rzeczywiste ciągi.źródło
Reverse
zatem porównanie tego odwrotności do oryginału jest krótsze niż PalindromeQ? Nie znam Mathematiki, więc nie mam pojęcia.Characters@#/.{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:>b~~""&
Reverse[x={a,c}]==x
ma dwa bajty dłużej. Nie wiem, czy jest jakaś krótsza alternatywa.Galaretka , 20 bajtów
Wypróbuj online!
źródło
05AB1E , 18 bajtów
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
ǝ
był jednak naprawdę genialny.Python 3 , 97 bajtów
Wypróbuj online!
źródło
Python 2 , 116 bajtów
Wypróbuj online!
Zaoszczędził kilka bajtów z pomocą Halvarda Hummela !
źródło
Japt ,
2622 bajtówPrzetestuj online! Próbuję wymyślić, jak zamapować
false
na coś fałszywego, a dowolny ciąg znaków na coś prawdziwego w jednym bajcie. Obecnie używam+0
...źródło
Bash , 108 bajtów
Pobiera dane wejściowe jako argument wiersza polecenia.
Wypróbuj online! z cytatami wydrukowanymi wokół wyjścia, aby wyświetlić wiodące / końcowe spacje.
źródło
Prolog , 271 bajtów
W pewnym momencie zdałem sobie sprawę, że będzie to ogromne według standardów golfa kodowego, więc zachowałem kilka dodatkowych pustych miejsc, aby zachować podobieństwo do wersji nie zaciemnionej. Ale nadal uważam, że może to być interesujące, ponieważ jest to inne podejście do problemu.
Wersja nie zaciemniona:
źródło
C ++,
254248246 bajtów-6 bajtów dzięki Zacharýowi -2 bajty dzięki Toby Speightowi
Więc...
T
jako definicji makra, ponieważ działającR""
jako kolejny efekt na literał łańcuchowy (jest to prefiks używany do definiowania literałów łańcuchowych, zobacz cppreference, aby uzyskać więcej informacji), którego nie ma, kiedy to robięT""
p(std::string)
sprawdzanie, czy łańcuch jest palindromem. Jeśli tak, zwraca,1
który rzutujetrue
, w przeciwnym razie zwraca0
, który rzutujefalse
the last index - number of erased char
. Jeśli stwierdzi, że wymazanie jakiejś części jest palindromem, wówczas powraca. Na przykład, podczas przechodzenia ciąg"aabcdbaa"
jako parametr, jakc
id
ważne są odpowiedzi, ale ten kod powrócic
ponieważ jego usuwanie i testowanie czy to palindrom pochodzi przed sprawdzeniem czy kasowanied
i testowania, czy to palindromOto kod do przetestowania:
źródło
using s=std::string;int p(s t){for(int i=0;i<t.S/2;++i)if(t[i]!=t[t.S-i-1])T 0;T 1;}s d(s e){if(!p(e))for(int i,w=1;w<e.S;++w)for(i=0;i<=e.S-w;++i){s t=e;t.erase(i,w);if(p(t))T e.substr(i,w);}T"";}
/2
można to pominąć? Iteracja na całej długości po prostu powtórzy nasze testy, które powinny być nieszkodliwe. Możesz rozwinąć to, co rozumiesz przez „inny efekt”R""
(tzn. Jest on analizowany jako dosłowny ciąg znaków).Galaretka , 33 bajty
Wypróbuj online!
źródło
PHP 104 + 1 bajty
Uruchom jako potok z
-nR
lub spróbuj online .źródło
Haskell ,
109105 bajtówWypróbuj online!
EDYCJA: Dzięki @ H.PWiz za zdjęcie 4 bajtów! Muszę być lepszy z tymi monadami!
źródło
JavaScript, 90 bajtów
Wypróbuj online!
Pokaż fragment kodu
źródło
Perl 5, 72 +1 (-p) bajtów
Wypróbuj online
źródło
JavaScript (ES6),
9178 bajtówDane wejściowe i wyjściowe są listami znaków.
Rekurencyjnie usuwa coraz większy wycinek z danych wejściowych, aż do znalezienia palindromu.
Skrawek:
Pokaż fragment kodu
źródło
TSQL (2016) 349B
Nie jest to najbardziej kompaktowe, ale proste rozwiązanie:
źródło
@
jako zmiennej dla kilku bajtów. W CTE możesz użyćwhere''=value)
innego i nie musisz zwracaćC
wyniku.Łuska , 18 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Haskell ,
98948180 bajtówWypróbuj online! Przykładowe użycie:
""#0 $ "aabaab"
daje"b"
.Edycja: -1 bajt dzięki Ørjan Johansen.
źródło
""
przezt
.C ++,
189186176167 bajtówZacząłem od odpowiedzi HatsuPointerKun , zmieniając test, aby po prostu porównać równość z odwróconym łańcuchem; potem zmieniłem sposób liczenia łańcuchów kandydujących. Następnie makra były używane tylko raz lub dwa razy, a wstawianie ich było krótsze.
Wyjaśnienie
Równoważny czytelny kod:
Wyliczenie kandydatów rozpoczyna się od zainicjowania ciągu znaków z
w
pominięciem pierwszych znaków, a następnie skopiowania kolejnych znaków z oryginału w celu przesunięcia odstępu. Na przykład za pomocą ciągufoobar
iw
== 2:Pierwszy przebieg (z
w
== 0) to brak operacji, więc pełny ciąg będzie rozpatrywany w kółko. W porządku - wydajność golfa przewyższa wydajność! Ostatnia iteracja tej pętli uzyska dostęp do indeksu jeden-do-końca; Wydaje mi się, że to mi się nie podoba z GCC, ale ściśle, to jest Niezdefiniowane Zachowanie.Program testowy
Bezpośrednie odejście od odpowiedzi HatsuPointerKun :
źródło
REXX, 132 bajty
źródło
Rubin ,
8684 bajtówWypróbuj online!
źródło
z=s.size-l+1
.C (gcc) , 307 bajtów
Wypróbuj online!
źródło