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 @@
- 简洁直观的复习流程设计
## 屏幕截图
-
-
+> 由于使用 Textual 框架的矢量截图, 部分字体可能无法正确显示属浏览器造成的正常现象, 不会影响实际终端模拟器显示, 不会影响 Web 部署界面显示
+
+
+
+
## 技术架构
> 有关技术与实现的细节, 请参阅 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 @@
+
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 @@
+
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 @@
+