素数判定ゲーム
素数判定の問題に答えるターミナルで動くゲームを作った。 「パッと見素数」に気をつけろ!という記事に紹介されている素数大富豪というゲームでは、素数を素早く判定することが要される。 そのための練習用プログラムとして考えたものであるが、素数大富豪とは独立した一人遊びゲームとして成立している。
シルルさん作成の素数大富豪のCPU対戦ゲームもある。
遊び方
Python 3 が必要。こちらからプログラムをダウンロードして、
chmod +x primequiz.py
で実行可能としてから、
./primequiz.py
でプログラムを実行する。
10 questions for primality.
[371, 61, 101, 337, 143, 237, 239, 153, 57, 311]
371 is prime? Type return to show the answer.
のように表示される。371が素数かどうかを聞かれているので、頭の中で答えを出してリターンキーを押すと
Composite. 371 = 7 * 53
のように表示される。「素数だと思ったけど7で割れたか」といったように一人納得するゲームである。
同様に、このように続けられる。
61 is prime? Type return to show the answer.
Prime!
101 is prime? Type return to show the answer.
Prime!
337 is prime? Type return to show the answer.
Prime!
143 is prime? Type return to show the answer.
Composite. 143 = 11 * 13
237 is prime? Type return to show the answer.
Composite. 237 = 3 * 79
239 is prime? Type return to show the answer.
Prime!
153 is prime? Type return to show the answer.
Composite. 153 = 3 * 3 * 17
57 is prime? Type return to show the answer.
Composite. 57 = 3 * 19
311 is prime? Type return to show the answer.
Prime!
- 問題は全部で10問出題される。これは
rep
変数を書き換えることによって変えることができる。 - 出題される数字の最小値は 29 である。これは
first
変数で設定されている。 - 出題される数字の最大値は 400 である。これは
last
変数で設定されている。 - 「すぐに分かる数」は出題されない。すなわち、出題される数字は「素数」か「パッと見素数の合成数」となる。
- 素数が出題される確率がちょうど2分の1となるように調整されている。
ここで、「すぐに分かる数」は
- 2か5の倍数
- 各桁がすべて3の倍数である
obvious
リストに設定されている数字
のいずれかを満たす数字である。three
変数を True に設定すると、3の倍数が「すぐに分かる数」とされるため、出題される数字の難易度が全体的に上がる。
現状の設定で慣れてきたら、少しずつ first
や last
の数字を上げたり、three=True
としたり、obvious
リストを追加したりすることで、自分好みの難易度に調整することができる。
正答数を数えたり時間を計ったりすればもう少しゲームっぽくなるが、面倒なのでとりあえずはこんな感じで。お好みで、パスの通っている場所に置いて遊んでください。
出題される数字の一覧
./primequiz.py p
とすることで、出題範囲の素数と合成数の一覧が次のように表示される。
List of primes
[29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397]
List of composite numbers
51 = 3 * 17
57 = 3 * 19
87 = 3 * 29
91 = 7 * 13
111 = 3 * 37
117 = 3 * 3 * 13
119 = 7 * 17
121 = 11 * 11
123 = 3 * 41
129 = 3 * 43
133 = 7 * 19
141 = 3 * 47
143 = 11 * 13
147 = 3 * 7 * 7
153 = 3 * 3 * 17
159 = 3 * 53
161 = 7 * 23
169 = 13 * 13
171 = 3 * 3 * 19
177 = 3 * 59
183 = 3 * 61
187 = 11 * 17
189 = 3 * 3 * 3 * 7
201 = 3 * 67
203 = 7 * 29
207 = 3 * 3 * 23
209 = 11 * 19
213 = 3 * 71
217 = 7 * 31
219 = 3 * 73
221 = 13 * 17
231 = 3 * 7 * 11
237 = 3 * 79
243 = 3 * 3 * 3 * 3 * 3
247 = 13 * 19
249 = 3 * 83
253 = 11 * 23
259 = 7 * 37
261 = 3 * 3 * 29
267 = 3 * 89
273 = 3 * 7 * 13
279 = 3 * 3 * 31
287 = 7 * 41
289 = 17 * 17
291 = 3 * 97
297 = 3 * 3 * 3 * 11
299 = 13 * 23
301 = 7 * 43
319 = 11 * 29
321 = 3 * 107
323 = 17 * 19
327 = 3 * 109
329 = 7 * 47
341 = 11 * 31
343 = 7 * 7 * 7
351 = 3 * 3 * 3 * 13
357 = 3 * 7 * 17
361 = 19 * 19
371 = 7 * 53
377 = 13 * 29
381 = 3 * 127
387 = 3 * 3 * 43
391 = 17 * 23