石取りゲーム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()




