2014-04-06 45 views
-4

TE IT的Saurabh Bothra想與他的一個後輩進行一次祕密的私人對話。但他只能通過他的同班同學馬納夫沙赫與她交談,他不相信他!密碼文本程序:編碼競爭

爲了維護他的隱私,Saurabh尋求Hacking Guru Hardik Anvekar的幫助。哈迪克向他介紹了ROT13--一種在UNIX系統中用於加密的方法。 Saurabh使用了這個想法,並提出了他自己的方法。 Saurabh向他的小輩傳授了這種方法,當他在校園內靠近湖邊遇到她時,他可以在沒有Manav的幫助下與她交談。

在Saurabh的加密技術中,Saurabh會根據字母序列中的第一個字符的位置用另一個字母替換純文本的每個字母。假設第一個字符是G(字母表中的第7個字母),那麼Saurabh會用明文的第一個字符替換6個字符。Saurabh會對前7個字符進行替換,然後他將使用該鍵的第二個字符並用這種方式替代進一步的人物。一旦密鑰的所有字符都用完了 - Saurabh將再次開始使用第一個字符並加密整個明文。

但不幸的是,Saurabh只能設備的方法,但他不能編碼。他相信你寫一個代碼來打印密文,而不是向任何人透露他的祕密方法。

輸入格式

測試用例T(< = 100) 純文本和密鑰由@字符分隔的數量。

輸出格式

密文只能

採樣輸入

1我們最大的弱點就在於放棄。最保險的方法成功總是嘗試只是一個更多的時間。@拉夫

樣本輸出

Uax mxkanymn qyuehymm fcym ch xzmzex lg. Kyv dfso xzmovdi rvt oj npxxzkj oy glqusm ni nls domn ihy dfiv kzdv. 
+0

好的,你的問題是什麼? –

+0

請提供相同的代碼 – user3503041

+0

請閱讀此:http://stackoverflow.com/help/how-to-ask –

回答

0

首先,你已經擁有一個可怕的規範。它包含了一些神奇的數字,而沒有解釋它們來自哪裏。無論如何,爲了好玩,我實現了它,並得到了一個工作程序,這就是我想到的。

考慮的關鍵 '拉夫':

  • 取第一個字母 'G'。其「抵消」比「a」大6。那就是,ord('g') - ord('a') == 6
  • 對於連續7(6 + 1)個字母,使用6的偏移值。也就是說,對於明文中的每個字符,如果它是一個字母,就給它加6(如果結果超過'z',則減去26)。
  • 即使未使用明文中的每個字符,也會消耗這6次偏移中的7次偏移之一!如果角色是標點符號的空間,請不要將6添加到它,但仍然將其視爲7次使用中的一個!
  • 鍵中的下一個字母是'a'。這給了0的偏移量。使用它1(0 + 1)時間。
  • 下一個字母是'u',偏移量爲20.使用它21次。
  • 依此類推。

所以你的算法是這樣的:

O + 6 => U : #1 of 7 6s 
u + 6 => a : #2 of 7 6s 
r + 6 => x : #3 of 7 6s 
" "  : #4 of 7 6s 
g + 6 => m : #5 of 7 6s 
r + 6 => x : #6 of 7 6s 
e + 6 => k : #7 of 7 6s 
a + 0 => a : #1 of 1 0s 
t +20 => n : #1 of 21 20s 
e +20 => y : #2 of 21 20s 
... 
and so on 

什麼我不告訴你怎麼做(這是你的比賽:-)):

  • 保留情況。例如,chr(ord('U') + 20) == 'i',但您不想將大寫'U'翻譯爲小寫'i'。
  • 創建這些偏移量的流,併爲輸入流中的每個字符使用一個。

提示:

  • 你想產生偏移而不是一次創建它們所有的列表的迭代器。