#!/usr/bin/env python3
import sys
from random import randint
# メッセージ分離方式
msg = { 'cont' : 'continue?[y/n] ' ,
'prompt' : 'Type a guess: ' ,
'l' : 'lower' ,
'u' : 'upper' ,
None : '' }
# 環境
class Env( object ) :
__match_args__ = ( 'secret_num' , 'boolean' , 'count' , 'key' )
def __init__ ( self , secret_num, boolean = False , count = 0 , key = None ) :
self .secret_num = secret_num
self .boolean = boolean
self .count = count
self .key = key
# デバッグ用
def __repr__ ( self ) :
return f'<secret_num: {self.secret_num} boolean: {self.boolean} count: {self.count} key: {self.key}>'
# 環境の初期化
def init( ) :
return Env( randint( 1 , 100 ) )
# Read(読み込み部)
def read( env) :
proc = { True : lambda x: x.lower ( ) == 'y' , False : int }
key = { True : 'cont' , False : 'prompt' }
return proc[ env.boolean ] ( input ( msg[ key[ env.boolean ] ] ) )
# Evaluator(評価器)
def interp( x, env) :
match env:
case Env( secret_num, boolean, count, key) :
if boolean:
if x:
return init( )
else :
sys .exit ( )
else :
return Env( secret_num,
x == secret_num,
count + 1 ,
'l' if x > secret_num else 'u' )
# Print(出力部)
def display( env) :
match env:
case Env( secret_num, boolean, count, key) :
print ( count if boolean else msg[ key] )
return env
# 端末で起動する
if __name__ == '__main__' :
# 環境の初期化
env = init( )
# Read-Eval-Print Loop(REPL)
while True :
env = display( interp( read( env) , env) )
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHN5cwpmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludAoKIyDjg6Hjg4Pjgrvjg7zjgrjliIbpm6LmlrnlvI8KbXNnID0geydjb250JzogJ2NvbnRpbnVlP1t5L25dICcsCiAgICAgICAncHJvbXB0JzogJ1R5cGUgYSBndWVzczogJywKICAgICAgICdsJzogJ2xvd2VyJywKICAgICAgICd1JzogJ3VwcGVyJywKICAgICAgIE5vbmU6ICcnfQoKIyDnkrDlooMKY2xhc3MgRW52KG9iamVjdCk6CiAgICBfX21hdGNoX2FyZ3NfXyA9ICgnc2VjcmV0X251bScsICdib29sZWFuJywgJ2NvdW50JywgJ2tleScpCiAgICBkZWYgX19pbml0X18oc2VsZiwgc2VjcmV0X251bSwgYm9vbGVhbiA9IEZhbHNlLCBjb3VudCA9IDAsIGtleSA9IE5vbmUpOgogICAgICAgIHNlbGYuc2VjcmV0X251bSA9IHNlY3JldF9udW0KICAgICAgICBzZWxmLmJvb2xlYW4gPSBib29sZWFuCiAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CiAgICAgICAgc2VsZi5rZXkgPSBrZXkKICAgICMg44OH44OQ44OD44Kw55SoCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGYnPHNlY3JldF9udW06IHtzZWxmLnNlY3JldF9udW19IGJvb2xlYW46IHtzZWxmLmJvb2xlYW59IGNvdW50OiB7c2VsZi5jb3VudH0ga2V5OiB7c2VsZi5rZXl9PicKCiMg55Kw5aKD44Gu5Yid5pyf5YyWCmRlZiBpbml0KCk6CiAgICByZXR1cm4gRW52KHJhbmRpbnQoMSwgMTAwKSkKCiMgUmVhZCjoqq3jgb/ovrzjgb/pg6gpCmRlZiByZWFkKGVudik6CiAgICBwcm9jID0ge1RydWU6IGxhbWJkYSB4OiB4Lmxvd2VyKCkgPT0gJ3knLCBGYWxzZTogaW50fQogICAga2V5ID0ge1RydWU6ICdjb250JywgRmFsc2U6ICdwcm9tcHQnfQogICAgcmV0dXJuIHByb2NbZW52LmJvb2xlYW5dKGlucHV0KG1zZ1trZXlbZW52LmJvb2xlYW5dXSkpCgojIEV2YWx1YXRvcijoqZXkvqHlmagpCmRlZiBpbnRlcnAoeCwgZW52KToKICAgIG1hdGNoIGVudjoKICAgICAgICBjYXNlIEVudihzZWNyZXRfbnVtLCBib29sZWFuLCBjb3VudCwga2V5KToKICAgICAgICAgICAgaWYgYm9vbGVhbjoKICAgICAgICAgICAgICAgIGlmIHg6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQoKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gRW52KHNlY3JldF9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPT0gc2VjcmV0X251bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnbCcgaWYgeCA+IHNlY3JldF9udW0gZWxzZSAndScpCgojIFByaW50KOWHuuWKm+mDqCkKZGVmIGRpc3BsYXkoZW52KToKICAgIG1hdGNoIGVudjoKICAgICAgICBjYXNlIEVudihzZWNyZXRfbnVtLCBib29sZWFuLCBjb3VudCwga2V5KToKICAgICAgICAgICAgcHJpbnQoY291bnQgaWYgYm9vbGVhbiBlbHNlIG1zZ1trZXldKQogICAgcmV0dXJuIGVudgogICAgICAgIAojIOerr+acq+OBp+i1t+WLleOBmeOCiyAgICAKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICMg55Kw5aKD44Gu5Yid5pyf5YyWCiAgICBlbnYgPSBpbml0KCkKICAgICMgUmVhZC1FdmFsLVByaW50IExvb3AoUkVQTCkKICAgIHdoaWxlIFRydWU6CiAgICAgICAgZW52ID0gZGlzcGxheShpbnRlcnAocmVhZChlbnYpLCBlbnYpKQo=
compilation info
Traceback (most recent call last):
File "/usr/lib/python3.9/py_compile.py", line 144, in compile
code = loader.source_to_code(source_bytes, dfile or file,
File "<frozen importlib._bootstrap_external>", line 918, in source_to_code
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "./prog.py", line 37
match env:
^
SyntaxError: invalid syntax
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.9/py_compile.py", line 150, in compile
raise py_exc
py_compile.PyCompileError: File "./prog.py", line 37
match env:
^
SyntaxError: invalid syntax
stdout