brainfuck etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
brainfuck etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

14 Nisan 2009 Salı

Rack ile saçmalamalar ikinci partcan: BSP

Daha önceki RHP denemesi gibi bu da BSP(Brainfuck Server Pages), can sıkıntısına rack ile yaptığım web şeylerinden biri. Şu anda pek gelişmiş değil, session şeylerine, cookielere ve bilimum environment hashi içeriğine erişebilir değil ama brainfuck kullanan herhangi bir insan evladının o zıbıdıkları kullanacak bir uygulama yazmayı düşünebilecek ve isteyebilecek kadar manyak olmadığını tahmin etmekteyim.
Ahanda kodu.
Bu arada benim şu anda yazmaya üşendiğim brainfuck interpreterını(geçmişte oldukça garip şekillerde[c'ye derleme, bytecode interpreter vs.] yazmıştım, ama saf ruby ile yazılmış yok) yazdığı için Scott Olson'a teşekkür etmekteyim.

16 Aralık 2007 Pazar

Brainfuckcan

Python ile brainfuck interpreter ı yazdım.bikaç yerde(+ ve - operatörleri) azıcık kopya çekmiş olsam da :p.ahanda:


import sys
import array
class brainfuck:
"Brainfuck code.can be interpreted :p"

def __init__(self,code = "",file_or_string = 's',max_size = 30000 ):
self.data= array.array('B', ( 0 for _ in xrange(max_size)))
if (code != ""):
if(file_or_string == 's'):
self.read(code)
elif(file_or_string == 'f'):
self.read_file(code)
else:
print "WARNING: File_or_string invalid - no code loaded."

def read(self,code):
"Reads the code string"
self.code = code

def read_file(self,filename):
"Reads the code from the specified file"
code_file = open(filename, 'r')
self.code = code_file.read()

def run(self):
"Obviously,interpretes and runs the code"
pos = 0 #the position in code
ptr = 0 #data pointer

while pos < curr =" self.code[pos]"><+-.,[]": #operators currd = self.data[ptr] #current data at the pointer if curr == '>':
ptr += 1
elif curr == '<':
ptr -= 1

elif curr == '+':
self.data[ptr] = (currd + 1) & 0xFF
elif curr == '-':
self.data[ptr] = (currd - 1) & 0xFF

elif curr == '.':
sys.stdout.write(chr(currd))
elif curr == ',':
self.data[pos] = raw_input()[0]

elif curr == '[':
if currd == 0:
par = 1
while(par):
pos += 1
if self.code[pos] == ']':
par -= 1
if par == 0:
break
elif self.code[pos] == '[':
par +=1
elif curr == ']':
if currd != 0:
par = 1
while (par):
pos -= 1
if self.code[pos] == '[':
par -= 1
if par == 0:
break
elif self.code[pos] == ']':
par += 1
#end of operator control
pos += 1 #increementing position by 1
#end of brainfuck.run function
#end of brainfuck class

bide inputu tam düzgün çalışmamakta sanki