Anagram – Co to ? Przykłady anagramu

Anagram – Kto lubił, będąc dzieckiem grać w gry słowne, ręka do góry 🙋🙋‍♀️. Ja tak naprawdę lubię je do dzisiaj. Dobrze ćwiczą mózg i są całkiem fajną zabawą. Przykładem takiej gry słownej jest znajdowanie anagramu w słowie. Czyli z jednego słowa, musimy, nie pomijając żadnej litery stworzyć nowy — inny wyraz. Anagramy mogą być ukryte w różnych słowach, a nawet i całych zdaniach np. znany z książek Harrego Pottera zwrot „I am Lord Voldemort” 🐍 był niczym innym jak anagramem „Tom Marvolo Riddle”. Czy rozpoznaliście ten anagram?

Java – Anagram – wprowadzenie

Z tego materiału dowiesz się:

  • Czym jest anagram?
  • Jaka jest historia anagramu?
  • Jakie zastosowanie ma anagram?
  • Jak wygląda algorytm rozpoznający anagram?
  • Jak stworzyć generator anagramów?

Anagram

Anagram to słowo lub wyrażenie utworzone przez zmianę układu liter innego słowa, lub wyrażenia. Litery w oryginalnym słowie lub wyrażeniu są po prostu przearanżowane, aby utworzyć nowe słowo lub wyrażenie o innym znaczeniu. Przykładowo anagramem są takie słowa jak:

  • Barok ⟶ Korba
  • Towar ⟶ Warto
  • Waży ⟶ Żywa

Anagramy mogą być zabawnym sposobem na ćwiczenie mózgu i wymyślanie kreatywnych nowych słów lub zwrotów.

Anagram – Historia

Sama nazwa anagram wywodzi się jeszcze z czasów greckich i powstała ze słów ana- (nad) oraz grámma (litera).

Jeden z najwcześniej zarejestrowanych przykładów anagramów można znaleźć w pracach greckiego poety Likofrona (ang. Lycophron), który żył w III wieku p.n.e. Likofron był znany z używania skomplikowanej gry słów i tworzenia anagramów własnego imienia w swojej poezji.

Anagramy były również popularne w średniowiecznej Europie, gdzie były używane jako forma kryptografii i do ukrywania tajnych wiadomości. Sławni pisarze, tacy jak Dante Alighieri i William Shakespeare, byli znani z tego, że używali anagramów w swojej twórczości.

Anagram – Zastosowanie

Anagramy mogą być wykorzystywane do różnych celów, m.in. jako forma kryptografii do ukrywania tajnych wiadomości. Innym praktycznym zastosowaniem może być np. tworzenie chwytliwej nazwy marki, zabawnej łamigłówki, lub gry. Próba rozwiązywania i doszukiwania się anagramów, może jednocześnie być wyzwaniem i rozrywką.

Ogólnie rzecz biorąc, anagramy to prosta, ale fascynująca koncepcja, która może być zarówno zabawna, jak i użyteczna. Niezależnie od tego, czy jesteś fanem zagadek, czy po prostu lubisz bawić się słowami, anagramy są świetnym sposobem na zbadanie nieskończonych możliwości języka.

Anagram – Algorytm – Java

Patrząc na słowa szczególnie te dłuższe, czasami trudno od razu stwierdzić czy jedno słowo jest anagramem drugiego. Można sobie ułatwić rozpoznawanie anagramów, stosując poniższy algorytm.

    boolean isAnagramSort(String word1, String word2) {
        if (word1.length() != word2.length()) {
            return false;
        }
        char[] charsOfString1 = word1.toCharArray();
        char[] charsOfString2 = word2.toCharArray();
        Arrays.sort(charsOfString1);
        Arrays.sort(charsOfString2);
        return Arrays.equals(charsOfString1, charsOfString2;
    }

  • Pierwszym założeniem, które wzięliśmy pod uwagę to długość wyrazów – jeżeli oba wyrazy nie mają tej samej ilości znaków, to już wiemy na pewno, że wyrazy nie są anagramami.
  • Podane słowa zamieniamy w tablice znaków, które w następnym kroku sortujemy.
  • Na samym końcu porównujemy nasze posortowane tablice – Jeżeli są równe to nasze słowa są anagramami 🙂

Kurs Java – Darmowy Kurs Programowania w Javie

W ramach tego materiału skupiliśmy się na anagramie. Jeżeli chcesz kontynuować swoją przygodę z Javą i poznać różne struktury, które oferuję ten język programowania – to zapraszam do zapoznania się z różnymi tematami z serii o Javie.
ZOBACZ 👉: Kurs Java | Darmowy Kurs Programowania w Javie

Anagram Generator – Algorytm – Java

Tworzenie anagramów może być nie lada łamigłówką. Im dłuższe wyrazy, tym więcej możliwych kombinacji. Oczywiście możesz sobie wszystko rozpisywać na kartce, jeżeli masz w zanadrzu nadmiar czasu :). Zdecydowanym plusem programowania jest fakt, że to, co „ręcznie” zajęłoby nam kilkanaście minut a może i dłużej, to utworzony raz algorytm może tę pracę wykonać w kilka milisekund.

Przyjrzyjmy się poniższej metodzie, która przyjmuje jako dane wejściowe słowo i zwraca listę wszystkich możliwych anagramów tego słowa.

    public static Set<String> generateAnagrams(String word) {
        Set<String> result = new HashSet<>;();
        if (word.length() == 0) {
            result.add("");
            return result;
        }
        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            String rest = word.substring(0, i) + word.substring(i + 1);
            Set<String> subAnagrams = generateAnagrams(rest);
            for (String sub : subAnagrams) {
                result.add(c + sub);
            }
        }
        return result;
    }
  • W powyższym kodzie została użyta rekurencja do wygenerowania wszystkich możliwych anagramów danego słowa.
  • Iterując się przez każdy znak słowa wejściowego, następuje generowanie wszystkich możliwych anagramów pozostałych znaków (tj. znaków, które występują po bieżącym znaku).
  • Wygenerowane anagramy są następnie łączone z bieżącym znakiem w celu utworzenia nowych anagramów.
  • Proces ten jest powtarzany rekurencyjnie, aż do wygenerowania wszystkich możliwych anagramów.

Kurs Java – Rekurencja

W ramach tego materiału skupiliśmy się na anagramie – Całkowity materiał dotyczący działania rekurencji znajdziesz poniżej.

ZOBACZ 👉: Rekurencja ➿ rekursja ➿ rekurencja

Java – Anagram – Podsumowanie

W tym materiale dowiedzieliśmy się, czym jest anagram. Przeanalizowaliśmy razem działanie algorytmu, który pozwoli Ci sprawdzić, czy dwa słowa są anagramem.
Wiesz już również, jak napisać algorytm, który wygeneruje wszystkie możliwe anagramy z jednego słowa.

Anagram, to nie tylko fajna łamigłówka, jest to również przydatne zjawisko m.in. w kryptografii.


20+ BONUSOWYCH materiałów z programowania

e-book – „8 rzeczy, które musisz wiedzieć, żeby dostać pracę jako programista”,
e-book – „Java Cheat Sheet”,
checklista – „Pytania rekrutacyjne”
i wiele, wiele wiecej!

Jak zostać programistą

No comments
Share:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *