石取りゲーム2
改訂新版 C言語による標準アルゴリズム事典をSwiftでコーディング
アルゴリズム
石取りゲーム2
実行
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 stone2() { var f = [Int](repeating: 1, count: 21) for i in 3...20 { f[i] = f[i - 1] + f[i - 2] } var n = Int(input(msg: "石の数? (2..10000)? "))! if n < 2 || n > 10000 { exit(1) } var max = n - 1 var my_turn = 1 var x:Int = 0 while n != 0 { print("\(max) 個まで取れます") if my_turn == 1 { x = n var i = 20 while x != f[i] { if x > f[i] { x = x - f[i] } i = i - 1 } if x > max { x = 1 } print("私は \(x) 個の石をとります。") } else { repeat { x = Int(input(msg: "何個とりますか? "))! } while x < 1 || x > max } n = n - x max = 2 * x if max > n { max = n } my_turn = my_turn ^ 1 } my_turn == 1 ? print("あなたの勝ちです!") : print("私の勝ちです!") } stone2()