$30 off During Our Annual Pro Sale. View Details »

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

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

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

odanado
PRO

June 11, 2018
Tweet

More Decks by odanado

Other Decks in Programming

Transcript

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

    View Slide

  2. 自己紹介
    ● 所属: 株式会社モバイルファクトリー
    ● GitHub: odanado
    ● Twitter: @odan3240
    ● Perl5歴
    ○ 2ヶ月
    ● 趣味
    ○ 競技プログラミング
    ○ ポケモン関係のツールを作ること
    ■ poke2vec
    ■ rng-api
    ○ Slack bot作り 2
    ↓Twitterアイコン

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. Perl5での
    競技プログラミングのつらさ
    18

    View Slide

  19. Perl5での競技プログラミングのつらさ
    ● 配列外参照でdieしない
    ○ “Use of uninitialized value in addition hogehoge”
    ● 標準ライブラリに便利なデータ構造が揃ってない
    ○ C++におけるSTLのvector,set,map,deque など
    19

    View Slide

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

    View Slide

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

    View Slide

  22. いい感じの競技プログラミング
    向けのライブラリがほしい
    22

    View Slide

  23. 自作した
    23

    View Slide

  24. 自作した
    ● GitHub: odanado/p5-Procon
    ● C++のSTLにあるやつはI/Fを真似る
    ● 実装済み
    ○ Vector
    ○ UnorderedSet
    ○ UnorderedMap
    ○ UnionFind
    ● 未実装
    ○ Deque
    ○ Stack
    ○ Queue
    ○ PriorityQueue
    ○ etc...
    24

    View Slide

  25. 自作した
    ● t/01_vector.t
    25

    View Slide

  26. まとめ
    26

    View Slide

  27. まとめ
    ● 競技プログラミングはソースコードをコピペで提出
    ○ 基本的に標準ライブラリ以外のライブラリは使用不可
    ○ ライブラリもまとめてコピペ
    ● Perl5で競技プログラミングするのに
    便利なライブラリを開発した
    ○ I/FはC++のSTLを真似た
    ● データ構造/アルゴリズムをゴリゴリ実装していく予定
    ● Webサイトも作りたい
    27

    View Slide