#author("2026-06-23T10:25:54+09:00;2023-02-23T23:33:35+09:00","default:vip","vip") #author("2026-06-23T11:19:31+09:00;2023-02-23T23:33:35+09:00","default:vip","vip") [[練習問題]] a = 'abcdefghijklmnopqrstuvwxyz .,-' s = 'qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbki-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotimi.qbubu zj' for i in range(len(a)): candidate = ''.join(';' if e==';' else a[(a.find(e) + i) % len(a)] for e in s) if 'person' in candidate: print(candidate) break #初心者用 # coding:utf-8 table_str = "abcdefghijklmnopqrstuvwxyz .,-abcdefghijklmnopqrstuvwxyz .,-" encrypted = "qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbki-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotimi.qbubu zj" A = "abcdefghijklmnopqrstuvwxyz .,-abcdefghijklmnopqrstuvwxyz .,-" B = "qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbki-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotimi.qbubu zj" G = [] table = [] for c in table_str: table.append(c) # table は ['a', 'b', ...] になった for i in range(len(A)): G.append(A[i:i + 1]) L = ["p", "e", "r", "s", "o", "n"] for k in range(1,len(A)/2): N = "" for q in range(len(L)): w = G.index(L[q]) N += G[w + k] if N in B: C = [] H = "" for t in range(len(B)): C.append(B[t:t + 1]) for y in range(len(B)): if C[y] == ";": H += ";" else: v = G.index(C[y]) H += G[v - k] print H needle_chars = ["p", "e", "r", "s", "o", "n"] for stride in range(1, len(table)//2): # "person"をstride幅で暗号化 needle_enc = "" for c1 in needle_chars: idx = table.index(c1) needle_enc += table[idx + stride] # 問題の暗号文が暗号化済"person"を含んでいれば勝ち if needle_enc in encrypted: decrypted = "" for c2 in encrypted: if c2 == ";": decrypted += ";" else: idx2 = table.index(c2) decrypted += table[idx2 - stride] # pythonはリスト番号がボチボチ負でもOK print(decrypted) break