59 lines
1.5 KiB
Plaintext
59 lines
1.5 KiB
Plaintext
(de brackets (Lst)
|
|
(let S NIL
|
|
(make
|
|
(for (I . X) Lst
|
|
(case X
|
|
("[" (push 'S I))
|
|
("]"
|
|
(unless S (quit "Unbalanced '['"))
|
|
(link (list (pop 'S) I)) ) ) )
|
|
(when S (quit "Unbalanced ']'")) ) ) )
|
|
|
|
(de lupbra (Lst N)
|
|
(find
|
|
'((I)
|
|
(or
|
|
(= (car I) N)
|
|
(= (cadr I) N) ) )
|
|
Lst ) )
|
|
|
|
(de brain (L)
|
|
(let
|
|
(D (0)
|
|
DH 1
|
|
DL 1
|
|
CH 1
|
|
CL (length L)
|
|
B (brackets L) )
|
|
(loop
|
|
(case (get L CH)
|
|
(>
|
|
(inc 'DH)
|
|
(when (> DH DL)
|
|
(setq D (insert DH D 0))
|
|
(inc 'DL) ) )
|
|
(<
|
|
(dec 'DH)
|
|
(when (< DH 1)
|
|
(setq D (insert DH D 0))
|
|
(inc 'DL)
|
|
(one DH) ) )
|
|
(+ (inc (nth D DH)))
|
|
(- (dec (nth D DH)))
|
|
(. (prin (char (get D DH))))
|
|
("," (set (nth D DH) (char (key))))
|
|
("["
|
|
(when (=0 (get D DH))
|
|
(setq CH (cadr (lupbra B CH))) ) )
|
|
("]"
|
|
(when (n0 (get D DH))
|
|
(setq CH (car (lupbra B CH))) ) ) )
|
|
(inc 'CH)
|
|
(T (> CH CL)) ) ) )
|
|
|
|
(brain (chop ">+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
|
|
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++.------.---
|
|
-----.[-]>++++++++[<++++>- ]<+.[-]++++++++++." ) )
|
|
|
|
(bye)
|