死亡筆記本外傳:奇拉與L之詛咒大決戰

前言

夜神月擁有死亡筆記本,對外化名為『奇拉』,只要他在筆記本上寫下人名,以及一個死亡詛咒,這個人就難逃一死。

可是,夜神月發現,這樣子把人名和詛咒寫上去,一旦被別人取得這本筆記本,那全部的資料都被看光光,將來也可能變成判刑證據,所以他就想到一個方法來解決這個問題。夜神月召喚了死神雷姆,用了一萬顆紅蘋果跟雷姆交換協商,他設計了一本『死神密碼本』(點選下載),這本密碼本上面就像一個字典一樣,包含了所有的英文單字,裡面大概內容如下:
a
AAA
AAAS
aardvark
Aarhus
Aaron
ABA
Ababa
aback
abacus
abalone
abandon
abase
abash
abate
abbas
abbe
abbey
abbot
Abbott
abbreviate
...
所有英文單字都按照順序排列出來,按照這個死神密碼,所有英文字都可以被轉換成一個整數,這個整數就是該單字在這個密碼本的位置,例如a ==> 0, AAA ===> 1, aback ==>8, abase ===> 12, 以此類推。因此,只要夜神月用英文寫下詛咒,就可以利用死神密碼本轉成一堆數字,別人看到這些數字時,就不會有任何起疑或作為犯罪證據。


邪惡工具的升級:詛咒自動加密器

夜神月是一個很懶惰的高中生,要他把一個詛咒中所有的英文單字去查那麼大一本死神密碼本,那還不如要他放棄殺人算了!所以他求助於以學生程式設計能力聞名於世的東京帝國大學資訊科學與應用系裡的鈴木介一教授,請求鈴木協助設計一個自動編碼程式,有了這個程式,只要夜神月輸入英文詛咒,馬上就能轉換出每個英文單字的對應整數碼。為了避人起疑,夜神月並未告訴鈴木教授這個程式的用途,當然他也不會告訴鈴木他就是『奇拉』,鈴木不疑有他也就欣然答應了。鈴木接了這份工作後,竟然把它當成程式設計課程中的一個課堂作業,交給學生練習,當然他的學生們很順利地完成了這個程式,他也就把成品交給了夜神月。現在,為了證明國立東華大學資工系的學生程式設計能力絕對不比東京帝國大學差,老師也要請各位同學也來寫一下這個自動編碼器。

設計這個編碼器時請注意,因為夜神月只是一個高中生,英文程度不太好,所以當他用英文寫詛咒的時候(只可以包含a~z和A~Z的字母),有時候難免會拼錯幾個字(就是會打出一些死神密碼本中沒有的字),所以這個編碼機在編碼時,如果發現這種錯字,請你輸出一個星號(*)來代表這個錯字,如果不是錯字,那當然就是輸出它的對應整數囉。例如:

輸入: a abase aback abb abbreviate
編碼結果:0 12 8 * 20

輸入: You will never pass
編碼結果:25392 25026 15837 16932

輸入: I will give you an e
編碼結果:11538 25026 9862 25392 868 7383 

輸入: you will cry for your lazybones
編碼結果:25392 25026 5830 9106 25399 13442

你必須把這個編碼結果輸出到一個檔案去,這個檔案的檔名請夜神月自行輸入。另外,寫入這個檔案時,原來檔案中的資料都必須保留(不可以在開檔時清空原有資料),你只能用附加檔尾(Append Data)的方式把新資料加入到檔案中。


聰明的L:死神密碼解密

夜神月很聰明,知道用加密的方法來掩飾罪行,但有能力動員全世界警察的當然也不是等閑之輩。經過的推理之後,發現死亡筆記本上的莫名其妙數字就是對應到字典的單字順序,所以他也根據字典完成了夜神月所設計的死神密碼本。可是視甜食如命的生性慵懶,要他去查字典,比要他禁甜食還難。所以他也委請了ICPO(國際刑警組織)資訊部門中畢業于麻省理工學院的首席程式設計師幫他設計一個自動解密器,這個解密器必須能把夜神月編碼出來的整數數字,再轉回原來的英文字母。例如:

輸入:0 12 8 * 20
編碼結果: a abase aback *** abbreviate

如果你有注意到的話,解密器碰到*時,直接輸出"***",否則就輸出對應的英文字。現在為了要證明各位同學的實力不輸給麻省理工學院的畢業生,所以我們也來設計一下這個解碼器吧。

L的這個解碼器解碼時比夜神月的解碼器還厲害,它不是從鍵盤一行一行地輸入英文詛咒來編碼,而是可以從一個檔案裡讀取多個編碼後的詛咒,再一次全部解碼。這個檔案的名稱是由利用鍵盤來指定的以下是一個檔案的部分內容範例和解碼出來的結果:

檔案內容:

25392 25026 15837 16932
11538 25026 9862 25392 868 7383 
25392 25026 5830 9106 25399 13442

解碼結果:

Line #1: you will never pass
Line #2: i will give you an e
Line #3: you will cry for your lazybones


老師的話:

各位同學可以使用物件導向或非物件導向的方式來設計這個程式,給各位的提示就是善加使用動態字串陣列的配置(就是指標啦,因為死神密碼本的字串可不少,如果直接宣告成陣列,恐怕會有點問題哦),字串的處理以及檔案的輸出入。祝各位好運了!選修應數系程式設計(二)的同學,如果可以的話,盡量編碼器和解碼器都做,如果有困難,可以只做編碼器即可。這學期剛加入的同學,有必要的話,請下載老師上學期的講義。請助教再把繳交作業的規定公告一下。另外,建議同學盡早習作,越早達到老師的要求趕快交卷,就會得到比較好的分數喔!有任何問題,歡迎PO板發問!

Available from: Friday, 6 March 2009, 08:40 PM
Due date: Sunday, 22 March 2009, 12:00 PM