theorem prover src
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
FROM python:3.8
|
||||
COPY theorem_prover.py /
|
||||
CMD ["/usr/local/bin/python3", "-u", "/theorem_prover.py"]
|
||||
@@ -0,0 +1,47 @@
|
||||
import random
|
||||
|
||||
|
||||
target = 114514
|
||||
challenges = 32
|
||||
|
||||
|
||||
def get_value(expr):
|
||||
for char in expr:
|
||||
if char not in "()+-*/%~&|^" + str(target):
|
||||
return False
|
||||
if "".join([char for char in expr if char in str(target)]) != str(target):
|
||||
return False
|
||||
if "**" in expr or "//" in expr or "()" in expr:
|
||||
return False
|
||||
expr = expr.replace("/", "//")
|
||||
try:
|
||||
v = eval(expr)
|
||||
assert type(v) == type(0)
|
||||
except:
|
||||
return False
|
||||
else:
|
||||
return v
|
||||
|
||||
|
||||
for i in range(challenges):
|
||||
n = random.randint(1, min(target, 10**i))
|
||||
expr = input(("Challenge ({}/{}): {} = ".format(i + 1, challenges, n))).strip()
|
||||
if len(expr) > 256:
|
||||
print("Too long!")
|
||||
print("Failed!")
|
||||
break
|
||||
v = get_value(expr)
|
||||
if v is False:
|
||||
print("Invalid expr!")
|
||||
print("Failed!")
|
||||
break
|
||||
else:
|
||||
if v == n:
|
||||
print("Q.E.D.")
|
||||
else:
|
||||
print("{} = {} (which is not {})".format(expr, v, n))
|
||||
print("Failed!")
|
||||
break
|
||||
else:
|
||||
print("You finished all challenges!")
|
||||
print(open("flag").read())
|
||||
Reference in New Issue
Block a user