Szyfry przestawieniowe, anagramy - 2h


Cele ogólne
Uczeń:
  • planuje kolejne kroki rozwiązywania problemu, z uwzględnieniem podstawowych etapów myślenia komputacyjnego (określenie problemu, definicja modeli i pojęć, znalezienie rozwiązania, zaprogramowanie i testowanie rozwiązania) (I.1),
  • stosuje przy rozwiązywaniu problemów z różnych dziedzin algorytmy poznane w szkole podstawowej oraz algorytmy na tekstach: porównywania tekstów, wyszukiwania wzorca w tekście metodą naiwną, szyfrowania tekstu metodą Cezara i przestawieniową (I.2b),
  • sprawdza poprawność działania algorytmów dla przykładowych danych (I.5),
  • projektuje i programuje rozwiązania problemów z różnych dziedzin, stosuje przy tym: instrukcje wejścia/wyjścia, wyrażenia arytmetyczne i logiczne, instrukcje warunkowe, instrukcje iteracyjne, funkcje z parametrami i bez parametrów, testuje poprawność programów dla różnych danych; w szczególności programuje algorytm z punktu I.2 (II.1),
  • w zależności od problemu rozwiązuje go, stosując metodę wstępującą lub zstępującą (RI.1),
  • objaśnia dobrany algorytm, uzasadnia poprawność rozwiązania na wybranych przykładach danych i ocenia jego efektywność (RI.3),
  • dyskutuje na temat roli myślenia komputacyjnego i jego metod, takich jak: abstrakcja, reprezentacja danych, dekompozycja problemu, redukcja, myślenie rekurencyjne, podejście heurystyczne w rozwiązywaniu problemów z różnych dziedzin (RI.8),
  • stosuje zasady programowania strukturalnego i obiektowego w rozwiązywaniu problemów (RII.2),
  • sprawnie posługuje się zintegrowanym środowiskiem programistycznym przy pisaniu, uruchamianiu i testowaniu programów (RII.3).
  • definiuje pojęcia: szyfr przestawieniowy, szyfr kolumnowy, anagram.
  • wyjaśnia, w jaki sposób powstaje szyfrogram w szyfrach przestawieniowych.
  • implementuje algorytmy szyfrujące z wykorzystaniem sortowania i zliczania,
  • szyfruje informacje szyfrem kolumnowym.
  • sprawdza, czy dwa słowa są anagramami.
  • rozróżnia algorytmy sprawdzające, czy podane słowa są anagramami, i określa czasową złożoność obliczeniową tych algorytmów.
  • tworzy i wywołuje w języku C++ funkcje implementujące algorytmy szyfrów przestawieniowych.
  • Przydatne narzędzia/oprogramowanie
  • komputer z zainstalowanym środowiskiem Code::Blocks http://www.codeblocks.org/downloads/binaries
  • Kodowaniew online:
  • Lista ananimów. Podane na tej liście pary słów nie są przypadkowe – każde słowo z pary ma znaczenie. Są tam też słowa o tematyce informatycznej, na przykład nazwa firmy Intel i jej ananim letnhttp://palindromy.pl/pal_roz.php
  • Istnieją internetowe narzędzia generujące anagramy dla podanych słów według określonych wcześniej założeń. Przykładem takiego narzędzia jest https://wordlist.eu/anagramy
  • Zapoznaj się tekstem w podręczniku strony od 182 do 189 ze szczególnym uwzględnieniem Podsumowania.

    Przykłady szyfrów przestawieniowych

    Ćwiczenie wstępne (https://pl.spoj.com/problems/AL_30_02/) : AL_30_02 - Enigma w wersji light

    Jaś i jego dziadek znów bawią się w kryptologów. Zasady zabawy są takie same jak dawniej. Dziadek szyfruje pewne wiadomości, a Jasio próbuje je odszyfrować. Tym razem dziadek znów wymyślił niezbyt skomplikowany szyfr przestawieniowy.
    Twoim zadaniem jest napisać dla Jasia program, który będzie automatycznie deszyfrował teksty przygotowane przez dziadka.

    Wejście

    Nieokreślona liczba linii z wiadomościami zaszyfrowanymi przez dziadka Jasia.
    Wiadomości złożone są jedynie z wielkich liter angielskiego alfabetu oraz spacji.
    Wiadomość w jednej linii ma co najmniej 1 znak i nie więcej niż 100 znaków.

    Wyjście

    Taka sama liczba linii jak na wejściu. W każdej z nich odszyfrowana wiadomość z danej linii wejściowej.
    Przykład Wejście:

    MAL KA AATO
    IKELO L BKELO
    WAMGIN W LIJSRE ETHGI

    UWAGA: Zadanie ma formę łamigłówki, dlatego celowo nie podano w treści dokładnej zależności pomiędzy danymi wejściowymi i wyjściowymi. Z tego samego powodu nie ma wyjścia dla przykładu.

    Anagram słów kilka ...

    Sortowanie łańcucha tekstowego:

    Załóżmy że chcemy posortować łańscuch tekstowy - s złożony (metoda bąbelkowa) np ALAMAKOTA :

    Anagram - badanie metodą wykorzystującą sortowanie

    >

    Specyfikacja Dane: s1, s2 - napisy złożone z wielkich liter alfabertu łacińskiego.
    Wynik:wartość logiczna prawda, jeśli s1 i s2 są anagramami, fałsz - w przeciwnym wypadku


    Porównanie metod sortowania





    Podsumowanie

    Podsumowanie



  • Podczas szyfrowania informacji szyfrem przestawieniowym zmienia się kolejność znaków w tekście jawnym. W szyfrogramie występują wszystkie znaki tekstu jawnego.
  • Przykładem szyfru przestawieniowego jest szyfr kolumnowy.
  • Aby zaszyfrować tekst jawny szyfrem kolumnowym, zapisujemy tekst jawny w wierszach o takiej samej długości (ustalonej przez szyfrującego), a następnie odczytujemy kolejno znaki z poszczególnych kolumn (kolejność przeglądania kolumn należy wcześniej ustalić).
  • Aby sprawdzić, czy dwa słowa są anagramami, można posortować znaki w słowach i porównać znaki na kolejnych pozycjach lub policzyć wystąpienia poszczególnych znaków w obu słowach i porównać liczby tych wystąpień.




  • Ćwiczenia, zadania
    Zad. 1
    Napisz program szyfrujący szyfrem kolumnowym tekst wczytany z klawiatury. Pamiętaj, aby tekst wczytać za pomocą funkcji getline, ponieważ może on zawierać spacje. Użyj zmiennej klucz, gdzie klucz to liczba całkowita wieksza od 1 a mneijsza od ilości znaków wczytanych do zaszyfrowania.

    Zad. 2
    Napisz programszyfrujący szyfrem kolumnowym tekst wczytany z klawiatury. Kolejność odczytywania znakó z kolumn określają cyfry tworzące klucz, a liczbę kolumn wskazuje długość klucza
    Specyfikacja
    Dane: tj - tekst jawny złożony z wielkich liter alfabetu łacińskiego, kl - napis złożony z niepowtarzających się cyfr dziesiętnych mniejszych od długości klucza kl.
    Wynik: szyfrogram - tekst jawny tj zaszyfrowany szyfrem kolumnowym o liczbie kolumn i ich kolejności określonych przez klucz kl.

    Zad. 3
    Napisz program wczytujący dwa słowa i wypisujacy "TAK", gdy podane słowa są anagramami, "NIE" - w przeciwnym wypadku. Zastosuj algorytm wykorzystujący zliczanie.

    1. Napisz program wczytujący trzy słowa i sprawdzajocy, czy są one anagramami.

    2. Napisz program, który wczyta dowolny tekst z klawiatury i zaszyfruje go szyfrem przestawieniowynł polegającym na zamianie miejscami znaków na pozycjach parzystych i nieparzystych.

    3. Napisz program, który sprawdzi, czy dwa słowa są anagramami. Program powinien wczytać dane z pliku tekstowego.

    4. Napisz program wczytujący dowolny tekst z klawiatury oraz liczbę będącą kluczem szyfrowania (liczbę kolumn). Program powinien szyfrować wczytany tekst szyfrem przestawieniowym polegającym na spiralnym odczytaniu tekstu Jawnego zapisanego wierszami zgodnie z poniższym przykładem.
      Przykład:
      Tekst jawny: ALA MA KOTA 1 PSA
      Klucz: 4 Szyfrogram: K SXXXAIOMALA AP TA

    5. Napisz program szyfrujący tekst szyfrem kolumnowym z kluczem określającym liczbę kolumn i kolejność ich przeglądania tak, aby mogło być więcej niż 10 kolumn.

    6. Napisz program, który z pliku tekstowego przekazanego przez nauczyciela (np. szyfrogram_kolumnowy.txt) wczyta jednowierszowy szyfrogram i klucz szyfrowania. Szyfrogram powstał przez zaszyfrowanie tekstu jawnego szyfrem kolumnowym. Klucz (drugi wiersz pliku) jest napisem złożonym z niepowtarzających się cyfr dziesiętnych mniejszych od długości klucza i określa liczbę kolumn oraz kolejność ich przeglądania. Wynikiem działania programu powinien być tekst jawny wyświetlony na ekranie.


    Zadanie M1. Anagram

    Anagram to słowo powstałe z innego słowa przez przestawienie liter. Przez słowo rozumiemy w tym zadaniu dowolny ciąg liter alfabetu łacińskiego.

    Przykłady anagramów:
    dla słowa: barok – korba, robak, arobk, rokab, orkab …
    dla słowa: ranty – tyran, narty, ntyra, natyr, ytnar …
    W pliku tekstowym anagram.txt znajduje się 200 wierszy zawierających po 5 słów w każdym wierszu. Słowa oddzielone są znakiem odstępu. Długość każdego ze słów wynosi od 1 do 20 znaków.

    Przykład: abcd cdba dbac cbad dcba
    barbakan xle ala foto otof
    smok ayszkm lampa ayszkm bakara
    skok arabanta oko agnieba dyskietka
    … …


    Napisz program w wybranym przez siebie języku programowania, za pomoc którego wykonasz poniższe polecenia:

    a/ Wyszukaj w pliku anagram_m1.txt te wiersze, w których wszystkie słowa znajdujące się w danym wierszu mają taką samą liczbę znaków. Zapisz te wiersze w pliku odp_M1a.txt.
    b/ Wyszukaj w pliku anagram.txt wszystkie wiersze tekstu, w których wszystkie słowa są anagramami pierwszego słowa w danym wierszu. Zapisz te wiersze w pliku odp_M1b.txt.

    Zadanie M2 - Anagramy inaczej

    Moda w Bajtolandii zmienia się szybko – popularność straciły tkaniny ze słowami powtarzającymi się we wzorach. Sklep chciałby złożyć nowe zamówienie, tym razem wyłącznie na te tkaniny, których wzory to czteroliterowe różne słowa, będące anagramami.
    Napisz program podający liczbę wierszy w pliku anagram_m2.txt , w których wszystkie słowa to czteroliterowe anagramy, które się nie powtarzają. Wynik programu zapisz do pliku najmodniejsze_tkaniny.txt.

    Przykładowe rozwiązania oraz komentarze do wybranych ćwiczeń i zadań
    Zad. 1: Rozwiązanie przykładowe zad. 1
    Zad. 2: Rozwiązanie przykładowe zad. 2
    Zadanie M1. Anagram:
    a/
    abcd cdba dbac cbad dcba
    wrona rossa slowo gwert rezas
    grant hello zakon lloeh hello
    kabaret kabanos kabaret gertyfu kabaret
    ola ala aga oal ola
    rezas rossa zaser sarez rezas
    foto foto tofo tofo foto
    romans romans normag masrom ansrom
    ekran ranek lampa zakon ekran
    korba orkan delpu pudel udelp
    czek azer reza zare rzea
    cebula romans romans mansro romans
    kruk kruk buka zuka nuka
    agent rossa serce cerse sdfrt
    qwerty wertyq wertyu magnor normag
    glob lobg bogl glbo gblo
    triada dariat aadrit iatdar adatri
    kotek tekok teokk kokte otekk
    obrus bruso soubo seawo rusob
    rower werro werro owerr erwor
    ipfon ipfon fonip ipfon zakop
    nerka drewn korba korba korba
    patyk wrona wrona wrona wrona
    foto tofo foot ftoo ootf
    spiker kerspi erspik erspki kiersp
    burza orkan lukde pudeh lerfy
    

    b/
    abcd cdba dbac cbad dcba
    foto foto tofo tofo foto
    glob lobg bogl glbo gblo
    triada dariat aadrit iatdar adatri
    kotek tekok teokk kokte otekk
    rower werro werro owerr erwor
    foto tofo foot ftoo ootf
    spiker kerspi erspik erspki kiersp
    

    Zadanie m2 odp: 10