Slide 1

Slide 1 text

#rggjp Rails Girls Gathering Japan 2022 競技プログラミングへの お誘い 私と競プロ友達になってください あのぶる (@thatblue_plus)

Slide 2

Slide 2 text

#rggjp Rails Girls Gathering Japan 2022 自己紹介 ● だいたい仙台出身、ほぼ仙台(Matz島の手前くらい)在住のソフトウェアエンジニア ○ 学生時代を過ごした会津若Matzは第二の故郷 ○ スマホゲームのバックエンドを作るのがメインのお仕事(のはず) ● Rails Girls関係のロール ○ Sendai 1st, 2ndのオーガナイザー ○ Sendai, More!の運営 ○ Rails Girls Japan メンバー (2022/03~) New! ● Sendai.rbの代表スタッフもしています

Slide 3

Slide 3 text

#rggjp Rails Girls Gathering Japan 2022 こんな悩みはありませんか プログラミングに慣れるために もっとたくさんコードを書きたいけど、 いい課題が見つからない…

Slide 4

Slide 4 text

#rggjp Rails Girls Gathering Japan 2022 それ、競技プログラミングで 解決できるかもしれません

Slide 5

Slide 5 text

#rggjp Rails Girls Gathering Japan 2022 競技プログラミングとは? 今回はアルゴリズム分野の技能を競うタイプについて扱います

Slide 6

Slide 6 text

#rggjp Rails Girls Gathering Japan 2022 プログラミングの技術で勝負する競技の一種 通称「競プロ」 プログラムを書いて答える問題が出題される 解答となるプログラムを書いて提出する →主催者の用意したシステムで採点される 時間内に一番多く、早く解いた人の勝ち 5min 5min 10min 5min 10min 10min 5min 5min

Slide 7

Slide 7 text

#rggjp Rails Girls Gathering Japan 2022 例題 [AtCoder Beginner Contest 186 A - Brickより抜粋] トラックが1台あります。このトラックには合計でNキログラム以下の荷物を載せ ることができます。 このトラックに、1個Wキログラムのレンガを最大でいくつ載せることができま すか? 制約 ● 1 ≤ N,W ≤ 1000 ● N,W は整数である。

Slide 8

Slide 8 text

#rggjp Rails Girls Gathering Japan 2022 こんな感じで実行されるイメージ $ ruby brick.rb 1000 20 # NとWの入力 50 # 答えの出力

Slide 9

Slide 9 text

#rggjp Rails Girls Gathering Japan 2022 解答例 n, w = gets.chomp.split.map(&:to_i) puts n / w

Slide 10

Slide 10 text

#rggjp Rails Girls Gathering Japan 2022 でも、難しいんじゃない?

Slide 11

Slide 11 text

#rggjp Rails Girls Gathering Japan 2022 モノによりますが初心者でも楽しむことが出来ます ● AtCoderのAtCoder Beginner Contest(通称: ABC) ○ AtCoderはおそらく日本の競技プログラミングコンテストサイトを代表するサービス ○ Beginner Contestと言いつつ上級者向けの問題も混じっているので取捨選択が必要 ■ 問題の選び方は後ほど ○ ほぼ毎週コンテストを開催しているので、過去問で慣れた後、実際に参加することもできる ○ Rubyは2.7対応 ● Aizu Online Judgeの問題 ○ 福島県にある会津大学という大学が運営しているサイト ○ 競技プログラミングの入門記事を読んでいると、学習用として頻繁にお勧めされる (多分これ、一部の問題は本当に授業の演習課題として使ってたことがあるんじゃないかな…?) ○ Rubyは2.4対応 ● yukicoderの問題 ○ 模試・勉強会の場を提供する位置づけで運営されているサイト ○ 自由に問題の投稿ができる ○ 概ね週1回の頻度でコンテストが開催されている ○ Rubyは3.1対応

Slide 12

Slide 12 text

#rggjp Rails Girls Gathering Japan 2022 競技プログラミング問題のいいところ ● やることがはっきりしている ● 問題がたくさん用意されている ● 問題の難易度も色々揃っている ● 解けたらサイトに提出すれば正しそうかどうかジャッジしてくれる ● 自力で解けなかったら解説もある ● どうしても分からなかったら他の人の正解コードを読んで勉強できる ● いろんなプログラミング言語で挑戦できる ● 過去問をちょっと解いてみるだけでも楽しい ● 慣れてきたら実際にコンテストに参加すればそれはそれで楽しい

Slide 13

Slide 13 text

#rggjp Rails Girls Gathering Japan 2022 実際どんな問題があるのか (AtCoder Beginner Contestの例)

Slide 14

Slide 14 text

#rggjp Rails Girls Gathering Japan 2022 初級編「プログラミングの勉強頑張る!」 ● A: Hello, World+α、という感じの実装 ○ これをスムーズに解けるようになるのが第一歩 ○ たまに+αの部分が妙に癖のある問題があるので、難しく感じてもあまり気にせず ● B: ループを含んだ実装 ○ 問題文の指示の通りにコードを書けば解けるように出来ている ○ ここまではアルゴリズムの知識がなくても練習次第で書けるようになる ○ Webサービス開発の通常業務で発生する「ちょっとややこしめの実装」が概ねこのあたり (個人調べ) ○ Rubyで解くと書き味の良さがよく活きる

Slide 15

Slide 15 text

#rggjp Rails Girls Gathering Japan 2022 中級編「アルゴリズムを学びたい!」 ● C: 基本的なアルゴリズム知識とそれを使いこなすスキルが求められる問題 ○ 基本情報や応用情報が射程に入ってくるのであればいい勉強になると思います ● D: もう少し突っ込んだアルゴリズム知識が必要になる ○ ここまで安定して解けるようになったら一般的な(アルゴリズムを専門領域としない)ソフトウェアエン ジニアとしては十分だと思う ○ いま私が目指しているのはこのあたり ● E: 競技プログラミングで使うアルゴリズムをだいたい理解し、基本的な使い こなしが出来ている必要がある(らしい) ○ この辺くらいで一般的なソフトウェアエンジニアとしてはアルゴリズムスキルのカンストと のこと ○ 正直ここからは自力で解けたことがないので各種資料を読んだ理解に基づく説明になります

Slide 16

Slide 16 text

#rggjp Rails Girls Gathering Japan 2022 上級編「アルゴリズム王に、私はなる!!」 ● F, G: たぶん、普通の企業であれば出来上がってるサービスを使うような領域 ○ 逆にそれを作る側の企業でのアルゴリズム開発に興味があるのなら、大変だと思いますが ここまで頑張ってみるのもあり ● Ex: 世界大会とか目指すような人が解く問題なので、とりあえず気にしなく ていいです ○ ここまで来ると正直”Beginner”とは…?と思うのですが、当初はD問題までだったところから 増えての現在なので、相応に経緯があるようです

Slide 17

Slide 17 text

#rggjp Rails Girls Gathering Japan 2022 実際やってみてどうなった?

Slide 18

Slide 18 text

#rggjp Rails Girls Gathering Japan 2022 個人の感想です Rubyのコードがさくさく 書けるようになりました! (個人比)

Slide 19

Slide 19 text

#rggjp Rails Girls Gathering Japan 2022 もうちょっと真面目に成長具合を説明すると…… 「A~C問題は概ね解き方が分かる」 「他の言語の経験はあるがRubyは初心者で、簡単な処理を書くのもるりま頼り」 という状態から3ヶ月ほど集中的にやってみた ● 実際、Rubyのコードはだいぶスムーズに書けるようになったと思う ○ 単純に反復練習になっているので、競技プログラミングで頻出の範囲であれば基本的な文法 がスッと出てこなくてアワアワすることはなくなった ● 「何とかコンテスト中に3問解けた…」から「4問解けた!」にたどり着ける ようになってきた ○ 1問目~3問目の所要時間短縮+4問目の解答に必要なアルゴリズム知識の習得 ○ 典型問題集があるので、まずはそれをコツコツ解いていくのが良さそう

Slide 20

Slide 20 text

#rggjp Rails Girls Gathering Japan 2022 最近の悩み 一人で黙々とやってるの ちょっと寂しい……

Slide 21

Slide 21 text

#rggjp Rails Girls Gathering Japan 2022 最近の悩み 競プロ友達が欲しい!

Slide 22

Slide 22 text

#rggjp Rails Girls Gathering Japan 2022 楽しいけど、難しいと思うことがないわけでもない ● 問題文が数学の問題みたいに見えて、慣れるまでちょっと難しいと思うかも しれない ○ 実際、C問題以降は整数の性質・集合・組み合わせあたりの数学知識は必要になってくる ● ある程度反復練習が必要 ○ なんの予行練習もなくいきなりコンテストに出ると実際大変 ○ C問題以上を解こうと思ったらアルゴリズムやデータ構造の勉強が必要になってくる ○ 最初にイメージした通りの結果が出るまでにある程度時間が掛かるので、割り切りポイント が分からないと心が折れやすくはある ● 初心者から世界大会レベルの人まで一緒くたになってやっているので、上を 見るとキリがない ○ さっきの8問を30分で解くような人たちと比べてしまうと大体の人は病みます

Slide 23

Slide 23 text

#rggjp Rails Girls Gathering Japan 2022 もちろんプログラマーの中でも 向き不向きのある分野で、 気楽に気長にやっていくのがコツ それはまさに沼のような深みですので

Slide 24

Slide 24 text

#rggjp Rails Girls Gathering Japan 2022 なので、一緒にやりませんか? Rails Girls 競プロ部とか どうでしょう?

Slide 25

Slide 25 text

#rggjp Rails Girls Gathering Japan 2022 宣伝: 競プロの問題を体験できるイベント、来週開催! https://sendairb.connpass.com/event/267039/

Slide 26

Slide 26 text

#rggjp Rails Girls Gathering Japan 2022 私と競プロ友達になってください!