Wszystkie permutacje słowa

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

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 permutations z modułu itertools (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
    `
  • permutations zachowuje 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

Wejście
abc
Wyjście
abc
acb
bac
bca
cab
cba
Wejście
on
Wyjście
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 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
a
Oczekiwane wyjście
a

Test 2

Nie uruchomiono
Wejście
ba
Oczekiwane wyjście
ab
ba

Test 3

Nie uruchomiono
Wejście
dog
Oczekiwane wyjście
dgo
dog
gdo
god
odg
ogd

Test 4

Nie uruchomiono
Wejście
kot
Oczekiwane wyjście
kot
kto
okt
otk
tko
tok

Test 5

Nie uruchomiono
Wejście
lato
Oczekiwane wyjście
alot
alto
aolt
aotl
atlo
atol
laot
lato
loat
lota
ltao
ltoa
oalt
oatl
olat
olta
otal
otla
talo
taol
tlao
tloa
toal
tola
Uruchom z własnymi danymi