ヌメロンというゲームをご存知でしょうか. 簡単に言うと二人で遊ぶ数字当てゲームです. お互いに数字をコールしていき,数字と桁が一致している数・数字は合っているが桁は異なる数を教えます.
結構頭を使うゲームで,慣れていないとなかなか推理できません. というわけで一人でヌメロンを遊ぶゲームをpythonでサクッと実装してみたので公開します.
import random import argparse def eat_bite(ans, pred): eat = sum([int(a == p) for a, p in zip(ans, pred)]) bite = sum([int(a in pred) for a in ans]) - eat return eat, bite if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("N", type=int) parser.add_argument("--dbg", action="store_true") args = parser.parse_args() ans = list(range(10)) random.shuffle(ans) ans = ans[:args.N] if args.dbg: print("anser", ans) print("Please input {} numbers (space separeted)".format(args.N)) while True: pred = list(map(int, input().split())) eat, bite = eat_bite(ans, pred) if eat == args.N: print(ans) print("clear!") break else: print("eat: {} bite: {}".format(eat, bite))
実行するときに桁数を指定します.3だと簡単ですが,4はなかなか難しいです.
Please input 3 numbers (space separeted) 0 1 2 eat: 0 bite: 0 3 4 5 eat: 0 bite: 1 6 7 8 eat: 0 bite: 1 4 6 9 eat: 1 bite: 0 5 7 9 eat: 1 bite: 1 9 8 5 eat: 0 bite: 3 5 9 8 eat: 0 bite: 3 8 5 9 [8, 5, 9] clear!
これ最適戦略は何なんでしょう,終了までの期待値も気になります.