ipt
boost::text_oarchive
t
/
名称可从 vptr 的 typeinfo 中看到
struct term {
int
type
union {
char ch;
term
*
other;
}
next
;
idx;
puts("Running out of free variables.");
eval_deep
boost
ar >> (term*)t
load_pointer_type<term>::invoke
0x3B018
serialize
学废这两篇就能做题了
idx
parse_dump_term
void
parse_dump_term(const struct term
t,
FILE
stream)
{
const struct term
pterm
=
t;
nparen
0
for
(;;)
switch (pterm
-
>
) {
case Tlam: {
CHANGE
if
(pterm
>data.lam.var
'z'
fprintf(stream,
"[x%d]"
, pterm
>idx);
goto Close_paren;
"Lam (%c, "
>data.lam.var);
>data.lam.body;
+
continue
template<
class
Archive>
void serialize(Archive& ar, term &t, const unsigned
version) {
ar& t.
switch (t.
case Tlam:
ar& t.data.lam.var;
ar& t.idx;
(t.data.lam.var !
ar& t.data.lam.body;
break
case Tapp:
ar& t.data.app.left;
ar& t.data.app.right;
case Tvar:
ar& t.data.var;
parse_term_in(std::istream &
in
boost::archive::text_iarchive ar(
);
ret
nullptr;
ar >> ret;
return
ret;
parse_term_s(const char
s) {
std::istringstream ss(s);
parse_term_in(ss);
def
_ADD(a, b):
a
b
_MULT(a, b):
_bind(f, a):
lambda
b: f(a,b)
ADD(a):
_bind(_ADD, a)
MULT(a):
_bind(_MULT, a)
INC(a):
1
from
z3
import
x
IntVector(
'x'
,
28
)
s
Solver()
_SUB(a, b):
# 一定要加,不加无解
s.add(a>
b)
SUB(a):
_bind(_SUB, a)
with
open
(
"ctf4.txt"
"rt"
) as f:
data
f.read()
call(p):
p[
]
"P"
:
p
3
:]
a, p
call(p)
2
b, p
a(b), p
elif
"A"
4
ADD(a), p
"S"
SUB(a), p
"I"
INC(a), p
"M"
5
MULT(a), p
"x"
c
while
p[c]>
'0'
and
p[c]<
'9'
r
(p[:c])
p[c:]
x[r], p
else
r, p
rr, _
call(data)
s.add(rr
s.check()
print
(s.model())
阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!