SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Pietで競プロをしよう!
2018/03/18 KMC春合宿 base64
目次
突然ですが皆さん、
目次
あの!話題の画期的な
プログラミング言語
目次
Pietを
知ってますよね!?
目次
これがPietだ!!!!
目次
自己紹介
目次
自己紹介
自己紹介
 id: base64
 名前: ひみつ
 身分: 京大工学部計算機科学コース新4回生、39代会計
 活動: ボドゲ、競プロ、(Piet)
 Twitter: @basemusi とか
Pietのおさらい
 ソースコードがドット絵の難解プログラミング言語
 慣れればフローチャートをそのまま描いてる気分に
 雑に描いても抽象画っぽくなる
 最高の言語
バブルソートのプログラム→
目次
プロコンとは
プロコンとは
競技プログラミング、プログラミングコンテストなどと 呼
ばれるプログラミングのコンテスト
プロコンとは
競技プログラミング、プログラミングコンテストなどと 呼
ばれるプログラミングのコンテスト
プロコンとは
競技プログラミング、プログラミングコンテストなどと 呼
ばれるプログラミングのコンテスト
プロコンとは
競技プログラミング、プログラミングコンテストなどと 呼
ばれるプログラミングのコンテスト
ここまで聞いた方なら
もうお分かりですね
画期的なPietで
競プロをやれば
優勝‼
Pietでコンテストに出る準備
なぜか多くのプログラミングコンテストではPietが使えない
Pietから他の言語に変換するツールを用意しよう!
Pietのインタプリタを書いてそこにPietの画像データを
埋め込むとかすると簡単にできる
Pietインタプリタの注意
雑に実装するとPietインタプリタが、Pietのroll命令で
スタック長NのときO(N)時間かかっていた
roll命令は変数の参照にあたる操作にも必要なので頻出
(変数の参照は他の言語でO(1)で可能)
Pietのプログラムの実行が遅すぎて、まともに問題が解けない!
Pietでのスタックの操作
Pietで扱えるメモリはスタック1個だけで、
Pietの全命令はpushとpopとrollの3つ操作で表現できる
(1, 4, 3)
2 push ↓ 末尾に2を追加
(1, 4, 3, 2)
pop ↓ 末尾の要素を削除
(1, 4, 3)
rollとは
(1, 2, 3, 4, 5, 6)
(4, 1)roll ↓ 末尾4要素を1回転
(1, 2, 6, 3, 4, 5)
(2, 1)roll ↓ 末尾2要素を1回転
(1, 2, 6, 3, 5, 4)
(3, 2)roll ↓ 末尾3要素を2回転=(3, 1)roll2回
(1, 2, 6, 5, 4, 3)
この操作を高速に処理したい
平衡二分木
を使うと速い!
高速にrollを処理する
 平衡二分木の不思議な力でrollがO(logN)で可能
平衡二分木を用いると数列のsplitとmergeが数列長Nに対しO(logN)で可能
(1, 2, 3, 4, 5, 6)を(5, 2)rollする場合
(1), (2, 3, 4), (5, 6)にsplit
(1)と(5, 6)をmerge
さらに(2, 3, 4)をmergeして
(1, 5, 6, 2, 3, 4)が得られる
 ただし、それでも他の言語より結構処理が重いので注意
 誰かが「償却O(1)でrollできそう」って言ってたので誰かやってくれ!
Pietで実際に問題を解いてみる
Atcoder Beginner Contest 007 D問題 禁止された数
 A以上B以下の数の中で4または9を含む数はいくつあるか?
 A, Bは整数, 1 <= A, B <= 1e18
 例えばA=3, B=15のときは4, 9, 14の3つで3が答え
 愚直に数えると計算時間が間に合わないので桁dpを用いる
ABC007 D問題 禁止された数
Pietでの正解例↓
ABC007 D問題 禁止された数
プログラムの内容
PietでABCのD問題が解けた!!!
ABCのD問題が解けるとどのくらいすごいか
 Atcoder水色(ソフトウェアエンジニアとしてトップレベル?)
レーティングぐらい
 Paiza Sランク(上位2%?)よりすごい!
したがってPietプログラマもトップレベルのプログラマになれる
かもしれない気がしてくる
コンテストに出よう!!
3月4日のAtcoder Beginner Contest 089にPietで参加した
めざせ全完!!!!
同時開催のAtcoder Regular Contestに参加しなかったのは、
ABCなら失敗してもレーティングが変わらないから
A問題
 整数Nが与えられるのでN/3を出力せよ(意訳)
 1<=N<=1000
これはやるだけ
B問題
 N個の文字が与えられて、その中に“Y”が含まれていた
ら“Four”を出力し、そうでなければ“Three”を出力せよ
(意訳)
 1 <= N <= 100
C問題
 三重ループでいい感じに計算する問題
 文字列入力もある
三重ループしんどいし、文字列の末尾を判定しながら
文字列を読み込むのもしんどい……
D問題
 二次元配列を2重ループで見ながら、その中でループ
を回して累積和の配列をつくっていい感じにする問題
高度なループ処理の実装が重い……
結果
 A, Bの2完で1038位(提出のある参加者は1168人)
大敗北
もうだめ
 そもそもPietで二重ループを実装するのが
しんどい時点で厳しい
 Pietプログラマが他の言語のプログラマを
圧倒するなんて夢物語だった
結論
まともな言語で
競技プログラミングをやろう!!!

Weitere ähnliche Inhalte

Was ist angesagt?

ChatGPT は高階層の意味理解にはほど遠い?
ChatGPT は高階層の意味理解にはほど遠い?ChatGPT は高階層の意味理解にはほど遠い?
ChatGPT は高階層の意味理解にはほど遠い?
Hide Koba
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 
言語資源と付き合う
言語資源と付き合う言語資源と付き合う
言語資源と付き合う
Yuya Unno
 

Was ist angesagt? (20)

プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
「日本語LaTeX」が多すぎる件について
「日本語LaTeX」が多すぎる件について「日本語LaTeX」が多すぎる件について
「日本語LaTeX」が多すぎる件について
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
 
アジャイルな見積りと計画づくり勉強会
アジャイルな見積りと計画づくり勉強会アジャイルな見積りと計画づくり勉強会
アジャイルな見積りと計画づくり勉強会
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
PCL
PCLPCL
PCL
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)
 
ChatGPT は高階層の意味理解にはほど遠い?
ChatGPT は高階層の意味理解にはほど遠い?ChatGPT は高階層の意味理解にはほど遠い?
ChatGPT は高階層の意味理解にはほど遠い?
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Oss貢献超入門
Oss貢献超入門Oss貢献超入門
Oss貢献超入門
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
 
BERT入門
BERT入門BERT入門
BERT入門
 
言語資源と付き合う
言語資源と付き合う言語資源と付き合う
言語資源と付き合う
 
2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方2SAT(充足可能性問題)の解き方
2SAT(充足可能性問題)の解き方
 

Ähnlich wie Pietで競プロしよう

Ähnlich wie Pietで競プロしよう (20)

こわくないPython
こわくないPythonこわくないPython
こわくないPython
 
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
 
プログラミング学習とScratch raspi python
プログラミング学習とScratch raspi pythonプログラミング学習とScratch raspi python
プログラミング学習とScratch raspi python
 
KOMANKO and PAOPAL
KOMANKO and PAOPALKOMANKO and PAOPAL
KOMANKO and PAOPAL
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方
 
[PyConJP2019]Pythonで切り開く新しい農業
[PyConJP2019]Pythonで切り開く新しい農業[PyConJP2019]Pythonで切り開く新しい農業
[PyConJP2019]Pythonで切り開く新しい農業
 
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
 
Why python
Why pythonWhy python
Why python
 
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみるMicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
 
機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython
 
Python for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )Python for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )
 
S16 t1 python学習奮闘記#6
S16 t1 python学習奮闘記#6S16 t1 python学習奮闘記#6
S16 t1 python学習奮闘記#6
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理について
 
みんなのPython勉強会#62
みんなのPython勉強会#62みんなのPython勉強会#62
みんなのPython勉強会#62
 
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
 
Nimで競技プログラミングを始めた話(1ヶ月)
Nimで競技プログラミングを始めた話(1ヶ月)Nimで競技プログラミングを始めた話(1ヶ月)
Nimで競技プログラミングを始めた話(1ヶ月)
 
鳥取python勉強会 第1回
鳥取python勉強会 第1回鳥取python勉強会 第1回
鳥取python勉強会 第1回
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
 
アウトプットのすすめ
アウトプットのすすめアウトプットのすすめ
アウトプットのすすめ
 

Mehr von 京大 マイコンクラブ

Mehr von 京大 マイコンクラブ (20)

テキストファイルを読む💪 第1回
テキストファイルを読む💪  第1回テキストファイルを読む💪  第1回
テキストファイルを読む💪 第1回
 
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
 
Common Lisp入門
Common Lisp入門Common Lisp入門
Common Lisp入門
 
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
Geometry with Unity
Geometry with UnityGeometry with Unity
Geometry with Unity
 
セミコロンレスc++
セミコロンレスc++セミコロンレスc++
セミコロンレスc++
 
エンジニアと健康
エンジニアと健康エンジニアと健康
エンジニアと健康
 
女の子になれなかった人のために
女の子になれなかった人のために女の子になれなかった人のために
女の子になれなかった人のために
 
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったらもし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
 
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
Altseed
AltseedAltseed
Altseed
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
 
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Pietで競プロしよう