Phosphophyllite

情報系学部に通う雑魚学生の日常・進捗・疑問ブログ

簡単なシーザー暗号プログラム【Swift】

ksnctfでシーザー暗号の問題があったので、Swiftでプログラム書いてみた。
UITextFieldとかのUI一切つけてない本当に解くだけ、SwiftUnicode扱うメモでもある。

// 問題文.
var text = "Uryyb Fjvsg!"

/*a-z = 97-122, A-Z = 65-90*/

// n文字ずらす.
var n = 13

// 変換したCharacterを格納する配列.
var ans = [Character]()

    // 一文字ずつUnicodeで取り出す.
    for c in text.unicodeScalars {

        /* A-Z */
        // n文字ずらす.
        if c.value >= 65 && c.value <= 90 {
            var x = c.value + n
                if x >= 91 {
                    x = x - 91 + 65
                }
            // Unicode -> Characterに変換して配列に格納する.
            let a = Character(UnicodeScalar(x))
                ans += [a]
        }

        /* a-z */
        else if c.value >= 97 && c.value <= 122 {
            var x = c.value + n
                if x >= 123 {
                    x = x - 123 + 97
                }
            let a = Character(UnicodeScalar(x))
                ans += [a]
        }

        /* . , スペース などならそのまま */
        else /*if c.value == 32 || c.value == 44 || c.value == 46*/ {
            let a = Character(UnicodeScalar(c))
                ans += [a]
        }
    }

// 答えを一文字ずつ取り出してコンソールにprint.
for a in ans {
    print(a)
}
// print(ans) ってやると配列だからコンマ区切りでprintされてとても見にくい.
<||