SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
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プログラマが他の言語のプログラマを
圧倒するなんて夢物語だった
結論
まともな言語で
競技プログラミングをやろう!!!

Mais conteúdo relacionado

Mais procurados

低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
demuyan
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
「チーム開発実践入門」勉強会
「チーム開発実践入門」勉強会「チーム開発実践入門」勉強会
「チーム開発実践入門」勉強会
Yu Ishikawa
 

Mais procurados (20)

30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
 
MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
 
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
 
GPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIAGPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIA
 
量子コンピュータの基礎から応用まで
量子コンピュータの基礎から応用まで量子コンピュータの基礎から応用まで
量子コンピュータの基礎から応用まで
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
老害について
老害について老害について
老害について
 
優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
プレゼン初心者にありがちなアンチパターン
プレゼン初心者にありがちなアンチパターンプレゼン初心者にありがちなアンチパターン
プレゼン初心者にありがちなアンチパターン
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
 
「チーム開発実践入門」勉強会
「チーム開発実践入門」勉強会「チーム開発実践入門」勉強会
「チーム開発実践入門」勉強会
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 

Semelhante a Pietで競プロしよう

Semelhante a 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回
 
アウトプットのすすめ
アウトプットのすすめアウトプットのすすめ
アウトプットのすすめ
 
Why python
Why pythonWhy python
Why python
 

Mais de 京大 マイコンクラブ

Mais de 京大 マイコンクラブ (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回
 

Pietで競プロしよう