我有一个包含整个字母表的字符串,然后我想要一个不同的字符串,方法是选择一个关键字并将其添加到一个确切的位置,然后对字母表的其余字符进行排序。
例如,使用关键字gamer
和结果给出的起始位置'l'
应该是 ->
"abcdefghijklmnopqrstuvwxyz"
"opqstuvwxyzgamerbcdfhijkln"
我已经看到这用于修改后的凯撒密码,但我还没有找到这部分算法的解决方案。
==================================================== =============================== 现在我能写的内容如下:
import List
derange key char = (fst(divided char)\\key) ++ key ++ (snd(divided char)\\key)
abc = ['a'..'z']
divided char = break (char==) abc
示例的给定输出是 ->
Main> 混乱“绘图”'g'
"abcdefplotinghjkmqrsuvwxyz"
所以从“g”的位置我写了关键字“ploting”,其余的字母被添加,没有重复的字符。
但是仍然有一个小问题,因为字母表的其余部分应该从关键字之后的第一个可能的字符开始。因此,正确的输出应该是“uvwxyzplotingabcdefhjkmqrs”。
改变
所以我研究了代码,以获得我想要的结果。起初,我尝试使用keyword
和 字符的具体给定值。我来到的是以下内容:
`concat[drop (length['a'..'z'] - index('a','z') 'l') "gamerbcdfhijklnopqstuvwxyz",take (length['a'..'z'] - index('a','z') 'l') "gamerbcdfhijklnopqstuvwxyz"]`
结果是
"opqstuvwxyzgamerbcdfhijkln"
,正是我想要的。
但后来我试图概括代码,所以我写了这个。
import List
derange key char = concat [drop (length abc - index('a','z') char) def,
take (length abc - index('a','z') char) def]
where abc = ['a'..'z']
def = key ++ (key\\abc)
但现在的输出是
Main> derange "gamer" 'l'
"gamer"
我不知道为什么。有什么建议么?
发现问题,只需要在列表差异内交换 key 和 abc 即可。现在我得到了想要的输出。