Problem
Powiedzmy, że słowo jest prawie palindromem, jeśli można usunąć jedną z jego liter, aby słowo stało się palindromem. Twoim zadaniem jest napisanie programu, który dla danego słowa określa, którą literę usunąć, aby uzyskać palindrom.
Wygrywa najkrótszy kod do wykonania tego w dowolnym języku programowania.
Wejście
Wprowadzanie składa się ze słowa składającego się z wielkich liter o długości od 2 do 1000 znaków.
Wynik
Wypisuje 1-indeksowaną pozycję (najbardziej wysunięta na lewo litera ma pozycję 1, następna ma pozycję 2 itd.) Litery, którą należy usunąć. Jeśli są możliwe wybory prowadzące do palindromu, wypisz dowolną z tych pozycji. Pamiętaj, że musisz usunąć literę, nawet jeśli dane słowo jest już palindromem. Jeśli dane słowo nie jest prawie palindromem, wypisz -1.
Przykład
Dane wejściowe:
racercar
może produkować dane wyjściowe:
5
ponieważ usunięcie 5
litery th powoduje racecar
powstanie palindromu.
Również dane wejściowe
racecar
nadal może produkować dane wyjściowe
4
ponieważ usunięcie 4
litery th do produkcji raccar
jest nadal palindromem.
Odpowiedzi:
J -
3125 znakówBardzo standardowa taryfa dla J, więc zwrócę uwagę na fajne elementy.
Przysłówek
\.
nazywa Outfix .x u\. y
usuwa wszelkie Infix długościx
ody
i stosujeu
się do wyniku każdego usunięcia. Tutajx
jest 1,y
jest łańcuchem wejściowym iu
jest(-:|.)
testem, czy łańcuch pasuje do jego odwrotności. Stąd rezultatem tego zastosowania\.
jest lista boolean, 1 w miejsce każdego znaku, którego usunięcie powoduje, że dane wejściowe są palindromem.I.
tworzy listę wszystkich indeksów (0-origin) z góry tam, gdzie było 1. Dodanie 1 z1+
czyni te indeksy 1-origin. Jeśli żaden indeks nie był równy 1, lista jest pusta. Teraz staramy się wziąć ostatni element_1{
. (Możemy wypisać dowolne z usuwalnych liter!) Jeśli to zadziała, wrócimy. Jeśli jednak lista była pusta, nie było żadnych elementów, więc{
zgłasza błąd domeny, który łapiemy::
i zwracamy -1 z[
.Użycie (przypominamy, że
NB.
jest do komentarzy):źródło
Pythoninny niż PHP(73):Gdzie a to ciąg, który chcesz sprawdzić.
Powoduje to jednak błąd, jeśli nie można go włączyć w palindromie. Zamiast tego możesz użyćEDYCJA: Nie, czekaj, to działa!Dzięki, to rzeczywiście podnosi zawartość php tego skryptu o około 25% (właśnie tego chcesz, prawda?)
źródło
1>0
zamiastTrue
i usuwając przestrzeń pomiędzy]
ifor
po...[::-1] for g...
1
zamiastTrue
.1 == True
, w sumie.Mathematica,
106988791 znakówWydaje mi się, że jestem trochę upośledzony długimi nazwami funkcji, ale takie problemy są dość zabawne w Mathematica:
Zgłasza pewne ostrzeżenia, ponieważ
l_
wzór pasuje również do wszystkich znaków w środku, na którychReverse
nie można operować. Ale hej, to działa!Nieco golfisty:
źródło
GolfScript,
2826 znakówDziękujemy Peterowi za skrócenie o 2 znaki. Wypróbuj przypadki testowe online :
źródło
RACECAR
jest nadal palindromem z literą E. Czy konieczne jest określenie znaku do usunięcia, gdy wprowadzane słowo jest już palindromem?-2]$-1=)
? Na początku tego bloku masz najwyżej jeden przedmiot na stosie, więc możesz łatwo go skrócić-2]0=)
. (Lub o tej samej długości]-2or)
. Nauczyłem się kochaćor
w szczególnych przypadkach).Rebol (81)
Przykładowe użycie w konsoli Rebol:
Powyżej zwraca indeks ostatniego znalezionego palindromu. Alternatywnym rozwiązaniem (85 znaków), które zwraca każdy znaleziony palindrom, byłoby:
Więc do
"racercar"
tego zwróci listę[4 5]
.źródło
C #, 134 znaków
Wiem, że przegrywam :(, ale nadal było fajnie : D
Wersja do odczytu:
źródło
R
zdefiniowane i używane w wersji golfowej ?Stax ,
810 bajtówUruchom i debuguj
Ten program pokazuje wszystkie oparte na 1 indeksy, które można usunąć z łańcucha, tworząc palindrom. A jeśli nie ma, pokazuje -1.
źródło
aaabb
Wyniki5
zamiast-1
).Rubin (61):
Tutaj masz rozwiązanie rubinowe. Zwróci pozycję znaku do usunięcia lub -1, jeśli nie da się tego zrobić.
Nie mogę się oprzeć wrażeniu, że można wprowadzić ulepszenia w sekcji dup i plasterek, ale wydaje się, że Ruby nie ma metody String, która usunie znak z określonego indeksu i zwróci nowy ciąg -__-.
Edytowane zgodnie z komentarzem, ty!
źródło
-1
jeśli nie znaleziono palindromu.-1
, dzięki. Nie jestem pewien, co masz na myśli, jeśli chodzi o zastosowanie tej metody, pomyślę.05AB1E , 10 bajtów
Wypróbuj online lub sprawdź więcej przypadków testowych .
Wyjaśnienie:
źródło
Nie PythonPHP ,858381 bajtówWypróbuj online!
Niepotrzebnie rekurencyjne:
PHP , 96 bajtów
Wypróbuj online!
źródło
Haskell, 107 znaków:
W funkcji ( 85 znaków ):
oryginalna wersja bez golfa:
źródło
C # (184 znaki)
Przyznaję, że nie jest to najlepszy język do gry w golfa ...
Sformatowane i skomentowane:
źródło
C # (84 znaków)
Instrukcja LINQpad oczekuje, że zmienna
i
będzie zawierać ciąg wejściowy. Dane wyjściowe są przechowywane wo
zmiennej.źródło
Haskell, 80
Nazywany tak:
źródło
Japt , 8 bajtów
Spróbuj
źródło
Haskell, 118 ° C
Nie golfowany:
źródło
Galaretka ,
1714 bajtówWypróbuj online!
Ponieważ zmieniłem podejście wystarczająco szybko, aby stara wersja nie wyświetlała się w historii edycji, było to następujące:
ŒPṚḊŒḂ€TṂ©’<La®o-
źródło
Brachylog , 24 bajty
Wypróbuj online!
Czuje się zdecydowanie za długo.
Mogą być dwa bajty krótsze, jeśli dane wyjściowe mogłyby być indeksowane 2 :
Dwie wcześniejsze i jeszcze gorsze iteracje:
Zastosowanie tej ostatniej zmiennej globalnej wymaga innego nagłówka testowego .
źródło
Python 3 , 71 bajtów
Wypróbuj online!
Zwraca 1-indeksowany znak, jeśli operacja może być wykonana i
-1
inaczej.źródło
Wolfram Language (Mathematica) , 56 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę znaków. Aby wprowadzić ciąg, dołącz
@*Characters
.PalindromeQ
został wprowadzony w 2015 r. Koszty alternatywne +4 bajty .źródło
Perl 5
-p
,5652 bajtówWypróbuj online!
źródło
C (gcc) ,
180168159157140139 bajtówWypróbuj online!
21617 bajtów ogolonych dzięki pułapce cat! I jeszcze 3 bajty, ponieważ reguły mówią, że minimalna długość danych wejściowych wynosi 2 znaki, więc nie musisz sprawdzać pustych ciągów.Nie golfowany:
źródło
&&!++p
po prostu przebiegłe, aby wyjaśnić :)Python, 84
To nie sprawdza, czy dane wejściowe (łańcuchy) są prawie palindromem, ale są wydajne czasowo i czytelne.
źródło
s[-(i+1)]
można skrócić dos[-i-1]
. Ponadto, nie jestem pewien, ale być może uda się wymienićif...else...
zreturn i+1 if ... else len(s)-1
s = "abcde"
powinien zwrócić -1.Mój pierwszy golf.
Jawa. ~ 1200 znaków w funkcjach głównych (i podrzędnych). Tak kochanie.
Najwyższa klasa i zastosowanie:
Główna funkcja:
Podfunkcje:
Pełna klasa:
źródło