2019年8月1日木曜日

開発環境

中学数学からはじめる暗号入門 ~現代の暗号はどのようにして作られたのか~ (知りたい!サイエンス 141) (関根 章道(著)、技術評論社))の前編(暗号の歴史あれこれ)、第3章(上杉謙信、誰思う - 字変四八の奥義と日本版字変四八の奥義)の暗号を作って解いてみよう(43ページ、Part 5(字変四八の奥義))の解答を求めてみる。

コード

Python 3

#!/usr/bin/env python3
import pprint

rows = {o: i for i, o in enumerate('一二三四五六七')}
cols = {o: i for i, o in enumerate('壱弐参肆伍陸漆')}
table = []
row = []
is_first_row = True

for i, c in enumerate('あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ'
                      'まみむめもやゆよらりるれろわをん"⚪ '):
    if i % 7 == 0 and not is_first_row:
        table.append(row)
        row = [c]
    else:
        is_first_row = False
        row.append(c)
table.append(row)
pprint.pprint(table)

encoded = '二伍二漆七伍七肆二陸一参'

for i, o in enumerate(encoded):
    if i % 2 == 0:
        print(table[rows[o]][cols[encoded[i + 1]]], end='')
print()

入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))

$ ./sample2.py
[['あ', 'い', 'う', 'え', 'お', 'か', 'き'],
 ['く', 'け', 'こ', 'さ', 'し', 'す', 'せ'],
 ['そ', 'た', 'ち', 'つ', 'て', 'と', 'な'],
 ['に', 'ぬ', 'ね', 'の', 'は', 'ひ', 'ふ'],
 ['へ', 'ほ', 'ま', 'み', 'む', 'め', 'も'],
 ['や', 'ゆ', 'よ', 'ら', 'り', 'る', 'れ'],
 ['ろ', 'わ', 'を', 'ん', '"', '⚪', '\u3000']]
しせ"んすう
$ 

ということで、元の単語は自然数。

0 コメント:

コメントを投稿