Код, который является словом вперед и другим словом назад

Для подарка я пытаюсь создать код, который читает как определенное слово вперед и другое слово назад. Пример (0,1,2 доступные символы):

D = 02, E = 01, H = 201, L = 1, O = 211, R = 10, W = 11

Затем пара "ПРИВЕТ" / "МИР" была бы

2010111211 ПРИВЕТ
1 121 110 102 МИРА

Я хотел бы сгенерировать код, который соответствует другим парам слова. Очевидно, я не могу грубая сила решение (если Вы существуете для той пары). Вся оптимизация / методы поиска, которые я знаю (моделируемый отжиг, восхождение на вершину, генетический алгоритм) дают мне несовершенные решения только, если пары слова длинны.

Вышеупомянутый пример был найден в генетическом алгоритме, который я записал для решения этого, но после многих поколений с различными параметрами и порядком слов, и т.д. он никогда вполне достигает 100%.

Как я могу приблизиться к этому по-другому? Длина каждого ключевого слова не очень важна, должны быть меньше чем 10 символов на символ, количество различных используемых символов должно остаться под 5, и код не должен быть без префиксов.

Править: После комментариев вот то, что я на самом деле пытаюсь сделать: В основном я хочу иметь ожерелье с бусинками различной формы (на символ), которые кодируют слово, и если Вы скручиваете его затем, он кодирует другое слово. Поэтому ключевые слова не должны быть чрезвычайно долгими, и не может быть слишком многих различных символов.

Редактирование 2: Вперед, это должно считать ДРЕЗДЕН FESTUNG (или FESTUNGDRESDEN), назад некоторая комбинация универсальных "хороших пожеланий", т.е. Друзья, FORTUNE, УДАЧА, СЧАСТЬЕ (или немецкий эквивалент этих слов) или просто имя MARIA (да, Вы угадали, это для девочки...). Не имеет значения, если эти слова формируют пар (т.е. FESTUNG читает назад в FORTUNE, ДРЕЗДЕН читает назад в ДРУЗЕЙ), или если это - долгая версия (т.е. FESTUNGDRESDEN читает назад в FRIENDS&FORTUNE).

Заранее спасибо!

6
задан Duddle 25 June 2010 в 10:39
поделиться

2 ответа

Я пытался превратить ФЕСТУНДРЕСДЕН в МАРИЮ.

Я нашел возможную кодировку, которая не удовлетворяет всем указанным условиям, поскольку для одной из букв требуется более 10 символов.

«Ручная» процедура: Поскольку оба слова имеют только одну букву («R»), я разбил оба слова следующим образом

  --------------->
  FESTUNGD R ESDEN
    A I    R  A M
   <--------------

, таким образом, сохранив код для R как палиндром

   cod(FESTUNGD) = cod*(IA)
   and
   cod(ESDEN) = cod*(MA)

   where cod*() means "reading the code backwards"

. разделил проблему на один шаг дальше, разделив коды для E и T

  ----------------------------------->
  FES(T2) (T1)UNGD R ESD(E3) (E2)(E1)N
    A        I     R      A      M
   <----------------------------------

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

Так или иначе, так я смог записать уравнения для каждого закодированного символа. Единственная сложная часть - это «А», так как она повторяется. Это приводит к следующему уравнению

  cod("FES") & (T2) = cod("ESD") & (E3)

. Действуя аналогичным образом (далее разбивая коды для буквы X в X (1) X (2) X (3)), я переписал приведенное выше уравнение на части и решил его. Несложно, но утомительно.

Результат:

F= 21243
E= 2124
S= 3212
T= 125
U= 1

N = 4

G= 3
D= 4321
R= 33
N= 2

M= 24
A= 212123421234212 --> Here is the looong one
I= 12343215

So, when you read

      f     e    s    t   u n g d    r  e    s    d    e    n
      21243 2124 3212 125 1 2 3 4321 33 2124 3212 4321 2124 2
   <--------------------------------------------------------
   v  backwards is:
   |
   |  M  A               R  I        A 
   |  24 212123421234212 33 12343215 212123421234212
   ------------------------------------------------->

Я думаю, что это решение не способствует развитию алгоритмов, но, надеюсь, оно внесет вклад в лучшее дело любви :)

РЕДАКТИРОВАТЬ> ДРУЖБА

. Следуя той же процедуре, что и выше (и предложению, сделанному Джастином Л.), я попробовал использовать слово «Дружба», которое, кажется, совпадает с идеей, которую вы хотите передать.

Со следующей таблицей:

f 434
e 44
s 543
t 22
u 1
n 34
g 5
d 3
r 43

i 345
h 122
p 44434

Результатом является

       f   e  s   t  u  n   g  d  r  e   s    d   e   n
       434 44 543 22 1  34  5  3  43 44  543  3   44  34
   <-----------------------------------------------------
   v  and backwards is:
   |
   |   f   r   i   e   n   d  s   h   i   p
   |   434 43  345 44  34  3  543 122 345 44434
   ---------------------------------------------->

Обратите внимание, что уравнения для «t», «u» и «h» не зависят от остальной системы. Таким образом, вы можете выбрать для них любую неиспользованную комбинацию {3,4,5} (любой длины), возможно, сделав ожерелье всего из 3 символов.Для этого вы можете попробовать

 t -> 4
 u -> 54

 which results in

 h -> 454

 all 3 are unused and available codes

Не забудьте загрузить фото ожерелья!

Viel Glück!

Редактировать 1,5 года спустя

Вот две замечательные фотографии, сделанные OP с результатами:

enter image description here

enter image description here

6
ответ дан 16 December 2019 в 21:34
поделиться

Если код не должен быть без префикса и вам не важно, насколько длинными будут коды, то достаточно одного символа!

Вы кодируете каждый символ разным количеством единиц, чтобы в итоге общее количество единиц для одного слова совпадало с общим количеством единиц для другого.

Чтобы сделать это, удалите общие символы.

В случае с HELLO и WORLD остаются HEL и WRD.

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

Один из способов сделать это - выбрать нечетные числа больше 1 для одной группы и четные числа для другой (и, возможно, 1, в зависимости от числа в каждой группе).

Для HEL и WRD вы выбираете

{3,5,7} и {1,6,8}.

Для обычных, теперь вы можете выбрать числа, не входящие ни в одну из групп, и готово! (Хотя для слов разной длины необходимо соблюдать некоторую осторожность).

Однако у меня такое чувство, что я что-то не так понял.

2
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

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