Wyjątkowe palindromy (podciągi bez zmiany kolejności)
Treść zadania
Wczytaj słowo i znajdź wszystkie różne wyjątkowe palindromy, które są jego spójnymi fragmentami (podnapisami, czyli kolejnymi znakami słowa, np. slowo[i:j]).
Fragment jest wyjątkowym palindromem, jeśli:
- wszystkie jego znaki są identyczne (np.
a,aaa), albo - ma nieparzystą długość, a wszystkie jego znaki poza środkowym są identyczne (np.
cbc,aabaa).
Dane wejściowe
- 1. linia: słowo złożone z małych liter
Dane wyjściowe
Każdy wyjątkowy palindrom w osobnej linii, bez powtórzeń. Kolejność: od najkrótszych do najdłuższych, a palindromy tej samej długości — alfabetycznie.
Uwagi
- Sprawdź wszystkie fragmenty
slowo[i:j], a pasujące zbierz w zbiorze (set), żeby usunąć powtórzenia. - Wymaganą kolejność uzyskasz, przechodząc po długościach od 1 do długości słowa i dla każdej długości wypisując alfabetycznie (
sorted) znalezione palindromy tej długości.
Przykład
xxyxx
x y xx xyx xxyxx
Fragmenty xxy, xyxx itp. nie są wyjątkowymi palindromami. Palindrom xx występuje w słowie dwa razy, ale wypisujemy go raz.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 12
Zadania w tym rozdziale dotyczą palindromów (napisów czytanych tak samo od przodu i od tyłu), anagramów (napisów złożonych z tych samych liter w innej kolejności) oraz permutacji liter słowa.
Konwencje wspólne:
- Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- Program nie wypisuje komunikatów typu „Podaj słowo:”.
- Napis wczytuj jako całą linię. Spacje mogą w nim wystąpić tylko tam, gdzie treść mówi o zdaniu.
- Słowo w zdaniu to fragment oddzielony od innych spacjami. Znaki interpunkcyjne (np.
.,!?;:-) stojące na początku lub końcu fragmentu nie należą do słowa (kara.→kara), a fragment złożony wyłącznie z interpunkcji nie jest słowem. W Pythonie:fragment.strip(string.punctuation)dla każdego fragmentu zzdanie.split(). - Gdy zadanie każe ignorować wielkość liter, porównuj napisy np. po zamianie na małe litery (
lower()), ale słowa wypisuj w postaci z wejścia (bez interpunkcji z brzegów). - Gdy wynikiem jest kilka napisów, wypisz każdy w osobnej linii. Jeśli nie ma żadnego — program nic nie wypisuje.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomionoaaa
a aa aaa
Test 2
Nie uruchomionoaba
a b aba
Test 3
Nie uruchomionoabc
a b c
Test 4
Nie uruchomionomnonopoo
m n o p oo non ono opo
Test 5
Nie uruchomionoaabaa
a b aa aba aabaa
Test 6
Nie uruchomionoz
z
Test 7
Nie uruchomionoabcbaba
a b c aba bab bcb