Submit Search
Upload
Pietソースコード精読
•
1 like
•
1,997 views
H
Hideaki Nagamine
Follow
2015年5月24日. 京大マイコンクラブ部室. 第11回KMC学習発表会. http://www.slideshare.net/KMC_JP/piet-46068527 を読め
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 38
Download now
Download to read offline
Recommended
Ultra piet
Ultra piet
京大 マイコンクラブ
Pietで競プロしよう
Pietで競プロしよう
京大 マイコンクラブ
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
京大 マイコンクラブ
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55
将 高野
MARICON発表資料
MARICON発表資料
TadaTeruki
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
PinP機能をWebRTCで実現できるか検証してみた
PinP機能をWebRTCで実現できるか検証してみた
Yuto Nishikawa
Recommended
Ultra piet
Ultra piet
京大 マイコンクラブ
Pietで競プロしよう
Pietで競プロしよう
京大 マイコンクラブ
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
京大 マイコンクラブ
新しい世界の学び方 by @masaru_b_cl #nds55
新しい世界の学び方 by @masaru_b_cl #nds55
将 高野
MARICON発表資料
MARICON発表資料
TadaTeruki
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
PinP機能をWebRTCで実現できるか検証してみた
PinP機能をWebRTCで実現できるか検証してみた
Yuto Nishikawa
kintone Café 名古屋 Vol.3 「マジでkintoneに恋する5秒前!?」
kintone Café 名古屋 Vol.3 「マジでkintoneに恋する5秒前!?」
kintone Café 名古屋支部
まんまとリレーションされた話
まんまとリレーションされた話
m ishizaki
kintone Café 名古屋 Vol.3 「寂しくないKintone」
kintone Café 名古屋 Vol.3 「寂しくないKintone」
kintone Café 名古屋支部
【kintone Cafe 名古屋】kintone×○○○の可能性
【kintone Cafe 名古屋】kintone×○○○の可能性
Hiroyasu Yamada
Pythonの10年と今、これから
Pythonの10年と今、これから
Haruo Sato
OSS Study#19_LT
OSS Study#19_LT
NaoY-2501
3Dプリンタの出力は遅いのでどうにかしたい
3Dプリンタの出力は遅いのでどうにかしたい
NISHIMOTO Keisuke
ZendEngine Study Meeting @Tokyo
ZendEngine Study Meeting @Tokyo
Masaki Fujimoto
【kintone Cafe 名古屋】kintone初心者がプラグイン作ってみた話
【kintone Cafe 名古屋】kintone初心者がプラグイン作ってみた話
Hiroyasu Yamada
S03 t4 wrapup
S03 t4 wrapup
Takeshi Akutsu
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?
Aki Ariga
Python研修の作り方 - teaching-is_learning-
Python研修の作り方 - teaching-is_learning-
BrainPad Inc.
自動化は仕様が9割(Zapier Meetup #0)
自動化は仕様が9割(Zapier Meetup #0)
Marina Suzuki
コボラーがPython始めてみた話
コボラーがPython始めてみた話
Yuuki Nakajima
Hokkaido.pm.casual #03 slide
Hokkaido.pm.casual #03 slide
Tohru Shinohara
WindowsでPython
WindowsでPython
drillan
Pietのエディタを作った話
Pietのエディタを作った話
京大 マイコンクラブ
PietでLISP処理系を書くのは難しい
PietでLISP処理系を書くのは難しい
Hideaki Nagamine
Pietでlisp処理系を書くのは難しい 進捗報告
Pietでlisp処理系を書くのは難しい 進捗報告
Hideaki Nagamine
KMC JavaScriptから始めるプログラミング2016 第一回
KMC JavaScriptから始めるプログラミング2016 第一回
kyoto university
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
kyoto university
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
京大 マイコンクラブ
More Related Content
What's hot
kintone Café 名古屋 Vol.3 「マジでkintoneに恋する5秒前!?」
kintone Café 名古屋 Vol.3 「マジでkintoneに恋する5秒前!?」
kintone Café 名古屋支部
まんまとリレーションされた話
まんまとリレーションされた話
m ishizaki
kintone Café 名古屋 Vol.3 「寂しくないKintone」
kintone Café 名古屋 Vol.3 「寂しくないKintone」
kintone Café 名古屋支部
【kintone Cafe 名古屋】kintone×○○○の可能性
【kintone Cafe 名古屋】kintone×○○○の可能性
Hiroyasu Yamada
Pythonの10年と今、これから
Pythonの10年と今、これから
Haruo Sato
OSS Study#19_LT
OSS Study#19_LT
NaoY-2501
3Dプリンタの出力は遅いのでどうにかしたい
3Dプリンタの出力は遅いのでどうにかしたい
NISHIMOTO Keisuke
ZendEngine Study Meeting @Tokyo
ZendEngine Study Meeting @Tokyo
Masaki Fujimoto
【kintone Cafe 名古屋】kintone初心者がプラグイン作ってみた話
【kintone Cafe 名古屋】kintone初心者がプラグイン作ってみた話
Hiroyasu Yamada
S03 t4 wrapup
S03 t4 wrapup
Takeshi Akutsu
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?
Aki Ariga
Python研修の作り方 - teaching-is_learning-
Python研修の作り方 - teaching-is_learning-
BrainPad Inc.
自動化は仕様が9割(Zapier Meetup #0)
自動化は仕様が9割(Zapier Meetup #0)
Marina Suzuki
コボラーがPython始めてみた話
コボラーがPython始めてみた話
Yuuki Nakajima
Hokkaido.pm.casual #03 slide
Hokkaido.pm.casual #03 slide
Tohru Shinohara
WindowsでPython
WindowsでPython
drillan
What's hot
(16)
kintone Café 名古屋 Vol.3 「マジでkintoneに恋する5秒前!?」
kintone Café 名古屋 Vol.3 「マジでkintoneに恋する5秒前!?」
まんまとリレーションされた話
まんまとリレーションされた話
kintone Café 名古屋 Vol.3 「寂しくないKintone」
kintone Café 名古屋 Vol.3 「寂しくないKintone」
【kintone Cafe 名古屋】kintone×○○○の可能性
【kintone Cafe 名古屋】kintone×○○○の可能性
Pythonの10年と今、これから
Pythonの10年と今、これから
OSS Study#19_LT
OSS Study#19_LT
3Dプリンタの出力は遅いのでどうにかしたい
3Dプリンタの出力は遅いのでどうにかしたい
ZendEngine Study Meeting @Tokyo
ZendEngine Study Meeting @Tokyo
【kintone Cafe 名古屋】kintone初心者がプラグイン作ってみた話
【kintone Cafe 名古屋】kintone初心者がプラグイン作ってみた話
S03 t4 wrapup
S03 t4 wrapup
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?
Python研修の作り方 - teaching-is_learning-
Python研修の作り方 - teaching-is_learning-
自動化は仕様が9割(Zapier Meetup #0)
自動化は仕様が9割(Zapier Meetup #0)
コボラーがPython始めてみた話
コボラーがPython始めてみた話
Hokkaido.pm.casual #03 slide
Hokkaido.pm.casual #03 slide
WindowsでPython
WindowsでPython
Viewers also liked
Pietのエディタを作った話
Pietのエディタを作った話
京大 マイコンクラブ
PietでLISP処理系を書くのは難しい
PietでLISP処理系を書くのは難しい
Hideaki Nagamine
Pietでlisp処理系を書くのは難しい 進捗報告
Pietでlisp処理系を書くのは難しい 進捗報告
Hideaki Nagamine
KMC JavaScriptから始めるプログラミング2016 第一回
KMC JavaScriptから始めるプログラミング2016 第一回
kyoto university
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
kyoto university
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
京大 マイコンクラブ
ひまわり本7章
ひまわり本7章
CHY72
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
京大 マイコンクラブ
お絵かきをはじめよう!
お絵かきをはじめよう!
京大 マイコンクラブ
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
京大 マイコンクラブ
CUI3D
CUI3D
京大 マイコンクラブ
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
京大 マイコンクラブ
BFmeta
BFmeta
京大 マイコンクラブ
Code Golf
Code Golf
Shinichiro Hamaji
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
京大 マイコンクラブ
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
京大 マイコンクラブ
Altseed
Altseed
京大 マイコンクラブ
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
CHY72
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
京大 マイコンクラブ
数値解析と物理学
数値解析と物理学
すずしめ
Viewers also liked
(20)
Pietのエディタを作った話
Pietのエディタを作った話
PietでLISP処理系を書くのは難しい
PietでLISP処理系を書くのは難しい
Pietでlisp処理系を書くのは難しい 進捗報告
Pietでlisp処理系を書くのは難しい 進捗報告
KMC JavaScriptから始めるプログラミング2016 第一回
KMC JavaScriptから始めるプログラミング2016 第一回
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
ひまわり本7章
ひまわり本7章
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
お絵かきをはじめよう!
お絵かきをはじめよう!
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
CUI3D
CUI3D
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
BFmeta
BFmeta
Code Golf
Code Golf
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
Altseed
Altseed
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
数値解析と物理学
数値解析と物理学
More from Hideaki Nagamine
フェーザとか
フェーザとか
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第4回
競技プログラミング練習会2015 Normal 第4回
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第3回
競技プログラミング練習会2015 Normal 第3回
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第2回
競技プログラミング練習会2015 Normal 第2回
Hideaki Nagamine
Gaucheでマクロを書こう
Gaucheでマクロを書こう
Hideaki Nagamine
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
Hideaki Nagamine
More from Hideaki Nagamine
(7)
フェーザとか
フェーザとか
競技プログラミング練習会2015 Normal 第4回
競技プログラミング練習会2015 Normal 第4回
競技プログラミング練習会2015 Normal 第3回
競技プログラミング練習会2015 Normal 第3回
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第2回
競技プログラミング練習会2015 Normal 第2回
Gaucheでマクロを書こう
Gaucheでマクロを書こう
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
Pietソースコード精読
1.
Pietソースコード精読 ID: hnagamin(長嶺英朗) 2015/05/24 第11回KMC学習発表会
2.
おまえだれ ● ID: hnagamin(長嶺英朗) –
KMC-2回生 – KMC38第会計 ● 京都大学工学部電気電子工学科2回 ● Piet歴2ヶ月 Twitter: @hnagamin GitHub: 1995hnagamin
3.
今日話すこと ● Pietの概要 ● プログラミングするときに考えること ● ソースコードの解説(逆ポーランド記法電卓の実装)
4.
Pietの概要 http://www.slideshare.net/KMC_JP/piet-46068527 を読め(終了)
5.
プログラミングするときに考えること ● 最初からゴルフをしない ● 解くべき問題の難易度を下げる – 超重要 – そもそも(人間が)Pietでできることはあまり多くない –
徐々に難易度を上げていくと士気が落ちない ● スタックの上での再帰 ● 黒ドットが少ないと良いプログラムみたいなとこある
6.
逆ポーランド記法電卓の実装
7.
背景 ● Pietでそれなりに(大きな|実用的な)プログラムを 書きたかった ● Pietはスタックの操作と相性が良いので、逆ポーラ ンド記法数式計算を実装することは完成度の割に 難易度が小さそうだと思った
8.
課題設定 ● とりあえず実装できることを確かめる – キャンバスが余っても気にしない ● 1桁の数字の入力だけ受け付ける – 複数桁の処理はつらい ● 四則演算くらいは実装する ● 知らない文字が出てきたらエラー処理 ● 終了記号を使おう –
PietはEOFを受け取れない
9.
課題 逆ポーランド記法の数式を入力として受け取り、 その計算結果を出力する
10.
課題 受け付ける入力は以下とする <stmt> := <expr> <DOT> <expr> := <NUM> | <expr> <expr> <operator> <operator> := <PLUS> <MINUS> <MULT> <DIV> <NUM> [09] <DOT> . <PLUS>
+ <MINUS> <MULT> * <DIV> /
11.
方針 ● 入力ストリームから1文字ずつ受け取る ● 受け取った文字が – '.'ならスタックの先頭要素を出力 –
数字なら対応する数をスタックにpush – 演算子ならスタックから2要素popして計算結果をpush – どれにも当てはまらなければエラーとして終了(“E”と出力)
12.
イメージ stack<int> s; while (true) { char c = getchar(); if (c == '.') { int ans = s.top(); cout << ans; break; } else if (isdigit(c)) { s.push(c48); } else if (c == '+') { int a = s.top(); s.pop(); int b = s.top(); s.pop(); s.push(a + b); } else if (c == '') { ...
13.
イメージ stack<int> s; while (true) { char c = getchar(); if (c 46 == 0) { int ans = s.top(); cout << ans; break; } else if (c > 47 && 58 > c) { s.push(c48); } else if (c 43 == 0) { int a = s.top(); s.pop(); int b = s.top(); s.pop(); s.push(a + b); } else if (c 43 == 0) { ...
14.
文字コード * 42 + 43 45 . 46 / 47 0 48
15.
実装
16.
// ここでデモを行う
17.
さらなる高みへ ● ソースコードのサイズを小さくしよう – エラー処理は省こう ● 複数桁の入力を受け付けよう
18.
課題 受け付ける入力は以下とする <stmt> := <expr> <DOT> <expr> := <NUM> | <expr> <expr> <operator> <operator> := <PLUS> <MINUS> <MULT> <DIV> <NUM> [09]+ <DOT> . <PLUS>
+ <MINUS> <MULT> * <DIV> / (デリミタ) #Space
19.
複数桁の入力 ● 再帰する ● 保存している数を10倍しながら入力された数を 足しあわせていく
20.
動作例 入力: “2014+” スタック: [0]
21.
動作例 入力: “014+” スタック: [0,2] 入力を受け取る
22.
動作例 入力: “014+” スタック: [0,2] 保存している数を10倍する 0×10
= 0
23.
動作例 入力: “014+” スタック: [2] 足す
24.
動作例 入力: “14+” スタック: [2,0] 入力を受け取る
25.
動作例 入力: “14+” スタック: [20,0] 保存している数を10倍する
26.
動作例 入力: “14+” スタック: [20] 足す
27.
動作例 入力: “4+” スタック: [20,1] 入力を受け取る
28.
動作例 入力: “4+” スタック: [200,1] 保存している数を10倍する
29.
動作例 入力: “4+” スタック: [201] 足す
30.
動作例 入力: “+” スタック: [201,4] 入力を受け取る
31.
動作例 入力: “+” スタック: [2010,4] 保存している数を10倍する
32.
動作例 入力: “+” スタック: [2014] 足す
33.
動作例 入力: “” スタック: [2014,43(+)] 入力を受け取る
34.
動作例 入力: “” スタック: [2014,43(+)] 数字じゃないので終了
35.
実装
36.
さらなる高みへ ● ゴルフをする ● ロジックは変えない ● コードの進む向きをうねらせる
37.
実装
38.
もう話すことがない ● Pietは楽しい ● スタックで再帰するのは意外と簡単、意外と楽しい – 2変数くらいまでだったらなんとなくいける –
3変数以上でも多分何とかなる ● 書こう
Download now