Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
競技プログラミングへのお誘い~私と競プロ友達になってください / Invitation to ...
Search
thatblue
December 03, 2022
Technology
1
590
競技プログラミングへのお誘い~私と競プロ友達になってください / Invitation to Competition Programming
Rails Girls Gathering Japan 2022のLT資料です。
https://gathering.railsgirls.jp/
thatblue
December 03, 2022
Tweet
Share
More Decks by thatblue
See All by thatblue
GitHub Pagesで構築したブログをスマホ対応させてみた / make mobile-compatible with lightweight css framework
thatblue
0
72
Sendai.rbコミュニティ紹介 2022 / Introduction of Sendai.rb 2022
thatblue
0
27
Rails Girls Sendaiコミュニティ紹介2022 / Introduction of Rails Girls Sendai 2022
thatblue
0
54
好みのコーヒー探し / find my favorite coffee
thatblue
0
270
Rails Girls Sendai 2ndの後日談としてのSendai.rb / Sendai.rb, As a After Story of Rails Girls Sendai 2nd
thatblue
0
39
Sendai.rbコミュニティ紹介2020 / Introduction of Sendai.rb 2020
thatblue
0
20
Rails Girls Sendaiコミュニティ紹介2020 / Introduction of Rails Girls Sendai 2020
thatblue
0
24
ようやくDDDに手を出したので感想でも / I've getting started to DDD
thatblue
1
330
数えるのが大変だったのでWebスクレイピングで頑張ってみた話 / How many countries held Rails Girls workshops? - count up with web scraping and Web API
thatblue
0
23
Other Decks in Technology
See All in Technology
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
890
DynamoDB でスロットリングが発生したとき_大盛りver/when_throttling_occurs_in_dynamodb_long
emiki
1
430
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
6
660
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
420
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
170
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
強いチームと開発生産性
onk
PRO
35
11k
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
130
Terraform Stacks入門 #HashiTalks
msato
0
360
TypeScript、上達の瞬間
sadnessojisan
46
13k
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
330
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
The Invisible Side of Design
smashingmag
298
50k
Building Your Own Lightsaber
phodgson
103
6.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Thoughts on Productivity
jonyablonski
67
4.3k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Agile that works and the tools we love
rasmusluckow
327
21k
The Pragmatic Product Professional
lauravandoore
31
6.3k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Transcript
#rggjp Rails Girls Gathering Japan 2022 競技プログラミングへの お誘い 私と競プロ友達になってください あのぶる
(@thatblue_plus)
#rggjp Rails Girls Gathering Japan 2022 自己紹介 • だいたい仙台出身、ほぼ仙台(Matz島の手前くらい)在住のソフトウェアエンジニア ◦
学生時代を過ごした会津若Matzは第二の故郷 ◦ スマホゲームのバックエンドを作るのがメインのお仕事(のはず) • Rails Girls関係のロール ◦ Sendai 1st, 2ndのオーガナイザー ◦ Sendai, More!の運営 ◦ Rails Girls Japan メンバー (2022/03~) New! • Sendai.rbの代表スタッフもしています
#rggjp Rails Girls Gathering Japan 2022 こんな悩みはありませんか プログラミングに慣れるために もっとたくさんコードを書きたいけど、 いい課題が見つからない…
#rggjp Rails Girls Gathering Japan 2022 それ、競技プログラミングで 解決できるかもしれません
#rggjp Rails Girls Gathering Japan 2022 競技プログラミングとは? 今回はアルゴリズム分野の技能を競うタイプについて扱います
#rggjp Rails Girls Gathering Japan 2022 プログラミングの技術で勝負する競技の一種 通称「競プロ」 プログラムを書いて答える問題が出題される 解答となるプログラムを書いて提出する
→主催者の用意したシステムで採点される 時間内に一番多く、早く解いた人の勝ち 5min 5min 10min 5min 10min 10min 5min 5min
#rggjp Rails Girls Gathering Japan 2022 例題 [AtCoder Beginner Contest
186 A - Brickより抜粋] トラックが1台あります。このトラックには合計でNキログラム以下の荷物を載せ ることができます。 このトラックに、1個Wキログラムのレンガを最大でいくつ載せることができま すか? 制約 • 1 ≤ N,W ≤ 1000 • N,W は整数である。
#rggjp Rails Girls Gathering Japan 2022 こんな感じで実行されるイメージ $ ruby brick.rb
1000 20 # NとWの入力 50 # 答えの出力
#rggjp Rails Girls Gathering Japan 2022 解答例 n, w =
gets.chomp.split.map(&:to_i) puts n / w
#rggjp Rails Girls Gathering Japan 2022 でも、難しいんじゃない?
#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対応
#rggjp Rails Girls Gathering Japan 2022 競技プログラミング問題のいいところ • やることがはっきりしている •
問題がたくさん用意されている • 問題の難易度も色々揃っている • 解けたらサイトに提出すれば正しそうかどうかジャッジしてくれる • 自力で解けなかったら解説もある • どうしても分からなかったら他の人の正解コードを読んで勉強できる • いろんなプログラミング言語で挑戦できる • 過去問をちょっと解いてみるだけでも楽しい • 慣れてきたら実際にコンテストに参加すればそれはそれで楽しい
#rggjp Rails Girls Gathering Japan 2022 実際どんな問題があるのか (AtCoder Beginner Contestの例)
#rggjp Rails Girls Gathering Japan 2022 初級編「プログラミングの勉強頑張る!」 • A: Hello,
World+α、という感じの実装 ◦ これをスムーズに解けるようになるのが第一歩 ◦ たまに+αの部分が妙に癖のある問題があるので、難しく感じてもあまり気にせず • B: ループを含んだ実装 ◦ 問題文の指示の通りにコードを書けば解けるように出来ている ◦ ここまではアルゴリズムの知識がなくても練習次第で書けるようになる ◦ Webサービス開発の通常業務で発生する「ちょっとややこしめの実装」が概ねこのあたり (個人調べ) ◦ Rubyで解くと書き味の良さがよく活きる
#rggjp Rails Girls Gathering Japan 2022 中級編「アルゴリズムを学びたい!」 • C: 基本的なアルゴリズム知識とそれを使いこなすスキルが求められる問題
◦ 基本情報や応用情報が射程に入ってくるのであればいい勉強になると思います • D: もう少し突っ込んだアルゴリズム知識が必要になる ◦ ここまで安定して解けるようになったら一般的な(アルゴリズムを専門領域としない)ソフトウェアエン ジニアとしては十分だと思う ◦ いま私が目指しているのはこのあたり • E: 競技プログラミングで使うアルゴリズムをだいたい理解し、基本的な使い こなしが出来ている必要がある(らしい) ◦ この辺くらいで一般的なソフトウェアエンジニアとしてはアルゴリズムスキルのカンストと のこと ◦ 正直ここからは自力で解けたことがないので各種資料を読んだ理解に基づく説明になります
#rggjp Rails Girls Gathering Japan 2022 上級編「アルゴリズム王に、私はなる!!」 • F, G:
たぶん、普通の企業であれば出来上がってるサービスを使うような領域 ◦ 逆にそれを作る側の企業でのアルゴリズム開発に興味があるのなら、大変だと思いますが ここまで頑張ってみるのもあり • Ex: 世界大会とか目指すような人が解く問題なので、とりあえず気にしなく ていいです ◦ ここまで来ると正直”Beginner”とは…?と思うのですが、当初はD問題までだったところから 増えての現在なので、相応に経緯があるようです
#rggjp Rails Girls Gathering Japan 2022 実際やってみてどうなった?
#rggjp Rails Girls Gathering Japan 2022 個人の感想です Rubyのコードがさくさく 書けるようになりました! (個人比)
#rggjp Rails Girls Gathering Japan 2022 もうちょっと真面目に成長具合を説明すると…… 「A~C問題は概ね解き方が分かる」 「他の言語の経験はあるがRubyは初心者で、簡単な処理を書くのもるりま頼り」 という状態から3ヶ月ほど集中的にやってみた
• 実際、Rubyのコードはだいぶスムーズに書けるようになったと思う ◦ 単純に反復練習になっているので、競技プログラミングで頻出の範囲であれば基本的な文法 がスッと出てこなくてアワアワすることはなくなった • 「何とかコンテスト中に3問解けた…」から「4問解けた!」にたどり着ける ようになってきた ◦ 1問目~3問目の所要時間短縮+4問目の解答に必要なアルゴリズム知識の習得 ◦ 典型問題集があるので、まずはそれをコツコツ解いていくのが良さそう
#rggjp Rails Girls Gathering Japan 2022 最近の悩み 一人で黙々とやってるの ちょっと寂しい……
#rggjp Rails Girls Gathering Japan 2022 最近の悩み 競プロ友達が欲しい!
#rggjp Rails Girls Gathering Japan 2022 楽しいけど、難しいと思うことがないわけでもない • 問題文が数学の問題みたいに見えて、慣れるまでちょっと難しいと思うかも しれない
◦ 実際、C問題以降は整数の性質・集合・組み合わせあたりの数学知識は必要になってくる • ある程度反復練習が必要 ◦ なんの予行練習もなくいきなりコンテストに出ると実際大変 ◦ C問題以上を解こうと思ったらアルゴリズムやデータ構造の勉強が必要になってくる ◦ 最初にイメージした通りの結果が出るまでにある程度時間が掛かるので、割り切りポイント が分からないと心が折れやすくはある • 初心者から世界大会レベルの人まで一緒くたになってやっているので、上を 見るとキリがない ◦ さっきの8問を30分で解くような人たちと比べてしまうと大体の人は病みます
#rggjp Rails Girls Gathering Japan 2022 もちろんプログラマーの中でも 向き不向きのある分野で、 気楽に気長にやっていくのがコツ それはまさに沼のような深みですので
#rggjp Rails Girls Gathering Japan 2022 なので、一緒にやりませんか? Rails Girls 競プロ部とか
どうでしょう?
#rggjp Rails Girls Gathering Japan 2022 宣伝: 競プロの問題を体験できるイベント、来週開催! https://sendairb.connpass.com/event/267039/
#rggjp Rails Girls Gathering Japan 2022 私と競プロ友達になってください!