Проблема обратного кодирования / декодирования идентификатора

  • СЦЕНАРИЙ:

A) У тебя есть charset из 100 в котором первый characters являются A, B, C и последнее characters являются -, _,

B) encode функция возвращает строку длины 10,

C) encode преобразует number в корреляции number в charset

Пример: A == 0 || B == 1 || C == 2 || - == 98 || _ == 99

Количество возможностей: 100 ^ 10 знак равно 1e+20 || 100,000 Quadrillion || 100,000,000,000 Billion,

  • ПРОБЛЕМА: Как бы вы выяснили, 999 является iii, _i или же i_?
  • Замечания: Решение описанной выше проблемы должно работать для любой возможной ситуации.

-1

Решение

выглядит как домашнее задание …

Давайте посмотрим на нашу проблему:

999 не может быть представлен как один символ в нашей кодировке
мы можем закодировать его тремя различными способами

9 9 9 => Я Я Я

99 9 => _I

9 99 => I_

теперь … одна только кодировка не создает кодировку … в этот момент вы, вероятно, должны прочитать о том, что такое «код» … http://en.wikipedia.org/wiki/Code

пожалуйста, обратите внимание, что это не имеет ничего общего с шифрованием …

так что … нам нужен набор правил для кодирования / декодирования нашего кода

так как мы должны создать этот набор правил, это наш свободный выбор, как мы будем обращаться с вещами, если мы будем помнить, каким другим ключевым правилам мы должны следовать …

код должен быть длиной 10 символов … максимум из того, что я вижу, иначе III, возможно, не будет правильным примером нашего кода … AAAAAAAAIII будет … так что давайте предположим, что мы можем отбросить ведущие нули, или Как в этом случае, и далее предположим, что III и AAAAAAAIII идентичны

Теперь у нас есть тот факт, что наш код имеет 100 ^ 10 возможных кодовых слов, которые могут быть достигнуты только в том случае, если каждая комбинация нашей кодировки с длиной 10 является допустимым кодовым словом.

так что все три … III и I_ и _I … должны быть действительными кодовыми словами …

Означает ли это, что все три имеют значение 999?

короткий: нет

долго:

как упоминалось ранее, существует набор правил, необходимый для придания коду смысла …

поскольку нет заданного набора правил кодирования, мы, кажется, можем создать его …

давайте посмотрим на набор правил для кодирования наших обычных 10 базовых чисел …

у нас есть кодировка от 0 до 9 -> 10 цифр

позиция цифры в номере содержит информацию …

123 например можно записать как 1 * 10 ^ 10 + 2 * 10 ^ 1 + 3 * 10 ^ 0

если мы передадим это в нашу новую кодировку … давайте назовем это base 100 … это будет выглядеть так:

123 -> 1 * 100 ^ 1 + 23 * 100 ^ 0

=> 1 = B … 23 = X => 123 -> BX

999 -> 9 * 100 ^ 1 + 99 * 100 ^ 0 -> I_

но кто сказал, что мы должны объявить самую левую цифру в нашем коде самой значимой цифрой?

что если бы мы интерпретировали это иначе?

не 99 * 100 ^ 0 + 9 * 100 ^ 1 = 999 тоже?

да … поэтому мы могли бы написать это как _I тоже …

какой из них правильный сейчас? … это зависит ТОЛЬКО от набора правил нашего кода … если он говорит, что крайняя левая цифра является самой значимой, то ответ I_ … если самая правая цифра является самой значимой, то ответ _I

пока набор правил для кодировки не указан, ответ на этот вопрос не может быть решен … вы можете только попытаться сделать обоснованное предположение и использовать то же соглашение, что и в нашей «нормальной» кодировке base 10 … крайняя левая цифра = наиболее значимая цифра -> I_

но, пожалуйста, имейте в виду … это предположение … если я получу такой вопрос в тесте, я объясню, почему нет ответа, если не указаны правила кодирования.

tldr:

с предоставленной информацией, это свободный выбор, если это i_ или _i

0

Другие решения

Других решений пока нет …