====== 9. úkol - Permutations ====== Cílem devátého úkolu je vygeneroval [[https://docs.python.org/3/tutorial/datastructures.html|list]] všech [[https://en.wikipedia.org/wiki/Permutation|permutací]] daných prvků. Tzn. například pro prvky ''[1, 2, 3]'' vrátit ''%%[[%%1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1%%]]%%''. V řešení využijte především [[https://en.wikipedia.org/wiki/Recursion_(computer_science)|rekurzi]] a [[https://docs.python.org/3/tutorial/datastructures.html|metody pracující s listy]]. Problém si zkuste nejdříve vyřešit na papíře. Najděte si deterministický postup pro generování permutací. Inspirujte se například obrázkem uvedeným níže (barvami se nenechte zmást). Odpovězte si na otázky: Co má funkce vrátit pro jeden prvek? Pro dva prvky? A jak toho využít, když budeme uvažovat prvky tři? {{ :courses:b6b36zal:zadani:perm.jpg?600 |}} Při použití externích knihoven bude práce hodnocena jako neodevzdaná (a to i zpětně)! Tzn. vyhněte se řešení typu: import itertools def permutations(array): return list(itertools.permutations(array)) Tímto způsobem se nic nového nenaučíte ;-) ==== Zadání ==== Vytvořte soubor permutations.py a v něm stejnojmennou funkci permutations(array) přijímající list s prvky. Funkce bude vracet list všech možných permutací těchto prvků. K implementaci můžete použít tuto šablonu: {{:courses:b6b36zal:zadani:permutations.py|}} ==== Příklady použití ==== Prázdný list: ''print(permutations([]))''\\ **vypíše do konzole**: ''%%[[%%]]'' Jednoprvkový vstup: ''print(permutations([1]))''\\ **vypíše do konzole**: ''%%[[1%%]]'' Čtyřprvkový vstup: ''print(permutations(['a', 'b', 'c', 'd']))''\\ **vypíše do konzole**: ''%%[[%%'a', 'b', 'c', 'd'], ['a', 'b', 'd', 'c'], ['a', 'c', 'b', 'd'], ['a', 'c', 'd', 'b'], ['a', 'd', 'b', 'c'], ['a', 'd', 'c', 'b'], ['b', 'a', 'c', 'd'], ['b', 'a', 'd', 'c'], ['b', 'c', 'a', 'd'], ['b', 'c', 'd', 'a'], ['b', 'd', 'a', 'c'], ['b', 'd', 'c', 'a'], ['c', 'a', 'b', 'd'], ['c', 'a', 'd', 'b'], ['c', 'b', 'a', 'd'], ['c', 'b', 'd', 'a'], ['c', 'd', 'a', 'b'], ['c', 'd', 'b', 'a'], ['d', 'a', 'b', 'c'], ['d', 'a', 'c', 'b'], ['d', 'b', 'a', 'c'], ['d', 'b', 'c', 'a'], ['d', 'c', 'a', 'b'], ['d', 'c', 'b', 'a'%%]]%% '' ==== Odevzdání ==== K vyhodnocení používáme python verze 3. ==== Bodování ==== Za úlohu je možné získat maximálně **5 bodů**.