Написание алгоритма скремблирования текста в обратном направлении

0

объяснение

Я создаю простой скремблер/кодировщик для удовольствия. Учитывая семя и текст для преобразования, алгоритм, чтобы превратить исходную строку неразборчивым, заключается в следующем:

  1. Петля через символы заданного пользователем семени, скажем, "lkj"
  2. Прокрутите символы текста для преобразования, скажите "привет",
  3. Получить индекс обоих в соответствии со списком принятых символов; поэтому, если [az] были символами, которые можно было скремблировать, а цикл был на индексе 0 для текста семпла и преобразования, я бы получил l = index 11 и h = index 7
  4. Добавьте эти два индекса вместе. 11 + 7 = 18. Если индекс превышает длину принятого списка, уменьшите эту длину от нового индекса (например, 33 - 26).
  5. Получите символ, соответствующий индексу 18 в принятом списке. s is at index 18
  6. Повторяйте до тех пор, пока все символы преобразования не пройдут, вернув текущий индекс семпла в 0, если текст превышает длину семени

В итоге мы получаем "сумасшедший".

Алгоритм декодирования текста (должен быть с одним и тем же семенем) - это просто сделать все наоборот. Начните в конце строки, начните цикл через семя назад по индексу, который он остановит на (seed.length % text.length), seed.length % text.length индексы вместо добавления, а затем seed.length % text.length результирующую строку. Поэтому, если мы будем вводить "lkj" в качестве семени и "сумо" в качестве текста преобразования, мы получим "привет" обратно при декодировании.

проблема

Похоже, что декодирование работает только иногда. С некоторой комбинацией семян и текста преобразования алгоритм терпит неудачу - но я понятия не имею, что это может быть. Например, используя следующую информацию:

Семя: lkj

Вход: Эй, ребята! Моя электронная почта [email protected], но не посылайте мне ничего U_U

Декодирование не выполняется. Однако, если к концу ввода добавляется "x", он работает. Что может пойти не так?

скрипка

  • 0
    Как насчет включения соответствующих частей вашего кода в ваш вопрос ? В вашей скрипке много кода, и вам будет намного легче получить ответ, если вы сможете выделить соответствующие части.
  • 0
    @MattBurland Тогда я бы включил все, кроме короткого, выделенного раздела «Разное» внизу, так что я подумал, что я мог бы просто сослаться на все это.
Теги:
algorithm

1 ответ

2
Лучший ответ

Похоже, у вас есть одна ошибка, когда длина вашего сообщения кратная длине вашего семени.

Проблемная линия:

var is_currSeed = (numLastWords > 0) ? (numLastWords - 1) : 0

следует изменить на:

var is_currSeed = (numLastWords > 0) ? (numLastWords - 1) : seed.length - 1;

Вот рабочая версия.

  • 0
    Большое вам спасибо, это была проблема! Я заметил, что до того, как начальное значение и длина ввода были одинаковой, не удалось, но вместо этого нужно было добавить исправление для кратных.
  • 0
    @idlackage - я обнаружил ошибку через минуту после того, как ты согласился (и, вероятно, нашел себя). Мы исправили это так же?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню