# -*- coding: utf-8 -*-
from flask import Flask, request, jsonify, send_from_directory
from pymongo import DESCENDING
import datetime
from datetime import timedelta
from flask import make_response, current_app
from functools import update_wrapper
from bson.objectid import ObjectId
import materials as m
from collections import Counter
app = Flask(__name__)
# app.config['JSON_AS_ASCII'] = False
c = 0
ml = dict()
mode = True
def crossdomain(origin=None, methods=None, headers=None,
max_age=21600, attach_to_all=True,
automatic_options=True):
if methods is not None:
methods = ', '.join(sorted(x.upper() for x in methods))
if headers is not None and not isinstance(headers, str):
headers = ', '.join(x.upper() for x in headers)
if not isinstance(origin, str):
origin = ', '.join(origin)
if isinstance(max_age, timedelta):
max_age = max_age.total_seconds()
def get_methods():
if methods is not None:
return methods
options_resp = current_app.make_default_options_response()
return options_resp.headers['allow']
def decorator(f):
def wrapped_function(*args, **kwargs):
if automatic_options and request.method == 'OPTIONS':
resp = current_app.make_default_options_response()
else:
resp = make_response(f(*args, **kwargs))
if not attach_to_all and request.method != 'OPTIONS':
return resp
h = resp.headers
h['Access-Control-Allow-Origin'] = origin
h['Access-Control-Allow-Methods'] = get_methods()
h['Access-Control-Allow-Methods'] = "*"
h['Access-Control-Max-Age'] = str(max_age)
# if headers is not None:
# h['Access-Control-Allow-Headers'] = headers
h['Access-Control-Allow-Headers'] = "content-type"
return resp
f.provide_automatic_options = False
return update_wrapper(wrapped_function, f)
return decorator
@app.route('/')
@crossdomain(origin="*",methods=['OPTIONS', 'GET'])
def send_index():
return send_from_directory('tmp', 'index.html')
@app.route('/<path:path>', methods=['OPTIONS', 'GET'])
@crossdomain(origin="*")
def send_js(path):
return send_from_directory('tmp', path)
@app.route('/startSetting', methods=['OPTIONS', 'GET'])
@crossdomain(origin="*")
def get_init_materials():
global ml, c
x = {"materials": [
{"id": "1", "type": "material", "title": "AB=AC", "canBeForged": True, "amount": 3, "icon": "line"},
{"id": "2", "type": "material", "title": "AC是圆O直径", "canBeForged": True, "amount": 2, "icon": "cir"}],
# {"id": "3", "type": "material", "title": "AC是圆O直径", "canBeForged": True}],
# {"id": "4", "type": "material", "title": "DF是圆O切线", "canBeForged": True},
"drugs": [
{"id": "5", "type": "drug", "title": "圆周角定理推论", "desc": "直径所对圆周角是直角。", "shortTitle": "圆周角定理" ,"icon": "cir"},
{"id": "6", "type": "drug", "title": "等腰三角形性质", "desc": "等腰三角形顶角平分线、底边上中线、底边上高相互重合。", "shortTitle": "等腰三角形" ,"icon": "tran"},
{"id": "7", "type": "drug", "title": "三角形中位线定义", "desc": "连接三角形两边重点线段叫做三角形中位线。", "shortTitle": "中位线定义", "icon": "tran"},
{"id": "8", "type": "drug", "title": "三角形中位线定理", "desc": "三角形中位线平行于三角形第三边,且等于第三边一半。","shortTitle": "中位线定理" ,"icon": "tran"}
]}
ml = {t["id"]: t for t in x["materials"]}
y = {t["id"]: t for t in x["drugs"]}
ml = {**ml, **y}
c = 8
return jsonify(x)
@app.route('/forge/<mid>', methods=['OPTIONS', 'POST', 'GET'])
@crossdomain(origin="*")
def forge(mid):
global c, ml
result = list()
if request.method == "GET":
print(mid)
this_m = ml[mid]
if this_m["title"] == "AC是圆O直径":
c += 1
r = {"id": str(c), "type": "material", "title": "CO=OA", "isGoal": True ,"canBeForged": False, "amount": 1, "icon": "line"}
ml[str(c)] = r
result.append(r)
if this_m["title"] == "AB=AC":
c += 1
r = {"id": str(c), "type": "material", "title": "△ABC是等腰三角形", "canBeForged": False, "amount": 1, "icon": "tran"}
ml[str(c)] = r
result.append(r)
if this_m["title"] == "∠ADC=90°":
c += 1
r = {"id": str(c), "type": "material", "title": "AD⊥BC", "canBeForged": False, "amount": 1, "icon": "line"}
ml[str(c)] = r
result.append(r)
if this_m["title"] == "DF是圆O切线":
c += 1
r = {"id": str(c), "type": "material", "title": "OD⊥DF", "canBeForged": False, "amount": 1, "icon": "line"}
ml[str(c)] = r
result.append(r)
return jsonify(result)
# {"elements": []}
@app.route('/fireinthehole', methods=['OPTIONS', 'POST', 'GET'])
@crossdomain(origin='*')
def regist_test():
global c, ml
result = list()
if request.method == "POST":
data = request.get_json()
l = data["elements"]
lt = [ml[t]["title"] for t in l]
count = Counter(lt)
if "圆周角定理推论" in lt:
if "AC是圆O直径" in lt:
co = min([count["AC是圆O直径"]])
c += 1
r = {"id": str(c), "title": "∠ADC=90°", "canBeForged": True, "amount": co, "icon": "angle"}
ml[str(c)] = r
result.append(r)
if "等腰三角形性质" in lt:
if "AB=AC" in lt and "∠ADC=90°" in lt:
co = min([count["AB=AC"], count["∠ADC=90°"]])
c += 1
r = {"id": str(c), "title": "CD=DB", "canBeForged": False, "amount": co, "icon": "line"}
ml[str(c)] = r
result.append(r)
if "三角形中位线定义" in lt:
if "CD=DB" in lt and "CO=OA" in lt:
co = min([count["CD=DB"], count["CO=OA"]])
c += 1
r = {"id": str(c), "title": "OD是△ABC中位线", "canBeForged": False, "amount": co, "icon": "tran"}
ml[str(c)] = r
result.append(r)
if "三角形中位线定理" in lt:
if "OD是△ABC中位线" in lt:
co = min([count["OD是△ABC中位线"]])
c += 1
r = {"id": str(c), "title": "OD∥AB", "isGoal": True, "canBeForged": False, "amount": co, "icon": "line"}
result.append(r)
return jsonify(result)
@app.route('/result',methods=['OPTIONS', 'GET'])
@crossdomain(origin="*")
def result():
return jsonify([
"∵ AC为○O直径",
"∴ ∠ADC = 90°",
# "∵ AB = AC, ∠ADC = 90°",
# "∴ CD = DB",
# "∵ AC为○O直径",
# "∴ CO = OA",
# "∵ CD = DB, CO = OA",
# "∴ OD是△CAB中位线",
# "∴ OD ∥ AB"
])
if __name__ == "__main__":
app.run(host='0.0.0.0', port=3144)
没有合适的资源?快使用搜索试试~ 我知道了~
勇士的奇妙大冒险之几何炼金 - 洋葱数学极客挑战赛最佳创意奖.zip
共135个文件
svg:54个
ttf:16个
eot:16个
需积分: 5 0 下载量 67 浏览量
2024-04-23
20:32:36
上传
评论
收藏 4.93MB ZIP 举报
温馨提示
勇士的奇妙大冒险之几何炼金 - 洋葱数学极客挑战赛最佳创意奖
资源推荐
资源详情
资源评论
收起资源包目录
勇士的奇妙大冒险之几何炼金 - 洋葱数学极客挑战赛最佳创意奖.zip (135个子文件)
672c96197e82b9e38e0feb8267cf10d8.eot 70KB
31ec4506469620df9b5295998a4bfead.eot 67KB
d327c2105b014c15a277a56f54927e2e.eot 59KB
2702ac35e78692e600011ed1c85ef060.eot 43KB
031026c46bba0e8de61c6efabd9b263a.eot 41KB
2b4454d6e2f687619cbd307e75102078.eot 35KB
b2e94149f3405c883c9af607c80bf42c.eot 35KB
dc81eae9effb44e3651c8f6fd9513818.eot 34KB
a3319b736d9c1594add4dd56dcb002bf.eot 30KB
cf8394e808472179776070c3aa4d8169.eot 25KB
3c3fce5eb8b64ba21d19eaa6d40ff339.eot 19KB
a0ba2817318bda0e08e59e2f07416112.eot 19KB
5438d9d464a3973d450201211780eeb7.eot 13KB
1f5c2abfeea0beaf96c20fcada9ef082.eot 12KB
5a3cee2bf91471f8b0356195afde026c.eot 11KB
1a6c0d68e798835afb71c745092d80f5.eot 8KB
6c1c0d3e07f1ed7e6d04dbf141e67b44.gif 25KB
.gitignore 50B
index.html 2KB
module.js 853KB
common.js 370KB
a16662c1dee0925627235a9faeae78f4.png 1.15MB
4d5e80b3ffa4e7b5edf73d7be9d088f1.png 406KB
b9821eba638a62b9242d5a8390bbe8e8.png 389KB
d25cce2412697a6a9f8b1efa8feed952.png 280KB
87e4847eff0b37effa247e6499670b2a.png 199KB
8603b927670f00df77f9a89550471089.png 133KB
e661d33e1efdc6abb5a6bdf447b5266d.png 119KB
3b9e16340133971e8cfa055a60d81156.png 108KB
8ae16d2202aba6c07d3d14545d5201a5.png 105KB
72bc65547c0cc8e685eb738e471e1eb7.png 88KB
db2f500431cbbffb7ca750beed0e5a12.png 86KB
af4854356ea275b6e0db300d32d561ba.png 81KB
8bf86e2d4dad95336219d6ece4e9163d.png 41KB
2a04115f16176d01a7a6f1f19f8e8f59.png 41KB
081a402a5bad7e6dc12b6ad1044388d8.png 37KB
0ef87abe383ff36d2c1d8fea40eaec17.png 29KB
server.py 7KB
judgers.py 2KB
materials.py 2KB
drugs.py 909B
def9e2fda418f828a1b9c1a53e17d25c.svg 81KB
3c8fc5999d44bbf0666714d49e421fe6.svg 80KB
8212871bca900efd7ff86b17ae660b79.svg 17KB
72fae1352cf452e9c521227f440b8d6d.svg 11KB
550b74734c17553f707abe6c6996c291.svg 10KB
03ba8bf582861edd36164c21dd239a53.svg 10KB
2e2de9c9b4d2a5844d1494123db259a7.svg 3KB
2b96a4071fa67b9df165b703c2784005.svg 2KB
be646b08e25960dcd232b97097b25eb8.svg 2KB
90a6422e3a22354ce9483343bffe973c.svg 2KB
a5ea0b1b3335ed13c28d32bb2e5dc57d.svg 2KB
1a9ea6d1c83ede7daa7e1700a975b222.svg 2KB
2b6dd8778a607c58d9014fbc5eef6bad.svg 2KB
ec5b4984a7bb677d76faf9a8f40882a3.svg 2KB
c51a8a7ce6bdf8bb6115d6f7a5939415.svg 2KB
555b1f7127b0166d792ea170e010d0f4.svg 1KB
76cc17946edf9f1a1867575743c3ac8c.svg 1KB
2393d36c5de5f97dd3933758a57b1ed3.svg 1KB
68fd39d2f7d9c69f6696d10dae2df2da.svg 930B
52bbaaca488985296af8b54c288b50a8.svg 920B
58a8dc8e689d3010fc7028beda4de6ef.svg 864B
e4104631a78e6cbc72f0114ea29569b0.svg 862B
0d38d4b2a7cce6a35f124d95471c9c22.svg 813B
1ed149f16b01f7505300f09df6f77d59.svg 802B
fef24d4d06d8047d79ab6ca43d1dbbfe.svg 801B
c6b87abe752b7b46116cb17c5a4a0da4.svg 790B
bfd3518a77e315117a81f76063122486.svg 789B
f3814ca6c13b13fa172e6416956420b7.svg 757B
fef92550d111349c0d918b5251ef1818.svg 757B
c5453459712933ca0ae170ecbdc25d7b.svg 717B
1c15ff596d3a497352a81d2daa3cda75.svg 700B
51e11075d9cbbd6f1e932db434bc2f9f.svg 578B
55791a2bc62a80f317c971be3e2aaa29.svg 568B
01b113b75372c9c81b73521055b9dcdd.svg 552B
9610d83c7df7cb6417503d3b85af090d.svg 491B
494f0179346f0c5fc242947e599e2d5d.svg 445B
df7959c1972a3166cfbddcd8db0ac8ed.svg 425B
aac5cde7d0316c9c28d92c8d95eb7e79.svg 396B
cf18a13e836aac6f283ff3941c5865e2.svg 391B
beb6684fb39e4b274c69dbc32e829160.svg 343B
b95f194ef7ed651177375422959aa74b.svg 320B
1544ca7a867554d7c5a8c62545bdc95e.svg 295B
3fa302f67a16b32461aba6c5a8ec0b92.svg 277B
54b9ee7c8031c045cadb88318188bc67.svg 267B
b1a1354735d8a52830047cefd52a2356.svg 263B
995c82198cc20153bd0b629b8cc3b8f1.svg 249B
14912450c75a03891ffd1e7095bf6e91.svg 245B
a581e2f1d447e984e14d9e7b5c565a24.svg 245B
21a81c8831452e54a0c57c2f877a91a1.svg 240B
3ff5be85b6a4146d3430a9d6ae74eb03.svg 229B
0daf363982af3daade198b31feece49d.svg 227B
f757fea3790502a7b7e96c022fa4d4d6.svg 202B
ecc4871995084d8f658ec3b379c7c0fd.svg 199B
68b5d48cd15216514977bea5707502ba.svg 199B
9971d2707241bb6c19cb1141e3b35d76.ttf 70KB
d9162dfe8f36db18b8d4ef7ffa75692d.ttf 66KB
e69b9513bba6b6a563bad05e8a0de80c.ttf 59KB
1b226149c7920e96e4c47faf0ff73d8c.ttf 43KB
55fbb3ac09b79fc554f78b4fa51d9bf4.ttf 40KB
共 135 条
- 1
- 2
资源评论
奔强的程序
- 粉丝: 967
- 资源: 2710
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功