Submit Search
Upload
Rustで楽しむ競技プログラミング
•
2 likes
•
3,058 views
Y
yoshrc
Follow
2019/03/25 Rust LT #3 at Recruit Technologies, Tokyo
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 36
Download now
Download to read offline
Recommended
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
型安全性入門
型安全性入門
Akinori Abe
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
Recommended
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
型安全性入門
型安全性入門
Akinori Abe
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
Kosaku Ono
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
最適輸送の解き方
最適輸送の解き方
joisino
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
AtCoder Inc.
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門
Hironori Sekine
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
Takuya Akiba
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
文字列アルゴリズム
文字列アルゴリズム
HCPC: 北海道大学競技プログラミングサークル
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
Takuya Akiba
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
AtCoder Inc.
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
rustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebook
emakryo
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
Kohei KaiGai
More Related Content
What's hot
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
Kosaku Ono
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
最適輸送の解き方
最適輸送の解き方
joisino
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
AtCoder Inc.
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門
Hironori Sekine
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
Takuya Akiba
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
文字列アルゴリズム
文字列アルゴリズム
HCPC: 北海道大学競技プログラミングサークル
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
Takuya Akiba
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
AtCoder Inc.
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
What's hot
(20)
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
冬のLock free祭り safe
冬のLock free祭り safe
最適輸送の解き方
最適輸送の解き方
ウェーブレット木の世界
ウェーブレット木の世界
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
Rolling hash
Rolling hash
指数時間アルゴリズム入門
指数時間アルゴリズム入門
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
文字列アルゴリズム
文字列アルゴリズム
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Similar to Rustで楽しむ競技プログラミング
rustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebook
emakryo
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
Kohei KaiGai
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境
yuichi_komatsu
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
gree_tech
rust primer
rust primer
You&I
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
Kiwamu Okabe
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)
Kosuke Kida
130710 01
130710 01
openrtm
160705-01 RTミドルウエア講習会・名城大
160705-01 RTミドルウエア講習会・名城大
openrtm
Rust-DPDK
Rust-DPDK
Masaru Oki
Rustでソートを高速化した話(Shinjuku.rs)
Rustでソートを高速化した話(Shinjuku.rs)
MasayukiUrakami1
Jazug6周年lt(片倉義昌)
Jazug6周年lt(片倉義昌)
Yoshimasa Katakura
Rsj2013 hara
Rsj2013 hara
openrtm
PostgreSQL 12の話
PostgreSQL 12の話
Masahiko Sawada
GTC Japan 2017
GTC Japan 2017
Hitoshi Sato
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM,INC
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
seccamp2012 チューター発表
seccamp2012 チューター発表
Hirotaka Kawata
2015RTミドルウエア講習会
2015RTミドルウエア講習会
openrtm
Similar to Rustで楽しむ競技プログラミング
(20)
rustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebook
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
rust primer
rust primer
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)
130710 01
130710 01
160705-01 RTミドルウエア講習会・名城大
160705-01 RTミドルウエア講習会・名城大
Rust-DPDK
Rust-DPDK
Rustでソートを高速化した話(Shinjuku.rs)
Rustでソートを高速化した話(Shinjuku.rs)
Jazug6周年lt(片倉義昌)
Jazug6周年lt(片倉義昌)
Rsj2013 hara
Rsj2013 hara
PostgreSQL 12の話
PostgreSQL 12の話
GTC Japan 2017
GTC Japan 2017
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
SORACOM Technology Camp 2018 アドバンストラック4 | スモールスタートの次の一手は?成長できるIoTシステムの実例と回避した...
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
seccamp2012 チューター発表
seccamp2012 チューター発表
2015RTミドルウエア講習会
2015RTミドルウエア講習会
Recently uploaded
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
mizukami4
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
Kurata Takeshi
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
Toru Miyahara
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
Masatsugu Matsushita
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Toru Miyahara
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
Toru Miyahara
Recently uploaded
(6)
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
Rustで楽しむ競技プログラミング
1.
Rustで楽しむ 競技プログラミング (株)スリーダム 吉元佑介 (@yoshrc_public)
2.
[自己紹介] name = "Yusuke
Yoshimoto" age = 27 job-title = "Full-stack Engineer" preferred-languages = ["Rust", "Python"] atcoder.rate = 1168 contact.twitter = "@yoshrc_public"
3.
Rustは競プロで使えるか - C++でよくね? - Python楽でいいよ
4.
Rustは競プロで使えるか 競プロこそRust - C++でよくね? - Python楽でいいよ
5.
Rustのここが強い - C++のごとき実行速度 - 正義 -
Scalaのごとき高度な抽象化能力 - 「競プロコピペ」を自作しやすい
6.
Rustでつくる「競プロコピペ」 - 入力読み込み - 最新のRustの機能をAtCoderで使う -
便利メソッドを生やす - データ構造 謹製コピペコード https://yoshrc.github.io/rust-atcoder-snippets/atcoder_snippets/index.html
7.
Rustでつくる「競プロコピペ」 - 入力読み込み - 最新のRustの機能をAtCoderで使う -
便利メソッドを生やす - データ構造 謹製コピペコード https://yoshrc.github.io/rust-atcoder-snippets/atcoder_snippets/index.html
8.
やりたいこと スライスから、すべての順列を生成する let mut perms
= [1, 2, 3].permutations().collect(); // permsは、以下のものを生成するイテレータ // [1, 2, 3], [1, 3, 2], // [2, 1, 3], [2, 3, 1], // [3, 1, 2], [3, 2, 1]
9.
実装 pub trait SliceExt<T>
{ fn permutations(&self) -> Permutations<T>; }
10.
実装 pub trait SliceExt<T>
{ fn permutations(&self) -> Permutations<T>; } impl<T> SliceExt<T> for [T] { fn permutations(&self) -> Permutations<T> { … } }
11.
最後に - C++でなくても、競プロは楽しめる - Rustを使えば、汎用的なプログラミング技術が向上する -
メモリ安全 - ライブラリ作成 - 関数型プログラミング
12.
Rustで競プロ、やろうよ!
13.
没スライド
14.
問題点:コピペがめんどい
15.
問題点:コピペがめんどい cargo-snippetを使う
16.
すばらしきcargo-snippet
17.
すばらしきcargo-snippet
18.
すばらしきcargo-snippet
19.
没スライド1
20.
嵌ったとこ 借用 - Rustで問題を解こうとすると、イテレータを多用する - イテレータメソッドで参照を戻すのがなかなか一発で書 けない
21.
どこが間違ってる? fn count_ge_min(nums: &[u8],
min: u8) -> usize { nums.iter().filter(|n| n >= min).count() }
22.
どこが間違ってる? fn count_ge_min(nums: &[u8],
min: u8) -> usize { nums.iter().filter(|n| n >= min).count() }
23.
コンパイラ様に従ってみる fn count_ge_min(nums: &[u8],
min: u8) -> usize { nums.iter().filter(|n| n >= &&min).count() }
24.
コンパイラ様に従ってみる fn count_ge_min(nums: &[u8],
min: u8) -> usize { nums.iter().filter(|n| n >= &&min).count() } 通る
25.
より素直なコード fn count_ge_min(nums: &[u8],
min: u8) -> usize { nums.iter().filter(|&&n| n >= min).count() }
26.
より素直なコード fn count_ge_min(nums: &[u8],
min: u8) -> usize { nums.iter().filter(|&&n| n >= min).count() }
27.
より素直なコード fn count_ge_min(nums: &[u8],
min: u8) -> usize { nums.iter().filter(|&&n| n >= min).count() }
28.
より素直なコード fn count_ge_min(nums: &[u8],
min: u8) -> usize { nums.iter().filter(|&&n| n >= min).count() }
29.
没スライド2
30.
Rustでつくる「競プロコピペ」 - 入力読み込みマクロ - トレイトで最新のRustの機能をAtCoderで使う -
AtCoderのRustバージョン:1.15.1 超古い - Iterator::step_by, Iterator::flatten, dbgマクロ … - イテレータに便利メソッドを生やす - 全部文字列化して連結 - データ構造を作る - List, Union-Find … 謹製コピペコード
31.
https://atcoder.jp/contests/abc118/tasks/abc118_b
32.
C++だとこんなに大変 https://atcoder.jp/contests/abc118/tasks/abc118_b
33.
素のRustだと地獄 https://atcoder.jp/contests/abc118/tasks/abc118_b
34.
私のスニペットでは read!(n = u8,
m = u8); let k_a = readx::<(u8, Vec<u8_>)>();
35.
私のスニペットでは read!(k = u8,
m = u8); let k_a = readx::<(u8, Vec<u8_>)>();
36.
私のスニペットでは read!(n = u8,
m = u8); let k_a = readx::<(u8, Vec<u8_>)>(); assert_eq!(n, 3); assert_eq!(m, 4); assert_eq!(k_a, vec![ (2, vec![0, 2]), (3, vec![0, 1, 2]), (2, vec![2, 1]) ]);
Download now