けものみち

まったりと、きのむくままに。

毎パソ全国元常連が語る、毎パソの予選、全国大会のツボ

f:id:WhiteFox-Lugh:20210617173113p:plain

こんにちは。今日はあまり情報として語られていないような毎パソの練習法や心得などについて書いていきたいと思います。

今回は、和文と英文について詳しく記述していこうと思います。

自分の毎パソ経歴

かなり古くから参加しているのと全国大会常連でした。 2006~2010までは和文部門、2011~2013は英文部門で出ていました。

和文は最高全国2位、英文は最高全国1位でした。

記憶があいまいなのですが、確か和文、英文ともに予選を勝ち抜き全国大会出場権を得た場合でもどちらか一方しか参加できなかったと思います。 もしできていたら、絶対2部門掛け持ちで参加しているはずです。

直近の大会だと開催形式が異なっている場合もあるので以下それに留意して読んでいただきたいです。

毎パソの競技形式(予選)

毎パソの競技形式は以下のようになっています。

第5部、第6部 和文

与えられた課題文(日本語の文章)を正しくソフトの指定箇所に入力する。競技時間は5分。 漢字やカタカナ、記号など変換も含めてすべて正確に打つこと。

第3部、第4部 英文

与えられた課題文(英語の文章)を正しくソフトの指定箇所に入力する。競技時間は5分。


課題文が何かはのちに説明するとして、要するに与えられた課題文章を丸々正しく転記しなさい、ということです。

一般的なタイピングゲームのように、ランダムに出現する単語や短文などをいかに速く正確に打つのかではなく、固定の課題文を打つ点や、日本語では漢字などへの変換も行うこと、間違えた場合 BackSpace やキー操作、マウス操作などで指定箇所に戻り修正をし、最終的に課題文章にどれだけ忠実に打てているか、というようにかなり実用性を重視した競技となっています。

youtu.be

ダラダラと書きましたが、この動画を見れば一発だと思います。

スコアについては以下の計算式となっています。

(正解文字数)ー(間違えた文字数)+(特別点)

正解文字数はひらがな、カタカナ、漢字、数字記号それぞれを1文字とカウントします。 間違えた文字数のカウントは「大会」を「退会」と打ってしまうような誤字、「こんにちは」を「こんにちちは」と打つように余分に文字を打ってしまう余字、「こんにちは」を「こんちは」と打ってしまうように脱落してしまう脱字、改行ミスをそれぞれ1文字とカウントします(詳しくは実際にやってみるのがわかりやすい)。

特別点は特殊で、間違えた文字数が3文字以内だと与えられるボーナス点です。ミス文字数が3文字だと正解文字数の5%、2文字だと正解文字数の10%、1文字だと正解文字数の15%、ノーミスだと正解文字数の20%追加で得点が入ります。小数点以下は切り上げになります。特別点がかなりデカいです。

ミスカウント規定として、和文と英文では9文字以上ミスタイプがあると問答無用で失格となります。 特別点のことも考慮すると、スピードより圧倒的に正確性重視です。

5ちゃんねる(当時2ちゃんねる)では「えっ、5分で〇〇文字なんて xx kpm ぐらいでしょ。普通じゃん」とかいうクソみたいな書き込みは散見されましたが、何が何でも正確性重視です。

禁止規定としては公式サイトには以下のように書いてあります。

●禁止、注意事項(6月・秋季・冬季・全国大会共通)

【禁止事項】

下記の禁止事項が行われた場合は、事前事後にかかわらず失格となります。

1.IMEやATOKなどの学習機能、予測変換機能、入力支援機能の使用

※予測変換について

プロパティの予測入力タブにて設定ができます。

仮に使用する設定であっても、変換操作の際、実際に打鍵した文字よりも長い文を変換候補リストから選択しなければ問題ありません。

2.事前の単語登録

3.代理受験

4.コピー機能、貼り付け機能の使用など、このコンクールの趣旨にそぐわない操作

5.指定された日時、時間以外で主催者の許可のないまま行った競技

6.競技中、会場内の競技委員の指示に従わない場合

7.その他、ソフトウェアによる自動入力などの特殊な操作

8.運営委員会で不適切な行為と認められた場合

9.パソコン、キーボード、マウスの持ち込み(全国大会のみ)

10.故意による複数回受験(結果データの送信をキャンセルし、再度受験した場合も含む)

ここで気を付けなければいけないのは「予測変換の使用禁止」「コピー&ペースト禁止」あたりだと思います。

予測変換の使用禁止はかなり気を付けないといけません。自分が実際に出場した予選だと例えば「いぬ」という単語が課題文を通してすべて漢字の「犬」ではなく「イヌ」だった回があり、「いぬ」と打った時まず最初に漢字の「犬」がでてくるのですが、「イヌ」と打たないとダメなので毎回必ずスペースキーを押さないといけない事例がありました。うっかり予測変換機能を使い、予測変換でトップに「イヌ」を出すように設定を変えてはいけません。予選だからばれないやろ、と思うかもしれないですが、成績上位者はあとで予選の様子を動画で提出するように指示される可能性があると公式サイトに書いてあるので、その措置があった場合、おそらくばれるでしょう。

コピー&ペーストも規定文に書いてある通りコンクールの趣旨にそぐわないからだめなのですが、同じような単語が出てきたときにあらかじめその単語をクリップボードに入れておいて、そのワードが出てくるたびにペーストすると打鍵数より多く文字数が打てる場合があるので禁止にも近いと思います。 例えば、課題文章中で何度も「supercalifragilisticexpialidocious」という語が出てきたとします(こんなことはないと思いますが...)。いちいちこれをミスタイプなく打つのは難しいのでこれをコピペしておき、出てきたタイミングで Ctrl+V を押すとミスタイプもせず、長い単語をたったの2キーで打ち終えることができます。これは極端すぎる例ですが、こういう行為はダメだいうことです。

毎パソの競技形式(全国大会)

基本的に予選とほとんど同じ形式ですが、以下の点が異なります。

課題文が初見

予選では課題文章を何度も練習して暗記したうえで本番を一回だけ行うことができますが、全国大会では競技開始の直前まで課題文を知ることができません。初見力が非常に試されます。このため、予選のスコアより大幅に下がる人が続出します。

課題文が紙に印刷されている

先ほどの動画では、ソフトの上部に課題文が表示されていましたが、全国大会ではパソコンのディスプレイの横に紙に印刷された課題文章が置かれています。 小さな相違点に見えますが、出場経験がある人からするとこれが結構やばいです。

何がヤバいかというと、まず単純に視線の移動がめんどくさいです。予選ではディスプレイの上部に課題文、下部に自分が打ち込んだ文章が表示されるので、もしミスタイプなどでずれがあると発見しやすいですし、課題文を見失う可能性もそこまで高くありません。

一方で紙とディスプレイを行き来する場合、本番の緊張感もあって「今どの行を打っていたんだ?」と見失うことがありますし、ミスタイプしたときの気づきにくさが格段に上がります。日本語なら母語なのでまだしも、英語だと非常に見失いやすく、一行見間違えて段ズレしたと思われる事例も少なくありません。

そして単純にページをめくるのがめっちゃめんどくさいです。本番の緊張感のせいで、なぜかうまくめくれなかったり、めくった後ブックリーダーに立てたつもりが課題文章が落下したりと不慮の事故が多発します。あとほかの人がページめくる音が先に聞こえるとなんとなく「あの人の方がもっと打ってるんだ」と不必要な焦りも生じます。

とにかく、ディスプレイに課題文が表示されるのと紙に課題文が印刷されているのとでは大きく違うということを感じ取っていただければと思います。

キーボードが既定のモノしか使えない

全国大会では、大会運営側が公認している REΛLFORCE と PFU のキーボードの2種類のうちどちらかしか使用できません。

あらかじめ入手しておくと打鍵感がわかっていいかもしれませんが必須ではありません。 ただ、これらの(メカニカル)キーボードと大きく打鍵感が異なるキーボードを普段使いしていると本番でつらい思いをする可能性が非常に高いです。

これらを踏まえて...

なんとなく毎パソの形式がざっとわかったところで、本題です。

予選はどうやって練習すればいいの?

これは答えは単純で、究極的には課題文章をひたすらやりこめばいいです。

やりこみ要素やポイントとして

  • 課題文章を暗記する
  • 自分で変換の区切りを覚える
  • 変換の際に単語ごとに何回スペースキーを押せばいいか覚える
  • 変換ミスや誤字脱字しやすいところのチェック
  • 競技終了直前に変な文字を打ち込まないようにする(クソ大事。これで何十点消えることもある)
  • 入力ペースを覚える(だいたい1分でここまで行けていればヨシ!みたいな)

あたりがあります。

もちろん、毎パソ形式に慣れるだけではなく、単純に単語の練習や短文の練習といった基礎練習も必要ですが、本題から外れるので書かないことにします。

全国大会の練習方法は...?

先ほども述べたように、全国大会は初見の文章になります。だからといって何も対策ができないかというとそういうわけではないですね。 以下に、自分がやっていた練習方法を書いておきます。

予選の課題文の復習

コンクールが終わったらその課題文は捨てず、逆に覚えるくらい練習しましょう。利点として2点あります。

1点目は文章をあらかじめ知っていて打てる量と初見で打てる量の差を把握することができる点です。これがわかっていれば、ほかの人の過去のスコアと自分の実力から本番でとるべき戦略を練ることができます。

自分の実際の事例で当てはめます。

英文Aの全国大会への切符を獲得したときは実は予選4位でした。予選1位、2位の人は3位、4位(自分)と比べて400点以上差がついており、普通にスピード勝負ならおそらく勝てませんが、予選1位の人は全国大会でミスが多く毎年失格になっている、という事実を知っていたことと、特別点という特殊なスコア計算があることを考えると「スピードを多少犠牲にしてでも不正解文字数を0または1に収めれば逆転しうる可能性が高い」と戦略を立てていました。本番ではいつもの90%ほどのスピードで打って、各行ごとにミスがないかをチェックしながら落ち着いて取り組んでいたと思います。

実際この戦略はびっくりするほど大成功で、予選1位、2位、4位の3人がだいたい同じ文字数を本番で打っていたのにも関わらず、予選1位、2位の人はミスタイプ規定で失格、自分が大逆転どころか2位と300点以上差をつけて大勝利という結果となりました。

逆に、どう考えても逆転しようがなく、それなりに正確性に自信があるなら文字数稼ぎに全力投球するという戦略になるかもしれません。

2点目はそこまで重要じゃないかもしれませんが、実は全国大会の本番直前に3分間だけ試し打ちの時間があるので、ここで何を打つかを考えず効率的に指ならしができるという利点があります。 この試し打ち時間は、初めて全国大会に参加すると「練習を開始してください、と言われたものの、なんの文章打ったらいいのかまったくわからない...どうしよう」と動揺してしまうケースが多いです。私はまさにこれでした(ここで使用するための課題文の持ち込みはたしかダメだったと思います)。

この3分間では、公認キーボード2種類のどちらを競技で使用するか、キーボードは正しく動作するか、椅子の高さやディスプレイは適切か、といったように本番に向けてコンディションを調整をする場でもありますが、やはり指はしっかり温めておきたいものです。

課題文の形式を把握して初見対策

自分が毎パソに参戦したときは課題文の内容がよく変更になっていましたが、ここ数年は以下のようになっています。

  • 第3部 英文A MainichiWeeklyなどより引用、高校の入試問題の引用 ...
  • 第4部 英文B 第6部の課題の英訳
  • 第5部 和文A (小学生低・中学年 & 小学生高学年) ことわざ・慣用句など
  • 第5部 和文A (中学生) News がわかるより引用、中学校の国語の教科書や同程度のレベルの文章の引用 ...
  • 第6部 和文B 毎日新聞の社説などより引用

特に、和文A小学生の「ことわざ・慣用句」、和文Bの「社説」は何年も変わっていないと思われます。 和文Aの中学生、英文Aの課題文はその時々内容は変わりますが、大きく文章の内容の語彙の難易度は変わりません。

したがって、和文Aの小学生部門では単純に「ことわざ・慣用句」あたりの語彙力を増やしておくことが重要です。それに続くことわざ・慣用句の意味の説明文も辞書などの引用だと思われます。

この形式を頭に入れていると、自宅にある国語辞典(小学生か中学生向け)を利用して、予選の課題文章の形式に合わせたオリジナル課題文章を自作して全国大会模擬練習するといったことが可能になります。

問題は和文Aの中学生部門、和文Bですが、第三者の方にその部門のレベルにだいたいあった文章を探してもらうという方法を自分は取っていました。 自分の場合、パソコン教室の先生にお願いして教科書の文章、小説文、随筆、評論文など、さまざまなテーマの文章をいくつかピックアップしてもらい、それを打ち込む練習をしました。これはかなり初見練習としては効果的だったと思います。 もちろん、課題文章は1回打ったら使い捨てではなく、打ち込むことでどんな変換ミスをしやすいのか、同じ単語が出現したときにどう変換すると効率が良いのかといったタイピング面だけではなく、文章を読むスピードの向上も期待できますし、全国大会特有の形式へ慣れることができて、本番で緊張感を抑えることができます。

毎日新聞を購読している方がいらっしゃれば、和文Bは新聞の社説を切り取ってもらうということもできそうですし、毎日新聞ではなくても別の新聞の社説を打ち込むということも有効な手段と思われます。 もう少し現代っぽいやり方としては、フリーのニュースサイトでそこそこ長めの記事をコピペして課題文とするという方法も有効そうです。

問題として自動的に正誤判定やスコア計算を行う方法がないということですが、文字数カウントツールや課題文を読み直し自分でカウントしてスコア計算をしてみることはそこまで困難ではないと思います。

過去の課題文章の後半部分を打つ

初見文章対策でいろんな人に文章を探してもらうといってもなかなか見つかりにくいかもしれません。そんな時は、過去に実際に使用された課題文のうち自分が打ち込んでいない後半部分を流用するという手があります。課題文章は必ず5分で打ち切れる量より圧倒的に長い文章を出題してくるはずですから、大半の人は課題文章の後半~終盤は打ったことがないはずです。

予選で使えるソフトに開始位置を指定の場所から開始できる機能があるはずですし、正誤判定も行ってくれるのでこれがかなり良い方法かと思われます。

英文特化:語彙を増やし文脈をふんわり理解する

英文部門は和文と異なり漢字などへの変換がありませんし、半角文字のため、ミスタイプしても非常に気づきにくいです。そのため、ある程度英単語やイディオムの知識を叩きこんでおくことが非常に重要です。

特に、本番で1行段ズレしたケースとしてはこのように語彙やイディオムを覚えておらず、ただ単にアルファベットの羅列として文章を認識しているケースが多いかと思われます。

もし頭に余裕があれば、なんとなくいま「こんな話をしているんだな~」と文脈もふんわりと把握しながらタイピングしていると致命的なミスは防げるはずですし、正確性も向上します。ちなみに自分は毎パソ大会全国大会のときも「ある程度意味を把握しながら打っていました」ときっちり地元の新聞記事の取材で発言しています。

おわりに

古い記憶を頑張って呼び覚まして執筆しましたが、毎パソの全国大会出場者自体の母数が非常に少なく、こういった記事もほとんどないかと思われます。 今後出場する方の参考になればとてもうれしいです!

e-typing 腕試しスコアからレーティングを算出してみた

こんにちは!₍₍⁽⁽ฅ•ω•ฅ₎₎⁾⁾

今回はタイトルにある通り、ちょっぴり技術的で面白い実験(自画自賛)をしてみたので紹介します。

きっかけ

タイピング練習ソフトやサイトはいろいろあり、各練習ソフト、サイトにはほぼ必ずと言っていいほどランキングが存在します。

ランキングがあることで、自分の相対的な立ち位置はなんとなく把握することはできると思います。

しかし、レーティングといったように、自分の実力を表す数値を算出しているサイトはほとんどないと思われます。なので、ほぼ興味本位ですが、レーティングなるものを一度定義してみたかったのでやってみました。

ご注意

数式アレルギーの方は最後の「結果発表~」だけ読んでください。その方が楽しいかと思われます。

レーティングの定義

今回は対戦型ゲームで非常によく用いられている Elo(イロ)レーティングシステムを用いました。 文献は記事末尾に書いてある [1] になります。

Elo レーティングの仕組みについて簡単に解説します。

プレイヤー $i$ とプレイヤー $j$ が対戦することを考えます。プレイヤー $i$ の現在のレーティングを $r_i(\text{old})$ 、プレイヤー $j$ の現在のレーティングを $r_j(\text{old})$ と書くことにします。

まず、レーティングの更新式を書いてしまいますが、定数 $K$ と後で定義する $ S_{ij} $ 、 $\mu_{ij}$ を用いて、プレイヤー $i$ の新しいレーティング $r_i(\text{new})$ は、

$$r_i(\text{new}) = r_i(\text{old}) + K(S_{ij} - \mu_{ij})$$

と書くことができます。簡単に言えば、第1項が現在のレーティング、第2項が対戦による変動分(報酬)を表しています。

では、$S_{ij}$、$\mu_{ij}$、$K$ とは何かを説明していきます。

$S_{ij}$ は成績を表す値であり、

$$S_{ij} = \begin{cases} 1 & \text{プレイヤー}~i~\text{がプレイヤー}~j~\text{に勝った場合}\\ 0 & \text{プレイヤー}~i~\text{がプレイヤー}~j~\text{に負けた場合} \end{cases}$$

です。ちなみに、この定義に限らず、$S_{ij} + S_{ji} = 1$ を常に満たせばよいです(引き分けは $S_{ij} = S_{ji} = 1/2$ や得失点差で変えるなど)

$\mu_{ij}$ はプレイヤー $i$ がプレイヤー $j$ に対して獲得すると期待される成績(勝利確率)を表しており、ロジスティック関数において指数の底を $10$ にした形である

$$\mu_{ij} = \frac{1}{1 + 10^{-d_{ij} / \xi}}, ~~ d_{ij} = r_i(\text{old}) - r_j(\text{old})$$

が用いられます。$\xi$ はパラメータです。

これについて、ちょっと変形を行うと(old は長いので省略して書きますが)、

$$\mu_{ij} = \frac{10^{r_i / \xi}}{10^{r_i / \xi} + 10^{r_j / \xi}}, \mu_{ji} = \frac{10^{r_j / \xi}}{10^{r_i / \xi} + 10^{r_j / \xi}}$$

より

$$\frac{\mu_{ij}}{\mu_{ji}} = \frac{10^{r_i / \xi}}{10^{r_j / \xi}}$$

$$\mu_{ij} = \mu_{ji} \left( 10^{(r_i - r_j) / \xi} \right)$$

が導けます。

つまり、二人のレーティングが全く同じであれば勝率は五分五分、プレイヤー $i$ のレーティングの方が、プレイヤー $j$ のレーティングより $\xi$ ポイントだけ高ければ、プレイヤー $i$ がプレイヤー $j$ に勝てる確率は、プレイヤー $j$ がプレイヤー $i$ に勝てる確率より10倍大きいということが表されています。

このパラメータ $\xi$ は好きな値に設定することができ、レーティングシステムの調整をすることが可能となっています。よく $\xi = 400$ が用いられます。

また、対戦で勝ったときの報酬(新しいレーティングを計算する式の第2項である $K(S_{ij} - \mu_{ij})$)は、強いプレイヤーが弱いプレイヤーに勝つよりも、弱いプレイヤーが強いプレイヤーに勝つ方が報酬が大きくなるという仕組みになっています(計算してみてください)。

さて、最後に定数 $K$ ですが、これは $K$ 因子と呼ばれ、レーティングの変動をどれくらい大きくするかを決定するものになります。$K$ が大きいほど1試合で変動するレーティングが大きくなります。 ただし、大きすぎるとレーティングが不安定になり、小さすぎるとレーティングが変動しなさすぎることになります。

また、$K$ の大きさをその試合の重要性やプレイヤーのレベルによって試合ごとに変えることができるのもポイントです。例えば、親善試合は $K = 20$、通常の試合は $K=30$、国際的な試合では $K=40$などと変えることができます。

紹介した $\xi$ や $K$ 因子は、競技に応じて変更することができるため、レーティングシステム設計者の味付けができる部分であり、おもしろい部分でもあります。

ここまでが Elo レーティングの簡単な仕組みの説明でした。

使ったデータ

e-typing 第1029回 腕試しタイピング(2021/1/5~2021/1/12)ローマ字のランキングデータを取得しました。取得してくるのは結構大変で、1回分のデータしかとりませんでした。ちなみにこの回を選んだ理由は、自分の自己ベストが載っているからという利己的な理由と、「元気が出る言葉」がワードセットに選ばれていたので比較的打つ文字数が多く、スコア分布が比較的きれいになりそうと思ったからです。

さて、この回のスコア分布はこうなっております。

f:id:WhiteFox-Lugh:20210523145656p:plain

e-typing の情報によると、参加人数は 6382 人、平均スコアは 259.12 点だそうです。

なんとなく正規分布っぽい感じはしますね。細かいことを言うと、スコアは基本0以上の値になるので、確率密度関数において $x < 0$ の部分は使えませんが、今回は平均と標準偏差を出したいだけなので気にしないことにします。

この確率密度関数積分すると総面積が1になるように調整してから正規分布でフィッティングしてみます。

f:id:WhiteFox-Lugh:20210523135414p:plain

思ったよりいい感じですね。

正規分布の形を決定するパラメータですが、 平均 $\mu = 259.21321$ 、標準偏差 σ $= 103.11068$ でありました。

e-typing が算出した平均スコアが 259.12 点であり、正規分布の平均とよく一致しています。 曲線もヒストグラムに結構よくあてはまっていますね。

この求めたパラメータはあとで利用します。

シミュレーション

やっと数学的な準備ができたのでシミュレーションをします。 詳しいことはソースコードにある程度書いてあるのでそちらを読んでいただければと思います。

まず、先ほどもとめた e-typing のスコアの正規分布に基づいて、そのスコアを出すプレイヤーを5500人ほど生成します。 つまり、平均 $\mu = 259.21321$、標準偏差 σ $= 103.11068$ の正規分布に従う乱数を生成します。 プレイヤーは毎回同じスコアを出すものと仮定します。スコアは基本は0以上であるため、負になった場合はそのスコアは使わないことにします。 また、普通に乱数を生成すると平均から大きく外れた範囲のプレイヤーは生成されない(=シミュレーションで変態パーが生成される確率がほぼゼロ)ので、1点から850点まで5点区切りで別途プレイヤーを生成します。 これで合計でおおよそ 5670 人ほどのプレイヤーが生成されます。

次にプレイヤーが勝利する確率についてです。プレイヤー $i$ がスコア $s_i$、プレイヤー $j$ がスコア $s_j$ を出すとき、プレイヤー $i$ がプレイヤー $j$ に勝利する確率 $P_{ij}$ を

$$P_{ij} = \frac{1}{1 + 10^{-(s_i - s_j)/100}}$$

で定義することにします。ここでの勝利確率は、仮にプレイヤー $i$ とプレイヤー $j$ がタイピングで1対1で戦う時に、e-typing のスコアの差がプレイヤー $i$ の方がプレイヤー $j$ より 100 ポイント高いとプレイヤー $i$ の方が10倍勝ちやすいということを表し、現在のレーティングには依存しないことに注意します。どちらが勝つかは 0 以上 1 未満の乱数を生成して決定します。プレイヤー $i$ が勝利した場合は $S_{ij} = 1, S_{ji} = 0$、プレイヤー $j$ が勝利した場合は $S_{ji} = 1, S_{ij} = 0$ となります。

現時点でのプレイヤー $i$ のレーティングが $r_i(\text{old})$、プレイヤー $j$ のレーティングが $r_j(\text{old})$ のとき、 $\mu_{ij}$ はプレイヤー $i$ がプレイヤー $j$ に対して獲得すると期待される成績(勝利確率)でしたから、

$$\mu_{ij} = \frac{1}{1 + 10^{-d_{ij} / 400}}, ~~ d_{ij} = r_i(\text{old}) - r_j(\text{old})$$

と表せます。この値と、実際の対戦結果 $S_{ij}$ を用いて、プレイヤー $i$ の新しいレーティング $r_i(\text{new})$ を、

$$r_i(\text{new}) = r_i(\text{old}) + K(S_{ij} - \mu_{ij})$$

で更新していきます。今回は $K = 50$ としました。

レーティングの初期値は全員 1200 と仮定します。この値は初期値であると同時に平均的なプレイヤーのレーティングを最終的に表すものでもあります。

対戦する相手についてですが、レーティングがあまりにもかけ離れ過ぎた人同士で対戦させるのは治安がよろしくなく、レーティングの変動計算においてもほぼ無意味なので、自分のレーティングより上で自分のレーティングに近い順に250人、自分のレーティングより下で自分のレーティングに近い順に250人の合計500人とだけ対戦させるようにしました。

結果発表~

最終的なレーティング分布はこうなりました。

f:id:WhiteFox-Lugh:20210523154734p:plain

レーティングの下限が 142、上限が 3491 であり、初期値 1200 付近が平均的と定義してあったので、その辺の人数が多いことがわかります。

さて、レーティングを出したところで、いよいよタイパーとしての実力を評価しましょう!

今回は、こちらの Codeforces のサイトを参考にランクを勝手につけてみました。

How to Interpret Contest Ratings - Codeforces

レーティングに応じてランクと色がつくシステムです。

今回のシミュレーションでは以下の結果となりました。 「元気が出る言葉」でやったときかそれに準ずるくらいの文字数を打つことになるお題で出したスコアでしか(おそらく)使えないことに注意してください。

レーティング ランク スコア
3000+ Legendary Grandmaster 726~
2700-2999 International Grandmaster 656~
2400-2699 Grandmaster 586~
2200-2399 International Master 526~
2000-2199 Master 476~
1800-1999 Candidate Master 428~
1600-1799 Expert 382~
1400-1599 Specialist 330~
1200-1399 Apprentice 270~
1000-1199 Pupil 203~
Up to 999 Newbie ~202

また、パーセンタイルとスコア、レーティングの関係は以下のようになりました(スコアは小数点以下四捨五入)。 最上位はなかなか推定が難しいのですが、それなりに参考になる数値かとは思われます。できるだけ Codeforces に近づけるように状況を設定しましたが、Codeforces で書かれているパーセンタイルとは異なります。もちろんですが、計算式自体が大きく違うのでこの数値を AtC〇der や T〇pcoder などに当てはめることはできません。

スコア レーティング パーセンタイル
818 3367 99.9%(上位0.1%)
790 3270 99.8%
761 3180 99.7%
733 3019 99.6%
705 2938 99.5%(上位0.5%)
677 2827 99.4%
648 2692 99.3%
626 2598 99.2%
602 2500 99.1%
585 2392 99.0%(上位1%)
526 2206 98.5%
501 2082 98.0%(上位2%)
480 2016 97.5%
467 1964 97.0%(上位3%)
435 1835 95.0%(上位5%)
395 1659 90.0%(上位10%)
369 1554 85.0%
348 1476 80.0%
331 1404 75.0%(上位25%)
314 1354 70.0%
287 1256 60.0%
260 1171 50.0%(平均)
234 1100 40.0%
206 1011 30.0%
174 902 20.0%
129 741 10.0%

どうでしたか?

筆者の白狐はこの回で 743 を出しており、今回のシミュレーションでは上位 0.4%、Legendary Grandmasterという結果になりました。

ツイッター上ではバケモノクラスのタイパーがたくさんいるので、なかなかわかりにくいですが、こうやって相対的に自分がどの辺に位置するのかわかるとおもしろいかもしれませんね!

おわりに

休日1日かけてモデル設計、コーディング、シミュレーション、ブログ執筆を行いました。 1日でやったので結構雑になっている部分もあるかもしれないですが、それなりにいいシミュレーションはできたかと思います。

一つだけ、終わりに注意書きですが、レーティングが高い=えらいわけじゃないということです。確かに、実力者であることは間違いないのですが、人を貶めるために実力を身に着ける人にはなってほしくないと切に願います。レーティングはあくまで相対的な実力評価だったり、同じくらいの実力の人を探すのに使ったり、目標設定に使ったりと有意義な使い方をしてほしいものです。

最後までお読みいただきありがとうございました~!

参考文献

ソースコード

github.com