代码是向前的单词和向后的不同单词

Dud*_*dle 6 language-agnostic encode

对于礼物,我试图创建一个代码,该代码向前读取一个单词,向后反向一个不同的单词.一个例子(0,1,2是可用的符号):

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

然后是"HELLO"/"WORLD"对

2010111211 HELLO
1121110102 WORLD

我想生成一个适合其他单词对的代码.显然,我不能强迫解决方案(如果存在该解决方案).我所知道的所有优化/搜索方法(模拟退火,爬山,遗传算法)只给出了不完美的解决方案,如果单词对很长的话.

上面的例子是在我为解决这个问题而编写的遗传算法中找到的,但是经过多代不同的参数和字序等,它从未达到100%.

我怎么能以不同的方式处理?每个码字的长度不是很重要,每个字符应少于10个符号,所使用的不同符号的数量应保持在5以下,并且代码不需要是无前缀的.

编辑:在评论之后,这是我实际上要做的事情:基本上,我想要一条带有不同形状珠子(每个符号)的项链,这些珠子可以编码一个单词,如果你扭曲它,那么它会编码一个不同的单词.因此,码字不应该太长,并且不能有太多不同的符号.

编辑2:前锋,它应该读FESTUNG DRESDEN(或FESTUNGDRESDEN),倒退一些通用的"美好愿望"的组合,即朋友,财富,幸运,幸福(或德语相当于这些单词)或只是名称MARIA(是的,你猜对了,这对一个女孩来说......).没关系,如果这些单词形成对(即FESTUNG向后读到"财富",DRESDEN向后读到FRIENDS)或者它是长版本(即FESTUNGDRESDEN向后读到FRIENDS&FORTUNE).

提前致谢!

Dr.*_*ius 6

我试图将FESTUNGDRESDEN转换为MARIA.

我发现可能的编码不满足所有指定条件,因为其中一个字母需要超过10个符号.

一个"手动"程序:因为这两个单词只共用一个字母("R"),所以我将这两个单词分解如下

  --------------->
  FESTUNGD R ESDEN
    A I    R  A M
   <--------------
Run Code Online (Sandbox Code Playgroud)

因此,将R的代码保留为回文

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

   where cod*() means "reading the code backwards"
Run Code Online (Sandbox Code Playgroud)

然后我将问题进一步划分为E和T的代码

  ----------------------------------->
  FES(T2) (T1)UNGD R ESD(E3) (E2)(E1)N
    A        I     R      A      M
   <----------------------------------
Run Code Online (Sandbox Code Playgroud)

我认为这可能是未来开发"真实"算法的起点.

无论如何,通过这样做,我能够记下每个编码字符的方程式.唯一困难的部分是"A",因为它是重复的.这导致以下等式

  cod("FES") & (T2) = cod("ESD") & (E3)
Run Code Online (Sandbox Code Playgroud)

以类似的方式进行(进一步分割X(1)X(2)X(3)中字母X的代码),我将上述等式重写为子部分并解决了它.不难,但乏味.

结果是:

F= 21243
E= 2124
S= 3212
T= 125
U= 1
Run Code Online (Sandbox Code Playgroud)

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
   ------------------------------------------------->
Run Code Online (Sandbox Code Playgroud)

我认为这个解决方案在算法开发领域没有贡献,但希望它能在爱的更好的原因:)

编辑>友谊

按照与上述相同的程序(以及Justin L.提出的建议),我尝试使用"友谊"这个词,这似乎与你想要传达的想法一致.

使用下表:

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

i 345
h 122
p 44434
Run Code Online (Sandbox Code Playgroud)

结果是

       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
   ---------------------------------------------->
Run Code Online (Sandbox Code Playgroud)

请注意,"t""u"和"h"的等式独立于系统的其余部分.所以你可以为他们选择{3,4,5}(任意长度)的任何未使用的组合,可能只用3个符号制作项链.为此,你可以试试

 t -> 4
 u -> 54

 which results in

 h -> 454

 all 3 are unused and available codes
Run Code Online (Sandbox Code Playgroud)

别忘了上传项链照片!

VielGlück!

1.5年后编辑

以下是OP拍摄的两张精彩照片,结果如下:

在此输入图像描述

在此输入图像描述