W jaki sposób zakodować litery na klawiaturze qwerty (26 znaków) liczby od 0-9 (10 znaków) i znaki specjalne - / spacja (3 znaki) co daje nam łącznie 39 znaków tak aby po zakodowaniu otrzymać jakieś liczby złożone z maksymalnie10 cyfr, mogą to być 1,2,3,4 liczby które pozwolą na odkodowanie i uzyskanie tekstu który uprzednio zakodowaliśmy
np. ALA MA 3 KOTY – 1 RUDY / 2 BIALE
przykładowy wynik:
A=2513597563
B=56329751564
C=9561257525
kodowanie tekstu
- vpprof
- Użytkownik

- Posty: 492
- Rejestracja: 11 paź 2012, o 11:20
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 26 razy
- Pomógł: 64 razy
kodowanie tekstu
Myślę, że tu nie da się przeskoczyć pewnych elementarnych arytmetycznych faktów: na \(\displaystyle{ l}\) miejscach można zakodować maksymalnie \(\displaystyle{ 39^l}\) różnych komunikatów używając \(\displaystyle{ 39}\)-znakowego alfabetu oraz tylko \(\displaystyle{ 10^l}\) komunikatów używając \(\displaystyle{ 10}\)-znakowego alfabetu, więc jeśli oznaczymy przez \(\displaystyle{ l}\) długość rozkodowanej wiadomości, to zakodowana wiadomość będzie długości \(\displaystyle{ \left\lceil\log_{10}39^l\right\rceil = \left\lceil l \log_{10}39\right\rceil}\) czyli ok. \(\displaystyle{ 1,6}\) raza dłuższa.
A jak zakodować? Można potraktować wiadomość jako liczbę zapisaną w systemie o podstawie \(\displaystyle{ 39}\) i przekonwertować ją na system dziesiętny (każdy znak trzeba ponumerować i pomnożyć przez \(\displaystyle{ 39^{m-1}}\), gdzie \(\displaystyle{ m}\) to numer miejsca, na którym on stoi). Można też dzielić ją na mniejsze liczby, ale to spowoduje większe marnotrawstwo miejsca, bo \(\displaystyle{ 39}\) nie jest całkowitą potęgą dziesiątki, a zatem na pierwszym miejscu po konwersji nie będą się pojawiać wszystkie możliwe dziesiętne cyfry, czyli będzie ono w pewnym stopniu niewykorzystane.
Można też, i to chyba najłatwiejsze, ponumerować każdy znak i po prostu zapisać jego numer, tworząc ciąg złożony z dwucyfrowych liczb oznaczających kolejne znaki. Ale to też marnotrawstwo miejsca, bo każda liczba będzie w zakresie \(\displaystyle{ \left\langle 0;38\right\rangle}\) a nie \(\displaystyle{ \left\langle 0;99\right\rangle}\).
Inne sposoby nie przychodzą mi do głowy…
A jak zakodować? Można potraktować wiadomość jako liczbę zapisaną w systemie o podstawie \(\displaystyle{ 39}\) i przekonwertować ją na system dziesiętny (każdy znak trzeba ponumerować i pomnożyć przez \(\displaystyle{ 39^{m-1}}\), gdzie \(\displaystyle{ m}\) to numer miejsca, na którym on stoi). Można też dzielić ją na mniejsze liczby, ale to spowoduje większe marnotrawstwo miejsca, bo \(\displaystyle{ 39}\) nie jest całkowitą potęgą dziesiątki, a zatem na pierwszym miejscu po konwersji nie będą się pojawiać wszystkie możliwe dziesiętne cyfry, czyli będzie ono w pewnym stopniu niewykorzystane.
Można też, i to chyba najłatwiejsze, ponumerować każdy znak i po prostu zapisać jego numer, tworząc ciąg złożony z dwucyfrowych liczb oznaczających kolejne znaki. Ale to też marnotrawstwo miejsca, bo każda liczba będzie w zakresie \(\displaystyle{ \left\langle 0;38\right\rangle}\) a nie \(\displaystyle{ \left\langle 0;99\right\rangle}\).
Inne sposoby nie przychodzą mi do głowy…
