Brainf*ck

このあいだ 図書館にて Rubyの勉強でもしようかなと思って Rubyの本ないし絵本をさがしていたわけですわ
そしたら 大きく「Ruby」と書いてる本があったので 此れでいいかなと思って借りて家で開けたら

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

Rubyをひと通り学んでさらに変なことする人のための本でしたorz

ただ内容が面白かったしRubyは書けないけどpythonなら書けるかなと思ってBrainf_ck実装してみました

ただちょっとひねってあります
PILを使ってるあたりすごいひねくれてます

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
from PIL import Image



def run(src):
	kakko={}
	tape={}
	cp=0
	point=0

	stack=[]
	while cp<len(src):
		if(src[cp]=='6'):    stack+=[cp]
		elif(src[cp]=='7'):
			if len(stack)==0:
				print 'error'
				return
			else:
				n=stack.pop()
				kakko[n]=cp
				kakko[cp]=n
		cp+=1
		
	if len(stack)!=0:
		print 'error'
		return 
	
	cp=0
	
	while cp<len(src):
		if src[cp]=='0':                               ##+
			try:
				tape[point]+=1
			except KeyError:
				tape[point]=1
		elif src[cp]=='1':                             ##-
			try:
				tape[point]-=1
			except KeyError:
				tepe[point]=1
		elif src[cp]=='2':                             ##<
			point-=1
		elif src[cp]=='3':                             ##>
			point+=1
		elif src[cp]=='4':                             ##,
			tape[point]=ord(sys.stdin.read(1))
		elif src[cp]=='5':                             ##.
			sys.stdout.write(chr(tape[point])) 
		elif src[cp]=='6':                             ##[
			if tape[point]==0:cp=kakko[cp]
		elif src[cp]=='7':                             ##]
			if tape[point]!=0:cp=kakko[cp]
		cp+=1
	
						
im = Image.open(sys.argv[1])

rgbx=im.convert("RGB")
rg = list(rgbx.getdata())
axs=[rg.pop(0),rg.pop(0),rg.pop(0)]
src=""
while 1:
	j=[rg.pop(0),rg.pop(0),rg.pop(0)]
	if j.count(axs[2]):break
	src+=str(axs.index(j[0])*4+axs.index(j[1])*2+axs.index(j[2]))
run(src)

こちらがHelloWorldのソースコード

PILが入っていればちゃんとHelloWorldされるはずです