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:

  • RomaAmor
  • ListenSilent
  • Debit CardBad 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

Słownik Scrabble Zaawansowane Wszystkie słowa Zasady gry w Scrabble w Polsce Blog Licznik słów Notes do gier Oficjalny Słownik Polskiego Scrabblisty