forked from duma-repo/chat-algo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgr_funcs.py
83 lines (59 loc) · 22.5 KB
/
gr_funcs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import gradio as gr
import requests
from bs4 import BeautifulSoup
import llm_server
from algo_problems_server import get_leetcode_prob
from config import config
def select_prob(prob_name):
prob_url = config.prob_dict[prob_name]['url']
prob_content = get_leetcode_prob(prob_url)
difficulty = config.prob_dict[prob_name]['difficulty']
ac_rate = config.prob_dict[prob_name]['acRate']
if difficulty == 'EASY':
difficulty_cn = '<span style="color:green">简单</span>'
elif difficulty == 'MEDIUM':
difficulty_cn = '<span style="color:#FFA500">中等</span>'
elif difficulty == 'HARD':
difficulty_cn = '<span style="color:red">困难</span>'
else:
difficulty_cn = '未知'
prob_info = f' **难度:** {difficulty_cn} **通过率:** {round(ac_rate, 4) * 100}%'
return prob_content, prob_info
def solve_algo_prob(prob_content, code_lang, chatbot: list):
if prob_content == '请选择一道题目':
raise gr.Error('没有选择题目')
sys_prompt = "你是一位ACM Top Coder,正在指导小白程序员练习算法题目。"
user_prompt = f'下面给你一道算法题目,你要用 {code_lang} 语言完成,生成一份面向小白的解题报告,' \
f'说明其中用到的算法和数据结构,分析时间复杂度和空间复杂度,必要的时候可以用文本模拟动画的形式演示解题过程。' \
f'要以MarkDown格式返回解题报告。\n\n' \
f'## 题目\n' \
f'{prob_content}'
chatbot.append([user_prompt, ''])
llm_response = llm_server.request_llm(sys_prompt, chatbot, stream=True)
for chunk_content in llm_response:
chatbot[-1][1] = chunk_content
yield chatbot
def chat_send(user_in_text: str, chatbot: list):
sys_prompt = "你是一位ACM Top Coder,正在指导算法小白练习算法题目。"
chatbot.append([user_in_text, ''])
yield chatbot
llm_response = llm_server.request_llm(sys_prompt, chatbot, stream=True)
for chunk_content in llm_response:
chatbot[-1][1] = chunk_content
yield chatbot
def render_algo_gr(prob_name):
algo_gr_url = config.algo_gr_dict[prob_name]
response = requests.get(algo_gr_url)
response.encoding = response.apparent_encoding
div = BeautifulSoup(response.text, 'html.parser').find('div', class_='theme-reco-content content__default')
div = str(div).replace('display:none;',
'transition: all 0.25s ease-in-out 0.08s; transform: translateY(0px); opacity: 1;')
header = """
<head>
<base href="https://www.geekxh.com/">
<link rel="preload" href="/assets/css/0.styles.45745fd7.css" as="style"><link rel="preload" href="/assets/js/app.13207832.js" as="script"><link rel="preload" href="/assets/js/4.2f00af81.js" as="script"><link rel="preload" href="/assets/js/1.8893595e.js" as="script"><link rel="preload" href="/assets/js/85.333e6c50.js" as="script"><link rel="prefetch" href="/assets/js/10.75301dd6.js"><link rel="prefetch" href="/assets/js/100.e384f490.js"><link rel="prefetch" href="/assets/js/101.c6280df1.js"><link rel="prefetch" href="/assets/js/102.a8ef0435.js"><link rel="prefetch" href="/assets/js/103.0461b2a3.js"><link rel="prefetch" href="/assets/js/104.152e3f15.js"><link rel="prefetch" href="/assets/js/105.563c7091.js"><link rel="prefetch" href="/assets/js/106.a700484a.js"><link rel="prefetch" href="/assets/js/107.ae8e7aa7.js"><link rel="prefetch" href="/assets/js/108.4760594f.js"><link rel="prefetch" href="/assets/js/109.4ecddfac.js"><link rel="prefetch" href="/assets/js/11.840af997.js"><link rel="prefetch" href="/assets/js/110.c3507795.js"><link rel="prefetch" href="/assets/js/111.198b7085.js"><link rel="prefetch" href="/assets/js/112.6db4acba.js"><link rel="prefetch" href="/assets/js/113.d37e6e84.js"><link rel="prefetch" href="/assets/js/114.7d0ddc87.js"><link rel="prefetch" href="/assets/js/115.f4e40481.js"><link rel="prefetch" href="/assets/js/116.ef5f8358.js"><link rel="prefetch" href="/assets/js/117.79fa1c72.js"><link rel="prefetch" href="/assets/js/118.751f2cfb.js"><link rel="prefetch" href="/assets/js/119.6882f2c1.js"><link rel="prefetch" href="/assets/js/12.3262af85.js"><link rel="prefetch" href="/assets/js/120.499ec35f.js"><link rel="prefetch" href="/assets/js/121.0623191f.js"><link rel="prefetch" href="/assets/js/122.9e8df79e.js"><link rel="prefetch" href="/assets/js/123.499e68df.js"><link rel="prefetch" href="/assets/js/124.09aed70f.js"><link rel="prefetch" href="/assets/js/125.4b476099.js"><link rel="prefetch" href="/assets/js/126.b268f1fd.js"><link rel="prefetch" href="/assets/js/127.1c69c139.js"><link rel="prefetch" href="/assets/js/13.9c6ce344.js"><link rel="prefetch" href="/assets/js/14.131fc506.js"><link rel="prefetch" href="/assets/js/15.7aa22506.js"><link rel="prefetch" href="/assets/js/16.47765f23.js"><link rel="prefetch" href="/assets/js/17.4a970ea8.js"><link rel="prefetch" href="/assets/js/18.49e5df42.js"><link rel="prefetch" href="/assets/js/19.5a0103b7.js"><link rel="prefetch" href="/assets/js/20.4b97d40c.js"><link rel="prefetch" href="/assets/js/21.96ee2e0e.js"><link rel="prefetch" href="/assets/js/22.616d58d0.js"><link rel="prefetch" href="/assets/js/23.b4cc5ddb.js"><link rel="prefetch" href="/assets/js/24.9440d946.js"><link rel="prefetch" href="/assets/js/25.6037c6bf.js"><link rel="prefetch" href="/assets/js/26.619e2ff8.js"><link rel="prefetch" href="/assets/js/27.4f412bf0.js"><link rel="prefetch" href="/assets/js/28.f0c84737.js"><link rel="prefetch" href="/assets/js/29.88e84b1b.js"><link rel="prefetch" href="/assets/js/3.ff9c79c7.js"><link rel="prefetch" href="/assets/js/30.b8a2d28e.js"><link rel="prefetch" href="/assets/js/31.fab745e4.js"><link rel="prefetch" href="/assets/js/32.d0dc9095.js"><link rel="prefetch" href="/assets/js/33.6f0ae91f.js"><link rel="prefetch" href="/assets/js/34.1140624b.js"><link rel="prefetch" href="/assets/js/35.df432d49.js"><link rel="prefetch" href="/assets/js/36.05dfe167.js"><link rel="prefetch" href="/assets/js/37.a93eac98.js"><link rel="prefetch" href="/assets/js/38.df69d39f.js"><link rel="prefetch" href="/assets/js/39.8199d232.js"><link rel="prefetch" href="/assets/js/40.3076f0ea.js"><link rel="prefetch" href="/assets/js/41.bd4a2f64.js"><link rel="prefetch" href="/assets/js/42.4407da7e.js"><link rel="prefetch" href="/assets/js/43.4d28431b.js"><link rel="prefetch" href="/assets/js/44.9e8f509c.js"><link rel="prefetch" href="/assets/js/45.8269e98e.js"><link rel="prefetch" href="/assets/js/46.c40d3a14.js"><link rel="prefetch" href="/assets/js/47.f09341e7.js"><link rel="prefetch" href="/assets/js/48.a9f067db.js"><link rel="prefetch" href="/assets/js/49.4f509ce7.js"><link rel="prefetch" href="/assets/js/5.c6c4293d.js"><link rel="prefetch" href="/assets/js/50.20790265.js"><link rel="prefetch" href="/assets/js/51.31da3a7f.js"><link rel="prefetch" href="/assets/js/52.8ba56575.js"><link rel="prefetch" href="/assets/js/53.4f05adb9.js"><link rel="prefetch" href="/assets/js/54.39ef864f.js"><link rel="prefetch" href="/assets/js/55.0f0de462.js"><link rel="prefetch" href="/assets/js/56.feaadd43.js"><link rel="prefetch" href="/assets/js/57.1d8f243a.js"><link rel="prefetch" href="/assets/js/58.da2c4e48.js"><link rel="prefetch" href="/assets/js/59.b3ab2cf0.js"><link rel="prefetch" href="/assets/js/6.5b68be04.js"><link rel="prefetch" href="/assets/js/60.f695c23d.js"><link rel="prefetch" href="/assets/js/61.e56bd64e.js"><link rel="prefetch" href="/assets/js/62.2a002fcc.js"><link rel="prefetch" href="/assets/js/63.0752a8fa.js"><link rel="prefetch" href="/assets/js/64.4ef8d32c.js"><link rel="prefetch" href="/assets/js/65.35c7d739.js"><link rel="prefetch" href="/assets/js/66.5bd1fab0.js"><link rel="prefetch" href="/assets/js/67.2fefa1f5.js"><link rel="prefetch" href="/assets/js/68.9a1f6762.js"><link rel="prefetch" href="/assets/js/69.38cba07b.js"><link rel="prefetch" href="/assets/js/7.cc111dec.js"><link rel="prefetch" href="/assets/js/70.fc9a1d41.js"><link rel="prefetch" href="/assets/js/71.9653bc2f.js"><link rel="prefetch" href="/assets/js/72.b891f838.js"><link rel="prefetch" href="/assets/js/73.e1210f94.js"><link rel="prefetch" href="/assets/js/74.ab0ed075.js"><link rel="prefetch" href="/assets/js/75.cda27c03.js"><link rel="prefetch" href="/assets/js/76.428edf72.js"><link rel="prefetch" href="/assets/js/77.708555dd.js"><link rel="prefetch" href="/assets/js/78.9eb49ecd.js"><link rel="prefetch" href="/assets/js/79.2858fbdd.js"><link rel="prefetch" href="/assets/js/8.d4947636.js"><link rel="prefetch" href="/assets/js/80.0c4c342e.js"><link rel="prefetch" href="/assets/js/81.8e83afd6.js"><link rel="prefetch" href="/assets/js/82.8c2fe083.js"><link rel="prefetch" href="/assets/js/83.d48f691b.js"><link rel="prefetch" href="/assets/js/84.26b5512b.js"><link rel="prefetch" href="/assets/js/86.bb06776b.js"><link rel="prefetch" href="/assets/js/87.91db36b5.js"><link rel="prefetch" href="/assets/js/88.ba87db24.js"><link rel="prefetch" href="/assets/js/89.c714e680.js"><link rel="prefetch" href="/assets/js/9.381aba3e.js"><link rel="prefetch" href="/assets/js/90.96b1fd9b.js"><link rel="prefetch" href="/assets/js/91.352a4af7.js"><link rel="prefetch" href="/assets/js/92.142a7ddd.js"><link rel="prefetch" href="/assets/js/93.6b5353fc.js"><link rel="prefetch" href="/assets/js/94.df8b99c6.js"><link rel="prefetch" href="/assets/js/95.d248ffc6.js"><link rel="prefetch" href="/assets/js/96.ae8d0244.js"><link rel="prefetch" href="/assets/js/97.bfe7356b.js"><link rel="prefetch" href="/assets/js/98.41166852.js"><link rel="prefetch" href="/assets/js/99.ee651042.js">
<link rel="stylesheet" href="/assets/css/0.styles.45745fd7.css">
<style type="text/css">.medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}</style><script charset="utf-8" src="/assets/js/127.1c69c139.js"></script><script charset="utf-8" src="/assets/js/85.333e6c50.js"></script><style type="text/css">.v[data-class=v]{font-size:16px;text-align:left}.v[data-class=v] *{-webkit-box-sizing:border-box;box-sizing:border-box;line-height:1.75}.v[data-class=v] .status-bar,.v[data-class=v] .veditor,.v[data-class=v] .vinput,.v[data-class=v] p,.v[data-class=v] pre code{color:#555}.v[data-class=v] .vsys,.v[data-class=v] .vtime{color:#b3b3b3}.v[data-class=v] .text-right{text-align:right}.v[data-class=v] .text-center{text-align:center}.v[data-class=v] img{max-width:100%;border:none}.v[data-class=v] hr{margin:.825em 0;border-color:#f6f6f6;border-style:dashed}.v[data-class=v].hide-avatar .vimg{display:none}.v[data-class=v] a{position:relative;cursor:pointer;color:#1abc9c;text-decoration:none;display:inline-block}.v[data-class=v] a:hover{color:#d7191a}.v[data-class=v] code,.v[data-class=v] pre{background-color:#f8f8f8;padding:.2em .4em;border-radius:3px;font-size:85%;margin:0}.v[data-class=v] pre{padding:10px;overflow:auto;line-height:1.45}.v[data-class=v] pre code{padding:0;background:transparent;white-space:pre-wrap;word-break:keep-all}.v[data-class=v] blockquote{color:#666;margin:.5em 0;padding:0 0 0 1em;border-left:8px solid hsla(0,0%,93%,.5)}.v[data-class=v] .vinput{border:none;resize:none;outline:none;padding:10px 5px;max-width:100%;font-size:.775em}.v[data-class=v] input[type=checkbox],.v[data-class=v] input[type=radio]{display:inline-block;vertical-align:middle;margin-top:-2px}.v[data-class=v] .vicon{cursor:pointer;display:inline-block;overflow:hidden;fill:#555;vertical-align:middle}.v[data-class=v] .vicon+.vicon{margin-left:10px}.v[data-class=v] .vicon.actived{fill:#66b1ff}.v[data-class=v] .vrow{font-size:0;padding:10px 0}.v[data-class=v] .vrow .vcol{display:inline-block;vertical-align:middle;font-size:14px}.v[data-class=v] .vrow .vcol.vcol-20{width:20%}.v[data-class=v] .vrow .vcol.vcol-30{width:30%}.v[data-class=v] .vrow .vcol.vcol-40{width:40%}.v[data-class=v] .vrow .vcol.vcol-50{width:50%}.v[data-class=v] .vrow .vcol.vcol-60{width:60%}.v[data-class=v] .vrow .vcol.vcol-70{width:70%}.v[data-class=v] .vrow .vcol.vcol-80{width:80%}.v[data-class=v] .vrow .vcol.vctrl{font-size:12px}.v[data-class=v] .emoji,.v[data-class=v] .vemoji{max-width:25px;vertical-align:middle;margin:0 1px;display:inline-block}.v[data-class=v] .vwrap{border:1px solid #f0f0f0;border-radius:4px;margin-bottom:10px;overflow:hidden;position:relative;padding:10px}.v[data-class=v] .vwrap input{background:transparent}.v[data-class=v] .vwrap .vedit{position:relative;padding-top:10px}.v[data-class=v] .vwrap .cancel-reply-btn{position:absolute;right:5px;top:5px;cursor:pointer}.v[data-class=v] .vwrap .vemojis{display:none;font-size:18px;max-height:145px;overflow:auto;padding-bottom:10px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v[data-class=v] .vwrap .vemojis i{font-style:normal;padding-top:7px;width:36px;cursor:pointer;text-align:center;display:inline-block;vertical-align:middle}.v[data-class=v] .vwrap .vpreview{padding:7px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v[data-class=v] .vwrap .vheader .vinput{width:33.33%;border-bottom:1px dashed #dedede}.v[data-class=v] .vwrap .vheader.item2 .vinput{width:50%}.v[data-class=v] .vwrap .vheader.item1 .vinput{width:100%}.v[data-class=v] .vwrap .vheader .vinput:focus{border-bottom-color:#eb5055}@media screen and (max-width:520px){.v[data-class=v] .vwrap .vheader.item2 .vinput,.v[data-class=v] .vwrap .vheader .vinput{width:100%}}.v[data-class=v] .vpower{color:#999;font-size:.75em;padding:.5em 0}.v[data-class=v] .vpower a{font-size:.75em}.v[data-class=v] .vcount{padding:5px;font-weight:600;font-size:1.25em}.v[data-class=v] ol,.v[data-class=v] ul{padding:0;margin-left:1.25em}.v[data-class=v] .txt-center{text-align:center}.v[data-class=v] .txt-right{text-align:right}.v[data-class=v] .pd5{padding:5px}.v[data-class=v] .pd10{padding:10px}.v[data-class=v] .veditor{width:100%;min-height:8.75em;font-size:.875em;background:transparent;resize:vertical;-webkit-transition:all .25s ease;transition:all .25s ease}.v[data-class=v] .vbtn{-webkit-transition-duration:.4s;transition-duration:.4s;text-align:center;color:#555;border:1px solid #ededed;border-radius:.3em;display:inline-block;background:transparent;margin-bottom:0;font-weight:400;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;white-space:nowrap;padding:.5em 1.25em;font-size:.875em;line-height:1.42857143;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.v[data-class=v] .vbtn+.vbtn{margin-left:1.25em}.v[data-class=v] .vbtn:active,.v[data-class=v] .vbtn:hover{color:#3090e4;border-color:#3090e4}.v[data-class=v] .vbtn:disabled{border-color:#e1e1e1;color:#e1e1e1;background-color:#fdfafa;cursor:not-allowed}.v[data-class=v] .vempty{padding:1.25em;text-align:center;color:#555;overflow:auto}.v[data-class=v] .vsys{display:inline-block;padding:.2em .5em;font-size:.75em;border-radius:.2em;margin-right:.3em}@media screen and (max-width:520px){.v[data-class=v] .vsys{display:none}}.v[data-class=v] .vcards{width:100%}.v[data-class=v] .vcards .vcard{padding-top:1.25em;position:relative;display:block}.v[data-class=v] .vcards .vcard:after{content:"";clear:both;display:block}.v[data-class=v] .vcards .vcard .vimg{width:3.125em;height:3.125em;float:left;border-radius:50%;margin-right:.7525em;border:1px solid #f5f5f5;padding:.125em}@media screen and (max-width:720px){.v[data-class=v] .vcards .vcard .vimg{width:2.5em;height:2.5em}}.v[data-class=v] .vcards .vcard .vhead{line-height:1.5;margin-top:0}.v[data-class=v] .vcards .vcard .vhead .vnick{position:relative;font-size:.875em;font-weight:500;margin-right:.875em;cursor:pointer;text-decoration:none;display:inline-block}.v[data-class=v] .vcards .vcard .vhead .vnick:hover{color:#d7191a}.v[data-class=v] .vcards .vcard .vh{overflow:hidden;padding-bottom:.5em;border-bottom:1px dashed #f5f5f5}.v[data-class=v] .vcards .vcard .vh .vtime{font-size:.75em;margin-right:.875em}.v[data-class=v] .vcards .vcard .vh .vmeta{line-height:1;position:relative}.v[data-class=v] .vcards .vcard .vh .vmeta .vat{font-size:.8125em;color:#ef2f11;cursor:pointer;float:right}.v[data-class=v] .vcards .vcard:last-child .vh{border-bottom:none}.v[data-class=v] .vcards .vcard .vcontent{word-wrap:break-word;word-break:break-all;font-size:.875em;line-height:2;position:relative;margin-bottom:.75em;padding-top:.625em}.v[data-class=v] .vcards .vcard .vcontent.expand{cursor:pointer;max-height:8em;overflow:hidden}.v[data-class=v] .vcards .vcard .vcontent.expand:before{display:block;content:"";position:absolute;width:100%;left:0;top:0;bottom:3.15em;background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(hsla(0,0%,100%,.9)));background:linear-gradient(180deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.9));z-index:999}.v[data-class=v] .vcards .vcard .vcontent.expand:after{display:block;content:attr(data-expand);text-align:center;color:#828586;position:absolute;width:100%;height:3.15em;line-height:3.15em;left:0;bottom:0;z-index:999;background:hsla(0,0%,100%,.9)}.v[data-class=v] .vcards .vcard .vquote{padding-left:1em;border-left:1px dashed hsla(0,0%,93%,.5)}.v[data-class=v] .vcards .vcard .vquote .vimg{width:2.225em;height:2.225em}.v[data-class=v] .vpage .vmore{margin:1em 0}.v[data-class=v] .clear{content:"";display:block;clear:both}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes pulse{50%{background:#dcdcdc}}@keyframes pulse{50%{background:#dcdcdc}}.v[data-class=v] .vspinner{width:22px;height:22px;display:inline-block;border:6px double #a0a0a0;border-top-color:transparent;border-bottom-color:transparent;border-radius:50%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear;position:relative;vertical-align:middle;margin:0 5px}.dark .v[data-class=v] .status-bar,.dark .v[data-class=v] .veditor,.dark .v[data-class=v] .vinput,.dark .v[data-class=v] p,.dark .v[data-class=v] pre code,.night .v[data-class=v] .status-bar,.night .v[data-class=v] .veditor,.night .v[data-class=v] .vinput,.night .v[data-class=v] p,.night .v[data-class=v] pre code,.theme__dark .v[data-class=v] .status-bar,.theme__dark .v[data-class=v] .veditor,.theme__dark .v[data-class=v] .vinput,.theme__dark .v[data-class=v] p,.theme__dark .v[data-class=v] pre code,[data-theme=dark] .v[data-class=v] .status-bar,[data-theme=dark] .v[data-class=v] .veditor,[data-theme=dark] .v[data-class=v] .vinput,[data-theme=dark] .v[data-class=v] p,[data-theme=dark] .v[data-class=v] pre code{color:#b2b2b5}.dark .v[data-class=v] .vsys,.dark .v[data-class=v] .vtime,.night .v[data-class=v] .vsys,.night .v[data-class=v] .vtime,.theme__dark .v[data-class=v] .vsys,.theme__dark .v[data-class=v] .vtime,[data-theme=dark] .v[data-class=v] .vsys,[data-theme=dark] .v[data-class=v] .vtime{color:#929298}.dark .v[data-class=v] code,.dark .v[data-class=v] pre,.dark .v[data-class=v] pre code,.night .v[data-class=v] code,.night .v[data-class=v] pre,.night .v[data-class=v] pre code,.theme__dark .v[data-class=v] code,.theme__dark .v[data-class=v] pre,.theme__dark .v[data-class=v] pre code,[data-theme=dark] .v[data-class=v] code,[data-theme=dark] .v[data-class=v] pre,[data-theme=dark] .v[data-class=v] pre code{color:#929298;background-color:#151414}.dark .v[data-class=v] .vwrap,.night .v[data-class=v] .vwrap,.theme__dark .v[data-class=v] .vwrap,[data-theme=dark] .v[data-class=v] .vwrap{border-color:#b2b2b5}.dark .v[data-class=v] .vicon,.night .v[data-class=v] .vicon,.theme__dark .v[data-class=v] .vicon,[data-theme=dark] .v[data-class=v] .vicon{fill:#b2b2b5}.dark .v[data-class=v] .vicon.actived,.night .v[data-class=v] .vicon.actived,.theme__dark .v[data-class=v] .vicon.actived,[data-theme=dark] .v[data-class=v] .vicon.actived{fill:#66b1ff}.dark .v[data-class=v] .vbtn,.night .v[data-class=v] .vbtn,.theme__dark .v[data-class=v] .vbtn,[data-theme=dark] .v[data-class=v] .vbtn{color:#b2b2b5;border-color:#b2b2b5}.dark .v[data-class=v] .vbtn:hover,.night .v[data-class=v] .vbtn:hover,.theme__dark .v[data-class=v] .vbtn:hover,[data-theme=dark] .v[data-class=v] .vbtn:hover{color:#66b1ff;border-color:#66b1ff}.dark .v[data-class=v] a:hover,.night .v[data-class=v] a:hover,.theme__dark .v[data-class=v] a:hover,[data-theme=dark] .v[data-class=v] a:hover{color:#d7191a}.dark .v[data-class=v] .vcards .vcard .vcontent.expand:before,.night .v[data-class=v] .vcards .vcard .vcontent.expand:before,.theme__dark .v[data-class=v] .vcards .vcard .vcontent.expand:before,[data-theme=dark] .v[data-class=v] .vcards .vcard .vcontent.expand:before{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.3)),to(rgba(0,0,0,.7)));background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.7))}.dark .v[data-class=v] .vcards .vcard .vcontent.expand:after,.night .v[data-class=v] .vcards .vcard .vcontent.expand:after,.theme__dark .v[data-class=v] .vcards .vcard .vcontent.expand:after,[data-theme=dark] .v[data-class=v] .vcards .vcard .vcontent.expand:after{background:rgba(0,0,0,.7)}@media (prefers-color-scheme:dark){.v[data-class=v] .status-bar,.v[data-class=v] .veditor,.v[data-class=v] .vinput,.v[data-class=v] p,.v[data-class=v] pre code{color:#b2b2b5}.v[data-class=v] .vsys,.v[data-class=v] .vtime{color:#929298}.v[data-class=v] code,.v[data-class=v] pre,.v[data-class=v] pre code{color:#929298;background-color:#151414}.v[data-class=v] .vwrap{border-color:#b2b2b5}.v[data-class=v] .vicon{fill:#b2b2b5}.v[data-class=v] .vicon.actived{fill:#66b1ff}.v[data-class=v] .vbtn{color:#b2b2b5;border-color:#b2b2b5}.v[data-class=v] .vbtn:hover{color:#66b1ff;border-color:#66b1ff}.v[data-class=v] a:hover{color:#d7191a}.v[data-class=v] .vcards .vcard .vcontent.expand:before{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.3)),to(rgba(0,0,0,.7)));background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.7))}.v[data-class=v] .vcards .vcard .vcontent.expand:after{background:rgba(0,0,0,.7)}}</style><style class="mpa-style-fix ImageGatherer">.FotorFrame{position:fixed!important}</style><style class="mpa-style-fix SideFunctionPanel">.weui-desktop-online-faq__wrp{top:304px!important;bottom:unset!important}.weui-desktop-online-faq__wrp .weui-desktop-online-faq__switch{width:38px!important}</style><meta name="description" content="和小浩一起学算法"></head>
"""
html = f'{header}{div}'
return html