Rails Girls Gathering Japan 2022のLT資料です。 https://gathering.railsgirls.jp/
#rggjpRails Girls Gathering Japan 2022競技プログラミングへのお誘い私と競プロ友達になってくださいあのぶる (@thatblue_plus)
View Slide
#rggjpRails Girls Gathering Japan 2022自己紹介● だいたい仙台出身、ほぼ仙台(Matz島の手前くらい)在住のソフトウェアエンジニア○ 学生時代を過ごした会津若Matzは第二の故郷○ スマホゲームのバックエンドを作るのがメインのお仕事(のはず)● Rails Girls関係のロール○ Sendai 1st, 2ndのオーガナイザー○ Sendai, More!の運営○ Rails Girls Japan メンバー (2022/03~) New!● Sendai.rbの代表スタッフもしています
#rggjpRails Girls Gathering Japan 2022こんな悩みはありませんかプログラミングに慣れるためにもっとたくさんコードを書きたいけど、いい課題が見つからない…
#rggjpRails Girls Gathering Japan 2022それ、競技プログラミングで解決できるかもしれません
#rggjpRails Girls Gathering Japan 2022競技プログラミングとは?今回はアルゴリズム分野の技能を競うタイプについて扱います
#rggjpRails Girls Gathering Japan 2022プログラミングの技術で勝負する競技の一種通称「競プロ」プログラムを書いて答える問題が出題される 解答となるプログラムを書いて提出する→主催者の用意したシステムで採点される時間内に一番多く、早く解いた人の勝ち5min 5min 10min5min 10min 10min5min 5min
#rggjpRails Girls Gathering Japan 2022例題[AtCoder Beginner Contest 186 A - Brickより抜粋]トラックが1台あります。このトラックには合計でNキログラム以下の荷物を載せることができます。このトラックに、1個Wキログラムのレンガを最大でいくつ載せることができますか?制約● 1 ≤ N,W ≤ 1000● N,W は整数である。
#rggjpRails Girls Gathering Japan 2022こんな感じで実行されるイメージ$ ruby brick.rb1000 20 # NとWの入力50 # 答えの出力
#rggjpRails Girls Gathering Japan 2022解答例n, w = gets.chomp.split.map(&:to_i)puts n / w
#rggjpRails Girls Gathering Japan 2022でも、難しいんじゃない?
#rggjpRails 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対応
#rggjpRails Girls Gathering Japan 2022競技プログラミング問題のいいところ● やることがはっきりしている● 問題がたくさん用意されている● 問題の難易度も色々揃っている● 解けたらサイトに提出すれば正しそうかどうかジャッジしてくれる● 自力で解けなかったら解説もある● どうしても分からなかったら他の人の正解コードを読んで勉強できる● いろんなプログラミング言語で挑戦できる● 過去問をちょっと解いてみるだけでも楽しい● 慣れてきたら実際にコンテストに参加すればそれはそれで楽しい
#rggjpRails Girls Gathering Japan 2022実際どんな問題があるのか(AtCoder Beginner Contestの例)
#rggjpRails Girls Gathering Japan 2022初級編「プログラミングの勉強頑張る!」● A: Hello, World+α、という感じの実装○ これをスムーズに解けるようになるのが第一歩○ たまに+αの部分が妙に癖のある問題があるので、難しく感じてもあまり気にせず● B: ループを含んだ実装○ 問題文の指示の通りにコードを書けば解けるように出来ている○ ここまではアルゴリズムの知識がなくても練習次第で書けるようになる○ Webサービス開発の通常業務で発生する「ちょっとややこしめの実装」が概ねこのあたり(個人調べ)○ Rubyで解くと書き味の良さがよく活きる
#rggjpRails Girls Gathering Japan 2022中級編「アルゴリズムを学びたい!」● C: 基本的なアルゴリズム知識とそれを使いこなすスキルが求められる問題○ 基本情報や応用情報が射程に入ってくるのであればいい勉強になると思います● D: もう少し突っ込んだアルゴリズム知識が必要になる○ ここまで安定して解けるようになったら一般的な(アルゴリズムを専門領域としない)ソフトウェアエンジニアとしては十分だと思う○ いま私が目指しているのはこのあたり● E: 競技プログラミングで使うアルゴリズムをだいたい理解し、基本的な使いこなしが出来ている必要がある(らしい)○ この辺くらいで一般的なソフトウェアエンジニアとしてはアルゴリズムスキルのカンストとのこと○ 正直ここからは自力で解けたことがないので各種資料を読んだ理解に基づく説明になります
#rggjpRails Girls Gathering Japan 2022上級編「アルゴリズム王に、私はなる!!」● F, G: たぶん、普通の企業であれば出来上がってるサービスを使うような領域○ 逆にそれを作る側の企業でのアルゴリズム開発に興味があるのなら、大変だと思いますがここまで頑張ってみるのもあり● Ex: 世界大会とか目指すような人が解く問題なので、とりあえず気にしなくていいです○ ここまで来ると正直”Beginner”とは…?と思うのですが、当初はD問題までだったところから増えての現在なので、相応に経緯があるようです
#rggjpRails Girls Gathering Japan 2022実際やってみてどうなった?
#rggjpRails Girls Gathering Japan 2022個人の感想ですRubyのコードがさくさく書けるようになりました!(個人比)
#rggjpRails Girls Gathering Japan 2022もうちょっと真面目に成長具合を説明すると……「A~C問題は概ね解き方が分かる」「他の言語の経験はあるがRubyは初心者で、簡単な処理を書くのもるりま頼り」という状態から3ヶ月ほど集中的にやってみた● 実際、Rubyのコードはだいぶスムーズに書けるようになったと思う○ 単純に反復練習になっているので、競技プログラミングで頻出の範囲であれば基本的な文法がスッと出てこなくてアワアワすることはなくなった● 「何とかコンテスト中に3問解けた…」から「4問解けた!」にたどり着けるようになってきた○ 1問目~3問目の所要時間短縮+4問目の解答に必要なアルゴリズム知識の習得○ 典型問題集があるので、まずはそれをコツコツ解いていくのが良さそう
#rggjpRails Girls Gathering Japan 2022最近の悩み一人で黙々とやってるのちょっと寂しい……
#rggjpRails Girls Gathering Japan 2022最近の悩み競プロ友達が欲しい!
#rggjpRails Girls Gathering Japan 2022楽しいけど、難しいと思うことがないわけでもない● 問題文が数学の問題みたいに見えて、慣れるまでちょっと難しいと思うかもしれない○ 実際、C問題以降は整数の性質・集合・組み合わせあたりの数学知識は必要になってくる● ある程度反復練習が必要○ なんの予行練習もなくいきなりコンテストに出ると実際大変○ C問題以上を解こうと思ったらアルゴリズムやデータ構造の勉強が必要になってくる○ 最初にイメージした通りの結果が出るまでにある程度時間が掛かるので、割り切りポイントが分からないと心が折れやすくはある● 初心者から世界大会レベルの人まで一緒くたになってやっているので、上を見るとキリがない○ さっきの8問を30分で解くような人たちと比べてしまうと大体の人は病みます
#rggjpRails Girls Gathering Japan 2022もちろんプログラマーの中でも向き不向きのある分野で、気楽に気長にやっていくのがコツそれはまさに沼のような深みですので
#rggjpRails Girls Gathering Japan 2022なので、一緒にやりませんか?Rails Girls 競プロ部とかどうでしょう?
#rggjpRails Girls Gathering Japan 2022宣伝: 競プロの問題を体験できるイベント、来週開催!https://sendairb.connpass.com/event/267039/
#rggjpRails Girls Gathering Japan 2022私と競プロ友達になってください!