石取りゲーム1

改訂新版 C言語による標準アルゴリズム事典をSwiftでコーディング

アルゴリズム

石取りゲーム1

実行

Command Line

コード

import Foundation

/// 入力
/// - parameter メッセージ
/// - returns 入力文字列
func input(msg:String = "") -> String {
    print(msg, separator: "", terminator: "")
    let indata = FileHandle.standardInput;
    let rawdata = indata.availableData;
    let str = NSString(data: rawdata, encoding: String.Encoding.utf8.rawValue);
    let length = str?.length
    let result = str?.substring(with: NSRange(location: 0,length: length! - 1))
    return result!
}

func stone1() {
    var n = Int(input(msg: "石の数? "))!
    let m = Int(input(msg: "1回に取れる最大の石の数? "))!
    if n < 1 || m < 1 {
        exit(1)
    }
    var my_turn:Int
    my_turn = 1
    while n != 0 {
        var x:Int
        if my_turn == 1 {
            x = (n - 1) % (m + 1)
            if x == 0 {
                x = 1
            }
            print("私は \(x) 個の石を取ります。")
        }
        else {
            repeat {
                x = Int(input(msg: "何個取りますか? "))!
            } while x <= 0 || x > m || x > n
        }
        n -= x
        print("残りは \(n) 個です。")
        my_turn ^= 1
    }
    my_turn == 1 ? print("あなたの負けです!") : print("私の負けです!")
}

stone1()

Algorithm,Swift

Posted by shi-n