實作這個經典的密文組成方法:方塊密碼。
給定一段英文文字,輸出這段文字的編碼版本。
首先對輸入進行正規化:移除英文文字中的空格與標點符號,並將訊息轉成小寫。
接著,把正規化後的字元拆分成列。這些列在列印時若穿插換行,就可以視為構成一個矩形。
例如,句子
"If man was meant to stay on the ground, god would have given us roots."
正規化後為:
"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"
明文應排列成盡可能接近正方形的矩形。矩形的大小取決於訊息的長度。
如果c是欄數、r是列數,那麼對於r x c的矩形,找出滿足以下條件的最小整數c:
r * c >= length of message,c >= r,c - r <= 1。我們正規化後的文字長度為 54 個字元,因此矩形為c = 8、r = 7:
"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots "
編碼後的訊息,是由左至右逐欄向下讀取而得。
上述訊息編碼後為:
"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"
輸出編碼後的文字時,將它切成能填滿完美矩形(r X c)的分塊,共c個長度為r的分塊,並以空格分隔。
若片語距離完美矩形還差n個字元,就在最後n個分塊各補上一個尾隨空格。
"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau "
注意,如果把這些分塊疊起來,我們就能在視覺上把密文解碼回原始訊息:
"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "