<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>UKSTUDIO &#187; BrainFuck</title>
	<atom:link href="http://ukstudio.jp/tag/brainfuck/feed/" rel="self" type="application/rss+xml" />
	<link>http://ukstudio.jp</link>
	<description>いわゆる86世代のブログです</description>
	<lastBuildDate>Wed, 11 Jan 2012 05:53:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<div id='fb-root'></div>
					<script type='text/javascript'>
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>RubyCocoaでBrainFuckインタプリタっぽいものを作ってみた</title>
		<link>http://ukstudio.jp/2007/12/30/rubycocoa_brainfuckinterpreter/</link>
		<comments>http://ukstudio.jp/2007/12/30/rubycocoa_brainfuckinterpreter/#comments</comments>
		<pubDate>Sun, 30 Dec 2007 13:56:08 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[BrainFuck]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ukstudio.sakura.ne.jp/2007/12/30/rubycocoa_brainfuckinterpreter/</guid>
		<description><![CDATA[初めてのRubyCocoaでのプログラミング。以前作ったBrainfuckのコードを処理するRubyプログラムを流用した。主に参考にしたのはRubyCocoa 入門。と言うか、ここしか見てない。 上のテキストフィールドにBrainfuckのコードを入力して、executeのボタンを押すと変換された文字列が下のフィールドに表示される。キャプチャのBrainfuckのコードは途切れてるだけで、実際はもっと長い。本当はテキストエリアみたいなのにしたかったんだけれど、オブジェクトがどれだかわからなかった。 以前、Objective-Cで少しだけCocoaプログラミングをした時も同じことを思ったけど、Interface BuilderはやっぱりUIを設計していく上で優秀だと思う。コントローラクラスとオブジェクトを関連づける操作もかなり直感的でさすがAppleと言ったところか。]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2007/12/30/rubycocoa_brainfuckinterpreter/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>初めてのRubyCocoaでのプログラミング。以前作ったBrainfuckのコードを処理するRubyプログラムを流用した。主に参考にしたのは<a href="http://limechat.net/rubycocoa/tutorial/">RubyCocoa 入門</a>。と言うか、ここしか見てない。</p>
				<p><img src="http://farm3.static.flickr.com/2055/2148748886_48f93983a6.jpg?v=0"/></p>
				<p>上のテキストフィールドにBrainfuckのコードを入力して、executeのボタンを押すと変換された文字列が下のフィールドに表示される。キャプチャのBrainfuckのコードは途切れてるだけで、実際はもっと長い。本当はテキストエリアみたいなのにしたかったんだけれど、オブジェクトがどれだかわからなかった。</p>
				<p>以前、Objective-Cで少しだけCocoaプログラミングをした時も同じことを思ったけど、Interface BuilderはやっぱりUIを設計していく上で優秀だと思う。コントローラクラスとオブジェクトを関連づける操作もかなり直感的でさすがAppleと言ったところか。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2007/12/30/rubycocoa_brainfuckinterpreter/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2007/12/30/rubycocoa_brainfuckinterpreter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RubyでBrainFuck処理系を書いてみた</title>
		<link>http://ukstudio.jp/2007/11/24/ruby_brainfuck/</link>
		<comments>http://ukstudio.jp/2007/11/24/ruby_brainfuck/#comments</comments>
		<pubDate>Fri, 23 Nov 2007 15:46:55 +0000</pubDate>
		<dc:creator>ukstudio</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[BrainFuck]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ukstudio.sakura.ne.jp/2007/11/24/ruby_brainfuck/</guid>
		<description><![CDATA[class BrainFuck def convert(code) @code = code @memory = Array.new @code_ptr = @mem_ptr = 0 @output = "" while @code.size > @code_ptr @memory[@mem_ptr] &#124;&#124;= 0 case @code[@code_ptr] when ?> @mem_ptr += 1 when ?< raise ArgumentError if @mem_ptr.zero? @mem_ptr -= 1 when ?+ @memory[@mem_ptr] += 1 when ?- @memory[@mem_ptr] -= 1 when ?. @output += [...]]]></description>
			<content:encoded><![CDATA[				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2007/11/24/ruby_brainfuck/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><pre lang="ruby">
class BrainFuck
  def convert(code)
    @code = code
    @memory = Array.new
    @code_ptr = @mem_ptr = 0
    @output = ""

    while @code.size > @code_ptr
      @memory[@mem_ptr] ||= 0

      case @code[@code_ptr]
      when ?>
        @mem_ptr += 1
      when ?< raise ArgumentError if @mem_ptr.zero?
        @mem_ptr -= 1
      when ?+
        @memory[@mem_ptr] += 1
      when ?-
        @memory[@mem_ptr] -= 1
      when ?.
        @output += @memory[@mem_ptr].chr
      when ?,
        @memory[@mem_ptr] = $stdin.getc
      when ?[
        if @memory[@mem_ptr].zero?
          nest = 1
          until nest.zero?
            @code_ptr += 1
            case @code[@code_ptr]
            when ?[
              nest += 1
            when ?]
              nest -= 1
            end
          end
        end
      when ?]
        if @memory[@mem_ptr].nonzero?
          nest = 1
          until nest.zero?
            @code_ptr -= 1
            case @code[@code_ptr]
            when ?[
              nest -= 1
            when ?]
              nest += 1
            end
          end
        end
      end
      @code_ptr += 1
    end

    return @output
  end
end
</pre>
				<p>こんな感じで使う。
				</pre>
				<pre lang="ruby">
hello = "++++++++[>+++++++++< -]>." # H
hello += "< +++++[>++++++< -]>-."         # e
hello += "< ++[>+++< -]>+."                      # l
hello += "."                                                 # l
hello += "+++."                                          # o

bf = BrainFuck.new
p bf.convert(hello) #=> Hello
</pre>
				<p>[と]の処理内容が似てるのが気になる。似てるっていうかほとんど一緒なんだよね。なんかこううまく抽象化することはできないものか。あと無意味にインスタンス変数使い過ぎだな。</p>
				<div class='wpfblike' style='height: 40px;'><fb:like href='http://ukstudio.jp/2007/11/24/ruby_brainfuck/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>
]]></content:encoded>
			<wfw:commentRss>http://ukstudio.jp/2007/11/24/ruby_brainfuck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

