kodowanie tekstu

Matematyczne łamigłowki i zagadki...
lolas32
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 1 paź 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: grudziądz
Podziękował: 1 raz

kodowanie tekstu

Post autor: lolas32 »

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
Awatar użytkownika
vpprof
Użytkownik
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

Post autor: vpprof »

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…
ODPOWIEDZ