SlideShare a Scribd company logo
1 of 15
Download to read 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!
ご静聴ありがとうございました

More Related Content

What's hot

目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略K Moneto
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜Jun Okumura
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!TransformerArithmer Inc.
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)Toru Tamaki
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
Word2vecの理論背景
Word2vecの理論背景Word2vecの理論背景
Word2vecの理論背景Masato Nakai
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
 

What's hot (20)

目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
深層強化学習と実装例
深層強化学習と実装例深層強化学習と実装例
深層強化学習と実装例
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Word2vecの理論背景
Word2vecの理論背景Word2vecの理論背景
Word2vecの理論背景
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 

Similar to 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
 

Similar to 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ヶ月)