#/*********************************************************** # ishi2.rb -- 石取りゲーム 2 #***********************************************************/ f = [] f[1] = f[2] = 1 for i in 3..20; f[i] = f[i - 1] + f[i - 2]; end printf("石の数 (2..10000)? "); n = gets.to_i if (n < 2 || n > 10000); exit 1; end max = n - 1 my_turn = true while (n != 0) printf("%d 個まで取れます.\n", max) if (my_turn) x = n i = 20 while (x != f[i]) if (x > f[i]); x -= f[i]; end i -= 1 end if (x > max); x = 1; end printf("私は %d 個の石をとります.\n", x) else x = 0 while ( x < 1 || x > max) printf("何個とりますか? ") x = gets.to_i; end end n -= x; max = 2 * x; if (max > n); max = n; end printf("残りは %d 個です.\n", n) if (my_turn); my_turn = false; else; my_turn = true; end end if (my_turn) printf("あなたの勝ちです!\n") else printf("私の勝ちです!\n") end exit 0