search
LoginSignup
18

More than 1 year has passed since last update.

posted at

updated at

PythonによるAtcoder:入門者の備忘

1. 記事の目的

  • あとで見返せる1ようにメモをつくりたかった
    • PythonでAtcoderに参加するとき役立つ記事
    • 個人的意義の検討
  • 想定される読者
    • Progateを終えたくらいの水準から、登録したけど、何を調べればいいのか、と言う段階の方
      • こう考えるやつもいるのだな、という検討の一助になれば
  • 業界に詳しくないので至らぬ点ご容赦ください

1.1 追記

10/3 8月に最初書いたときから認識の変わった点などについて追記しました。これから限りある時間の中でのアルゴリズムの勉強が始まるので、長い停滞が続きますが、自戒を兼ねて、ほぼ本編には手を入れておりません。

  • これまでも拙文お読みいただいた方が思ったよりいらっしゃって、知識ない中での文章、申し訳ないなと思う側面もあります。ぜひ強い人がやさしく書かれた文章をいくつも読んでいただけたらと思います。Qiitaだけでなくブログなどにも参考になる考察をまとめられている方が大勢いらっしゃいます。

  • Codeforcesだとブログ機能に、TopCoderだとSlackなどにコミュニティがあるようですが、日本ですとTwitterなどを通じて情報発信されている方をフォローし、かつ近いレートの仲間を持つとよいのかと思います。この問題はこう解いた、解けなかった、というつぶやきをしたり、バチャコンやりませんか、というのは、丁寧にやりとりができれば、歓迎されるのだと思います。

2. AtcoderとPythonのリンク

3. 参加まで

  • 去年友人に勧められる
    • 「実益を兼ねる趣味になり転職にもいいかもしれないよ」
  • モチベーションがなく放置(1年)
  • ProgateのPythonコースを1日で終える(2020/7/7)
  • 環境構築さえなければプログラミングは敷居低いのでは、と考える(7月前半~)
  • Atcoderもまた、始める分には環境構築は要らない
  • Atcoderの入門記事APG4Bがよさそう
    • ProgateにはこうしたC++コースは存在しない
    • Progateと同様、即時採点の問題形式
  • 直近で8/2(日)にABCがあるからそこまでにAPG4Bを読み進めて、参加もしてみようと考える(7月後半~)

4. ABC174, 175参加前後の備忘

  • 環境構築はめんどいので放置した
  • APG4Bを飯時や寝る前に流し読む
    • 1章を終える
  • ABC174はC++でA, B問題を完答する
    • A, B問題は1章の知識で解ける
    • 慣れの必要を実感
    • 1週間放置してAGCを迎えるも、レート1200以下はunrateであるらしいから不参加(8/9)
  • 次の方針はどうしたものかとAtcoderのページをカチカチ
    • Atcoder ProblemsというAtcoder社外のサービスが勧められている
    • もっと楽しくなる”にも紹介がある
    • 使って見ると、統計を見ながら遊ぶのは励みになる
    • Pythonに切り替えてBootcamp中心に解く
    • 昼休みに裏紙を使って帰宅後25問解く(8/10~15)
  • ABC175はPython(PyPy3)でA, B, Cを完答する(8/15)
    • 3誤答(WA: Wrong Answer)でペナルティー
      • パターン考慮・試行に慣れたい
    • D問題以上も眺める
      • DPやらグラフやらの知識が要る
      • 数式や図説のある基本書が欲しい
      • 蟻本がいいらしいので買う

5. なぜPythonを使うか

  • 利用者の過半がC++、公式解説もC++、計算速度もC++が一番であることはAtcoderのトップページを始め方々に触れられているのにもかかわらず私がPython3を使いたい理由は5つ:
  1. Pythonが好き
  2. 環境構築や実装がC++よりずっと楽
  3. Pythonで参加する人もC++ほどじゃないけどいる
  4. 私の所属の数人はPythonを書けるらしく、今後もPythonがデファクトスタンダードとなりうる雰囲気がある
  5. C++に慣れても身の回りでは活用できる場がなさそう4

-1. 今後の展望

0. 追記(20/9/30)

書いてから日も空いたので認識の改まった点などを挙げます。

0.1 しばらくして感じたこと・知ったこと

  • じきにC++もやってみたいな~と思います。

    • C++に対して、言語使用やアルゴリズムの調べもののコツ、環境のつくり方とか、ハードルが少しずつ低くなっている印象があります。
    • PythonのMathカテゴリ問題を解き進めるにつれて、じゃあC++ならどうするか? というのが、見えやすくなったのだと思います。
    • 私のようなこらえ性のない人間でもPythonの緑色レートの初級難度問題くらいまでは(算数に近い問題に限りますが)自然と読み書きができているので、おすすめです。
  • ACL(Atcoderが公開した高速な、コンテストで使えるライブラリ集)は、ありがたい存在だと思います。

    • まだ初歩的なことを勉強していますが、じきにこのデータ構造も勉強したい! と思っています。
    • 品質の保証されたものを提供いただけるというのはすごいことだと思います。
      • いってみれば高速化のチューニングの手間をとらないでいいよ、という特急券のようなものだと思います。
  • ほかの人のコードを参照する場合のルールは、YukicoderですとApache License 2.0なのですね。

    • 当然といえば当然ですが、ライブラリなど、出典をする場合はコメントに明記するよう気をつけます。
    • Atcoderでも提出者に著作権がある、という規約ですので、留意しておきます。
  • 競プロやAtcoderは楽しんでやりたい。ますます盛り上がってほしい。

    • 競技プログラミングは、海外のプログラマーとも遜色のない技術があります、と言える稀な機会だと思う。
    • 日本人のアルゴリズム構築能力の中央値・平均値が高まることは価値があると思う。
    • 仮にプログラマー人口の裾野が伸びて、技術者が評価・認識される&国際競争力が高まるようになったらいいなあと思う。
    • 自分がContributeできるところは少ないが、かつての専攻で学んだことが生きないか考えてみたい。

0.2 レーティングとコミュニケーション

  • わからないことについてコミュニケーションを取る相手は大事だと考えられます。
  • もう一歩わからない、という水準のことについて質問する相手は、自分より少し経験を積んだ人に聞くのが、互いに取って一番ためになるのだと思います
  • 具体的には、±2色以上離れたレートの人に質問するときは場面を考えたいと思っています(LTなどで自信を持って質問ができそうならまた話は別化とは思います)

0.3 方法について書きもらしたこと

  • Qiitaは殿堂入り記事のほか、AtcoderタグでLGTM上位のタイトルをチェックされるとよいと思います。
    • 自分の興味のあるアルゴリズムや言語についての問題解説記事を片手に問題を解くのは楽しいです。
  • 解いた後の考察、復習、解けなかった問題をもう1問解説を読んでから正答提出する、というのも続けたいと思います。
  • 私は素地がないので、毎日過去問を解くのと並行して、本や読み物も読んで、言葉や概念を学んでいます。
    • 問題を解いてその場で理解するのが本当は一番早いです、読むのは趣味もあります。
    • 昔は興味はあるけど入門書すら読むのが苦痛だったので、読み進められるようになったことがうれしいです。
    • テキストに付いては、蟻本をいったん保留して今の自分が読んでためになりそうなものを読んでいます。
      • 『みんなのPython』はおすすめです! 人に勧められたこともあるし、これは試してみたいな、などと考えながら読み進められるワクワクする本でした。しばらく座右に置きたい本です。
      • 昔先行していた分野では読み比べが理解に、厚い本の通読が自信につながったので、アルゴリズムやPythonの良書は2冊目、3冊目を読んで行こうと思っています。
      • 幅広く解説記事を書かれているけんちょんさんの本は10/2に本屋で買いました! とても楽しみです。

  1. 忙しくなって途中でやめてもまた参照できる(弱気)。 

  2. 大会規模は、直近で1問でも解答の提出のあった者をカウントして、直近で初心者向けが約10000人、上級者向けが約2000人。アクティブユーザで検索すると6万位まで表示される。ただしABC 175AGC 047の大会結果を閲覧した。ほかにも、国内外に同様の応答型のコンテストや問題集、あるいはその紹介記事が豊富にある。用語がいろいろあるが、プログラマーは手間を減らす方へ指向性を持っていて、略語の利用、ミーム化はこの業界で好まれると推察する。(競技プログラミング 用語集🔍) 

  3. PyPyが計算が速くてよいらしいという記事も方々に見出したのでPyPy3を使う。それでもC++のほうがずっと速い。AtCoderや他のコンテストサイトではC++以外が絶対動くという保証はない。弊社の環境的には、計算速度についての考慮も不要そうだが、仮に、ビッグデータに関して1日中計算を回すようなことがあるならば、あるいは†簡単な計算†はC++で自分で実装しよう、という程度にはC++を使いこなせたら、という想像力は持っておきたい。 

  4. 分析目的で回すだけの、コードをカッチリ保守する必要のないケースが多そう 

  5. Atcoderに出されるような大学受験までの算数やアルゴリズムの概念自体は好きだったので、プログラミングにいい思い出がないながらも、まあまあ楽しい。 

  6. Atcoder Problemsはデザインが洗練されていて凄い。習慣づけるものごと全般に、これくらい楽しく統計を残せるサービスがあればなあ、と思って探している。 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
18