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).
提前致谢!
我试图将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拍摄的两张精彩照片,结果如下:

