Wszystkie permutacje słowa
Treść zadania
Wczytaj słowo złożone z niepowtarzających się liter i wypisz wszystkie jego permutacje (wszystkie słowa, które można ułożyć z jego liter, używając każdej dokładnie raz) — każdą w osobnej linii, w kolejności alfabetycznej.
Dane wejściowe
- 1. linia: słowo złożone z małych liter alfabetu angielskiego (
a–z), litery nie powtarzają się
Dane wyjściowe
Wszystkie permutacje słowa w kolejności alfabetycznej, każda w osobnej linii. Słowo o długości $n$ ma $n!$ permutacji.
Ograniczenia
- Długość słowa: od 1 do 6.
Uwagi
- Permutacje wygeneruje za Ciebie funkcja
permutationsz modułuitertools(biblioteka standardowa Pythona). Zwraca ona kolejne permutacje jako krotki liter — krotka to niezmienna lista zapisywana w nawiasach okrągłych:
```python
from itertools import permutations
for krotka in permutations("ab"):
print(krotka) # ('a', 'b'), a potem ('b', 'a')
print("".join(krotka)) # ab, a potem ba` permutationszachowuje kolejność liter z podanego ciągu, więc jeśli podasz mu litery posortowane alfabetycznie (sorted(slowo)), permutacje powstaną od razu w kolejności alfabetycznej. Możesz też posortować gotową listę wyników.- Samodzielne generowanie permutacji (rekurencją) przećwiczysz w rozdziale o rekurencji.
Przykłady
abc
abc acb bac bca cab cba
on
no on
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 uruchomionoa
a
Test 2
Nie uruchomionoba
ab ba
Test 3
Nie uruchomionodog
dgo dog gdo god odg ogd
Test 4
Nie uruchomionokot
kot kto okt otk tko tok
Test 5
Nie uruchomionolato
alot alto aolt aotl atlo atol laot lato loat lota ltao ltoa oalt oatl olat olta otal otla talo taol tlao tloa toal tola