Your SlideShare is downloading. ×
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた

3,017

Published on

MTDDC Hokkaido(2010/12/18)でライトニングトークした時のスライドです。 …

MTDDC Hokkaido(2010/12/18)でライトニングトークした時のスライドです。

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,017
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. テンプレートタグでBrainf*ckを 作ってみた MTDDC Hokkaido 2010/12/18 えんどうかつひろ
  • 2. 自己紹介● えんどうかつひろ ● @ka2hiro● フリーランスのプログラマ● MT歴 ● 4年ほど(2006年頃から) ● プラグイン書いたり、MTベースのWeb App書いた り● 好きなテンプレートタグ ● mt:setVarTemplate と mt:date
  • 3. 今日お話すること● Brainf*ckを書いていて、はまったこと
  • 4. きっかけ?● 単なる思いつき● テンプレートタグって、プログラミング言語だ よね。 ● 変数あるし ● 四則演算できるし ● 条件分岐できるし ● ループもできるし ● 配列もハッシュもあるし
  • 5. それに...● MT、テンプレートタグ、Brainfuckで、軽くぐ ぐってみたけど、全然ヒットしない。● ってことは、これは...
  • 6. ということでBrainf*ckのインタープリタを 書いてみた。
  • 7. ところでBrainf*ckって何?
  • 8. “Brainfuck(ブレインファック)は難解プログラミング言語のひとつ。 なお名称に卑語が含まれるた め、Brainf*ckなどと表記されるこ とがある。” wikipediaより
  • 9. 使える命令はこの↓8文字 ><+-.,[] だけ。
  • 10.
  • 11. +++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++. +++++++..+++.>-.------------.<+++++ +++.--------.++ +.------.--------.>+.
  • 12. これを実行すると
  • 13. Hello World!
  • 14. と表示するプログラミング言語。
  • 15. で、書いてみたら、書けた。でも、けっこうはまった。
  • 16. ここからが今日の本題。
  • 17. はまったその1文字列中の任意の場所から1文字 だけ読み込む。
  • 18. <mt:setvarblock name=”hoge”>The quick brown fox jumps over the lazy...</mt:setvarblock> ”Q”を表示するのに、<mt:var name=”hoge” substr=”4,1” setvar=”c”/> と書けると思っていたら、 substrモディファイア なんてなかった。
  • 19. 仕方がないので、困った時の 「正規表現」 にお願いしてみた。
  • 20. 正規表現 /(?:.{<mt:var name="pos" />})(.)(?:.*)/● posは、取得したい文字の位置(最初の文字は0番目)● 1つ目のかっこは読み飛ばす部分● 2つ目のかっこが取得したい文字● 3つ目のかっこは残りの文字(必要ないかも)● posが3の場合、/(?:.{3})(.)(?:.*)/ となる● $1で1文字取得できる
  • 21. まとめるとこうなる。<mt:setvartemplate name="getchar"><mt:setvarblock name="pattern">/(?:.{<mt:var name="pos" />})(.)(?:.*)/</mt:setvarblock><mt:var name="code" regex_replace="$pattern","1" setvar="c"/></mt:setvartemplate>
  • 22. これで1文字ずつ読み込めるようになった。
  • 23. はまったその2無限ループを作れない。
  • 24. <mt:loop>は、配列の要素をたど ることしかできないし、<mt:for>はto=”N”で指定した回 数しかループできないし、 どうしよう...
  • 25. ちょっとかっこ悪いけど、<mt:for var=”i” from=”0” to=”1000”>大きめの数値を終了条件にして、 ごまかした。
  • 26. はまったその3ループから脱出できない!
  • 27. <mt:for var=”i” from=”0” to=”1000”> <mt:if name=”i” eq=”5”> <mt:setvar name=”i” value=”1000” /> ループ変数に終了条件を満たす値を 設定しても脱出できない! </mt:if></mt:for>
  • 28. どうやらループ内では、ループ変数の参照はできるが、変更は反映されないようだ。
  • 29. 仕方がないので、<mt:for var=”i” from=”0” to=”1000”> <mt:if name=”done” ne=”1”> 必要な処理を実施し、 終了条件を満たしたらdoneに1をセット    </mt:if></mt:for> とした。でもこれだと...
  • 30. 10回目で終了条件を満たすと、 残り990回は、 無駄に空回り。┐(´-`)┌
  • 31. はまったその4 完成したテンプレートを 編集画面に貼付け、プレビューしても真っ白け。
  • 32. テンプレートのコンパイル結果を dumpして見ると、<mt:elseif name=”c” eq=”>”> どうもこのあたりから変。意図しない所でタグが閉じたり、 開いたり...
  • 33. あっ、> と < は使えないのか。
  • 34. ということで、8つの命令のうち、 >を#に <を*に に置換えた。
  • 35. もっと早く気付けよ>自分
  • 36. まとめ● いろいろあったけど、なんとかなったし、けっ こう楽しめた。● みなさんもぜひ挑戦してみてください。● 今回書いたテンプレートは、githubにありま す。 ● http://github.com/ka2hiro/brainfuck● 次回はマンデルブロー集合の予定です(笑)
  • 37. おまけ● 無限ループ/ループ脱出不可が悔しかったの で、WhileTagというプラグインを書いてみた。 ● http://github.com/ka2hiro/WhileTag● <mt:if>と同じ構文のブロックタグ ● <mt:while name=”done” ne=”1”> </mt:while>● ループ内からループ変数を操作可能
  • 38. ご清聴ありがとうございました。

×