Skip to content
以刻意练习理论为指导、根据练习者掌握情况动态生成训练内容,优先训练练习者掌握不佳内容的五笔输入法训练系统。
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
statics 输入错误时字也变红 Jun 5, 2018
LICENSE Initial commit May 28, 2018
README.md 修改了README.md May 30, 2018
index.html 基本完成 May 30, 2018
song.html 重构代码,基本完成,但有bug May 30, 2018

README.md

手指记忆

简介

最近我在学习五笔输入法。学习一个输入法,我需要能够做到不过脑子,下意识地便能进行正确的输入。这需要大量的联系,让自己的手指“记住”五笔输入法才行。大脑记住某个东西尚且需要重复,手指“记住”某个东西非有大量的练习不可。

我在学习时使用金山打字通作为训练教程。使用发现金山打字通训练时字根或汉字的出现是固定的。无论我对某个字根或汉字的输入多么熟悉,它出现的频率也不会减少;无论我对某个字根或汉字的输入多么陌生,它出现的频率也不会增加。我一遍又一遍的训练,熟悉的还是熟悉,陌生的依旧陌生。

我发现这是不符合刻意练习原则的。我们应该花更多的时间刻意地练习自己不熟悉的部分。所以一个好的五笔输入法训练系统应该能够记录练习者的练习情况,根据其掌握程度动态地制定训练任务,更多地训练练习者不熟悉的字根或汉字。

我想要寻找一个这样的、符合刻意练习原则的五笔输入法训练系统,却没能找到。于是决定自己动手实现,便有了这个项目。

本项目是以刻意练习理论为指导、根据练习者掌握情况动态生成训练内容,优先训练练习者掌握不佳内容的五笔输入法训练系统。

关卡设置

  • 第零关:指法练习
  • 第一关:字根输入
  • 第二关:一级简码
  • 第三关:二级简码

关卡写在文件statics/js/data.js中。

算法

显示与输入

在“第一关:字根输入”中,我们会在屏幕上显示一个字根,如“礻”,用户看到这个字根后应该按下这个字根所在按键“p”。在这个过程中,我们称字根“礻”为显示(display),按键“p”为输入(input)。显示的取值范围是任意的,如在第零关中它是字母,在第一关中它是字根。输入的取值只能是可以用键盘输入的东西,如字母或汉字。一个显示对应且仅对应一个输入,一个输入可以对应多个显示。我们称一个“显示-输入”为一个训练元。关卡实际上便是一些训练元的集合。

不熟练度度量

记从显示显示到屏幕上到用户输入输入经历的时间为T(单位:秒), 定义不熟练度U为:

U = T^0.5

由于这个函数不收敛,所以需要指定一个时间最大值,当输入错误或T超过时间最大值时,将T置为时间最大值。

每个训练元都有一个不熟练度,初始时不熟练度为时间最大值对应的不熟练度。每次用户输入都会更新相应训练元的不熟练度。

下表是一些T和U的对应:

T | U

  • | :-: 0.0 | 0.00 0.1 | 0.32 0.2 | 0.45 0.5 | 0.71 1.0 | 1.00 1.5 | 1.22 5.0 | 2.23 5.0 | 2.23 10 | 3.16 60 | 7.75

训练元产生器

每一个关卡都有一个训练元集合,训练元产生器的作用是从训练元集合中选取一个训练元,将训练元的显示显示在屏幕上,然后等待用户输入。

如何选取呢?我们按照不熟练度加权进行随机选取。设训练元集合中的训练元的不熟练度之和为S,其中第i个训练元的不熟练度为Ui,则选取第i个训练元的概率为:

P(i) = Ui / S

显然,所有训练元被选取的概率之和为1,每次必有一个训练元被选中。

过关条件

对每一关都定义一个过关条件condition。当一个训练元的不熟练度小于等于condition时,我们认为用户对该训练元足够熟悉。当某一关的训练元集合中所有训练元的不熟练度均小于等于condition时我们认为用户通过此关。

TODO

  • 不熟练度度量函数过于简单,不够理想,有待探索
  • 过关条件condition等参数还需微调
  • 编写帮助页面
  • 界面很简陋,有待完善

开源证书

GNU General Public License v3.0

You can’t perform that action at this time.