加密方陣

加密方陣

中等

說明

實作這個經典的密文組成方法:方塊密碼。

給定一段英文文字,輸出這段文字的編碼版本。

首先對輸入進行正規化:移除英文文字中的空格與標點符號,並將訊息轉成小寫。

接著,把正規化後的字元拆分成列。這些列在列印時若穿插換行,就可以視為構成一個矩形。

例如,句子

"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 "
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
ARM64 Assembly Exercism

準備好開始 加密方陣 了嗎?

註冊 Exercism,透過 78 個練習 和真人引導來學習並精通 ARM64 Assembly,全部免費。