トラック
/
AWK
AWK
/
演習
/
スクエア暗号
スクエア暗号

スクエア暗号

中級

説明

古典的な秘密メッセージの作成方法であるスクエアコードを実装します。

英語のテキストが与えられたら、そのテキストをエンコードした結果を出力します。

まず、入力が正規化されます。英語のテキストからスペースと句読点が取り除かれ、メッセージは小文字に変換されます。

次に、正規化された文字が行に分割されます。 これらの行は、間に改行を入れて出力すると、長方形を形作っていると見なすことができます。

たとえば、次の文は

"If man was meant to stay on the ground, god would have given us roots."

次のように正規化されます。

"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"

平文は、できるだけ正方形に近い長方形に整理します。 長方形の大きさは、メッセージの長さによって決まります。

cを列の数、rを行の数とすると、r×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)を埋めるかたまりとして出力します。つまり、長さrのかたまりをc個、スペースで区切って出力します。 完全な長方形にn文字足りないフレーズでは、最後のn個のかたまりをそれぞれ1つの末尾スペースで埋めます。

"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn  sseoau "

これらの行を積み重ねると、暗号文を元のメッセージに視覚的にデコードできることに注目してください。

"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
AWK Exercism

スクエア暗号を始める準備はできましたか?

Exercismに登録すれば、3個のコンセプト92個の演習、そして本物の人間によるメンタリングとともに、AWKを学んでマスターできます。すべて無料です。