2019年2月14日木曜日

開発環境

今日読み始めた本、中学数学からはじめる暗号入門 ~現代の暗号はどのようにして作られたのか~ (知りたい!サイエンス 141) (関根 章道(著)、技術評論社)の前編(暗号の歴史あれこれ)、第1章(高校生、ダイヤモンドを盗まれる?! - アトバシュ式暗号)の暗号を作って解いてみよう(Par1)の解答をPythonで求めてみる。

コード

Python 3

#!/usr/bin/env python3
def atbash(letters: str) -> str:
    '''
    >>> atbash('')
    ''
    >>> atbash('A')
    'Z'
    >>> atbash('M')
    'N'
    >>> atbash('AMZ')
    'ZNA'
    '''
    table = {chr(ord('A') + i): chr(ord('Z') - i) for i in range(26)}
    return ''.join([table[letter] for letter in letters])


if __name__ == '__main__':
    import doctest
    doctest.testmod()
    letters_list = ['HVRHFF', 'ZMTLL', 'GZBOLI', 'HDRU']
    for letters in letters_list:
        print(f'暗号: {letters}、復号化: {atbash(letters)}')

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

C:\Users\...>py -3 sample1.py -v
Trying:
    atbash('')
Expecting:
    ''
ok
Trying:
    atbash('A')
Expecting:
    'Z'
ok
Trying:
    atbash('M')
Expecting:
    'N'
ok
Trying:
    atbash('AMZ')
Expecting:
    'ZNA'
ok
1 items had no tests:
    __main__
1 items passed all tests:
   4 tests in __main__.atbash
4 tests in 2 items.
4 passed and 0 failed.
Test passed.
暗号: HVRHFF、復号化: SEISUU
暗号: ZMTLL、復号化: ANGOO
暗号: GZBOLI、復号化: TAYLOR
暗号: HDRU、復号化: SWIF

C:\Users\...>

ということで、整数、暗号、Taylor、Swif。結果を見ると、4つの暗号ではなく一行一暗号で、整数暗号、Taylor Swifみたい。ただTaylor SwifではなくTaylor Swiftで誤植っぽい?

Taylor Swiftと表示されるように、そして一行一暗号にプログラムのコードを修正。

コード

Python 3

#!/usr/bin/env python3
def atbash(letters: str) -> str:
    '''
    >>> atbash('')
    ''
    >>> atbash('A')
    'Z'
    >>> atbash('M')
    'N'
    >>> atbash('AMZ')
    'ZNA'
    '''
    table = {chr(ord('A') + i): chr(ord('Z') - i) for i in range(26)}
    # スペースの分も追加
    table.update({' ': ' '})
    return ''.join([table[letter] for letter in letters])


if __name__ == '__main__':
    import doctest
    doctest.testmod()
    # 2つ目の最後にGを追加
    letters_list = ['HVRHFF ZMTLL', 'GZBOLI HDRUG']
    for letters in letters_list:
        print(f'暗号: {letters}、復号化: {atbash(letters)}')

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

C:\Users\...>py -3 sample1.py
暗号: HVRHFF ZMTLL、復号化: SEISUU ANGOO
暗号: GZBOLI HDRUG、復号化: TAYLOR SWIFT

C:\Users\...>

この後読み進めていったら、p.20に「TAILOR SWFIT」、歌姫テイラースウィフトとあったので、誤植だったみたい。そして、この部分もTA"Y"LORではなくTA"I"LORと誤植?

報告場所があってるかわからないけど、問い合わせで一応報告してみた。

p.17 HDRU -> HDRUG
p.20 TAILOR SWFIT -> TAYLOR SWFIT
ではないかと。

さらに細かいこととして、暗号はANGOOではなくANGOUだったり。

0 コメント:

コメントを投稿