はむ吉(のんびり)の練習ノート

プログラミングとことばに関する話題を中心に,思いついたこと,試してみたこと,学んだことを,覚え書きを兼ねてまとめます.その際に役立った,技術書,参考書,辞書,機器などの紹介も行います.

競技プログラミングにおける私の使用言語、開発環境および利用サイト

今までにブログやTwitterで何度か言及しているように、私は数ヶ月前から競技プログラミングを楽しんでいます。この記事では、その際に私が用いているプログラミング言語および開発環境や、練習に利用したりコンテストに参加したりしているサイトについて述べます。

プログラミング言語

Python

Pythonは、私が数年前から使い始め、最も慣れ親しんでいる言語です。競技プログラミングの際にも多用しています。その主な理由は以下の通りです。

  • 標準で多くの有用なモジュールが搭載されている
  • コードの可読性が高い
  • アルゴリズム擬似コードからPythonコードへの変換が容易に感じられる

Haskell

数ヶ月前に使い始めました。競技プログラミングを始めた理由の一つは、Haskellの習得でした。今のところ、yukicoderにおける★1レベルや、AtCoder Regular Contest (ARC)におけるA問題に相当するような、比較的容易な問題への解答に使用しているにすぎません。

C++

かつて一度挫折しましたが、最近再び学び始めました。標準テンプレートライブラリの有用性を感じています。

Java

競技プログラミングを始めてからしばらくの間には使っていましたが、最近ではあまり触れていません。ただ、素数判定などの便利なメソッドが標準で利用できるようなので、気にはなっています。

開発環境

競技プログラミングに限らず、私は以下のような環境でプログラミングを行っています。

プログラミングだけではなく、それ以外の用途にも利用しているのは、Windows 10がインストールされたノートPCです。本来このPCにはWindows 7が搭載されていましたが、安易にアップデートを行いました。

また、私はコードを編集する際に、テキストエディタNotepad++をたいてい利用しています。その理由としては以下の項目が挙げられます。

  • 導入が容易である
  • 動作が軽快である
  • プラグインを利用して、機能を拡張できる
  • PythonC++について)入力補完機能が標準で備わっている
  • Pythonについて)関数やメソッドについてのヒントが表示される

Visual Studio 2015やNetBeansといった統合開発環境もインストールしてはいますが、少なくとも競技プログラミングにはあまり使用していません。

利用しているサイト

yukicoder

普段の練習によく利用しています。また、主に毎週金曜日の夜に開催されるコンテストにも時々参加しています。テストケースを閲覧できるのは、練習の際に自分の書いたコードの問題点を探す際に役立ちます。また、種々の条件による問題等の並べ替えや、入出力例の1クリックによるコピーなど、多数の便利な機能があります。さらに、各問題の解説や、ヘルプおよびWikiの内容も充実しています。現時点の私は★2の問題が解けたり解けなかったりするというレベルです。

Aizu Online Judge

普段の練習に利用しています。プログラミングコンテストの過去問からなる問題集のほかに、プログラミングの基礎や、アルゴリズム動的計画法、数論などの各分野を学べるコースを利用できるという特徴があります。

AtCoder

時々ARCやAtCoder Beginner Contest (ABC)といったコンテストに参加したり、その過去問を解いたりしています。現時点の私は、ARCにおいてA問題は解けるものの、B問題以降はたいてい正答できないといったところです。

感想

C++Javaはたいていのオンラインジャッジやプログラミングコンテストで利用可能であるようです。それゆえ、これらの言語にもう少し触れる必要がありそうです。

Notepad++以外のエディタを試してみるのもいいかもしれません。最近では、Visual Studio Codeが気になっています。

今後は上掲のサイトに加え、CodeforcesTopCoderなども利用したいと考えています。特に、Codeforcesは使いやすそうに見えます。