Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Rubyで始める!!競技プログラミング/ Kokura.rb #1
Search
Aseiide
January 25, 2022
Technology
390
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyで始める!!競技プログラミング/ Kokura.rb #1
Kokura.rb #1で使用したスライド
Aseiide
January 25, 2022
More Decks by Aseiide
See All by Aseiide
Rubyを使ってインタプリタを作ってみた / Learn ruby with ruby
aseiide
0
450
Rubyコミュニティのすゝめ / Kaigi on Rails PreEvent
aseiide
1
930
wakaranの解像度を上げるために / fjord lt vol-9
aseiide
1
1.7k
遅延評価勉強法を使って Railsチュートリアルをやってみた / fukuokarb 200 lt
aseiide
0
250
Other Decks in Technology
See All in Technology
AIエージェント時代、Kaggleにどう取り組むか
takanao
1
190
LLM Content Moderationを支える評価・改善ループの実践
suikabar
2
360
AI時代のGraphQL
joere
3
410
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
3
1.1k
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
300
Adversary Infrastructure Hunting101
disconinja
0
160
How we choose session proposals
kawaguti
PRO
0
170
僕のハーネスを紹介します
watany
6
1.6k
freeeにおける AI を用いた ブラウザ動作確認の自動化の取り組み
freee
PRO
0
220
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
2
150
「作れる」と「リリースできる」の間にあったもの── PdMを外して見えた、PdMがやるべき仕事/Buildable ≠ Shippable: What Removing the PM Taught Me About the PM’s Job
yappli_developers
0
280
AIに任せられるFlutterコードベースを作る 〜仕様をコードで表し、ハーネスで守る〜
myohei
1
120
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
290
Ruling the World: When Life Gets Gamed
codingconduct
0
420
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
530
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
Abbi's Birthday
coloredviolet
4
10k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Designing for Performance
lara
612
70k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
sira's awesome portfolio website redesign presentation
elsirapls
0
470
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Transcript
“Rubyで始める!!” 競技プログラミング kokura.rb #1 {date}. 2022/01/22 @Online &福岡市エンジニアカフェ Kokura.rb
#1 - connpass https://kokurarb.connpass.com/event/229360/ https://github.com/Aseiide/kokurarb/issues/1 https://gist.github.com/alt9800/a7d2588880b28671968524ba1807bab6
エンジニアカフェ エンジニアやエンジニアに関わる人、エンジニアを目指す人をサポートする施設です。 エンジニアカフェ外観(提供:福岡市) イベントの様子 コワーキングスペース Event Co-Working&Meeting Consulting Cafe&Bar
エンジニアカフェで体験できること
エンジニアカフェでは 随時ご相談を受け付けております! 本日のイベントに関するご質問はもちろん エンジニアに関するご相談・ご質問はお気軽にどうぞ! ・勉強の仕方を教えて欲しい ・学生でも参加しやすいコミュニティが知りたい ・子どもにおすすめのプログラミング教材ってある? ・3Dプリンタでこんなの作れる? などなど! スタッフやコミュニティマネージャーがオフライン・オンライン問わず
ご対応致します。
自己紹介 alt9800 (福岡市EngineerCafe利用者) 触って楽しかった技術: Ruby (RoR、GR.rb,Gollum,Kimuraiとかを最近さわった) https://github.com/alt9800
自己紹介 いで(@aseiide) (北九州在住) 勉強していること: Ruby Ruby on Rails 基本情報技術者
https://github.com/Aseiide
トピック JavaScriptで学ぶアルゴリズム③[ソートアルゴリズム⑵] -マージソート|Tasting.com 【アプリリリース予定】| note https://note.com/tasting/n/nb85f082c4ab2 「100日後に退職する47歳」作者が経験したミドル層転職と“年齢の壁”(3/3ページ) - SankeiBiz(サンケイビズ):自分を磨く経済情報サイト
https://www.sankeibiz.jp/article/20211123-KOHSKSSKDJF4PILJ6LHWVB4OYI/3/ クイックソートの計算量を聞かれるなど https://twitter.com/zone_energy_jp/status/1386877764863672320?s=20
計算量の概念のお役立ちどころ - 通信スタック - グラフィックの表示について - https://cgworld.jp/regular/202110-chiyama-38.html
競技プログラミングとは? • アルゴリズムとデータ構造 ->競技プログラミングにはアルゴリズムテストのという側面がある • データ構造について ->開発新卒に捧ぐ、データ構造の基本と特徴
実行速度について 遅いとTLEになる https://twitter.com/scol_kp/status/1325799278984404992?s=20 Ruby
アルゴリズムを学ぶと何が嬉しいのか 情報オリンピックとは | 第20回日本情 報オリンピック https://joi2021.ioi-jp.org/about/
Rateについてのあれこれ AtCoder コンテストについての tips - Qiita https://qiita.com/drken/items/8a6f139158cde8a61dce 【AtCoder】Rubyで競プロに入門する
- Qiita https://qiita.com/yuya_yuzen/items/e2a2c049a79dbe2bbf74
アルゴリズムテストの最初の一歩 標準入出力
Rubyで始めると何が嬉しいのか ❏ 環境構築の容易さ ❏ スクリプト言語ならではの文法の明快さ ❏ 豊富なメソッド(他の言語で言う所の標準の関数) ❏ 型(Class)が動的に与えられる (よしあし)
❏ たのしい ❏ みやすい ❏ かわいい
もっと勉強を進めたい方へ(セッションを組むにあたって参考にした資料/書籍) ❏ Rubyで始める競技プログラミング ❏ けんちょん本 ❏ 基本情報技術者試験の過去問 分野別過去問題
テクノロジ系|基本情報技術者試験.com https://www.fe-siken.com/index_te.html#2_2
事前準備 ❏ Atcoderのアカウントを作る ❏ エディタを用意する (オンラインエディタもあるよ)
その他こんなのもあるよ ❏ Testを書きたい->RSpec、minitestが有用 ❏ 他のコンテストにも出たい! - >Topcoder、Codility(Codesprint、Paiza) ❏ Rubyについて質問したいことがある。。。->Fukuoka.rb、Ruby.jp ❏
検証用にエディタを用意するのがだるい wandbox
知ってると良さそうなこと - 標準入力 gets は実行されるたびに一行ずつ値を読み込む - Enumerable型を利用して複数の変数に値を一度に格納することができる 標準入力で ruby rails
が与えられるとき a,b = gets.chomp.split(' ') で a = ‘ruby’ ,b = ‘rails’ を与えることができる - 複数行にわたって入力がある場合は全てをメモリ上に展開する方法がある。 Ruby 標準入力から値を受け取る方法 - Qiita https://qiita.com/Hayate_0807/items/2e9705091b 181a104621
知ってると良さそうなこと つづき arr = Array.new while line = $stdin.gets
arr << line.chomp.split.map(&:to_i) end みたいな感じでもいいかも 前項の例はcsvのデータを扱うときとか便利かも。 合わせて読みたい Ruby IOクラスについて学ぶ - Qiita https://qiita.com/naotospace/items/bd0a5295e540e27936b3
A - Div [問題文] N 個の互いに区別できないお菓子を、A君とB君で分け合います。 両者とも 1 個以上の 整数個のお菓子を得るような分け方は何通りありますか?
A - Div https://atcoder.jp/contests/abc198/tasks/abc198_a
A - Div の考え方 ・・・ N個 Aさん Bさん 互いに区別ができない ↓
何個ずつ分け合うか 高校 数学A 重複組み合わせの基礎 | あうるさんの杜 https://awl3no.com/suugaku/baainokazu/choufukukumiawase-kiso
A - Div のコード例 n = gets.chomp.to_i if n
< 2 then puts 0 else puts n - 1 end
A - ABC Swap [問題] 3 つの箱 A,B,C があります。それぞれの箱には、整数が
1 つ入っています。 現在、箱 A,B,C に入っている整数はそれぞれ X,Y,Z です。 これらの箱に対して以下の操作を順に行った後の、 それぞれの箱に入っている整数を求めてください。 箱 A と箱 B の中身を入れ替える 箱 A と箱 C の中身を入れ替える A - ABC Swap https://atcoder.jp/contests/abc161/tasks/abc161_a
A - ABC Swap の考え方 A B C 一般にこういう処理をswapと呼びます
Rubyの基本文法を習うときに言語仕様を 教えてもらった人もいるかも。
A - ABC Swap のコード例 input = gets.chomp.split(" ")
x = input[0] y = input[1] z = input[2] x, y = y, x x ,z = z ,x puts "#{x} #{y} #{z}"
B - Bishop [問題] B - Bishop https://atcoder.jp/contests/panasoni
c2020/tasks/panasonic2020_b
B - Bishop の考え方
B - Bishop の考え方 一般化すると... 全体のマスが奇数なら全マス数の半分 + 1 , 偶数なら
全マスの半分 ビショップは動けることがわかるので、 偶 x 偶 = 偶 奇 x 奇 = 奇 偶 x 奇 = 偶 を使って、 入力値 縦 x 横 の積に対して場合わけをすれば良さそう!
B - Bishop の考え方 line = gets.chomp.split().map(&:to_i) # [7,3] int
cross = line[0] * line[1] if line[0] == 1 || line[1] == 1 then ans = 1 # 1があると動けないのでまずい else cross.even? ? ans = cross / 2 : ans = (cross / 2) + 1 end puts ans
B - A to Z String [問題] B
- A to Z String https://atcoder.jp/contests/abc053/tasks/abc053_b
B - A to Z String の考え方 例えば、入力例3 において、
HASFJGHOGAKZZFEGA HASFJGHOGAKZZFEGA HASFJGHOGAKZZFEGA HASFJGHOGAKZZFEGA HASFJGHOGAKZZFEGA とかいっぱいでてくるジャン!!! とか思うとドツボにはまるので、シンプルに一番長いとこを取ってくりゃいいじゃん!って おもうのがコツかも
B - A to Z String のコード例 str = gets.chomp.split("")
a = str.index("A") z = str.rindex("Z") puts z.to_i - a.to_i + 1 # これはだいぶエスパーなことをしている list = [1,4,6,7,3,4,2,5,7,4,6,4,3,6,5,4,3,3,4] みたいな配列があったときに 4 は何回、あるいはどの位置に登場しているのかしりたいときは 以下のような魔術が使える count = list.each_index.select { |num| list[num] == x }
キーワード - ループ (コレクション) - 再帰 - ソート (マージ、フラッシュ、バブル...etc) -
スタック/キュー - グラフ - 決定木 - 全探索(幅優先/深さ優先) - 動的計画法(DP)
実装すると楽しそうなもの - Wordle - ボンバーマン (これは多次元配列に対してのアプローチが火をふきます) - まるばつゲーム (対話式から初めて ->
ランダムな入力を繰り返して問題を解かせ る人工無能を作成する など)