
| import Cocoa |
| class Encrypt { |
| // 英文小寫字母表 |
| let alphabet = "abcdefghijklmnopqrstwuvxyz" |
| // 密碼表整數陣列 |
| var code = Array(arrayLiteral: 26) |
| // 建構子 |
| init() { |
| setCode() |
| } |
| // 設定密碼表 |
| func setCode() { |
| var a = 0 |
| var b = 0 |
| // a 必須是奇數 |
| while a % 2 == 0 { |
| a = Int(arc4random() % 10) |
| b = Int(arc4random() % 10) |
| } |
| var c = 97 |
| var i, x, y, m: Int |
| // 以迴圈取得每一個餘數 |
| for i = 0; i < 26; i++ { |
| x = c |
| y = x * a + b |
| m = y % 26 |
| code.append(m) |
| c++ |
| } |
| // 移除第一個預設值 |
| code.removeAtIndex(0) |
| } |
| // 由字元從字母表中找到索引值 |
| func findAlphabetIndex(chr: Character) -> Int { |
| var i = 0 |
| for c in alphabet { |
| if chr == c { |
| return i |
| } |
| i++ |
| } |
| return 0 |
| } |
| // 由字元從密碼表中找到索引值 |
| func findCodeIndex(chr: Character) -> Int { |
| var n = findAlphabetIndex(chr) |
| var i = 0 |
| for d in code { |
| if d == n { |
| return i |
| } |
| i++ |
| } |
| return -1 |
| } |
| // 判斷是否為英文小寫字母的字元 |
| func isLowercase(chr: Character) -> Bool { |
| for i in alphabet { |
| if (chr == i) { |
| return true |
| } |
| } |
| return false |
| } |
| // 由索引值找到密碼表中對應的字元 |
| func findCode(number: Int) -> Character { |
| let index = code[number] |
| var i = 0 |
| for s in alphabet { |
| if i == index { |
| return s |
| } |
| i++ |
| } |
| return Character("") |
| } |
| // 由索引值找到字母表中對應的字元 |
| func findLetter(index: Int) -> Character { |
| var i = 0 |
| for s in alphabet { |
| if i == index { |
| return s |
| } |
| i++ |
| } |
| return Character("") |
| } |
| // 進行編碼的方法 |
| func toEncode(str: String) -> String { |
| var newStr = "" |
| for chr in str { |
| if isLowercase(chr) { |
| newStr.append(findCode(findAlphabetIndex(chr))) |
| } |
| else { |
| newStr.append(chr) |
| } |
| } |
| return newStr |
| } |
| // 進行解碼的方法 |
| func toDecode(str: String) -> String { |
| var newStr = "" |
| for chr in str { |
| if isLowercase(chr) { |
| newStr.append(findLetter(findCodeIndex(chr))) |
| } |
| else { |
| newStr.append(chr) |
| } |
| } |
| return newStr |
| } |
| } |
沒有留言:
張貼留言
0.留言請選擇註冊帳號, Google 或 OpenID 均可
1.歡迎留言交流,但不歡迎垃圾留言及廣告留言
2.文章相關問題歡迎提出,請減少情緒性留言
3.非文章相關內容,請到 G+ 社群或 FB 社團提出
4.問作業之留言會被直接刪除
5.莫忘網路禮節
6.可使用部份HTML標記,如 <b> 、 <i> 、 <a>
7.站長保留刪除留言的權力