算法描述
不管輸入字符串多長,把該字符串填到一個剛好合適的N*N的正方形的格子中,然後以對角線爲對稱線,對格子裏的字母進行交換,然後對摺進行交換,列如,輸入abcd則填入2x2的方格中:
a | b |
c | d |
先對角線交換,變爲:
a | c |
b | d |
然後對摺交換,變爲:
b | d |
a | c |
則密文爲:bdac
python實現
# 密文解密
import math
def Deco(mw):
l = len(mw)
n = int(math.sqrt(l))
if n*n < l:
n = n + 1
a = [None] * n * n
b = [None] * n * n
for i in range(0,n*n):
if i < l:
a[i] = mw[i:i+1]
else:
a[i] = '-'
#print(a)
for i in range(0,n): # 行
for j in range(0,n): # 列
s = a[i*n+j]
# 上下對摺
ti = n - i - 1
tj = j
# 斜對角線
ii = tj
jj = ti
b[ii*n+jj] = s
#print(b)
ss = ""
for i in range(0,n*n):
if b[i] != '-':
ss += b[i]
return ss
# 密文
str = input("請輸入密文:")
re = Deco(str)
print("明文:" + re)