Giter VIP home page Giter VIP logo

fengxueguang / fingermemory Goto Github PK

View Code? Open in Web Editor NEW

This project forked from werneror/fingermemory

0.0 0.0 0.0 82 KB

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

Home Page: https://fengxueguang.github.io/FingerMemory/

License: GNU General Public License v3.0

HTML 16.11% CSS 1.00% JavaScript 82.89%

fingermemory's Introduction

手指记忆

简介

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

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

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

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

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

关卡设置

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

关卡写在文件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

fingermemory's People

Contributors

werneror avatar fengxueguang avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.