ROT

ROTをPythonで。

list_A="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
list_a=list_A.lower()
list_0="0123456789"

def rot_a(c,k):
    if list_A.find(c) >=0:
        list= list_A
    elif list_a.find(c) >=0:
        list= list_a
    elif list_0.find(c) >=0:
        list= list_0
    else:
        return c 

    l = len(list)
    position = list.find(c)
    p= (position + k) % l
    return list[p]

def rot(c,k):
    l=len(c)
    p=""
    for i in range(l):
        p+=rot_a(c[i],k)
    return p

ASCIIコードに変換してMod計算するような方法も考えましたが、後々keyed ROTに拡張することを考えて文字列A-Zの文字列自体を持つことにしました。Ingressでの使用のため、数字についてもROTに対応します。

rot_aが一文字だけのROT、メインのROTではrot_aを全文字に適用する作りです。このrot_aはVigenereでも使います。

広告

ROT” への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中