Permutacje słowa, które są palindromami

Zadanie 6 z 8 · rozdział 12Trudność: 2 z 3napisypalindrompermutacje

Treść zadania

Wczytaj słowo i wypisz wszystkie różne palindromy, które można ułożyć z jego liter (używając każdej litery dokładnie tyle razy, ile razy występuje w słowie).

Dane wejściowe

  • 1. linia: słowo złożone z małych liter alfabetu angielskiego (a–z); litery mogą się powtarzać

Dane wyjściowe

Każdy palindrom w osobnej linii, bez powtórzeń, w kolejności alfabetycznej. Jeśli z liter słowa nie da się ułożyć żadnego palindromu, program nic nie wypisuje.

Ograniczenia

  • Długość słowa: od 1 do 10.

Uwagi

  • Palindrom da się ułożyć tylko wtedy, gdy co najwyżej jedna litera występuje nieparzystą liczbę razy (ta litera trafia na środek).
  • Wystarczy wygenerować permutacje „połówki” palindromu (po połowie wystąpień każdej litery, np. funkcją permutations z zadania ZAD-02) i do każdej dokleić środek oraz odwróconą połówkę. Gdy litery się powtarzają, permutations zwraca te same układy wielokrotnie — powtórzenia usuniesz, zbierając wyniki w zbiorze (set).

Przykłady

Wejście
aabb
Wyjście
abba
baab
Wejście
abc
Wyjście
(brak)

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 z zdanie.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.

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 uruchomiono
Wejście
aaaa
Oczekiwane wyjście
aaaa

Test 2

Nie uruchomiono
Wejście
aab
Oczekiwane wyjście
aba

Test 3

Nie uruchomiono
Wejście
a
Oczekiwane wyjście
a

Test 4

Nie uruchomiono
Wejście
aabbc
Oczekiwane wyjście
abcba
bacab

Test 5

Nie uruchomiono
Wejście
aabbcc
Oczekiwane wyjście
abccba
acbbca
baccab
bcaacb
cabbac
cbaabc

Test 6

Nie uruchomiono
Wejście
aaab
Oczekiwane wyjście
(brak)

Test 7

Nie uruchomiono
Wejście
kajak
Oczekiwane wyjście
akjka
kajak
Uruchom z własnymi danymi