swiftで回文判定

swiftを勉強する機会があったので、忘れないうちにメモ
回文判定については最後にしか触れていない上、大したことはしていません。
ちょっとしか触っていないので簡単なものばかりですが、はてなブログシンタックス・ハイライトのテストも兼ねて載せておきます。

変数宣言

letで定数宣言、varで変数宣言
宣言時に値を入れておけば、型は明示的に宣言する必要はないらしい…

let hoge : Int // Int型の定数
var huga = 10  // Int型の変数

var tokaiList : [String] = ["Tokyo", "Osaka", "Nagoya"]

制御文

if文
var score : Int = 59
if score < 60 {
    print("不合格")
} else {
    print("合格")
}
/* 実行結果
不合格
*/
for文
var tokaiList : [String] = ["Tokyo", "Osaka", "Nagoya"]
var id : Int
// その1
for id = 0; id < count(tokaiList); id++ {
    println(tokaiList[id] + " is Large City.")
}

// その2
for id in 0...count(tokaiList)-1 {
    println(tokaiList[id] + " is Large City.")
}
/* 実行結果
Tokyo is Large City.
Osaka is Large City.
Nagoya is Large City.
Tokyo is Large City.
Osaka is Large City.
Nagoya is Large City.
*/
while文(do-while)
var cash = 500
do {
    let price : Int = Int(arc4random())%100 + 100 // 100~200円のジュース
    cash = cash-price
    println(String(price) + "円のジュースを買いました.")
} while cash > 200

/* 実行結果
152円のジュースを買いました.
166円のジュースを買いました.
*/

関数宣言

func 関数名 ( 引数:型 ) -> 戻り値の型 {
    // 処理
}

と宣言するらしい

func warikan(fee: Int, nPerson : Int) -> Double {
    var res = Double(fee)/Double(nPerson)
    return res
}
var payment : Double = warikan(10000, 6)
println("お代は1人\(payment)円です.")

/* 実行結果
お代は1人1666.66666666667円です.
*/

ちょっとした関数

文字列を文字配列に変換
func charToArray (str:String) -> [Character] {
    var res : [Character] = []  
    for i in 0...count(str)-1 {
        res.append(str[advance(str.startIndex, i)])
    }
    return res
}

let lchar = charToArray("olympi")
var vchar = lchar+"c"
println(vchar)

/* 実行結果
[o, l, y, m, p, i, c]
*/
配列内の要素の種類をカウント
func variety(array:[Int]) -> Int {
    var res:Int = 0
    
    for i in 1...count(array)-1 {
        let before  = array[i-1]
        let current = array[i]
        
        if before != current {
            res += 1
        }
    }
    return res
}

let intArray = [1, 2, 2, 3, 4, 4, 5, 6, 7, 7, 7]
var result = variety(intArray)
println(result)

/* 実行結果
6
*/
回文判定
func isPalindrome(str:String) -> Bool {
    var rev = String(reverse(str))
    
    if str == rev {
        return true
    } else {
        return false
    }
}

var result = isPalindrome("testset");
print(result)

/* 実行結果
true
*/

はてなブログシンタックスハイライト使うなら、いっそGistでコードを埋め込んでやればいいのでは…

しかも、回文判定は空白や文字の大小に対応していないので
No lemon no melon.
のような有名な回文を判定できない始末
lowercaseにして余計なスペースやら消してしまえばいけそうだけど、そのうちちゃんと書きます
というか、swiftで文字列扱うの面倒では

参考

The Swift Programming Language 日本語訳 | スタジオガラゴ

Swift | Swift言語を学ぶ

[iOS] Swiftで文字列から任意の文字列を取得・残す方法 - Qiita