Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
京大 マイコンクラブ
8,613 views
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編 prime@KMC
Read more
6
Save
Share
Embed
Download
Downloaded 20 times
1
/ 24
2
/ 24
3
/ 24
4
/ 24
Most read
5
/ 24
6
/ 24
7
/ 24
8
/ 24
Most read
9
/ 24
10
/ 24
11
/ 24
12
/ 24
13
/ 24
14
/ 24
15
/ 24
16
/ 24
17
/ 24
18
/ 24
19
/ 24
20
/ 24
21
/ 24
22
/ 24
23
/ 24
24
/ 24
Most read
More Related Content
PDF
実用Brainf*ckプログラミング
by
京大 マイコンクラブ
PDF
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
PDF
Trianguler
by
Ken Ogura
PDF
ユークリッド最小全域木
by
理玖 川崎
PDF
プログラムを高速化する話
by
京大 マイコンクラブ
PDF
PFI Seminar 2012/03/15 カーネルとハッシュの機械学習
by
Preferred Networks
PDF
組み込み関数(intrinsic)によるSIMD入門
by
Norishige Fukushima
PDF
最適輸送入門
by
joisino
実用Brainf*ckプログラミング
by
京大 マイコンクラブ
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
Trianguler
by
Ken Ogura
ユークリッド最小全域木
by
理玖 川崎
プログラムを高速化する話
by
京大 マイコンクラブ
PFI Seminar 2012/03/15 カーネルとハッシュの機械学習
by
Preferred Networks
組み込み関数(intrinsic)によるSIMD入門
by
Norishige Fukushima
最適輸送入門
by
joisino
What's hot
PDF
最適輸送の解き方
by
joisino
PPTX
Direct Sparse Odometryの解説
by
Masaya Kaneko
PPTX
ゲーム木探索技術とコンピュータ将棋への応用
by
Shogo Takeuchi
PDF
Pietのエディタを作った話
by
京大 マイコンクラブ
PDF
指数時間アルゴリズムの最先端
by
Yoichi Iwata
PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
PDF
プログラミングコンテストでのデータ構造
by
Takuya Akiba
PPTX
At coder regular contest 013 解説
by
光喜 濱屋
PDF
状態空間モデルの考え方・使い方 - TokyoR #38
by
horihorio
PDF
Scikit learnで学ぶ機械学習入門
by
Takami Sato
PDF
Rolling hash
by
HCPC: 北海道大学競技プログラミングサークル
PDF
[論文解説]KGAT:Knowledge Graph Attention Network for Recommendation
by
ssuser3e398d
PDF
DQNからRainbowまで 〜深層強化学習の最新動向〜
by
Jun Okumura
PPTX
PILCO - 第一回高橋研究室モデルベース強化学習勉強会
by
Shunichi Sekiguchi
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
by
NTT DATA Technology & Innovation
PDF
RTBにおける機械学習の活用事例
by
MicroAd, Inc.(Engineer)
PDF
直交領域探索
by
okuraofvegetable
PPTX
F.E.A.Rにおけるゴール指向プランニング
by
Youichiro Miyake
PDF
強化学習その2
by
nishio
PDF
様々な全域木問題
by
tmaehara
最適輸送の解き方
by
joisino
Direct Sparse Odometryの解説
by
Masaya Kaneko
ゲーム木探索技術とコンピュータ将棋への応用
by
Shogo Takeuchi
Pietのエディタを作った話
by
京大 マイコンクラブ
指数時間アルゴリズムの最先端
by
Yoichi Iwata
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
プログラミングコンテストでのデータ構造
by
Takuya Akiba
At coder regular contest 013 解説
by
光喜 濱屋
状態空間モデルの考え方・使い方 - TokyoR #38
by
horihorio
Scikit learnで学ぶ機械学習入門
by
Takami Sato
Rolling hash
by
HCPC: 北海道大学競技プログラミングサークル
[論文解説]KGAT:Knowledge Graph Attention Network for Recommendation
by
ssuser3e398d
DQNからRainbowまで 〜深層強化学習の最新動向〜
by
Jun Okumura
PILCO - 第一回高橋研究室モデルベース強化学習勉強会
by
Shunichi Sekiguchi
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
by
NTT DATA Technology & Innovation
RTBにおける機械学習の活用事例
by
MicroAd, Inc.(Engineer)
直交領域探索
by
okuraofvegetable
F.E.A.Rにおけるゴール指向プランニング
by
Youichiro Miyake
強化学習その2
by
nishio
様々な全域木問題
by
tmaehara
Viewers also liked
PDF
BFmeta
by
京大 マイコンクラブ
PDF
明日使えないすごいビット演算
by
京大 マイコンクラブ
PDF
PietでLISP処理系を書くのは難しい
by
Hideaki Nagamine
PDF
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
by
Ryo Sakamoto
PDF
C#でゲームを作る2016 第8回
by
京大 マイコンクラブ
PDF
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
by
Katsuhiro Endo
KEY
Functional Pearl + Brainfuck
by
Eita Sugimoto
PDF
brainfuckであそぼう #lldiver LT資料
by
Michihito Shigemura
PDF
Brainfuck interpreter 分析新竹碼農0307
by
Xatierlike Lee
PDF
Learn you a Brainfuck for great good!
by
Antoine Leblanc
PDF
Rubyで作る奇妙なプログラミング言語
by
toyoshi
PDF
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
by
kirin_nico
PDF
CUI3D
by
京大 マイコンクラブ
ODP
ライフゲームでプログラミング
by
Shinya Miyazaki
PDF
文字コード基礎論A
by
京大 マイコンクラブ
PDF
CTF for ビギナーズ ネットワーク講習資料
by
SECCON Beginners
PDF
AtCoder Beginner Contest 020 解説
by
AtCoder Inc.
BFmeta
by
京大 マイコンクラブ
明日使えないすごいビット演算
by
京大 マイコンクラブ
PietでLISP処理系を書くのは難しい
by
Hideaki Nagamine
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
by
Ryo Sakamoto
C#でゲームを作る2016 第8回
by
京大 マイコンクラブ
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
by
Katsuhiro Endo
Functional Pearl + Brainfuck
by
Eita Sugimoto
brainfuckであそぼう #lldiver LT資料
by
Michihito Shigemura
Brainfuck interpreter 分析新竹碼農0307
by
Xatierlike Lee
Learn you a Brainfuck for great good!
by
Antoine Leblanc
Rubyで作る奇妙なプログラミング言語
by
toyoshi
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
by
kirin_nico
CUI3D
by
京大 マイコンクラブ
ライフゲームでプログラミング
by
Shinya Miyazaki
文字コード基礎論A
by
京大 マイコンクラブ
CTF for ビギナーズ ネットワーク講習資料
by
SECCON Beginners
AtCoder Beginner Contest 020 解説
by
AtCoder Inc.
More from 京大 マイコンクラブ
PDF
テキストファイルを読む💪 第1回
by
京大 マイコンクラブ
PDF
かわいくなろうとしたら語彙力が下がった話
by
京大 マイコンクラブ
PDF
Common Lisp入門
by
京大 マイコンクラブ
PDF
多倍長整数の乗算と高速フーリエ変換
by
京大 マイコンクラブ
PDF
つくってあそぼ ラムダ計算インタプリタ
by
京大 マイコンクラブ
PDF
Geometry with Unity
by
京大 マイコンクラブ
PDF
セミコロンレスc++
by
京大 マイコンクラブ
PDF
エンジニアと健康
by
京大 マイコンクラブ
PPTX
女の子になれなかった人のために
by
京大 マイコンクラブ
PDF
Pietで競プロしよう
by
京大 マイコンクラブ
ODP
もし太陽のコアがIntelCoreだったら
by
京大 マイコンクラブ
PDF
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
by
京大 マイコンクラブ
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
by
京大 マイコンクラブ
PDF
ドット絵でプログラミング!難解言語『Piet』勉強会
by
京大 マイコンクラブ
PDF
No SSH (@nojima; KMC関東例会)
by
京大 マイコンクラブ
PDF
DTM練習会2017第1.5回 「伴奏の付け方」
by
京大 マイコンクラブ
PPTX
hideya流 テストプレイ観察術
by
京大 マイコンクラブ
PDF
暗号技術入門 秘密の国のアリス 総集編
by
京大 マイコンクラブ
PDF
Altseed
by
京大 マイコンクラブ
PDF
C#でゲームを作る2016 第7回
by
京大 マイコンクラブ
テキストファイルを読む💪 第1回
by
京大 マイコンクラブ
かわいくなろうとしたら語彙力が下がった話
by
京大 マイコンクラブ
Common Lisp入門
by
京大 マイコンクラブ
多倍長整数の乗算と高速フーリエ変換
by
京大 マイコンクラブ
つくってあそぼ ラムダ計算インタプリタ
by
京大 マイコンクラブ
Geometry with Unity
by
京大 マイコンクラブ
セミコロンレスc++
by
京大 マイコンクラブ
エンジニアと健康
by
京大 マイコンクラブ
女の子になれなかった人のために
by
京大 マイコンクラブ
Pietで競プロしよう
by
京大 マイコンクラブ
もし太陽のコアがIntelCoreだったら
by
京大 マイコンクラブ
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
by
京大 マイコンクラブ
プログラムを高速化する話Ⅱ 〜GPGPU編〜
by
京大 マイコンクラブ
ドット絵でプログラミング!難解言語『Piet』勉強会
by
京大 マイコンクラブ
No SSH (@nojima; KMC関東例会)
by
京大 マイコンクラブ
DTM練習会2017第1.5回 「伴奏の付け方」
by
京大 マイコンクラブ
hideya流 テストプレイ観察術
by
京大 マイコンクラブ
暗号技術入門 秘密の国のアリス 総集編
by
京大 マイコンクラブ
Altseed
by
京大 マイコンクラブ
C#でゲームを作る2016 第7回
by
京大 マイコンクラブ
実用Brainf*ckプログラミング入門編
1.
実用Brainf*ckプログラミング 入門編 KMC1回生 prime(twitter:@_primenumber)
2.
はじめに:Brainf*ckとは ● 命令記号は+-><[].,の8種類だけ! ● 1993年にできた、できるだけコンパイラが小さくなるよう なプログラミング言語 ●
難解になるべくして生まれたわけではない ● 実際、命令記号は読みやすいように選ばれている ● 処理系が作りやすいので、しばしばプログラミングの練習 問題としてBrainf*ckインタプリタの作成をさせたり、派 生言語が作られたりする
3.
言語仕様 ● はじめに0で初期化された十分な長さの配列が与えられる ● C言語で言うポインタを操作して動作。最初は0番地 ●
+/- ポインタの指す値を1増やす/減らす ● >/< ポインタをインクリメント/デクリメントする ● [ ポインタの指す値が非0なら対応する]の直後にジャンプ ● ] ポインタの指す値が0なら対応する[の直後にジャンプ ● . ポインタの指す値を文字として出力する ● , 入力から1バイト読み、ポインタの指す値に代入する ● これら8種類の文字以外については動作は未定義だが、 多くの処理系では無視する
4.
Brainf*ckでできること ● これだけの命令記号で(無限長の配列なら)チューリング 完全 – 他のプログラミング言語でできることなら(理論上)な んでもできる ●
でも実際に実装するのはほぼ無理でしょ?
5.
Brainf*ckでできること ● これだけの命令記号で(無限長の配列なら)チューリング 完全 – 他のプログラミング言語でできることなら(理論上)な んでもできる ●
でも実際に実装するのはほぼ無理でしょ? →実はある程度のパターンを覚えれば、 わりと実装できる!!!
6.
今日やること ● 入門編なので少しだけ ● 値のクリア・代入、足し算/引き算、値のコピー、掛け 算、スタック ●
最後にこれらを使って実際に動くプログラムを作ります ● 説明の中で省略記号を使います – ポインタが最初に指している場所を[0]と書き、[n] でそこからn番地進んだ場所を表す
7.
値のクリア・代入 ● 値をクリアしたり代入するとき ● 値のクリア:[0]の値を0にする ●
[-] ● 動作:[0]の値が0になるまで1減らす ● 値の代入:[0]の値を5にする ● [-]+++++ ● 動作:[0]の値をクリアして5を足す
8.
足し算・引き算 ● かなり使う ● 足し算:[0]の値を[1]に足す([0]の値は消える) [>+<-] ●
動作:「[1]の値を1増やし、[0]の値を1減らす」を[0]が 0になるまで繰り返す ● [1]の値が0なら値の移動になる ● 引き算:[0]の値を[1]から引く [>-<-]
9.
値のコピー ● 足し算や引き算をするとどちらかの値が消えてしまう ● Brainf*ckではほとんど非破壊的な動作はできない ●
→値のコピーが必要 ● 値のコピー:[0]の値を[1]にコピー([2]を一時変数とし て使う) [>+>+<<-]>>[<<+>>-] ● [0]の値を[1]と[2]に書き込む([0]の値は消える) ● [2]の値を[0]に書き込む([2]の値は消える)
10.
掛け算 ● 足し算と値のコピーを繰り返す ● 掛け算:[0]と[1]の積を[2]に書き込む([3]を使う) [<[>>+>+<<<-]>>>[<<<+>>>-]<<-] ●
[0]の値を[2]と[3]に足し、[3]の値を[0]に書き込む ● [1]の値を1減らす ● これを[1]の値が0になるまで繰り返す ● 定数の掛け算は簡単にできる ● 定数の掛け算:[0]の5倍を[1]に入れる [>+++++<-]
11.
スタック ● そもそもBrainf*ckはデータメモリがそのままスタック に使える ● スタックに積む (値を書き込む)> ●
スタックから値を取り出す <(値を使う) ● サンプル: まずスタックに3つ値を積む スタックから2つ取り出し積を計算して値を積む
12.
再帰 ● 関数の中でその関数自身を呼び出すこと ● うまく使うとプログラムが簡単に書ける ●
実は再帰はスタックを使って書ける!
13.
再帰 ● 関数の中でその関数自身を呼び出すこと ● うまく使うとプログラムが簡単に書ける ●
実は再帰はスタックを使って書ける! ● →Brainf*ckはスタックが書ける!!
14.
再帰 ● 関数の中でその関数自身を呼び出すこと ● うまく使うとプログラムが簡単に書ける ●
実は再帰はスタックを使って書ける! ● →Brainf*ckはスタックが書ける!! ● →Brainf*ckでは再帰が書ける!!!!
15.
再帰 ● 関数の中でその関数自身を呼び出すこと ● うまく使うとプログラムが簡単に書ける ●
実は再帰はスタックを使って書ける! ● →Brainf*ckはスタックが書ける!! ● →Brainf*ckでは再帰が書ける!!!! ● サンプル用意するのがめんどくさい&最後に再帰のプログ ラムを書くのでサンプルは省きます
16.
ハノイの塔 以下のルールに従ってすべての円盤を右端の杭に移動さ せられれば完成。 ● 3本の杭と、中央に穴の開いた大きさの異なる複数の円盤 から構成される。 ● 最初はすべての円盤が左端の杭に小さいものが上になる ように順に積み重ねられている。 ●
円盤を一回に一枚ずつどれかの杭に移動させることがで きるが、小さな円盤の上に大きな円盤を乗せることはで きない。 From Wikipedia
17.
ハノイの塔 ● ハノイの塔は再帰的な方法で最短で解けることが知られ ている ● 解法 –
何らかの方法でn-1枚の円盤を左端の杭から中央の杭 に移動させる – 一番大きな円盤を左端の杭から右端の杭に移動させる – 何らかの方法でn-1枚の円盤を中央の杭から右端の杭 に移動させる ● これをBrainf*ckで実装しよう! ● 動かすべき円盤とどこからどこに動かすかを出力する
18.
Brainf*ckでハノイの塔 ● 擬似コードで書くと – Hanoi(n,a,b)
//n枚の円盤を左端からa番目の杭からb 番目の杭に移動させる Hanoi(n-1,a,c) Move(n,a,b) Hanoi(n-1,c,b) ● cは{1,2,3}のうちaでもbでもない数 ● Move(k,a,b)はk枚目の円盤を左端からa番目の杭からb番 目の杭に移動させる
19.
Brainf*ckでハノイの塔 ● 「{1,2,3}のうちaでもbでもない数」は、6-a-bで求めら れる ● 再帰の中でMoveという別の関数を呼ぶのに相当する処理 するのは割と難しい –
Hanoiに引数をひとつ増やしてHanoi(n,s,a,b)とし て、s=1ならHanoi,s=0ならMoveということにする ● したがって、スタックで実装するときに積むデータの組 はn,s,a,bの四つ組 ● スタックに4個ずつ積んだり取り出したりすることで実装 できる
20.
Brainf*ckでハノイの塔 1.最初にスタックに(n,s,a,b)=(n,1,1,3)を積む 2.スタックの一番上の値を読み、s=0なら6に飛ぶ 3.スタックから取り出した値が(n,1,a,b)だったとすると それを消してスタックに(n-1,1,a,6-a-b),(n,0,a,b), (n-1,1,6-a-b,b)を積む 4.スタックの一番上の値を読み、(1,*,*,*)でないなら3に 戻る 5.スタックの一番上の値を読み、sを1から0にする 6.スタックから取り出した値を出力する。たとえば (3,0,1,3)だったらC 1 3を出力する 7.スタックの一番上の値が(0,*,*,*)でないなら2に戻る
21.
実際のコード(4枚Ver.) >>>>++++>+>+>++ +<<<[>[<-[[>>>>+>>>>+>>>>+<<<<<<<<<<<<-]>[>>>>+>> >>+>>>>+<<<<<<<<<<<<-]>[>>>>+>>>>+>>>>+<<<<<<<<<< <<-]>[>>>>+>>>>+>>>>+<<<<<<<<<<<<-]<+++++ +>>+>->>>>>>>[<<<<<<<<<<<<+>>>>>>>>>>>>-]>[<<<<<< <<<<<<+>>>>>>>>>>>>-]>[<<<<<<<<<<<<->>>>>>>>>>>>- ]>[<<<<<<<<<<<<+<->>>>>>>>>>>>>-]<<<<<[>>+>+<<<-] >[>+<-]++++++>[<->-]>[<<<+>>>-]<<<<<-]+>-]+++++++ +[>++++++>++++++<<<++++++++>-]>>>>++++[<+++++++ +>-]<<<<<.[-]>>>>.<<.[-]>>.[-]<.[-]++++++++++. [-]<<<<<<<] (454bytes)
22.
まとめ ● 一見Brainf*ckで実装するのが難しそうなものでも要素 要素に分解していくとそこまで大変ではない(こともあ る) ● 今回は入門編でしたがそのうち初級編/中級編/上級編 もやりたいと思います ●
初級編は数値の比較、割り算の商と余り、配列を考えて います
23.
おまけ ● 最近Brainf*ckでメタプログラミングできる拡張bfmeta を作りました ● データメモリとプログラムメモリが同一になっていて、 プログラム実行中にそのプログラム自身を書き換えられ るという仕組み ●
それに従い、終了条件をプログラムカウンタの指す値 が0になったら、に変更 ● よくある記号を増やしたりただ置き換えたりするクソみ たいなBrainf*ck拡張と違って、同じ記号でプログラミ ングするのに、はるかに強力な言語になる ● メタプログラミングあんまりやってないのでどんなこと をやると楽しいか教えてください
24.
おわり
Download