プログラミング初心者が初めてAtCoderに挑戦してみたお話。

スポンサーリンク
AtCoderに初めて挑戦してみました プログラミング

本日(19/7/28)、AtCoderというサイトで開催された競技プログラミングに初めて挑戦してみました。

AtCoder Beginner Contest 135

競プロという言葉自体は高校生の頃から聞いたことはあったのですが、
当時プログラミングは触れるきっかけが無く、当然競プロも自分ですることはありませんでした。

しかし最近になってChrome拡張機能の開発等をするようになり、プログラミングに触れる時間が大幅に増えました。
それに伴い競プロ触ってみるか!というモチベがふつふつと湧き、ついに今回参加に至った次第です。。

ちなみに僕のプログラミングレベルは
「簡単なChrome拡張機能を作れる」レベル。

…気になる結果はこちら。↓

スポンサーリンク

結果


・得点:300点/2100点(2完)
・順位:3799位/4583人中
・パフォーマンス:217
・レーティング:11

…はい。まさしく初参加って感じの成績ですね。

初回参加時はレートが低く出るようなので、将来収束する値であるパフォーマンスに注目したいのですが、
このパフォーマンスも”217″と灰色相当のパフォーマンスなのであまり芳しくないです。
(AtCoderにおける色(rating)に関しては、開発者のchokudaiさんのこちらの記事を見てみて下さい)

2完すれば茶色がつく程度のパフォーマンスにはなるのかと勝手に思っていたのですが、40分で2完は遅すぎたようですね。
「どの問題をどの程度の速さで解ければどの程度の色になるか」という概観も掴めていない段階なのです。

ちなみにABの2完程度だと10分以内に解かないと茶パフォは出せないようなので、過去問をこなして速度を上げないといかんですね。。

スポンサーリンク

使用言語

使用言語は †JavaScript† でした。
現時点ではこれ以外の言語が使えないので選択肢がないです…

JavaScriptが決して競プロ向きの言語ではないというのは耳に挟んでいたのですが、
現段階で自分の実現したい事に明確に必要な言語がJavaScriptなんですよね、、

しかしJavaScriptだとC問題ですら「値が大きすぎて処理できない」といった事が起きるみたいで、現に過去コンテストのC問題を解いているとそれらしきエラーでWA, TLEがちまちまと発生します。

そこで別の選択肢としてpythonも触ろうかとも思ってるんですが、pythonを通してハッキリとやりたい事が現状スクレイピングしかないです。
pythonというと「機械学習」がよく挙げられますが、この言葉聞こえは良くても具体的に自分で何をやりたいとかは現状全く無いですね。。

一つの言語で一定レベルに達する前に他言語に手をのばしても集中が分散して学習効率が悪いかなとも感じています。

なので、ある程度自分でJavaScriptを他人に教えられるレベル、またはある程度自分がしたい事はJavaScriptで出来るようになったなと実感してからpythonは触ります。
(C問題がJavaScriptではきつくてもB埋め程度はしたいですね、、)

スポンサーリンク

初心者から見た「競技プログラミングへの印象」

これから先むずかしめの問題を解いていく時に必要な考え方の予測(?)として

「数学的解法を一から発想するというよりは、
・定型的解法を当て嵌めるのが効率良い部分は定型的解法を当て嵌める
・単純作業でいかない場合は、算数とか数学的な発想で柔軟にいじくる」
というイメージだろうか。

競プロの「個人開発」に役立つ部分としては、
“一人で開発しているとだらけがちな所に、強制的に負荷をかける事ができる(且つその負荷が全く苦痛なものではない)”
というのがメリットかなと思いました。

例えば僕は過去にchrome拡張機能の開発時に数学的(?)処理で大きくつまずく部分がありました。
そういった部分に関しては「普通にchrome拡張開発だけを目的とした勉強」オンリーで取り組むよりは、適度に競プロの勉強時間を取り入れる事で、総合的に見ると結構開発の効率化を図ることができる。そんな感覚

とはいえ競プロ力ばっかり鍛えても仕方ない部分も多いのかなとは思います。
競プロを自己目的化せず、どの部分に時間を割けば自分の実現したい事への最適なバランスになるかは意識しながら取り組みたい。

スポンサーリンク

次回に向けて

次回は茶色相当のパフォーマンスを目指します。
ABを10分以内、ないしABCまで3完出来れば茶色パフォみたいですね。
C問題の挑戦と改善を繰り返して基本的なアルゴリズムを身に染み込ませるよう意識した練習をしたい。

・練習段階でも時間制限をレベルに応じて設ける
・解いた問題については振り返りのノートを書く。
・以前に実装したことがあるタイプのコードで時間をかけないように、転用できるものは言語化しておく

結構モチベ高めなので、これから頑張ってきたいですねー。

【追記】
続きの記事を書きました!

プログラミング初心者がAtCoderに挑戦してみたお話。【その2】
昨日(8/18)に行われたAtCoder Beginner Contest 138に参加しました。 3つ前に行われ...

こちらも是非ご覧ください。

コメント

タイトルとURLをコピーしました