AtCoder社の提供するプログラミング検定PASTは単なる情弱ホイホイである

PASTアルゴリズム実技検定 というのがこの前発表されました。

受験料は個人だと8800円、団体割引だと6160円まで下がるそうですが、 はっきり言って無価値なので、受験しないように警告のため、 書こうと思いました。

競プロで歯が立たなかったので、叩こうと思います。はい。

AtCoder社とは?

競技プログラミングという、プログラミングを使ってアルゴリズムの問題を解く コンテストを開催している会社です。 社長の高橋氏は、筑駒高校を出てから慶応に入学、在学中に行われたプログラミング コンテストで世界3位になっています。10年ほど前なので、 競技プログラミングの先駆けといえます。 その他にも情報五輪の金メダリストなどを問題作成のために擁する、競技プログラミングでは 日本最強の集団といえます。 実際に、作問というのは、解くよりもはるかに高いレベルを必要とするため、 このレベルの人材なしには成立しないサービスであるといえます。

競技プログラミングとは

路線図が与えられるので、ある駅からある駅にたどり着く最短時間を求めよとか、 ある1つの駅を使用禁止にした時に最短時間をもっとも長くしたいが、どの駅を使用禁止にすればよいか など、身近にあるような問題をプログラミングを使って解く競技のことです。

駅の数など、制約が厳しいことがあり、 限られた実行時間で解くためには、アルゴリズムの知識が必要になります。 それを、コンテスト中に正しく考察し、正しく実装することを争います。

検定とはどうあるべきか

英語の検定として有名なものに英検やTOEICなどがあります。 これらのテストは、私も何回か受けたことがありますが、 自分の実力が100なのであれば、何度受けても95か105程度までにしか点数は 振れません。 TOEIC400点しかとれない人が次の日にたまたま800点をとるということは まずありえません。

理由は、問題数が膨大で、均されるからです。 センター試験のようなものでもこの性質があります。

なぜPASTが検定として成り立たないか

通常の検定というのは、そういうものであるということを前提に、 PASTがプログラミング検定とは呼べない理由について話します。

競技プログラミングは検定に向かない

PASTの試験はたった15問だそうです。 この中でどこまで解けたかを争い、点数をつけ、 スコアを出すというものだそうです。

このスコアを、ただ一喜一憂する以上のものとしてとらえて、 例えば、採用のために使うということであれば、意味はないです。

なぜならば、問題数が少なすぎるからです。 このテストを10回受けて平均を出すというのであればまだわかるのですが、 1回受けて出たスコアには意味がないです。

サンプル

を見ると、ここにはPASTのサンプルとしてAtCoderの過去問が乗っているのですが、 常日頃からAtCoderに参加しているような人でない場合、 おそらく最初の数問しか解けません。 また、常に参加している中級者(青コーダーレベル)であっても、 真ん中くらいまでしか解けない場合が多いと思います。

つまり、レベルが低ければ、実質的な問題数は少なくなり、 より一層、数が多いことによる均し効果が得られなくなります。

一応、簡単なものをより判定を高くするという工夫はしているようですが、 気休めでしょう。

15問(1問目=9点/2~3問目=8点/4~6問目=7点/7~15問目=6点)、100点満点

AtCoder社の問題は検定に向かない

レベルによって解ける範囲が違うため、 結局、レベルが高い低いを見分けることには使えるのではないか と思うかも知れません。 しかしそれすらも幻想です。

なぜならば、AtCoderの問題は特にそうなのですが、 常に100点しかとれない人が、200点をとれてしまうことがたまにあるからです。 これはさきほど述べたように、検定ではあってはならない性質です。

パズル要素

これはまず、パズル要素が高い問題がある時に起こります。 こういう問題の場合、レベルが十分であってもドハマリして解けない場合もありますし、 同じようなレベル設定の他の問題は解けない場合であっても、たまたま解けてしまうこともありえます。 たまたまその種のパズルを考えるのが得意ということもありえますが、この場合、 一体何の能力を測ってるのかわからなくなります。 オセロやチェスのような実際のゲームに近いパズル問題はたまに出ます。

パズル要素が高い問題では、プログラミング自体の難易度はそれほど難しくないことが多いです。 なぜならば、その難易度の大半を担保しているのは、そのパズル要素だからです。

だから、本来レベルが低い人が、たまたまパズル要素を解けてしまい、正答してしまうことがありえます。

これは、競技プログラミング全般でいえることですが、 AtCoderの問題は特にこの傾向が強いといえます。

なぜならば、AtCoder社は、「出来るだけ知識に依らない問題作り」をモットーとしているからです。 これは、日本の外で行われているメジャーな競技プログラミングコンテストであるCodeforcesやLeetCode などとの差別化の意味で行われているという理由はあるとは思うのですが、 結果として、この種の「たまたま解けてしまう」問題が多くなっています。

パズル要素であれば、そういう問題が解ける頭の柔らかい人間がプログラマとして向いている という主張も成り立ってしまいますが、勘で解けてしまう問題が出るとしたらどうでしょうか?

追記

今後のプログラミングコンテストへの参加について

このAtCoderで強く見られるパズル要素をよく思っていない人は他にもいるようで、 古参の一人であるtozangezan氏は「天才パズル」と呼んでいます。 天才といってるのは、上位の戦いでは数オリレベルの問題が出るため、 人によってはどう逆立ちしても無理という状況になってしまうことがあるからです。 同じく古参で膨大な勉強ブログで知られるkmjp氏も同じような壁にぶち当たっているようですし、 それはプログラミングなのか?という問題が出ることを心地よく思わない人はいます。

こういうタイプの問題が、競技プログラミングは無意味だという人を増やしてる 理由の一つではあるように思います。

無証明AC

AtCoderの問題には、なんらかの簡単な性質に気づくとあとはほぼプログラミングなしで 解けてしまう問題というのが存在します。 例えば「実は、解は手順に依らず、どの手順でやっても同じ解が得られる」などです。

この性質になんとなく気づいてしまったとしましょう。 この時点では勘レベルです。

中には、それに対して数学的な証明をコンテスト中に完成させた上でコードを書く人がいます。 これが、真に求められていることですから、真に正答しているといえます。

中には、色々な場合を試行錯誤して、やはりどうやら正しそうだという当たりをつけて コードを書く人がいます。この場合でも、実際には証明っぽいことをしてることが多いので 私は許されると思います。

では、その性質を盲目的に信じてコードを書く人はどうでしょうか?

こういう行為を無証明ACといいます。 これって、何かの実力を測ってることになるんでしょうか? ましてやその勘が「こういう感じの問題では大抵こういう美しい性質がある」 という単に競技慣れによるものでしたら、 ただ競技に慣れているだけということになってしまいます。 この場合、本当にその考えが正しいか証明を試みて、結果として失敗してしまった人の方が 劣っているという主張は本当に正しいでしょうか?

AtCoderの問題には、この種の問題が多く見られ、無証明ACを検出する方法はありません。

結論

情弱な人がPASTを受験し、 その受験料でAtCoderが潤い、 Rustコンパイラのアップデートがさっさと行われることを願っています。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。