SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
Nimで競技プログラミングを始
めた話(1ヶ月)
tattaka(@tattaka_sun)
Agenda
1. 自己紹介
2. 競技プログラミングについて
3. Nimってどんな言語?
4. 環境のセットアップ
5. 他言語との比較・ベンチマーク
6. 競技プログラミングで使うときのTips
自己紹介
呼び名:tattaka
Twitter:@tattaka_sun
所属:R大学Nコース
サークル:RCC・RRST(どちらも引退)
興味:画像認識・ロボット・機械学習・マイコン(STM32)
競技プログラミングについて
競技プログラミングとは
● プログラミングの問題を限られた時間内に解くゲーム(のようなもの)
● 簡単なものでは標準入出力を使うだけのものからしっかりアルゴリズムを
知らないと解けないようなものまで
● オンラインサイトは色々あるがAtCoderが規模や使える言語の多さからお
すすめ
Nimってどんな言語?
Nimの特徴
● 静的型付け言語(とある程度の型推論)
● GCあり
● 文法はPythonっぽい(主観)
● ライブラリもそこそこ充実している
● コンパイルしたらCのコードに変換される
(生成されたCのコードをgccで解釈し
実行ファイルを生成)
環境のセットアップ
Nim v0.13.0の環境構築
● 現在の最新バージョンは0.19.0、AtCoder内のバージョンは0.13.0
● 辛い
● v0.13.0の環境構築する際はDockerが楽
(DockerHub -> https://hub.docker.com/r/nimlang/nim/)
● あんまり後方互換性が考えられてない
他言語との比較・ベンチマーク
Nim(v.0.13.0) vs C++(g++ 7.3.0) vs Python(2.7.15)
先ほどのFizzBuzzを100000回回した時の(コンパイル+実行)時間を測ってみ
る
Nim: real 1.073s, user 0.690s, sys 0.110s
C++(最適化なし): real 1.281s, user 0.340s, sys 0.370s
C++(-o3): real 0.880s, user 0.330s, sys 0.250s
Python: real 3.563s, user 1.520s, sys 1.930s
競技プログラミングで使うときのtips
標準入出力
● s = readLine(stdin) #文字列を受け取る
● a = parseInt(readLine(stdin)) # int型の整数を1つ受け取る
● bc = readLine(stdin).split().map(parseInt) #複数文字の整数を配列で
● seq = @[] # 配列を扱うときは空配列を定義してあげないとCE
for i in 0..n: seq.add(parseInt(readLine(stdin))) # 複数行読み込み
多重配列に対するスライス
● multiSeq = @[@[0, 0, 0], @[1, 1, 1], @[2, 2, 2], @[3, 3, 3]]
● multiSeq[0][0..1] # -> @[0, 0]:まあわかる
● multiSeq[0..1][0] # -> @[0, 0, 0] :??
● multiSeq[0..1][0..1] # -> @[@[0, 0, 0], @[1, 1, 1]]:???
● map(multiSeq[0..1], proc(x: seq[int]): seq[int] = x[0..1]) -> OK!
ご静聴ありがとうございました

Mais conteúdo relacionado

Mais procurados

[DL輪読会]“Highly accurate protein structure prediction with AlphaFold”
[DL輪読会]“Highly accurate protein structure prediction with AlphaFold”[DL輪読会]“Highly accurate protein structure prediction with AlphaFold”
[DL輪読会]“Highly accurate protein structure prediction with AlphaFold”Deep Learning JP
 
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介Ryohei Ueda
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2Preferred Networks
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイするTakayuki Itoh
 
査読コメントに回答する時の、3つの黄金律
査読コメントに回答する時の、3つの黄金律査読コメントに回答する時の、3つの黄金律
査読コメントに回答する時の、3つの黄金律英文校正エディテージ
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門ryosuke-kojima
 
優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案Masanori Kado
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカットTsubasa Hirakawa
 
Prophet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツールProphet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツールhoxo_m
 
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tipscvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tipscvpaper. challenge
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Naoaki Okazaki
 
研究法(Claimとは)
研究法(Claimとは)研究法(Claimとは)
研究法(Claimとは)Jun Rekimoto
 
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language ModelsDeep Learning JP
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?hoxo_m
 
SLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAMSLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAMIwami Kazuya
 
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題joisino
 

Mais procurados (20)

[DL輪読会]“Highly accurate protein structure prediction with AlphaFold”
[DL輪読会]“Highly accurate protein structure prediction with AlphaFold”[DL輪読会]“Highly accurate protein structure prediction with AlphaFold”
[DL輪読会]“Highly accurate protein structure prediction with AlphaFold”
 
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイする
 
査読コメントに回答する時の、3つの黄金律
査読コメントに回答する時の、3つの黄金律査読コメントに回答する時の、3つの黄金律
査読コメントに回答する時の、3つの黄金律
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカット
 
Prophet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツールProphet入門【Python編】Facebookの時系列予測ツール
Prophet入門【Python編】Facebookの時系列予測ツール
 
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tipscvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tips
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
 
研究法(Claimとは)
研究法(Claimとは)研究法(Claimとは)
研究法(Claimとは)
 
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?
 
機械学習と主成分分析
機械学習と主成分分析機械学習と主成分分析
機械学習と主成分分析
 
lsh
lshlsh
lsh
 
SLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAMSLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAM
 
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題
 

Semelhante a Nimで競技プログラミングを始めた話(1ヶ月)

競技プログラミングのススメ
競技プログラミングのススメ競技プログラミングのススメ
競技プログラミングのススメTakahiro Yano
 
ゲームマップのためのグラフAPIの設計
ゲームマップのためのグラフAPIの設計ゲームマップのためのグラフAPIの設計
ゲームマップのためのグラフAPIの設計隆行 神戸
 
KOMANKO and PAOPAL
KOMANKO and PAOPALKOMANKO and PAOPAL
KOMANKO and PAOPALssuser2d7627
 
はじめてのプログラミング教室(Scratch)
はじめてのプログラミング教室(Scratch)はじめてのプログラミング教室(Scratch)
はじめてのプログラミング教室(Scratch)Akinori Shibuya
 
mruby×ETロボコン = ?
mruby×ETロボコン = ?mruby×ETロボコン = ?
mruby×ETロボコン = ?ssuserc1bb39
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方Kimikazu Kato
 
プログラミングのことはじめ 互助会 20160507 バージョン
プログラミングのことはじめ 互助会 20160507 バージョンプログラミングのことはじめ 互助会 20160507 バージョン
プログラミングのことはじめ 互助会 20160507 バージョンManabu Murakami
 
初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptxAkifumi Niida
 
ChatGPT触ってみた
ChatGPT触ってみたChatGPT触ってみた
ChatGPT触ってみたinfinite_loop
 
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)Kentaro Suzuki
 
機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPythonKimikazu Kato
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話y-uti
 
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfRyo Higashigawa
 
カードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタカードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタShougo
 
テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~
テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~
テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~Manabu Murakami
 
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」Takashi Uemura
 

Semelhante a Nimで競技プログラミングを始めた話(1ヶ月) (20)

競技プログラミングのススメ
競技プログラミングのススメ競技プログラミングのススメ
競技プログラミングのススメ
 
ゲームマップのためのグラフAPIの設計
ゲームマップのためのグラフAPIの設計ゲームマップのためのグラフAPIの設計
ゲームマップのためのグラフAPIの設計
 
KOMANKO and PAOPAL
KOMANKO and PAOPALKOMANKO and PAOPAL
KOMANKO and PAOPAL
 
はじめてのプログラミング教室(Scratch)
はじめてのプログラミング教室(Scratch)はじめてのプログラミング教室(Scratch)
はじめてのプログラミング教室(Scratch)
 
mruby×ETロボコン = ?
mruby×ETロボコン = ?mruby×ETロボコン = ?
mruby×ETロボコン = ?
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方
 
Why python
Why pythonWhy python
Why python
 
プログラミングのことはじめ 互助会 20160507 バージョン
プログラミングのことはじめ 互助会 20160507 バージョンプログラミングのことはじめ 互助会 20160507 バージョン
プログラミングのことはじめ 互助会 20160507 バージョン
 
Why python
Why pythonWhy python
Why python
 
初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx
 
ChatGPT触ってみた
ChatGPT触ってみたChatGPT触ってみた
ChatGPT触ってみた
 
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
「Movable Typeの可能性を広げるアドオン「DynamicMTML」について」 v2 (MTDDC Meetup HOKKAIDO 2013版)
 
機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話
 
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
 
カードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタカードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタ
 
テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~
テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~
テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~
 
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 

Nimで競技プログラミングを始めた話(1ヶ月)