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

Mais conteúdo relacionado

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

仕様をコードに落としこむ際気をつけたいこと
仕様をコードに落としこむ際気をつけたいこと仕様をコードに落としこむ際気をつけたいこと
仕様をコードに落としこむ際気をつけたいことMasaki Toyoshima
 
[豆ナイト]Java small object programming
[豆ナイト]Java small object programming[豆ナイト]Java small object programming
[豆ナイト]Java small object programmingYuichi Hasegawa
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021Atsushi Nakamura
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5Takahiro YAMADA
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?Takahiro YAMADA
 
ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてKota Mizushima
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Chihiro Ito
 
Introduce build in shrinker
Introduce build in shrinkerIntroduce build in shrinker
Introduce build in shrinkerDaisuke Fuji
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!K Kinzal
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
Starc verilog hdl2013d
Starc verilog hdl2013dStarc verilog hdl2013d
Starc verilog hdl2013dKiyoshi Ogawa
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーションssuser070fa9
 
Do you like scala
Do you like scalaDo you like scala
Do you like scalaYuto Suzuki
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 

Semelhante a Scalaで始める競技プログラミング (20)

仕様をコードに落としこむ際気をつけたいこと
仕様をコードに落としこむ際気をつけたいこと仕様をコードに落としこむ際気をつけたいこと
仕様をコードに落としこむ際気をつけたいこと
 
[豆ナイト]Java small object programming
[豆ナイト]Java small object programming[豆ナイト]Java small object programming
[豆ナイト]Java small object programming
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
 
ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修についてドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修について
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
Introduce build in shrinker
Introduce build in shrinkerIntroduce build in shrinker
Introduce build in shrinker
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
First Step TDD
First Step TDDFirst Step TDD
First Step TDD
 
Quarkus入門
Quarkus入門Quarkus入門
Quarkus入門
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
Starc verilog hdl2013d
Starc verilog hdl2013dStarc verilog hdl2013d
Starc verilog hdl2013d
 
JDK:新しいリリースモデル解説 @ 熊本・福岡
JDK:新しいリリースモデル解説 @ 熊本・福岡JDK:新しいリリースモデル解説 @ 熊本・福岡
JDK:新しいリリースモデル解説 @ 熊本・福岡
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
競プロでGo!
競プロでGo!競プロでGo!
競プロでGo!
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
Do you like scala
Do you like scalaDo you like scala
Do you like scala
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 

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