Brainf*ck
このあいだ 図書館にて Rubyの勉強でもしようかなと思って Rubyの本ないし絵本をさがしていたわけですわ
そしたら 大きく「Ruby」と書いてる本があったので 此れでいいかなと思って借りて家で開けたら
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されるはずです