Kalombyr
@Kalombyr

Как можно закодировать три числа в одно с последующей однозначной расшифровкой?

Доброго дня.
Подскажите, пожалуйста, как можно (и можно ли?) провернуть следующее:
Даны три двухзначных числа, из них нужно получить одно двухзначное.
Диапазоны всех трёх чисел от 0 до 30.
То есть, по идее, 30+30+30 = 90 то есть должно влезть, но вот как закодировать, что бы можно было однозначно разделить на три обратно?
ИЛИ
тогда уж в пятизначное?
ИЛИ
три числа от 0 до 30 и ещё три числа от 0 до 9, но так же в пятизначное?
  • Вопрос задан
  • 1969 просмотров
Решения вопроса 3
@evgeniy_lm
Как обычно
код = число1+База*(число2+База*число3)
База в твоем случае 30-1+1=30
расшифровка
Число3 = код mod База^2
Число2 = (код - Число3 * База^2) mod База
Число1 = код - Число3 * База^2 - Число2 * База
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Никак.
Три числа от 0 до 30 - это 313 = 29791 вариант. Так что уложить их в 100 не получится никак.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
Для начала 0..30+0..30+0..30 = 93 значения, а не 90.

Во-вторых сложив, вы обратно не разложите, так как диапазоны пересекаются, и что 25+30 и 30+25 - для результата неважно.

Что можно сделать для перевода число в двухначное:
1. Переводим в двоичную систему, видим что на диапазон от 30 это 11110, и нам нужно 5 бит.
2. Следовательно однозначно закодировать, с возможностью раскодировать три значения, нужно минимум 15 бит.
3. 111111111111111 = 32767
4. Можно использовать систему исчисления с бОльшим основанием таким образом, чтобы 15 бит влезло в 2 символа.
5. Шестнадцатиричной будет недостаточно (7FFF - 4 символа)
6. Следовательно нужно подобрать систему исчисления, где ваше число уместится в два знака. Подозреваю, что 46-ричной (30 + 30/2) должно быть достаточно с запасом, но под рукой готового калькулятора для свободного конвертирования нет, надо поковырять, осталось только подобрать 46 разных символов для обозначения числа.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ElijahTr
Попробуем уместить в 4-значное число:
10 -->> 36

30+31+31 = 6HWB
31+31+30 = 6PM2
31+30+31 = 6PJB

При этом все уже закодировано так что можно однозначно разделить обратно.
Если предположить что от 0 до 30 в 4-ричной системе счисления то уже умещаемся в 3 символа.
4 -->> 36

30+31+31 = 2JH
31+31+30 = 2QK
31+30+31 = 2Q5

Придумайте свою систему счисления, чтобы уложится в 2 символа.

P.S. Вроде нигде не ошибся :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы