宇浩输入法系列最新的方案的「灵明」是一个四码限长自分割方案,在「日月」的基础上改进了很多:

  1. 从限长五码变成限长四码,全码码长大大缩短,只用背 50 左右简码,就可以达到 3.0 码长,简码效率超高;
  2. 韵码严格直接取拼音,没有额外的映射,大大降低字根记忆难度;
  3. 字根聚类程度仅次于「星陈」方案,大大降低学习难度;
  4. 以 20 万的编码空间做到了极致的简体、繁体单字性能;

我已经用「星陈」方案快两年了,自从「日月」出来后一直很想换个自分割方案,以减少使用空格,达到类似拼音整句连续输入但又有形码精准的体验,在「灵明」发布后练习了字根,但没有切换过去,因为灵明有一些小小的缺点:

  1. 区分大根、 小根,由算法决定 86 个字根不取声母,不全是高频根,增加了字根记忆难度;
  2. 因为大根和小根之分,单字编码有两种方式,首根为大根时要跳过第三根,增加了拆字判断负担;
  3. 二码的字根字不能参与组词;
  4. 高频字根「丶、乀、扌」在 T 键上,「又、艹」在 Q 键上,T 上的「扌」和 L 上的「手龵」分开了,另外 P、A、 B 键热力略微高了点;

在宇浩系列的光华、星陈、卿云、日月、灵明几个方案里,星陈和日月的按键分布最理想,星陈属于各方面都中规中矩,可惜的就是不支持自分割特性,另外所有宇浩系列的方案都不能区分拆分重码的字,比如「员」和「呗」,「晕」和「晖」,因此我断断续续地琢磨新的方案思路,并给宇浩系列作者(圈内尊/戏称「殿下」)提馊主意,撺掇他出新方案。

我第一个馊主意:对「山口日」这三个常出现的首根,区分其位置是否在上面,使用不同的字根编码,这个主意被殿下 diss 了,每个字上来就要判断下字型结构太累了。

之前有一段时间殿下帮助新逸码试验融入四角码的可能性,这事启发了我第二个馊主意:用单字的四角码的左下角数字映射到自分割码的韵码,以区分一部分拆分重码,但试验后发现 Unihan 数据里只有部分字有四角码,另外跟殿下讨论后,殿下认为引入四角码后要想象字型,对想打很不友好。我硬着头皮在自动拆分系统里配置好新方案,但优化时发现自动拆分系统有 bug,生成的单字编码有错误,于是算球,不折腾这个馊主意了,殿下是对的!

然后是第三个馊主意「飞键」:对部分高频的首根,在 A 区和 B 区设立两个键,字根为首根时用 B 区,否则使用 A 区,这样 A+B 的单字编码变成了 [A|B]A*B 编码,编码空间增加了 25%,用这种方式来看看能否抵销不用灵明的大小根设计带来的单字性能损失。殿下听到这个馊主意整个人都蛤蚌住了。。。最后安慰我说应该可以如我愿达到星陈的性能。。。

有了殿下的鼓励,胆子自然肥起来了,从不算码的我居然也开始算码了,正好码圈算码大佬 @荒 开源了新的形码拆分系统「字劫」和优化程序「码灵」,在请教他如何使用后,历尽千辛万苦总算准备好了「码灵」需要的输入数据,运行了一把优化试试,哇,一分钟能优化 100 万步,这有点上瘾啊,好像我真的行了。。。于是试了试摸底,直接用 A+SY 编码单字,A 是大码,S 是声码,Y 是韵码,限长四码,短时间优化后离星陈性能数据有一倍差距,没有追平,然后试验了下用高冲突的前 20 字根做飞键,短时间优化后,更差了,然后试验了下只用高冲突的非成字根做飞键,效果不错,基本追上星陈了,再细致优化下应该可以打平。

然后想了下,觉得飞键杀敌八百自损一千有点恶心,就又想起星陈的回头码设计,于是有了第一版魔改的灵明——魔灵两可:

  1. 参照灵明,使用 25 键方案,声母 z/zh 用 v 代替,声母 q 用 k 代替,零声母用 j 代替;
  2. 字根聚类参照灵明,因为它已经验证了这些聚在一起不太损耗性能;
  3. 声码和韵码基本参照灵明,严格按拼音,但去掉了省略声码的设计,而且字根尽量只聚类不归并,除非形状过于相似容易看错,不归并带来的好处是可以保留字根原来的读音,不因字根设计而导致读音变了,得特殊记忆错误的读音;
  4. 单字编码为 A1 A2A3AzSzYz,除了双根字编码为 A1A2S2S1Y1 ,模仿了星陈的回头码设计,单字编码限长四码;

用「码灵」优化了下,发现简体动重已经能跟星陈打得有来有回了,甚至简体动重还超过了灵明、卿云、星陈、光华,只比日月差了,很意外,回头码真不错啊,要不是星陈为了易学加了太多字根聚类,可能星陈的性能都能追赶日月了。

虽然没用飞键了,但飞键改的是首根主键,跟回头码是正交的优化,需要的话可以两个黑魔法都上上去!😀

最后,感谢殿下的优良制作,星陈和灵明都很赞,两者合体的魔灵虽然在简体动重上还不错,但在静重、当量、繁体重码上面就差远了,只适合以简体字为主的用户。感谢 @荒 的「码灵」优化系统,简单好用又快速,实乃算码人居家必备!