python 点到围栏距离_围栏密码-寻找更好的解决方案

我用Python编写了铁路围栏密码。我想知道是否有更好的解决办法。

对于那些不知道什么是围栏密码的人来说,它基本上是一种以螺旋方式创建线性模式的方式编写纯文本的方法。

示例-当“FOOBARBAZ”围栏使用3键时。F . . . A . . . Z . . .

. O . B . R . A . Q . X

. . O . . . B . . . U .

逐行读取上述螺旋,密码文本变为“FAZOBRAQXOBU”。在-Rail fence - Wikipedia上阅读更多内容。def cipher(s, key, graph=False) :

down=True

raw_out=[]

out=''

i=0

for x in range(key) :

raw_out.append({})

for pos in range(len(s)) :

raw_out[i][pos]=s[pos]

if i==key-1 :

down=False

if i==0 :

down=True

if down :

i=i+1

else :

i=i-1

for p in raw_out :

for q in p :

out+=p[q]

if graph :

return raw_out

return out

def decipher(s, key) :

map_list=cipher(s, key, True) #CREATING JUST FOR MAPPING - WHICHth CHARACTER OF THE STRING - IS WHICHth CHARACTER OF THE CIPHER

new={}

out=''

s_counter=0

for x in map_list :

for y in x :

new[y]=s[s_counter]

s_counter+=1

for p in new :

out+=new[p]

return map_list

我想知道是否有更好的方法来做这个,因为我的程序是非常昂贵的,它使用两个字典。

欢迎使用任何语言编写代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值