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
chibaswift_canacel.pdf
Search
canacel
December 06, 2024
8
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
chibaswift_canacel.pdf
canacel
December 06, 2024
More Decks by canacel
See All by canacel
Liquid Glass最前線
canacel3
0
51
Featured
See All Featured
Design in an AI World
tapps
1
350
Amusing Abliteration
ianozsvald
1
350
The Pragmatic Product Professional
lauravandoore
37
7.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
A designer walks into a library…
pauljervisheath
211
25k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
How to Talk to Developers About Accessibility
jct
2
580
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
How STYLIGHT went responsive
nonsquared
100
6.3k
Balancing Empowerment & Direction
lara
6
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Transcript
Swiftで1ヶ月 競プロをやってみたら 意外とよかった話 2024/12/6 西田 楓 (canacel)
自己紹介 • かなせる (canacel) (西田 楓) • フラー株式会社でiOSアプリを作っています • 趣味①: チェンバロ
• 趣味②: ゲーム • ブレワイのマップ達成率100%達成しました!
アジェンダ 1. なぜ競プロを始めたのか 2. Swiftで競プロは可能? 3. 実際に競プロやってみた 4. 競プロを通して得られたもの・失ったもの 5.
おわりに
1. なぜ競プロを始めたのか
突然ですが 競プロやったことあるよ〜って方、 いますか?🖐
Swiftで競プロやったことあるよ〜 って方は・・・?🖐
そもそも競プロとは • 「競技プログラミング」の略 • 与えられた問題のプログラムを作成し、解くまでにかかった時間や 正答数・過程を競う
None
None
なぜ競プロを始めたのか • 新しい視点を得るため • 「プログラミングは手段」だと思っていた • エンジニアとしてさらに成長するにはどうすればいいか… • プログラミングを手段としてではなく目的として捉えることで これまでとは違う景色が見れるのでは…?
• 逆張り人間なので他の人がやってないことをやりたかった • Swiftでの競プロ参加はマイノリティなイメージ
自己紹介② (前提共有) • 競プロはこれまで名前だけは知っていたが、 やったことはない • 情報系の学科にいたがアルゴリズムとデータ構造 の授業を受けた覚えがない* • なので独学していた記憶があるが、遠い昔なので
ほぼ忘れてしまった • コーディング速度はそこまで自信がない *高専では電気・電子工学、大学では図書館情報学を専攻していました
2. Swiftで競プロは可能?
A. 可能!
AtCoder は Swift に対応している • Swift 5.8.1 (Xcode 14.3.1) •
Swift-Algorithms, Swift-Collections 使用可能
便利なツールもある • Apple公式ライブラリ • apple/swift-algorithms : SequenceとCollectionのアルゴリズム • apple/swift-collections :
データ構造の実装用 • 非公式 • koher/swift-atcoder-support : 便利コピペ集 • ShotaKashihara/atcoder-cli-swift : コンテスト用CLIツール
3. 実際に競プロやってみた
ABCに参加してみた • AtCoder Beginner Contest(通称ABC) • AtCoderが毎週定期的に開催している競プロ初心者向けコンテスト • 参加したのは以下の日程 •
ABC 379 (11/9 (土) 21:00~22:40) • ABC 381 (11/22 (金) 21:00~22:40) • ABC 382 (11/30 (土) 21:00~22:40)
簡単 難しい https://atcoder.jp/contests/abc382/tasks
None
コンテストに参加してみて思ったこと ① C問題以降が難しい ② 仕事のコードと競プロのコードは全然違う ③ 計算量を意識する必要がある ④ Swiftの参加者が…少ない…!
① C問題以降が難しい • ABC の場合、アルゴリズムの知識無しでいけるのはA, B問題まで で、C問題以降を安定して解くには対策が必要 • 計算量を考慮し、適切な探索の手法に辿り着くのが鍵 •
常設問題 (時間制限のないコンテスト) を解いたり、解説動画を見 たり、本を読んだりして勉強する必要あり📖
• 競プロ: 時間とメモリの制限がシビア・正解すればOK • 仕事: 可読性・保守性・拡張性が求められる ② 競プロのコードと仕事のコードは全然違う if N
% 2 == 0 { print("No") } else if N == 1 && S == "/" { print("Yes") } else { let s = S.split(separator: "/").map { String($0) } if s.count != 2 { print("No") } else if s[0].contains("2") { print("No") } else if s[1].contains("1") { print("No") } else if s[0].count == s[1].count { print("Yes") } else { print("No") } } ABC 381 B問題の解答例
③ 計算量を意識する必要がある • 以下のコードの計算量は O (NM) • 例えば N や
M が 2x10^5 の場合、O (NM) = 400億 • 家庭用 PC の計算速度は毎秒 10 億回程度*であり、このコードは 明らかに時間がかかりすぎている for n in N { for m in M { // NM͕େ͖͍ͱͱ͕͔͔ͯ࣌ؒΔΑ } } * 米田 優峻. 競技プログラミングの鉄則 ~アルゴリズム力と思考力を高める77の技術~. 2022. p24.
④ Swiftの参加者が…少ない…! 毎回10人もいない😂
4. 競プロを通して 得られたもの・失ったもの
競プロを通して得られたもの • 楽しさ • 仕事じゃないプログラミングは楽しい!✨ • 計算量を気にする心 • enumerated() は
O(1)! • Swiftの言語仕様を気にする心 • zip() や enumerated() の中身はどうなってるんだろう?と調べたり… • Swiftへの興味・関心の向上につながっていると思う
競プロを通して失ったもの • 毎週土曜日の夜にパートナーとお酒を飲んでゆっくりする時間 • ABCは毎週土曜日の夜にある。。 • パートナーもABCに参加してもらうことで解決 • 知人・友人と一緒にやると感想戦ができて楽しい!
5. おわりに
まとめ • Swiftでも競プロできる! • Swiftで競プロをやるための便利なツールやライブラリが色々ある! • ある程度のアルゴリズムの知識が必要 • 競プロをやることで、言語仕様や高階関数の計算量を知るきっかけ ができた
• プログラミングを手段としてではなく、目的にするのもありだなと 思った
今後の展望 • せめて茶色にはなりたい…! • 明日の夜21時からABCがあります! みんなも競プロやってみよう! https://atcoder.jp/contests/abc383