Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

Kansai Engineer Students’ Meetup #1 で発表したスライドです。
内容は題名の通り。

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

  • Gehören Sie zu den Ersten, denen das gefällt!

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

  1. 1. Nimで競技プログラミングを始 めた話(1ヶ月) tattaka(@tattaka_sun)
  2. 2. Agenda 1. 自己紹介 2. 競技プログラミングについて 3. Nimってどんな言語? 4. 環境のセットアップ 5. 他言語との比較・ベンチマーク 6. 競技プログラミングで使うときのTips
  3. 3. 自己紹介 呼び名:tattaka Twitter:@tattaka_sun 所属:R大学Nコース サークル:RCC・RRST(どちらも引退) 興味:画像認識・ロボット・機械学習・マイコン(STM32)
  4. 4. 競技プログラミングについて
  5. 5. 競技プログラミングとは ● プログラミングの問題を限られた時間内に解くゲーム(のようなもの) ● 簡単なものでは標準入出力を使うだけのものからしっかりアルゴリズムを 知らないと解けないようなものまで ● オンラインサイトは色々あるがAtCoderが規模や使える言語の多さからお すすめ
  6. 6. Nimってどんな言語?
  7. 7. Nimの特徴 ● 静的型付け言語(とある程度の型推論) ● GCあり ● 文法はPythonっぽい(主観) ● ライブラリもそこそこ充実している ● コンパイルしたらCのコードに変換される (生成されたCのコードをgccで解釈し 実行ファイルを生成)
  8. 8. 環境のセットアップ
  9. 9. Nim v0.13.0の環境構築 ● 現在の最新バージョンは0.19.0、AtCoder内のバージョンは0.13.0 ● 辛い ● v0.13.0の環境構築する際はDockerが楽 (DockerHub -> https://hub.docker.com/r/nimlang/nim/) ● あんまり後方互換性が考えられてない
  10. 10. 他言語との比較・ベンチマーク
  11. 11. 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
  12. 12. 競技プログラミングで使うときのtips
  13. 13. 標準入出力 ● 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))) # 複数行読み込み
  14. 14. 多重配列に対するスライス ● 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!
  15. 15. ご静聴ありがとうございました

×