テルの競プロメモ

競プロに関するメモ

ありがとう、競プロはタイピングの役に立つ ~「プログラミングの目的化」のおかげで人生がより楽しくなった話~

まえがき

最初に謝っておきます。

この記事、目的はほぼ自作ゲームの宣伝です……

 

ただ競プロに感謝してることも事実

ちょくだいさんがよく言及している「プログラミングの目的化」が良い意味で刺さって、人生がより楽しくなっている話をさせてもらおうと思います。

(「目的化」の是非について自分の立場から言いたいことを言っておきたい、という思いもあります。)

 

競プロ er としての自己紹介

まず、自分について書いておきます。

テルという名前で AtCoder などのコンテストに参加しています。

ギリギリ水コーダー(今やったら落ちそうですが……)で、自分としては結構、いやかなり頑張ってこの位置まで来ました。

最近はご無沙汰してますが、たまーに Project Euler を解いたり、後述するゲーム製作などの目的のためにも C#AtCoder の簡単な問題を解いたりして、ゆるっと競プロを楽しんでいます。

f:id:TeruMiyake:20220103221507p:plain

文系出身で数学が苦手(競プロ er 間での比較であって、一般から見ればマシな方ではありますが)な中、持ち前の粘り腰で整数や離散数学など分からない範囲を勉強し続け、なんとか水色までこぎつけました。

(苦労したみたいな書き方してますけど、とても楽しい苦労でした。これからも少しずつ離散数学を勉強していくつもりです。)

 

タイパーとしての自己紹介

プログラミング・競プロも今やかなり自分の中で「好き度」の高い趣味ですが、メインの趣味は、小学生から現在(33 歳)までちょくちょく飽きながらもずっと続けているタイピング(ご存知キーボード早打ち競技)です。

既に終了したタイプウェルというゲームのランキングでは、閉鎖時で ローマ字入力 総合 1 位 / 10,695人、かな入力 総合 2 位 / 1,196 人、英単語入力 総合 1 位 / 2,151 人でした(ちなみに、ちょくだいさんがタイピングめちゃくちゃ速いって知ってます? ちょくだいさんもこのランキングに登録されていて、ローマ字入力 775 位です。……実際のちょくだいさんの速さからすると、多分ガチではやり込んでないので、簡単にもう少し上にいけたと思いますが)

他には、 Realforce Typing Championship 2017 4 位 ( 2018 は 5 位 )、寿司打高級一発(ノーミス縛り)40,860 円得 などの実績があります。

www.youtube.com

 

「ありがとう」って何?

さて、自己紹介はこのくらいにして、タイトルの「ありがとう、競プロはタイピングの役に立つ」に繋がるよう話していきたいと思います。思い出話なので、ちょっと長くなります。

人生をかけたランキングの閉鎖

先ほどの自己紹介で挙げたタイプウェルというゲームは、僕が誇張抜きで人生を捧げたゲームでした。2019 年 6 月に惜しまれながら公式サイト及びランキングの更新が終了し、翌年春には公式サイトが閉鎖しました(先ほどのリンクは有志によるミラーサイト。)

この喪失感、分かりますか?

競プロ er のうち、特に AtCoderCodeforces や 情オリに人生を捧げてるガチ勢の方々は、想像がつきやすいかもしれません。例えば、10 年・20 年後にもしかしたら AtCoder や情オリが閉鎖・終了するとなったらどうです?

まあサイトや大会が無くなっても、色変した時にレーティンググラフを何度も眺めてニヤニヤしたり、コンテストで 30 秒差でギリギリ E 問題が解けなくて悔しかったり、チームメイトと切磋琢磨してメダルを獲得したりした、その思い出は消えないです。消えないですけど、思い出が消えないから何なんだよ。なんでなくなっちゃうんだよ。喪失感ヤバいって。閉鎖時も三十路でしたけど、正直、布団の中でボロボロ泣きました。

 

喪失からの競プロガチり

喪失と多少前後して、競プロを始めました。

タイパーに競プロ er が多かったため、競プロの話題はよく目にしていて興味があったし、「タイプウェルが無くなるとなると、俺の『技能を競いたい』という本能を満たす場所が無くなる……」と思っていたこともあり、競プロを始めました。

プログラミングは中学生の頃に、遊び程度に JavaScriptPerl CGI を触っていた(当時ブラウザゲームが流行っており、それの真似事をしたり、掲示板をいじったりしていた)くらいで、「言語仕様を学べば Fizz Buzz は書ける」「オブジェクト指向? えーと、動物クラスから人間クラスを作る的な、アレだよね?」くらいの感じでした。つまりは「プログラミングをちょっとかじっただけの人」でした。

それが、競プロをガチる中で、プログラミングを学び、苦手だった「パソコンについて」を学び…… と、どんどんパソコン・プログラミングとの向き合い方が変わっていきました。

 

パソコンとの向き合い方の変化

競プロをガチるに当たり、最初は Atom というエディタで Python を書いていました。もちろん、Python ならコンパイルが要らず、Linux も要らないからです。それしかできなかったんです。

しかし、ガチっていく中で、Python では今の自分が上に行くのは難しいことに気付きました。それは「つい計算速度が遅いことを気にしてしまう(もしくは言い訳にしてしまう)あまり、本質的な部分に目が行かない」ことに気付いたからです。言うまでもなく Python ユーザには maspy さんがいますし、競プロタイパーの中にも Python のみで青コーダーになっている方がいて、Python でも十分戦えることは分かっていました。ただ、コンテストや過去問を解く際に「こういう書き方をしたら定数倍改善になって通るかも……」「PyPy だと遅くなる書き方になってるかも……」「これは解法は合ってるのに Python のせいで通らないのかも……」などと、非本質ばかりに目が行き、非効率的でした。

 

そこで、意を決して Linux を使い、C++ で参戦することに決めました

昔から「Linux という OS があるらしく、なんかギークな奴は使ってるらしい」と憧れを抱いてはいましたが、難しそうで触っていませんでした。色々と調べて、今は WSL を使って比較的簡単に Linux を使えることが分かり、それを導入しました。

しかし、簡単にはいきませんでした。コマンドラインからパソコンを操作する感覚がそもそも無いし、ファイルの考え方が全然違うように思えました。「exe ファイルじゃないのに実行ファイルになってる!?」とか、「エディタの使い方が分からない!」といったことから始まり、本当に様々な問題点が噴出し、大苦戦しました

Linux だけでなく、コンパイルを要する C++ を使えるようになることも非常に難しかったです。コンパイラが動かない、デバッガが動かない、昨日動いたはずのコマンドが今日は動かない、VS Code の設定をいじったら何もかも動かなくなった、などなど…… マジでしんどかったです。

 

競プロのおかげで、なんとか続いた

この時、LinuxC++ を続けられたのは、競プロのおかげです。(競プロのためにやっていたことなので、そう書くのもおかしな話ですが)

これが業務で LinuxC++ を使うなら「すぐに使えるようにならないとヤバい」と悲壮な覚悟が必要ですが、競プロでは(少なくとも自分にとっては)「プログラミングを競うこと」が目的であり、「パソコンやプログラミングが上手に使えること」は手段(普通は逆ですね)なので、上手くいかなくても(それなりにしんどいとはいえ)比較的ラクでした。

この逆転現象があるからこそ、Linux が全然動かせない、C++ が全然動かせないといった間も、「とりあえず Python で参加し続ける」という雑な解決法で済みました。また「いつまでにマスターする必要がある」ということも無いので、「一旦デバッガを使うのは諦めて、とりあえず目でデバッグしていこう」といったゆったりとした取り組み方ができました。

それでも、C++ が少しずつ分かるようになることで解説ブログなどのサンプルコードが読めるようになったり、無駄な定数倍改善を考えなくて済むようになったり、色々とメリットを感じられ、無理なく段階的に、競プロ er として、そしてパソコンユーザーとして(?)成長していくことができました

 

今はどうなった? 目覚ましい進歩

そうして楽しみながらゆっくりとプログラミングやパソコンを上手になっていく内に、だんだん「自分にもできる」「あれも面白そう、これも面白そう」と興味の範囲が広がっていき、気付いたら色んなことができるようになっていました。もちろん、どれも業務でやっている人はおろか、twitter でフォローさせて頂いているつよつよ中高生にも及ばないレベルなんですが、過去の自分と比べたら物凄い進歩です。

例えば、できるようになったことは……

  • 家計の計画を立てる際に、MoneyForward から DL した csvPython で整形して色々と分析
  • 応用情報技術者を勉強しているが、競プロのおかげで「あれのことね!」となる部分が結構ある
  • VPS を借りて Ubuntu 内に Nginx, uWSGI, Django を設置し、簡単な Web アプリを作ってデプロイできる
  • C# を学んで Unity で簡単なゲームを作成できる

などなど。これだけでも「競プロありがとう」と言いたくなってしまいます。ただ、どれも、本当に大したことじゃないと思う人も多いと思います(実際 twitter をしていると、もっと凄いことをしてる人が無限にいると思える。)

 

でも、自分にとっては、これが大きな意味を持つ展開に繋がりました

 

タイプウェルを思い出だけにしない

これらのことができるようになりりつつあった頃、ふと思いました。

「そう言えば、神競技であるところのタイピング神ゲームであるところのタイプウェルだけど、大きな不満もあったんだよな~」と。

 

タイプウェルオリジナルの弱点

タイプウェルに対する不満というのは、タイプウェルオリジナルというランダム文字列入力ゲーム(もはやゲームと言えるか怪しい)のことです。

f:id:TeruMiyake:20220103233035p:plain

こんなゲームです。ちょっとどうにかしてますね。初めて見た時は「こんなもん打てるやつ人間じゃない」と思いました。

ただ、実はこのゲーム、大きな弱点がありました。古いライブラリを使っていたからか、「乱数が非常に弱い」のです。

一見、完全ランダムに見える文字列ですが、現在時刻を元に乱数が生成されていて、そのパターンも無限に近いほど多いとは言えないため、文字列に偏りがありました。それはそれで、お決まりの文字列を攻略する楽しみがあったり、悪くはなかったですが、「わけの分からない文字列を必死で打つ」というクレイジーな楽しみ方は少しスポイルされていましたし、「現在時刻を任意に調整することで打ちやすい文字列を誘発させる」といった攻略法を取るか取らないかで、タイパー毎にスタンスの違いが生まれたりしてしまっていました。

 

タイピング自体の弱点

また、少し話が飛びますが、タイピングは「言語」に依存するゲームであり、だからこそ固有の弱点を持っています。それは「日本語タイピングがどれだけ速くても、世界の人と競えない」ということです。

競プロで考えてみてください。tourist がたまに ABC に参加してくると、「うわアッツ!!」と思いませんかAGC でランキング一覧を見て、tourist, ksun48, Um_nik, yutaka1999, semiexp, snuke, chokudai, ... といったそうそうたるメンバーを見ると、「到底相手にはならないけど、それでもこいつらと同じコンテストを戦ってるんだ……!」と思いませんか

タイパー界にも Sean Wrona という tourist みたいなレジェンドがいます。その人と同じ土俵で戦えないの、つまんねーなって思うことがあるんですよね。まあ、もちろん英語タイピングという分野はあって、typeracer というので同じ土俵で競えます。これはこれで素晴らしいサイトですが、結局「英語」なので、中国語のタイピングがめちゃくちゃ速い人とかいても分からないわけですよね。うーん、って感じです。

 

自分なりの回答

こういったことをグルグルと考え続けた私は、こんな(ヤバい)結論に至ってしまいました。

特定の『言葉』じゃなくて単なるランダムな文字や記号の羅列を、それも文字種(アルファベットやひらがなや漢字)すら選べるようにして、更にハックしにくい強い乱数で完全ランダム生成で課題文にして競ったら、完全無欠のグローバルタイピング競技ができるじゃん!!」と。

 

競プロありがとう

これを思いついたとき、私は「あっ!!」と思いました。

「えっ!! 今の俺ならゲームもランキングも作れるじゃん!!」と。

競いたい」という単なる「目的」としてプログラミングをやっていた私ですが、いつの間にか「手段」としてのプログラミングも得ていたことに気付いたのです。

それに気付いてから 1 ヶ月(12 月頭くらいに気付きました)。頭がおかしくなるくらい Unity と C# をやりまくって、あ、でも 1 週間くらい将棋に浮気して、とうとうそれなりに形になるものができました

 

そこで、競プロありがとうの気持ちを込めて、この場を借りて宣伝させて頂きたいと思います。(やっと本題に入れた……)

この記事が琴線に触れた方がいましたら、是非プレイ&ランキング登録をしていただけるようお願いします。

 

自作ゲーム Typing (is) Nonsense

作ったのはこんなゲームです。どんなゲームか? 動画を見たらすぐに分かると思いますので、ぜひ動画を見てみてください。このランキングサイトから DL できます(キー入力の実装の関係で、今はまだ Windows 限定です。ごめんなさい。)

アルファ版でまだまだ機能が少ないですが、とりあえず本質的なタイピング部分は出来てますので、十分楽しく遊べる(もしくは十分「なんだこのクソゲー!」と怒って放り出せる)と思います。

youtu.be

f:id:TeruMiyake:20220104000005p:plain

 

また、頑張って自分の VPSランキング サイトも自作して設置しました。

f:id:TeruMiyake:20220103235445p:plain

 

正直、まだ Django は下手くそで、全然満足の行くものが作れていませんが、どんどん成長して、このランキングサイトを世界中の全てのタイピング好きが、言語に関係なく無意味な技能を競い合える素晴らしいサイトに育てていきたいと思っています。

 

 あとがき : 喪失感は?

こうして、私の喪失感も少し和らぎました。もちろん、まだまだ枕を濡らすことはあるのですが、これから自分の足で、自分の道を歩いて行きたいと思います。

タイプウェルはなくなってなんかいない。タイプウェルの魂は形を変えて、俺のクソゲーの中に生き続ける……!