サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
3: 2009-12-20 (日) 06:47:31 HOSINO ソース 4: 2009-12-20 (日) 08:30:58 HOSINO ソース
Line 187: Line 187:
 --.<      ++++++++.  --------.  +++.      ------.  --.<      ++++++++.  --------.  +++.      ------.
 --------.> +.  --------.> +.
-~+前のソースが373文字(スペース、改行を除く)だったのに対して、今回は217文字にまで減らせました。~ 
 +(それでもHQ9+の1文字には全然届きませんが…)~ 
 +3行目の4番目のブロックまでは前回と同じです。~ 
 +ここで、>命令が実行されています。~ 
 +これによって、レジスタはメモリの1番地をさすようになります。~ 
 +メモリの1番地の値はこのとき0ですが、これを4行目の4番目のブロックまでで,の文字コードである44にして出力します。~ 
 +5行目の1番目のブロックでスペースを出力した後、レジスタの値を1減らしています。~ 
 +これで再びレジスタはメモリの0番地をさすようになり、そこにはoの文字コードである111が入っています。~ 
 +今度はそれをいじって文字を出力していき、最後にもう一回1番地の値をいじって!を出力させて終了です。~ 
 +少しはましになりましたが、まだまだカッコイイとは言えないソースです。~ 
 +もうちょっと工夫を加えてみます。~ 
 + +++++++ [>++++++++++<-] >++. 
 + ++++++++++ ++++++++++ +++++++++. +++++++. . +++.> 
 + ++++ [>++++++++++<-] >++++. 
 + ---------- --.<< 
 + ++++++++. --------. +++. ------. --------.>> 
 + +. 
 +これで152文字にまで減らすことが出来ました。~ 
 +ソース自体も、[や]が加わったことでBrainf*ckらしいカッコよさが出てきました。~ 
 +今までは72を作るときに、1+1+1+1+(中略)+1=72と考えていました。~ 
 +この考えを捨てて、10*7+2=(1+1+1+1+1+1+1+1+1+1)*(1+1+1+1+1+1+1)+1+1=72として計算したのが上のソースです。~ 
 +まず最初に、0番地の値を7にします。~ 
 +0番地の値は7なので[は素通りして、>でレジスタは1番地をさします。~ 
 +1番地の値に10を足した後、<で0番地へもどり、1を引きます。~ 
 +それでもまだ値は6なので[へもどり、さらに1番地に10を足します。~ 
 +また、0番地の値を1減らしますが、まだ5なので[へもどります。~ 
 +これを繰り返すと、1番地の値が70になったときに0番地の値が0になり、ようやく]の次へ進みます。~ 
 +それに2を足すので72になり、無事にHが出力されます。~ 
 +2行目の最後でoを出力した後も、同じ要領で4回ループさせ、3番地の値を40にします。~ 
 +それに4を足して44にし、,を出力します。~ 
 +4行目と5行目の最後が<<と>>になっているのは、2回目のループでカウンタとして使った2番地を飛び越えるためです。~ 
 +最後に、Brainf*ckのカッコよさが最大限に発揮されたHello, world!を書きます。~ 
 + +++++++++ 
 + [>++++++++>+++++++++++>+++++<<<-] 
 + >. 
 + >++.+++++++..+++. 
 + >-.------------. 
 + <++++++++.--------.+++.------.--------. 
 + >+. 
 +119文字、という事は、最初のプログラムの1/3以下という事です。~ 
 +簡単に解説すると、最初に0番地をカウンタにして9回ループさせます。~ 
 +このループで1番地が72、2番地が99、3番地が45になります。~ 
 +後は、1番地を使ってHを、2番地を使って、e、l、l、o、w、o、r、l、dを、3番地を使って,、 、!を出力させるだけです。~ 
 +***echoプログラムを作る! [#m858ccb4] 
 +g01アプリをabcdwを使って学んだ人なら誰でも知っているechoプログラムを製作します。~ 
 +とはいいつつも、ものすごく簡単なので説明は省きます。~ 
 + +[>,.<] 
 +これさえあれば、一時的にコンソールにメモをすることが出来ます。~ 
 + 
 +***charsプログラムを作る! [#r0398d88] 
 +同じくabcdwでおなじみのcharsプログラムです。~ 
 +0x20~0x7eの文字コードを持つ文字を出力させます。~ 
 +これも、最終段階のHello, world!が理解できた人なら難なく理解できると思います。~ 
 + +++++++++ 
 + [>++++++++++>++++<<-] 
 + >+++++ 
 + >----< 
 + [>.+<-] 
 +色々と最適化の余地があるので、考えてみてください。~

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。