#!/usr/bin/env python3
import os, sys
from operator import add
from time import sleep
from random import randint
message = {True: '正', False: '誤'}
# Environment
# ゲームに使う情報は例えばこうやって構造体的にまとめておく
# これがゲームの現時点での「評価」として返り値になる
class Env(object):
def __init__(self, flag, lst):
self.flag = flag
self.lst = lst
# Read
# 入力機構
# 入力以外の事柄はやってはいけない
def read(env):
if len(env.lst) == 15:
return int(input('>>>'))
else:
return ""
# Eval
# ゲームの評価機構
# いわばゲームエンジン
def engine(x, env):
return Env(x == sum(env.lst) if len(env.lst) == 15 else env.flag,
[] if len(env.lst) == 15 else [randint(99, 999)] + env.lst)
# Print
# 出力機構
# 出力以外の事柄はやってはいけない
def display(env):
if env.flag != None:
print(message[env.flag])
else:
print(env.lst[0])
sleep(3)
os.system('clear') # MS-DOS/Windows では clear の代わりに cls コマンド
return env
# REPL(Read-Eval-Print Loop)
# ゲームの本体は Read、Eval、Print を組み合わせてルーピングさせて作る
if __name__ == '__main__':
env = Env(None, [])
while(True):
try:
env = display(engine(read(env), env))
except ValueError:
env
if isinstance(env.flag, bool):
sys.exit()
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IG9zLCBzeXMKZnJvbSBvcGVyYXRvciBpbXBvcnQgYWRkCmZyb20gdGltZSBpbXBvcnQgc2xlZXAKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKCm1lc3NhZ2UgPSB7VHJ1ZTogJ+atoycsIEZhbHNlOiAn6KqkJ30KCiMgRW52aXJvbm1lbnQKIyDjgrLjg7zjg6Djgavkvb/jgYbmg4XloLHjga/kvovjgYjjgbDjgZPjgYbjgoTjgaPjgabmp4vpgKDkvZPnmoTjgavjgb7jgajjgoHjgabjgYrjgY8KIyDjgZPjgozjgYzjgrLjg7zjg6Djga7nj77mmYLngrnjgafjga7jgIzoqZXkvqHjgI3jgajjgZfjgabov5TjgorlgKTjgavjgarjgosKY2xhc3MgRW52KG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZmxhZywgbHN0KToKICAgICAgICBzZWxmLmZsYWcgPSBmbGFnCiAgICAgICAgc2VsZi5sc3QgPSBsc3QKCiMgUmVhZAojIOWFpeWKm+apn+aniwojIOWFpeWKm+S7peWkluOBruS6i+afhOOBr+OChOOBo+OBpuOBr+OBhOOBkeOBquOBhApkZWYgcmVhZChlbnYpOgogICAgaWYgbGVuKGVudi5sc3QpID09IDE1OgogICAgICAgIHJldHVybiBpbnQoaW5wdXQoJz4+PicpKQogICAgZWxzZToKICAgICAgICByZXR1cm4gIiIKICAgIAojIEV2YWwKIyDjgrLjg7zjg6Djga7oqZXkvqHmqZ/mp4sKIyDjgYTjgo/jgbDjgrLjg7zjg6Djgqjjg7Pjgrjjg7MKZGVmIGVuZ2luZSh4LCBlbnYpOgogICAgcmV0dXJuIEVudih4ID09IHN1bShlbnYubHN0KSBpZiBsZW4oZW52LmxzdCkgPT0gMTUgZWxzZSBlbnYuZmxhZywKICAgICAgICAgICAgICAgW10gaWYgbGVuKGVudi5sc3QpID09IDE1IGVsc2UgW3JhbmRpbnQoOTksIDk5OSldICsgZW52LmxzdCkKCiMgUHJpbnQKIyDlh7rlipvmqZ/mp4sKIyDlh7rlipvku6XlpJbjga7kuovmn4Tjga/jgoTjgaPjgabjga/jgYTjgZHjgarjgYQKZGVmIGRpc3BsYXkoZW52KToKICAgIGlmIGVudi5mbGFnICE9IE5vbmU6CiAgICAgICAgcHJpbnQobWVzc2FnZVtlbnYuZmxhZ10pCiAgICBlbHNlOgogICAgICAgIHByaW50KGVudi5sc3RbMF0pCiAgICAgICAgc2xlZXAoMykKICAgICAgICBvcy5zeXN0ZW0oJ2NsZWFyJykgIyBNUy1ET1MvV2luZG93cyDjgafjga8gY2xlYXIg44Gu5Luj44KP44KK44GrIGNscyDjgrPjg57jg7Pjg4kKICAgIHJldHVybiBlbnYKCiMgUkVQTChSZWFkLUV2YWwtUHJpbnQgTG9vcCkKIyDjgrLjg7zjg6Djga7mnKzkvZPjga8gUmVhZOOAgUV2YWzjgIFQcmludCDjgpLntYTjgb/lkIjjgo/jgZvjgabjg6vjg7zjg5Tjg7PjgrDjgZXjgZvjgabkvZzjgosgCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBlbnYgPSBFbnYoTm9uZSwgW10pCiAgICB3aGlsZShUcnVlKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGVudiA9IGRpc3BsYXkoZW5naW5lKHJlYWQoZW52KSwgZW52KSkKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgZW52CiAgICAgICAgaWYgaXNpbnN0YW5jZShlbnYuZmxhZywgYm9vbCk6CiAgICAgICAgICAgIHN5cy5leGl0KCkK