2020 | 中国科学技术大学第七届信息安全大赛 | General
超基础的数理模拟器
题目¶
解题思路¶
- 自己算的话一道题都算不出来(Φ皿Φ)
- 直接使用开发者工具查看网页,符号看上去都不易爬取(当时没有禁掉 JS)
- 使用
curl
获取网页,发现使用的是 LaTex
- 使用
sympy
计算定积分,LaTex
文本可以使用parse_latex
转换import requests from lxml import etree from sympy import * from sympy.parsing.latex import parse_latex s = requests.session() base_url = '<site-url>' token = '<user-token>' s.get(base_url + 'login?token=' + token) x = symbols('x') while True: r = s.get(base_url) while r.status_code != 200: r = s.get(base_url) html = etree.HTML(r.content) rest = html.xpath('//h1[@class="cover-heading"]') if rest: print(rest[0].text) exp = html.xpath('/html/body/div/div/div/center/p')[0].text[2:-1] tmprg = exp.split(' ')[0] rge = str(parse_latex(tmprg + '{d x}'))[10:] # 截掉 Integral(1 exp = parse_latex(exp[len(tmprg):exp.find('{d x}')]).subs(symbols('e'), E) ans = N("Integral(" + str(exp) + rge, 15) s.post(base_url + 'submit', data={'ans': ans}) else: break r = s.get(base_url) print(r.content)
parse_latex
会将常数 \({\displaystyle e}\) 识别为符号,需要进行替换parse_latex
对于部分 LaTex 表达式会出现解析错误的情况,因此不能直接对原始表达式使用,如 \(\int_{2}^{\frac{9}{2}} \frac{1}{4} \, x + 2 \, \sqrt{x} + \frac{2}{x} - \ln(x)\,{d x}\),可以看到↓需要计算定积分的区域划分错了>>> parse_latex(r'\int_{2}^{\frac{9}{2}} \frac{1}{4} \, x + 2 \, \sqrt{x} + \frac{2}{x} - \ln(x)\,{d x}') -dx*log(x, E) + 2*sqrt(x) + x*Integral(1/4, (x, 2, 9/2)) + 2/x
- 做完 \(400\) 道题就能拿到 Flag 了(ΦˋωˊΦ)
最后更新:
2021年12月13日 11:23:59
Contributors:
Pageviews:
Pageviews: