Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Brainf*ckしよう
Search
Atnanasi
February 18, 2017
Technology
0
330
Brainf*ckしよう
私は詳しい事は知りません
Atnanasi
February 18, 2017
Tweet
Share
Other Decks in Technology
See All in Technology
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
290
プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping
ohbarye
5
380
家族アルバム みてねにおけるGrafana活用術 / Grafana Meetup Japan Vol.1 LT
isaoshimizu
1
390
JSON攻略法.pdf
miyakemito
8
4.9k
最近たまに見かけるTiDBってなんだ? - Findy
pingcap0315
2
760
Python と Snowflake はズッ友だょ!~ Snowflake の Python 関連機能をふりかえる ~
__allllllllez__
1
110
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
230
20240416_devopsdaystokyo
kzkmaeda
1
220
MySQL の SQL クエリチューニングの要所を掴む勉強会
andpad
2
6.1k
ServiceNow Knowledge Learning Rise up
manarobot
0
200
Cloud Native Java with Spring Boot (CNCF Aarhus, April 2024)
thomasvitale
1
160
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
280
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
44
9.7k
Agile that works and the tools we love
rasmusluckow
325
20k
Automating Front-end Workflow
addyosmani
1356
200k
Build your cross-platform service in a week with App Engine
jlugia
225
17k
How to Ace a Technical Interview
jacobian
272
22k
Creatively Recalculating Your Daily Design Routine
revolveconf
210
11k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Raft: Consensus for Rubyists
vanstee
132
6.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
357
22k
Building an army of robots
kneath
300
41k
Faster Mobile Websites
deanohume
299
30k
Transcript
Brainf*ckしよう 私は詳しい事は知りません
自己紹介 Atnanasi﴾あっとななし﴿ もうすぐ17歳 仙台在住の高専生 とても学校やめたい LT初めてです
Brainf*ckって知ってますか?
Brainf*ckとは Brainfuck(ブレインファック)は難解プログラミング言語の ひとつ[要出典]。なお名称に卑語>が含まれるため、Brainf*ck などと表記されることがある。 開発者Urban Müllerがコンパイラがなるべく小さくなる言語 として考案した。 実際、Müllerが>開発したコンパイラのサ イズはわずか123バイト、インタプリタは98バイトであっ た。
Wikipediaより
Hello,world! +++++++++[>++++++++>+++++++++++>+++++<<<‐]>.>++.+++++++..+ ++.>‐.‐‐‐‐‐‐‐‐‐‐‐‐.<++++++++.‐‐‐‐‐‐‐‐.+++.‐‐‐‐‐‐.‐‐‐‐‐‐‐‐.>+.
やばい﴾やばい﴿
命令 > ポインタをインクリメントする < ポインタをデクリメントする + ポインタが指す値をインクリメントする ‐ ポインタが指す値をデクリメントする .
ポインタが指す値を出力に書き出す , 入力から1バイト読み込んで、ポインタが指す先に代入する [ ポインタが指す値が0なら対応する ] の直後にジャンプする ] ポインタが指す値が0でないなら対応する [ にジャンプする
ニコニコ大百科より 1. 最初のポインタの位置で値を9回インクリメントする。 2. 最初のループで最初のポインタに入っている値をループカウ ンタとし、2番目のポインタの値を8×9=72、3番目のポイン タの値を11×9=99、4番目のポインタの値を5×9=45にする。 3. 2番目のポインタに入っている値は72で、これを文字コードで 出力すると"H"になる。
4. ポインタをインクリメントし、3番目のポインタの値を2回イ ンクリメントして101にして出力すると、"e"になる。 5. それをさらに7回インクリメントすると"l"になり、2回出力す る。さらに3回インクリメントして"o"にする。 6. ポインタをインクリメントし、4番目のポインタの値を1回デ クリメントして44にして出力すると","になる。 7. それをさらに12回デクリメントすると" ﴾半角スペース﴿"にな る。
ようするに 出力はメモリの値をASCIIコードとして解釈する AのASCIIコードは65 単純にインクリメントをするのは効率が悪い →ループを使いまとめてインクリメント 足りない分や少ない分を調整すればあらふしぎ!
拡張もあるよ BrainCrash ‐ ビット演算命令を追加﴾&|^~﴿ Braincunt ‐ メモリ空間を3次元に拡張し ポインタの進行方向を指すベクトル回転命令を追加 BFX ‐
値のコピーやビットシフトを追加 BF‐x ‐ メタプログラミング機能を追加﴾予定﴿
みんなも作ろう 命令が少ないのですぐ実装できる 仕様が簡単 拡張もできる
実装例 学校の課題でScratchでなんか作れって言われたので https://scratch.mit.edu/projects/141720182/
ありがとうございました!