diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e69de29..cf20f78 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# 贡献指南 +## 使用 Nuitka 静态编译 +运行 + +```bash +nuitka --clang --jobs=6 --standalone --onefile main.py +``` \ No newline at end of file diff --git a/README.md b/README.md index 247bc03..b33e65e 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,7 @@ ## 概述 -"潜进" (HeurAMS, 中文含义: 启发式辅助记忆软件) 是为习题册, 古诗词, 及其他问答/记忆/理解型题目设计的记忆辅助软件, 提供优化记忆方案 - +"潜进" (HeurAMS, 中文含义: 启发式辅助记忆软件) 是为习题册, 古诗词, 及其他问答/记忆/理解型知识设计的辅助记忆软件, 提供动态规划的优化记忆方案 ## 技术集成与特性 @@ -13,10 +12,10 @@ - 采用经实证的 SM-2 间隔迭代算法, 此算法亦用作 Anki 闪卡记忆软件的默认闪卡调度器 > 计划: 将添加 FSRS 算法 (Anki 的新可选闪卡调度器) 与一种 SM-15 变体算法作为后续替代 > 参考 https://github.com/slaypni/SM-15 -> 为什么使用 SM-15 的变体? -> SM-2 后续算法仅有论文, 无具体方程, 故使用一种基于 SM-15 描述实现的变体算法 -- 动态优化每首诗词的记忆间隔时间表 -- 实时跟踪记忆曲线,优化长期记忆保留率与稳定性 +> 使用 SM-15 的变体: +> SM-2 后续算法并非完全开放, 故使用一种基于 SM-15 描述实现的变体算法 +- 动态规划每个记忆单元的记忆间隔时间表 +- 动态跟踪记忆反馈数据,优化长期记忆保留率与稳定性 ### 学习进程优化 - 逐字解析:支持逐字详细释义解析 @@ -30,8 +29,11 @@ - 简洁直观的复习流程设计 ## 屏幕截图 -![scrshot2](readme_src/image_2.png) -![scrshot1](readme_src/image_1.png) +> 由于使用 Textual 框架的矢量截图, 部分字体可能无法正确显示属浏览器造成的正常现象, 不会影响实际终端模拟器显示, 不会影响 Web 部署界面显示 + +![scrshot1](readme_src/img1.svg) +![scrshot2](readme_src/img2.svg) +![scrshot3](readme_src/img3.svg) ## 技术架构 > 有关技术与实现的细节, 请参阅 CONTRIBUTING.md @@ -63,9 +65,3 @@ graph TD - 平台支持:Windows / macOS / Linux / Android (需要 Termux 或 Linux) (终端或浏览器) - 网络连接:可预缓存语音文件, 需联网使用大模型服务功能 - -## 使用 Nuitka 静态编译 -运行 -```bash -nuitka --clang --jobs=6 --standalone --onefile main.py -``` \ No newline at end of file diff --git a/config.toml b/config.toml index e70c9c0..76c3393 100644 --- a/config.toml +++ b/config.toml @@ -1,12 +1,14 @@ # [调试] 将更改保存到文件 save = 1 + # [调试] 覆写时间 time_override = -1 + # [调试] 一键通过 quick_pass = 0 # 对于每个项目的新记忆核子数量 tasked_number = 8 -# 竖屏适配 +# 竖屏适配 (未完成) mobile_mode = 1 \ No newline at end of file diff --git a/main.py b/main.py index 1d4a6d0..9d11b89 100644 --- a/main.py +++ b/main.py @@ -117,11 +117,6 @@ class MemScreen(Screen): def refresh_ui(self): self.call_later(self.recompose) - def report(self, quality): - print(f"reported: {quality}") - assessment = self.reactor.report(self.reactor.current_atom, quality) - return assessment - def action_play_voice(self): def play(): cache_dir = pathlib.Path(f"./cache/voice/") @@ -140,7 +135,7 @@ class MemScreen(Screen): threading.Thread(target=play).start() def action_quick_pass(self): - self.report(5) + self.reactor.report(self.reactor.current_atom, 5) self._forward_judge(0) def action_toggle_dark(self): self.app.action_toggle_dark() @@ -177,7 +172,7 @@ class PreparationScreen(Screen): classes="start-button", ) yield Static(f"\n全文如下:\n") - yield Static(self._get_full_content(), classes="full") + yield Static(self._get_full_content().replace("/", ""), classes="full") yield Footer() def _get_full_content(self): diff --git a/particles.py b/particles.py index 7c0d1bf..b22cdd7 100644 --- a/particles.py +++ b/particles.py @@ -48,6 +48,7 @@ class Electron: Args: quality (int): 记忆保留率量化参数 """ + print(f"REVISOR: {quality}, {is_new_activation}") if quality == -1: return -1 diff --git a/reactor.py b/reactor.py index 0aa2a63..4e6daba 100644 --- a/reactor.py +++ b/reactor.py @@ -32,7 +32,6 @@ class Reactor(): """反应堆对象, 处理和分配一次文件记忆流程的资源与策略""" def __init__(self, nucleon_file: pt.NucleonUnion, electron_file: pt.ElectronUnion, screen, tasked_num): # 导入原子对象 - self.reported = set() self.nucleon_file = nucleon_file self.electron_file = electron_file self.tasked_num = tasked_num @@ -41,6 +40,7 @@ class Reactor(): counter = self.tasked_num self.screen = screen self.electron_dict = electron_file.electrons_dict + self.quality_dict = {} def electron_dict_get_fallback(key) -> pt.Electron: value = self.electron_dict.get(key) # 如果值不存在,则设置默认值 @@ -71,7 +71,6 @@ class Reactor(): self.procession: list self.failed: list self.round_title: str - self.reported: set self.current_atom: typing.Tuple[pt.Electron, pt.Nucleon, dict] self.round_set = 0 self.current_atom = pt.Atom.placeholder() @@ -127,23 +126,25 @@ class Reactor(): return 0 def save(self): + self._deploy_report() print("Progress saved") # self.nucleon_file.save() self.electron_file.save() + def _deploy_report(self): + "部署所有 _report" + for e, q in self.quality_dict.items(): + if q == -1: + e.revisor(5, True) + continue + e.revisor(q) def report(self, atom, quality): - """ - 0: 初次激活/通过 - 1: 不通过 - """ + "向反应器和最低质量记录汇报" if atom in self.atoms_new: - atom[0].revisor(quality, True) - return 0 - if atom[0] not in self.reported: - atom[0].revisor(quality) - self.reported.add(atom[0]) + self.quality_dict[atom[0]] = -1 + print(self.quality_dict) + return + self.quality_dict[atom[0]] = min(quality, self.quality_dict.get(atom[0], 5)) if quality <= 3: self.failed.append(atom) - return 1 - else: - return 0 \ No newline at end of file + print(self.quality_dict) \ No newline at end of file diff --git a/readme_src/image_1.png b/readme_src/image_1.png deleted file mode 100644 index 5f9bdf2..0000000 Binary files a/readme_src/image_1.png and /dev/null differ diff --git a/readme_src/image_2.png b/readme_src/image_2.png deleted file mode 100644 index ffbc031..0000000 Binary files a/readme_src/image_2.png and /dev/null differ diff --git a/readme_src/img1.svg b/readme_src/img1.svg new file mode 100644 index 0000000..55ee93b --- /dev/null +++ b/readme_src/img1.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 潜进 - 辅助记忆程序 + + + + + + + + + + 潜进 - 辅助记忆程序07:37:19 +欢迎使用 "潜进" 辅助记忆软件, 版本 0.3.0 +选择要学习的文件: +陈情表.toml + + + + + + + + + + + + + + + + + + + + + + + + esc 退出  d 改变色调 ^p palette + + + diff --git a/readme_src/img2.svg b/readme_src/img2.svg new file mode 100644 index 0000000..78d671e --- /dev/null +++ b/readme_src/img2.svg @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 潜进 - 辅助记忆程序 + + + + + + + + + + 潜进 - 辅助记忆程序07:37:26 + + + + + + + + + + + +8/8 +臣子李密陈言: 我因命运不好, 小时候遭遇到了不幸 + +臣 密 言: +臣 以 险衅, +夙 遭 闵凶. + +险衅: 凶险祸患(这里指命运不好) +: 早时, 这里指年幼的时候 +: 通'悯', 指可忧患的事 +: 不幸, 指丧父 + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 我已知晓  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + d 改变色调  q 返回主菜单  v 朗读  esc 退出 ^p palette + + + diff --git a/readme_src/img3.svg b/readme_src/img3.svg new file mode 100644 index 0000000..c32822b --- /dev/null +++ b/readme_src/img3.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 潜进 - 辅助记忆程序 + + + + + + + + + + 潜进 - 辅助记忆程序07:37:33 + + + + + + +8/8 +臣密言: 臣以险衅, 夙遭闵凶. +选择正确词义: : +  1. 夙 +当前输入: [] +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 通'悯', 指可忧患的事  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 凶险祸患(这里指命运不好)  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 早时, 这里指年幼的时候  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 不幸, 指丧父  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 退格  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + d 改变色调  q 返回主菜单  v 朗读  esc 退出 ^p palette + + +