Gotanda.pm #18 で使用した資料です
Perl5で競技プログラミング2018-06-11Gotanda.pm #181
View Slide
自己紹介● 所属: 株式会社モバイルファクトリー● GitHub: odanado● Twitter: @odan3240● Perl5歴○ 2ヶ月● 趣味○ 競技プログラミング○ ポケモン関係のツールを作ること■ poke2vec■ rng-api○ Slack bot作り 2↓Twitterアイコン
祝 gotanda.pm.org の https化3
祝 gotanda.pm.org の https化4
祝 gotanda.pm.org の https化5
祝 gotanda.pm.org の https化6
祝 gotanda.pm.org の https化7
祝 gotanda.pm.org の https化8
今日話すことのモチベーション9
今日話すことのモチベーション配列外参照でdieしてほしい!10
競技プログラミングとは11
競技プログラミングとは● 与えられた仕様を満たすようなプログラムをコーディングする競技12
競技プログラミングとは● 与えられた仕様を満たすようなプログラムをコーディングする競技問題文13
競技プログラミングとは● 与えられた仕様を満たすようなプログラムをコーディングする競技ソースコード14
競技プログラミングとは● 与えられた仕様を満たすようなプログラムをコーディングする競技正当性の検証15
会社の競技プログラミング部の活動でのある日16
競技プログラミング部でのある日● Perlプログラムを実行すると謎のエラーが出る● この時Perl歴1ヶ月弱ぐらい○ デバッグした結果、原因は配列外参照● つらい...17> Use of uninitialized value in addition hogehoge <
Perl5での競技プログラミングのつらさ18
Perl5での競技プログラミングのつらさ● 配列外参照でdieしない○ “Use of uninitialized value in addition hogehoge”● 標準ライブラリに便利なデータ構造が揃ってない○ C++におけるSTLのvector,set,map,deque など19
Perl5での競技プログラミングのつらさ● cpanはすごい○ ライブラリが豊富○ 便利そうなライブラリをcpanで探す?■ ダメ。● AtCoderの提出事情 (ほとんどの競プロサイトはそう)○ AtCoderへの提出はソースコードのコピペ○ 実行はAtCoderのサーバ上■ Perl 5.18.2 が動いているだけ○ 標準ライブラリ以外を使うなら全てをコピペ20
Perl5での競技プログラミングのつらさ● cpanはすごい○ ライブラリが豊富○ 便利そうなライブラリをcpanで探す?■ ダメ。● AtCoderの提出事情 (ほとんどの競プロサイトはそう)○ AtCoderへの提出はソースコードのコピペ○ 実行はAtCoderのサーバ上■ Perl 5.18.2 が動いているだけ○ 標準ライブラリ以外を使うなら全てをコピペ21
いい感じの競技プログラミング向けのライブラリがほしい22
自作した23
自作した● GitHub: odanado/p5-Procon● C++のSTLにあるやつはI/Fを真似る● 実装済み○ Vector○ UnorderedSet○ UnorderedMap○ UnionFind● 未実装○ Deque○ Stack○ Queue○ PriorityQueue○ etc...24
自作した● t/01_vector.t25
まとめ26
まとめ● 競技プログラミングはソースコードをコピペで提出○ 基本的に標準ライブラリ以外のライブラリは使用不可○ ライブラリもまとめてコピペ● Perl5で競技プログラミングするのに便利なライブラリを開発した○ I/FはC++のSTLを真似た● データ構造/アルゴリズムをゴリゴリ実装していく予定● Webサイトも作りたい27