Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Scalaで始める競技プログラミング

448 views

Published on

Fun Fun Functional (1) 関数型言語初心者向けLightning Talks!!
でのLT資料
指摘事項の修正1点あり

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Scalaで始める競技プログラミング

  1. 1. Scala で始める競技プログラミング 2019 年 5 月 27 日 Hayato_Kokubu
  2. 2. 自己紹介 ◆ 国分 隼 (Hayato_Kokubu ) 社会人 4 年目 :   Java(2 年 ) -> Cobol(1 年 ) -> Scala(1 年 ) Scala 使いのサーバサイドエンジニア 興味関心 : 競プロ , CTF, (Kaggle )
  3. 3. 競技プログラミングって何??? 問題を適切なアルゴリズムを使って解く。 制限実行時間内・制限メモリ内で問題を解く。 テストケースが通れば OK! オンラインのコンテスト たち e.g. topcoder // red coder の由来 Codeforces // 世界で人気 AtCoder // 日本語 多言語対応
  4. 4. 問題例1 AtCoder Beginner Contest 121 A (https://atcoder.jp/contests/abc121/tasks/abc121_a) イメージつきますか???
  5. 5. 問題例2 AtCoder Beginner Contest 120 B (https://atcoder.jp/contests/abc120/tasks/abc121_b) ちょっと複雑で難しめ。。。
  6. 6. 競プロをおすすめする理由 ・ ( アルゴリズムとデータ構造に強くなれる! ) ・ ( コードテストに強くなれる! ) ・プログラミング 初学者でもチャレンジできる! Hello World! の次にやること におすすめ!!
  7. 7. Scala で解くとどんな感じ? ( 問題その2 ) Step1. 整数 A, B の最大公約数 d を求める Step2. d の約数を全て求める Step3. K 番目に大きいものをとる これを Scala で実装してみよう!
  8. 8. Step.1 A と B の最大公約数 d を求める ● エラトステネスの篩 ( ふるい ) ユークリッドの互除法を利用 while 文よりも再帰で ( 参照透過性 , 末尾再帰最適化 )
  9. 9. Step2. d の約数を全て求める filter 処理 リストの要素のうち、  条件を満たす要素のみを抽出する 降順にしているのは、 K 番目に大きい数をとるため。
  10. 10. Step3. K 番目に大きいものをとる Collection の apply メソッドを使用 ここでは、 k - 1 番目の値を返す という意味
  11. 11. まとめ ● 同じ処理でも言語によって考え方が異なる    while 文 と 再帰 の違い など ● 受け身で気軽にチャレンジできる   作る物が決まらなくても問題ない!
  12. 12. 出典 AtCoder Atcoder Begenners Contest https://atcoder.jp/contests/abc121/tasks/abc121_a https://atcoder.jp/contests/abc121/tasks/abc120_b
  13. 13. ご静聴ありがとうございました

×