競技プログラミング過疎地で活動していた記録

 この記事はCompetitive Programming Advent Calendar Div2012 12/4の記事として書かれたものです.

 この記事では僕が高専でやってきた競技プログラミングの活動を淡々と書いたものです.過度な期待はしないでください.
 アルゴリズム系の話題を読みたかった人は回れ右!

 僕が競技プログラミングを初めて来年でおよそ3年になります.(内1年はほとんど活動していなかったですが;)僕も今年度で高等専門学校 本科を卒業する"予定"です.そこで,自分の競技プログラミング生活を振り返ってみようと思います.

 僕が学校生活を送っている山口県には競技プログラマがそんなに多くありません.その中で行っていたことを主に書いていきます.僕と同じように自分以外にあまり競技プログラマがいない地域で活動をしている,またはしようという人の参考に,大都会に住んでいる人は地域から来ている人達の苦悩(?)を伝達する記事になればいいなと思います.できたらアドバイスとかもください.

入門編(過疎地に足りないもの)

 競技プログラミング過疎地では圧倒的にリソースと人が足りません.どの分野でも新しいことを始めようとすれば生じる問題だと思います.
 具体的にリソースは,

  • インターネットに接続できてコンパイラがインストールされているPC(超重要)
  • 参考書

 がなく,人は,

  • 大会についてきてくれる先生
  • アルゴリズムに詳しい人か何らかの大会に出場したことがある人(教育者)
  • 一緒に競技プログラミングをする仲間 or ライバル(いないと大会に出場できなかったりする)

 がいません.
 PC云々はプログラミングするならインストールぐらいできろですむ話なのですが,そのほかは何ともなりません.参考書もバイトをしてないと小遣いだけだったら結構高いです.(僕の場合は一ヶ月何も買わない覚悟で蟻本を買った記憶があります.)
 特に人員をどう解決するかが結構大きな課題です.

初級編(勉強をしよう)

 僕がプログラミングの勉強を本格的に始めたのは高1です.学科は情報系で,なおかつコンピュータ部(っぽいなにか)に所属していたので,プログラミングの勉強にはそう困りませんでした.

 問題はアルゴリズムの方で,授業では3年次にやるし,部活はアプリケーション開発を重点に置いているものだったので,人から教えてもらうのは結構厳しかったです.僕は,1年生の夏休みに市立の図書館で借りた「Javaによるアルゴリズムとデータ構造」で勉強しました.当時は競技プログラミングの大会に出場しようとかまったく意識しないで勉強してました.

 2年の2学期,高専プロコンが終わったあたり(10月半ば)になんとなく,情報オリンピックに参加してみようという気になったので,情報オリンピックの勉強を始めました.
 情報オリンピックの予選は問題もよく,解説もちゃんと書いてあるので入門にはうってつけでした.予選の6問目以外は何とか解説を読んだらプログラムが書けました.
 1問だけわからない問題があったので,部活の顧問に相談しましたが,1,2時間ぐらい2人で考え込んでもわかりませんでした.

中級編(大会に参加してみよう)

 僕が参加したことあるのJOI,パソコン甲子園(PCK)とSuperConだけなんですけど...ICPCに出られなかった理由は,1年目はテンパって,2年目はいろいろあった.来年もインターンあるし出られないかもしれない.いやだー.

 大会によって交通費全額負担してくれたり,一部負担してくれたり,全く負担してくれなかったり.山口→東京とか結構バカにならない交通費がかかるので補助を出してくれるのはすごい助かる.

 引率の先生は,担任兼部活の顧問に相談しました.職員会議に出して先生をつけてくださいました.

 SuperConとPCKの時はチームメンバーを探しました.
 基準としては下の条件に合致するかどうかで判断しました.上にある方が優先度が高いものです.

  • 競技プログラミング経験者(最有力)
  • プログラミング経験者 or 数学強そうな人(数理でも,幾何でも) or 大会に出ることに興味がありそうな人
  • 読みにくい日本語でもすらすら読める人(PCKのみ)

 僕の場合は競技プログラミング経験者で,チームができそうになかったので,プログラミング経験者(うちの学校がそもそも情報系)を引き入れました.
 こんな人が引き入れやすいかも

  • 仲のいい同級生
  • 同じ部活の先輩,後輩

 SuperConのメンバーは同じ部活の後輩でした.

 PCKは高専プロコンの後で後輩だったら勉強する暇がなくて大変そうだなと思い同級生を誘いました.同級生で同じ部活の人がいなかったので,仲が良くて興味がありそうな人から順に「一緒に出てください」と頼みこみました.結局相方はあまり話したことのないクラスメイトでしたが,PCKに一緒に出場して以来仲良くやっています.

上級編(後進を育成してみよう)

 知識は後々のために継承しておいた方がいい.とうちの顧問は語っていました.

 僕は部活で競技プログラミング用の講習を現在週1でやっています.本当はもっと頻繁に時間をとったいい気がするんですが,部活の他の活動とかもあるのでなかなか.
 PowerPointを使ったプレゼンテーション形式で約1時間やってます.
 内容は,僕が必要だと思った順番にアルゴリズムやデータ構造,練習問題を紹介しています.必要に応じて,学生が解説してほしいと頼んできた問題の解説もやります.

 一番気合いが入っていたのは2年前のJOI予選の直前でした.毎日やってました.毎日はかなりしんどかったです.ustream使って講習して,終わってから次の日のスライド作り始めて,3時ぐらいに寝て6時半に起きて学校に行くという生活でした.その甲斐あってかその年の中国地区で予選突破したのが全部うちの学校の学生でした.

 やってて毎年思うのは,講師一人でやってるとスライド作ったりするのが結構きついなーということです.
 あとは,講習をやる→ある程度まで進む→1年生が入ってくる→1からやり直し...となるので結構無駄が多い.何回も同じことを説明した学生がいる気がする.
 やっぱり,3年生が2年生を教えて,2年生が1年生を教えるという具合に枠組みを作った方がいい気がする.

最後に

 文章が下手でごめんなさい.
 少しは役に立った情報があれば幸いです.
 質問や相談は受け付けています.アドバイスも歓迎します.

 たまに文章を読みなおして修正をかけることがあるかもしれません.