Perl5で競技プログラミング / Perl5-Competitive-Programming

Perl5で競技プログラミング / Perl5-Competitive-Programming

Gotanda.pm #18 で使用した資料です

00766b8e1f9c2665cf7fd29f9cf558df?s=128

odanado

June 11, 2018
Tweet

Transcript

  1. Perl5で競技プログラミング 2018-06-11 Gotanda.pm #18 1

  2. 自己紹介 • 所属: 株式会社モバイルファクトリー • GitHub: odanado • Twitter: @odan3240

    • Perl5歴 ◦ 2ヶ月 • 趣味 ◦ 競技プログラミング ◦ ポケモン関係のツールを作ること ▪ poke2vec ▪ rng-api ◦ Slack bot作り 2 ↓Twitterアイコン
  3. 祝 gotanda.pm.org の https化 3

  4. 祝 gotanda.pm.org の https化 4

  5. 祝 gotanda.pm.org の https化 5

  6. 祝 gotanda.pm.org の https化 6

  7. 祝 gotanda.pm.org の https化 7

  8. 祝 gotanda.pm.org の https化 8

  9. 今日話すことのモチベーション 9

  10. 今日話すことのモチベーション 配列外参照でdieしてほしい! 10

  11. 競技プログラミングとは 11

  12. 競技プログラミングとは • 与えられた仕様を満たすような プログラムをコーディングする競技 12

  13. 競技プログラミングとは • 与えられた仕様を満たすような プログラムをコーディングする競技 問題文 13

  14. 競技プログラミングとは • 与えられた仕様を満たすような プログラムをコーディングする競技 ソースコード 14

  15. 競技プログラミングとは • 与えられた仕様を満たすような プログラムをコーディングする競技 正当性の検証 15

  16. 会社の競技プログラミング部の 活動でのある日 16

  17. 競技プログラミング部でのある日 • Perlプログラムを実行すると謎のエラーが出る • この時Perl歴1ヶ月弱ぐらい ◦ デバッグした結果、原因は配列外参照 • つらい... 17

    > Use of uninitialized value in addition hogehoge <
  18. Perl5での 競技プログラミングのつらさ 18

  19. Perl5での競技プログラミングのつらさ • 配列外参照でdieしない ◦ “Use of uninitialized value in addition

    hogehoge” • 標準ライブラリに便利なデータ構造が揃ってない ◦ C++におけるSTLのvector,set,map,deque など 19
  20. Perl5での競技プログラミングのつらさ • cpanはすごい ◦ ライブラリが豊富 ◦ 便利そうなライブラリをcpanで探す? ▪ ダメ。 •

    AtCoderの提出事情 (ほとんどの競プロサイトはそう) ◦ AtCoderへの提出はソースコードのコピペ ◦ 実行はAtCoderのサーバ上 ▪ Perl 5.18.2 が動いているだけ ◦ 標準ライブラリ以外を使うなら全てをコピペ 20
  21. Perl5での競技プログラミングのつらさ • cpanはすごい ◦ ライブラリが豊富 ◦ 便利そうなライブラリをcpanで探す? ▪ ダメ。 •

    AtCoderの提出事情 (ほとんどの競プロサイトはそう) ◦ AtCoderへの提出はソースコードのコピペ ◦ 実行はAtCoderのサーバ上 ▪ Perl 5.18.2 が動いているだけ ◦ 標準ライブラリ以外を使うなら全てをコピペ 21
  22. いい感じの競技プログラミング 向けのライブラリがほしい 22

  23. 自作した 23

  24. 自作した • GitHub: odanado/p5-Procon • C++のSTLにあるやつはI/Fを真似る • 実装済み ◦ Vector

    ◦ UnorderedSet ◦ UnorderedMap ◦ UnionFind • 未実装 ◦ Deque ◦ Stack ◦ Queue ◦ PriorityQueue ◦ etc... 24
  25. 自作した • t/01_vector.t 25

  26. まとめ 26

  27. まとめ • 競技プログラミングはソースコードをコピペで提出 ◦ 基本的に標準ライブラリ以外のライブラリは使用不可 ◦ ライブラリもまとめてコピペ • Perl5で競技プログラミングするのに 便利なライブラリを開発した

    ◦ I/FはC++のSTLを真似た • データ構造/アルゴリズムをゴリゴリ実装していく予定 • Webサイトも作りたい 27