More on採石ゲーム
目的:
「世界大学生プログラム設計コンテスト」で見た採石ゲームの新しい解法を記録する.
テーマは石子ゲームの文章を取って理解することができます.
分析:
採石に失敗した場合:
(1, 2) (3, 5) (4, 7) (6, 10) (8, 13) (9, 15) (11, 18) (12, 20) (14, 23) (16, 26) (17, 28) (19, 31)...
勝利の状況は次のとおりです.
(1, 1) (1, 3) (1, 4) ...
勝利の状況は失敗の状況よりずっと多い.上記の2つの状況の中で、比較的簡単に得られる失敗状況を選択して分析を展開し、法則を探す.
1.1から始まる各数字は、これらの数字のペアに1回のみ表示され、1回のみ表示されます.
2.数対の差等差数列1,2,3,4...
3.いくつかの数字のペアの配列(例えば(1,2)(3,5)(8,13)…)Fibonacci数列(例えば1,2,3,5,8,13,21...)から
4.いくつかの数のペア(例えば(4,7)および(11,18)...)標準的なFibonacci数列の数字ではありませんが、Fibonacci数列のルールに合致しています.
5.数対(a,b)がその中に現れると、(a+b,a+2 b)も必然的に数対に現れる(逆の結論は間違っている).
6.数対の2つの数の比は、(sqrt(5)−1)/2=0.618、すなわち、有名な黄金分割数に非常に近い.
1から始まる自然数ごとに,失敗した数対にFibonacci数列の規則に従って繰り返されないため,次のような結論が得られる.
失敗した数対のうち、1つの数がxの場合、x*0.618の小数部kをとる.
k>1-0.618 xが数対の小数である場合
k<=1-0.618 xが数対の大きな数である場合
数対がインクリメント順に(a,b)に配列され、b=floor(a/1.618)を満たすと、あなたが直面する数対(a,b)は必ず失敗すると判断されます.
コード:
「世界大学生プログラム設計コンテスト」で見た採石ゲームの新しい解法を記録する.
テーマは石子ゲームの文章を取って理解することができます.
分析:
採石に失敗した場合:
(1, 2) (3, 5) (4, 7) (6, 10) (8, 13) (9, 15) (11, 18) (12, 20) (14, 23) (16, 26) (17, 28) (19, 31)...
勝利の状況は次のとおりです.
(1, 1) (1, 3) (1, 4) ...
勝利の状況は失敗の状況よりずっと多い.上記の2つの状況の中で、比較的簡単に得られる失敗状況を選択して分析を展開し、法則を探す.
1.1から始まる各数字は、これらの数字のペアに1回のみ表示され、1回のみ表示されます.
2.数対の差等差数列1,2,3,4...
3.いくつかの数字のペアの配列(例えば(1,2)(3,5)(8,13)…)Fibonacci数列(例えば1,2,3,5,8,13,21...)から
4.いくつかの数のペア(例えば(4,7)および(11,18)...)標準的なFibonacci数列の数字ではありませんが、Fibonacci数列のルールに合致しています.
5.数対(a,b)がその中に現れると、(a+b,a+2 b)も必然的に数対に現れる(逆の結論は間違っている).
6.数対の2つの数の比は、(sqrt(5)−1)/2=0.618、すなわち、有名な黄金分割数に非常に近い.
1から始まる自然数ごとに,失敗した数対にFibonacci数列の規則に従って繰り返されないため,次のような結論が得られる.
失敗した数対のうち、1つの数がxの場合、x*0.618の小数部kをとる.
k>1-0.618 xが数対の小数である場合
k<=1-0.618 xが数対の大きな数である場合
数対がインクリメント順に(a,b)に配列され、b=floor(a/1.618)を満たすと、あなたが直面する数対(a,b)は必ず失敗すると判断されます.
コード:
if a > b:
a, b = b, a
k = b - a
c = k * 1.6180339887498949
if int(c) == a:
print 'Loose'
else:
print 'Win'