46 lines
1.6 KiB
Plaintext
46 lines
1.6 KiB
Plaintext
func main[] : I64
|
|
// https://brainfuck.org/sierpinski.b
|
|
let src: String = "++++++++[>+>++++<<-]>++>>+<[-[>>+<<-]+>>]>+[-<<<[->[+[-]+>++>>>-<<]<[<]>>++++++[<<+++++>>-]+<<++.[-]<<]>.>+[>>]>+]"
|
|
let src_len: I64 = c.strlen(src)
|
|
let i: I64 = 0
|
|
|
|
let memory: Ptr = c.calloc(1, 30000)
|
|
let p: I64 = 0
|
|
|
|
while i < src_len
|
|
let op: U8 = str.nth(src, i)
|
|
|
|
if op == '>'
|
|
p = p + 1
|
|
else if op == '<'
|
|
p = p - 1
|
|
else if op == '+'
|
|
str.set(memory, p, str.nth(memory, p)+1)
|
|
else if op == '-'
|
|
str.set(memory, p, str.nth(memory, p)-1)
|
|
else if op == '.'
|
|
c.printf("%c", str.nth(memory, p))
|
|
else if op == ','
|
|
str.set(memory, p, c.getchar())
|
|
else if op == '['
|
|
if !str.nth(memory, p)
|
|
i = i + 1
|
|
let opened: I64 = 0
|
|
while i < src_len & !(str.nth(src, i) == ']' & !opened)
|
|
if str.nth(src, i) == '['
|
|
opened = opened + 1
|
|
else if str.nth(src, i) == ']'
|
|
opened = opened - 1
|
|
i = i + 1
|
|
else if op == ']'
|
|
if str.nth(memory, p)
|
|
i = i - 1
|
|
let closed: I64 = 0
|
|
while i >= 0 & !(str.nth(src, i) == '[' & !closed)
|
|
if str.nth(src, i) == ']'
|
|
closed = closed + 1
|
|
else if str.nth(src, i) == '['
|
|
closed = closed - 1
|
|
i = i - 1
|
|
|
|
i = i + 1 |