最適化をもっと頑張る

アドカレ3回目です。だいぶ日程も埋まってきてますので、僕の活躍もこのあたりで終わるかもしれないです。いややっぱりciv5について書きたいのでもう1回くらいは頑張ります。

さて前回は「qwerty配列ローマ字入力法としては最適ではない」としつつも「その問題点を解決する手段」として最適化を挙げました。なので今回は最適化についてのお話です。

 とは言っても具体的な最適化について述べるつもりは全然ありません。なぜならキリがないからです。下の画像は僕の運指表(2018年12月現在)です。赤~緑が左手小指~人差し指、水色~紫が右手人差し指~小指、グレーが左親指、白は右親指です。

f:id:paraphrohn:20181209010850p:plain
いろいろとカラフル過ぎてよく意味が分かりませんね。つまりそういうことです。例外処理が多すぎて遊戯王wikiみたいになってしまっているわけです。

というわけで今回は最適化における基本的な動きはできているものとして、または最適化を全くしていないものとして、しかし最適化によって今よりももう一歩タイピング速くなる手法を考えてみたいと思います。

中身は主に二つ、前者はある意味当然なので実質一つです。

 

・瞬間最大風速は出る、継続は難しい

例えば「あい」を打つ時、頑張れば「あ」と「い」の間の時間は0.01秒くらいに抑えられると思います。しかし「あいえ」を打つ時に「あ」→「い」→「え」を0.02秒に抑えるのはかなり運が絡んできます。同時押しタイミングチェッカーで試してみてください。1fあたり0.017秒なので、「あいえ」を順番に押すと、A:+0f E:+1.24f I:+0.88fみたいなのが出てくると思いますが、これのE:+の後の数字が1.2以下ならば0.02秒で「あいえ」が押せているということになります。実際にはタイマーの関係で0.006秒単位くらいでしか計測されてないですが……それでも安定して1.2f前後に落ち着かせるのはかなり難しいです(というか僕は1.4~2.8fくらいでばらけます)。これが「あいえう」を0.03秒となるとほとんど不可能です。狙ってできるものではないです。

一方で「おお」を0.1秒で打つのは簡単だと思います。しかしこれも「おおお」を0.2秒、「おおおお」を0.3秒、と長くしていくと、これもどんどん難しくなってきます。「きん」なら800kpmくらい出せるって人でも、「きんにく」になれば800kpmも難しくなってくるでしょうし、これが「筋肉ー♪」とかになるともっと難しいです。

つまるところ、交互打鍵、同指連続、同指手連続、だいたいの打鍵パターンは継続すればするほど難しくなるわけです。まあこれは当然ではあるんですが、軽く意識しておくと何か役に立ちます。

例えば前回も挙げた「公共広告機構」はカ行をkで打つと全部右手で打つことになるわけですが、cで打てばcoukyoucoucocukicouとなって右手は最大でも6連続になります(こっちの方が間違いなく速くなるとは言いません)。個人的にはcu、coの使用は余計な交互打鍵を増やしてむしろ遅くなることが多いと思ってますが、このように同じ打鍵パターンが継続する場合、具体的には4打鍵目くらいから、運動能力が理論値から乖離してしまうために理論上は遅くなる最適化を組み込んでも結果的に速くなることがあります。逆に瞬間最大風速を利用した最適化もアリですね。

これは多分皆さん自覚してると思うので、どちらかと言えば自戒の意味をこめて書いています。いや僕右手を過信してる気がするなって最近。

計算上は「冬」はhuyu7878もfuyu4878も速度あんまり変わらないんですけど、やっぱりfuyu4878のほうが速いんですよねえ。瞬間最大風速が効いてるんだと思います。特に交互打鍵は1回だけの時に瞬間最大風速が強く効く傾向にあると思います。

 

・チャンクの切り方を考える

チャンクというのは6~7年くらい前に一部界隈で使われていた言葉で、言葉の意味もかなりふわふわとした曖昧なものでした。本記事では、チャンクとは「片手で、一方向への一動作で処理する文字塊」として定義します。有り体に言えばアルペジオ打鍵で処理できる塊です。

机上の空論ではありますが、チャンクをこのように定義した上で

・チャンク内は0秒で処理される

・チャンク間はチャンクの連結に応じた時間がかかる

・チャンクの連結は「手の交代」「同指連続」「同手連続」の3種類

と強引に近似してしまうことで、めちゃくちゃ練習した固定文に対する打鍵速度を見積もることができます。

これは去年のタイピングサミットでお話しした打鍵モデルをさらに理想状態(ここにおける理想とはモデルの質としての向上ではなく、指の強弱や上で述べた継続によるパフォーマンス低下などの一切の夾雑を除いた状態)に近づけたものです。モデル化しすぎていて現実に即したものではない、と言われそうですが、実はこれなかなか侮れないものです。

 

さてタイパーの皆様の中にも、「初見文に割と強い」「トプスピがそれほど高くない」「ワースピは逆に高い」「実用は苦手ではなく、むしろ得意」みたいな特徴を兼ね備えた人っていうのがいると思います。ていうか僕です。こういう人は、日本語の音節でチャンクを切ってしまっていることが割とあるんじゃないかと思います。言い換えれば内読しながら打つ人です。朗読、内読においては音節は一定の速度で流れることが多いので、打鍵速度も一定になりがちであるという仮説です。調べたところ朗読の速度は音節ではなくモーラ依存らしく、簡単に言えば音節の一部である「-」「っ」「ん」にも同じだけの時間がかかるそうです。

タイピングマエストロ隅野貴裕氏が「あああああ」「あいうえお」の関係性と並んでよく挙げるたとえに、カ行はcで固定するとして「こうこうこうこうこう」と並んでいる文字列を打つ時はすごく速く打てるのに対して、「うこうこうこうこうこ」と並んでいる文字列を打つ時は遅くなる、というのがあります。これが音節でチャンクを切る明確な弊害です。

具体的に説明します。coucoucoucouを音節でチャンクを切るとcou/cou/cou/couとなります。上の定義から手の交代でチャンクが切れるので最終的な切り方はc/ou/c/ou/c/ou/c/ou、つまりチャンク8連結です。

一方でucoucoucoucoは音節でチャンクを切るとu/co/u/co/u/co/u/coとなり、さらにu/c/o/u/c/o/u/c/o/u/c/oまで切れます。こっちはチャンク12連結で、上のモデルからすれば1.5倍の時間がかかることになります。しかし、もし音節でチャンクを切らなければ? coucoucoucouは同じく8連結、ucoucoucoucoはu/c/ou/c/ou/c/ou/c/oの9連結でかなり近い値になります。これが音節でチャンクを切る明確な弊害です。

これは打ちやすいと打ちにくいで分かれやすい「まごまご」にも言えます。音節でチャンクを切るとm/a/g/o/m/a/g/oの8連結なのに対して、切らなければm/ag/om/ag/oの5連結で実に1.6倍の差があります。

というわけでチャンクを音節で切るのは打鍵の安定化には繋がるものの、事前にしっかり練習して本番に挑める、つまるところWeather Typingや歌謡タイピング劇場のような場では速度を出し切れず不利に陥りやすいのです。もし上のような悩みをお持ちの方がいらっしゃれば、内読と、それに伴うチャンク分離が問題になっている可能性がありますので、意図的に内読を排除した練習をしてみると何か解決するかもしれません。

 

さてこの考えを最適化と組み合わせてみます。一番わかりやすいのはnji789です。これを音節切りするとn/jiとチャンク2連結ですが、しなければ単チャンクです。まずは「漢字(canji)」をジャ(左手)ジャッ(右手)! の意識で練習してみると感覚がつかめると思います。nji789を導入しておきながら右手をジャララッってやるのはちょっと芸がないです。

nji789だけだとピンポイントすぎるのでもう少し一般的にします。Weather Typingのword1で2種類出てくる「爆発」を考えます。cを使うにせよkを使うにせよ、音節の切れ目でuhがありますので、ここのチャンクはまとめたいところです。あるいはhを左手で押して音節の切れ目と対応させるのもアリなのでこの2方向から考えます。

とりあえず書き出してみます。

標準運指: ba/ku/h/at/u 5連結

c打ち標準: ba/c/u/h/at/u 6連結

標準運指+音節切り: ba/ku/h/a/t/u 6連結

c打ち標準+音節切り: ba/c/u/h/a/t/u 7連結

音節切りをしてしまうと、atのチャンクが分かれるので1連結増えるのが分かります。なので音節切りはあまりしたくないワードです。さてここから上で言うようにuhのまとめか、h左を導入します。

uh87導入: ba/k/uh/at/u 5連結

c打ち+uh87導入: ba/c/uh/at/u 5連結

kuh987導入: ba/kuh/at/u 4連結

ha41導入: ba/ku/ha/t/u 5連結

ha41の場合、hatでチャンクが分かれてしまうのが欠点です。まあ上で述べた通り瞬間最大風速は出せるので、1回くらいは同手連続(チャンク間で同じ指を使わない)を最速で抜けることはできると思います。最終的には好みの問題です。

「爆発」だけをとっても割と複雑ですね。これを実際に初見文で打ちながら考えるのは相当慣れてないと難しいです。だからこそこの考え方は(特に初めのうちは)何度も練習ができる固定文形式のゲームに向いていると思います。

 

ちなみに僕がこっそりひろりんごスラッシュと呼んでいるen24は、チャンク切りを音節切りに揃えることができるので初見文にも対応しながら連結数を減らせる有用な最適化です。例えば「憲法」です。

標準: k/e/n/pou 4連結

en24導入: k/en/pou 3連結

音節切りすることで速度が制限されるみたいなことを散々書いてきましたが、音節に対応しないチャンク切りはやっぱり脳に負担を与えます。上の例だとen24は導入しても音節チャンクは切れてないので自然に打てます。むしろnは音節ではない(モーラではあります)のでその手前でチャンクが切れることに微妙に違和感があるくらいです。まあ僕はen24を使うことはできないんですが、一度試す価値はあると思います。

 

 

毎度ながらまとまりのない文章になってしまいましたが、一つ一つを個別に見ていかないタイプの最適化というのもたまにはいいんじゃないかというお話でした。

 

ところで歌謡タイピング劇場は固定文を可能な限り速く流し込む音節無視理論値ゲーである一方で、UTypingは完全な音節ゲーです。僕が音節区切りを優先してしまいがちなのもこの辺りに影響があるような気がします。このあたり、打鍵スタイルの確立までによく触っていたゲームと、実際の打鍵ログ&運指を見て統計を取れば何か面白い結果が拾えそうな気がします。来年のサミットのためにデータを集めてみたいですね。誰かご協力をお願いします。