Szyfr Stukany wymaga bardzo dużego skupienia, żeby odczytać wiadomość. Jest on bardzo dyskretny i wymaga jedynie wystukiwania zaszyfrowanej wiadomości. Należy jednak pamiętać, aby zachować równe tempo, ponieważ inaczej druga osoba może źle odszyfrować. Szyfrowanie polega na zamianie każdej litery na stuknięcia, które symbolicznie będą oznaczane przez kropkę. Do szyfrowania używa się następującej tabelki:
. | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | A | B | C/K | D | E |
2 | F | G | H | I | J |
3 | K | L | M | N | O |
4 | P | Q | R | S | T |
$5 | U | W | X | Y | Z |
W celu zaszyfrowania znaku należy sprawdzić w którym wierszu oraz kolumnie znajduje się dany znak. Tutaj należy uważać, bo znak C oraz K będą szyfrowane tak samo. Obydwie odczytane wartości zamieniamy na tyle stuknięć ile wynoszą. Pomiędzy wystukaniem wiersz i kolumny jak również następnego znaku należy zostawić trochę dłuższą przerwę. Koniec zdania sygnalizuje się wystukując literę X.
Zaszyfrowanie litery Q na pozycji (4, 2) wymaga wystukania ".... ..", gdzie kropka oznacza stuknięcie, a spacja przerwę. Przykładowo, aby zaszyfrować słowa "test" należy wystukać ".... ..... . ..... .... .... .... .....". Jak można zauważyć szyfr ten wymaga dużo pracy dla nawet bardzo krótkich wiadomości, ale im więcej się ich używa tym szybciej i łatwiej się porozumieć.
Celem implementacji jest napisanie funkcji do szyfrowania oraz deszyfrowania tekstu zapisanego małymi literaim alfabetu łacińskiego. Zaszyfrowana oraz odszyfrowana wiadomość zostanie wypisana na standardowe wyjście.
Funkcja szyfrująca szyfruj() przyjmuje jako argument tekst do zaszyfrowania. Oto jej przykładowy kod:
Podczas szyfrowania dla każdego znaku szukamy jego pozycji w tabeli. Tutaj należy uważać na połączone litery C oraz K co skutkuje dalej, że wszystkie litery po K są przesunięte o jedną pozycję wcześniej. Na koniec każdej iteracji należy dopisać odpowiednią ilość kropek: najpierw tyle jaki ma numer wiersz, a potem, która to jest kolumna.
W celu dopisania kropek została zadeklarowana dodatkowa funkcja dopiszKropki(), która na końcu aktualnego wyniku dopisuje przekazaną ilość kropek.
Zaszyfrowaną wiadomość można rozszyfrować przy pomocy funkcji odszyfruj(). Analogicznie jak w przypadku funkcji szyfrującej wystarczy podać tekst do rozszyfrowania. Oto przykładowy kod:
Dopóki nie zostanie osiągnięty koniec tekstu w każdej iteracji po dwa razy zliczane są kolejne kropki, aż do wystąpienia spacji. Potem na podstawie odczytanej pozycji dopisywana jest odpowiednia litera. Należy zauważyć, że w odszyfrowanej wiadomości nigdy nie wystąpi litera K, ponieważ informacja ta została utracona i w miejsce tej litery będzie litera C.
W celu przetestowania napisanych funkcji można skorzystać z poniższego kodu. Wczytuje on tekst do zaszyfrowania, a następnie wypisuje zaszyfrowaną wiadomość, a potem ją deszyfruje.