Jak napisać kod do generowania anagramów w jednej linijce?
Czy można napisać program generujący anagramy w zaledwie jednej linijce kodu? Oczywiście! W języku Python wystarczy jedno wywołanie biblioteki standardowej:
from itertools import permutations
print([''.join(p) for p in permutations("kot")])
To wszystko! Dzięki wbudowanej funkcji permutations
z modułu itertools
każda możliwa
kombinacja liter zostaje błyskawicznie wygenerowana.
Jak to działa?
Kod tworzy wszystkie możliwe układy liter, czyli generuje pełny zestaw anagramów
danego słowa. W przypadku wyrazu "kot"
wynik będzie następujący:
['kot', 'kto', 'okt', 'otk', 'tko', 'tok']
Co to jest anagram?
Anagram to słowo lub fraza utworzona przez przestawienie liter innego słowa. Przykładowo:
- Roma → Amor
- Listen → Silent
- Debit Card → Bad Credit
Anagramy często używane są w grach słownych, kryptografii i zabawach językowych.
Porównanie z JavaScript
Podobny kod można napisać w JavaScript, chociaż wymaga on trochę więcej operacji:
function getAnagrams(word) {
if (word.length <= 1) return [word];
let anagrams = [];
for (let i = 0; i < word.length; i++) {
let char = word[i];
let remaining = word.slice(0, i) + word.slice(i + 1);
let subAnagrams = getAnagrams(remaining);
subAnagrams.forEach(sub => anagrams.push(char + sub));
}
return anagrams;
}
console.log(getAnagrams("kot"));
Efekt działania jest taki sam:
['kot', 'kto', 'okt', 'otk', 'tko', 'tok']
Minimalizm i efektywność
Rozwiązanie w Pythonie jest krótsze i bardziej czytelne, ponieważ korzysta z
wbudowanej funkcji permutations
. W JavaScript konieczne jest użycie rekurencji, co czyni kod mniej
zwięzłym.
Jednak należy pamiętać, że liczba anagramów rośnie wykładniczo. Dla słowa o długości n
liczba anagramów
wynosi n!
(silnia). Przykładowo:
- Dla 3 liter:
3! = 6
- Dla 4 liter:
4! = 24
- Dla 6 liter:
6! = 720
- Dla 10 liter:
10! = 3 628 800
Dla dłuższych słów obliczanie anagramów staje się bardzo kosztowne.
Ciekawostki
Anagramy są używane w wielu dziedzinach:
- Kryptografia – anagramy mogą służyć do szyfrowania tekstów.
- Gry słowne – Scrabble, Literaki, czy Wordle często bazują na przekształcaniu liter.
- Pseudonimy – niektórzy autorzy używają anagramów jako aliasów (np. „Tom Marvolo Riddle” → „I Am Lord Voldemort” w Harrym Potterze).
Wyzwanie!
Potrafisz napisać jeszcze krótszy kod w Pythonie lub JavaScript? 🚀
2025-02-02, Kategoria: Sztuczki