I've got to do some other things right now, but as a quick note:

   ; newbefunge p;49
|value error: newbefunge
|   ;    newbefunge p;49

reddit interpreted _befunge_ as italics for that part of the command.

Of course, this works:

   ; new_befunge_ p;49
0 49
┌┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
││0│0│0│0│0│0│0│0│0│0│0│0│0│0│0│
└┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
0 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

but if anyone ever tries the reddit version they'll have problems.

Thanks,

-- 
Raul


On Sun, Jun 1, 2014 at 2:12 PM, 'Pascal Jasmin' via Programming
<[email protected]> wrote:
> Embarrassingly revealing the extent of my procrastination.  Befunge is a toy 
> stack language. http://en.wikipedia.org/wiki/Befunge
>
>
> Note 'BEHOLD BEFUNGE 2.0'
> first > is optional
> arbitrary sized matrix.  Extensible to multidimensional matrixes.
> allows list instead of matrix (corrected with leading axis) also scalar @ is 
> valid.
> debug support (run x instructions then return. (with stack and ip) resume 
> where left off)
> debug support includes tracing each instruction with boxed power parameter
> start/resume at any point with any stack
> user input functions are aribtrary J functions.  Can be used to change 
> dimension or cause other side effects.
> invalid unhandled instructions conveniently turned into 0
> to make language even saner, p helpfully changed to use 3 stack parameters
> domain errors helpfully teach you to write your code better through 
> meditation and no other information.
> )
> cocurrent 'z'
> defaults1 =: ([`]@.(0=#@>@[))
> defaults =: defaults1"0 0 f.
> fixlenx =: 1 : (':';'((#y) {. x) u y')
> eval =: 1 : ' a: 1 :  m'
> pD_z_ =:  1!:2&2
> NB. implement with "global"/instance vars for inputcb, prog
> cocurrent 'befunge'
> new =: 3 : 0
> o =. lastbefunge_base_ =: conew 'befunge'
> create__o y
> )
> create =: 3 : 0
> 'P startp cbN cbT' =: y defaults fixlenx a:;_;'<@?@2:';'3 : '' ;/ ''''Hello 
> World!'''' '' '
> while. 2>#$P do. P =: ,: P end.
> cbN =: cbN eval
> cbT =: cbT eval
> 'h w' =: $ P
> ptr =: 0 0
> stack =: a:
> quotemode=: 0
> startp start a:
> )
> NB. op list. functions always provided inst ptr and stack.
> T =: cutLF 0 : 0
>  ]
>>3 : ('y';~'nextptr =: nextptrl')
> <3 : ('y';~'nextptr =: nextptrr')
> ^3 : ('y';~'nextptr =: nextptru')
> v3 : ('y';~'nextptr =: nextptrd')
> @3 : ('y';~'nextptr =: nextptrend')
> +(_2 }. ]) , <@:+/@:>@:(_2 {. ])
> "3 : ('y';~'quotemode=: -. quotemode')
> ,(_1 }. ]) , {&a. each@:{:
> #3 : ('y';~'domod=: (([: nextptr each {.) , }.)' )
> &] , cbN
> ~] , cbT
> )
> execstep =: 4 : 0 NB. x is command, y is stack. returns new stack
> if. quotemode do. if. '"' ~: x do. y , < pD x return. end. else. pD 
> 'quotemode 0' end.
> i =. x i.~ {. &> T
> if. i = # T do.  y , < 0 ". x  return. end.
> pD i{T
> (}. > i{T) eval y
> )
> domod=: ]
> mod =: 3 : 0
> o =. domod y
> domod =: ]
> o
> )
> NB. y is ptr (h w) ;stack (list of boxed stack values)
> start =: 4 : 0
> y =. y defaults fixlenx ptr;stack
> o =. mod@:(([: nextptr each {.) , }. execstep~ P {~ {.)^:x y
> pD ptr =: > {. o
> pD stack =: }. o
> if. '@' = P{~ < ptr do. 2}. o else. o end.
> )
> getptr =: 3 : ' P{~  < ptr"_^:(0=#) y'
> NB. y is just ptr. function gets modified by ><^v. initlmode
> nextptr =: nextptrl =: 3 : '({. , [: 0:^:(w<]) >:@:{: ) y'
> nextptrr =: 3 : '({. , [: w"_^:(0>]) <:@:{: ) y'
> nextptru =: 3 : '({: ,~ [: h"_^:(0>]) <:@:{.) y'
> nextptrd =: 3 : '({: ,~ [: 0:^:(h<]) >:@:{.) y'
> nextptrend =: ]
> cocurrent 'base'
> p =: > cutLF 0 : 0
>>"Hello World!" v
> v             @#<
>>55+, "from J"^
> )
>
> NB. usage see 
> http://www.reddit.com/r/dailyprogrammer/comments/270mll/612014_challenge_164_hard_what_the_funge_is_this/chwg1vh
>
>    ; new_befunge_ < p
> Hello World!
> from J
>
>
>
> the number parameter tells it how many steps to make in order to guard from 
> non termination.
>  redditfmt new_befunge_ p;19
>      ┌────┬┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
>      │1 13││H│e│l│l│o│ │W│o│r│l│d│!│
>      └────┴┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
> when it doesn't complete to end, it returns the stack pointer together with 
> stack.
> can ask for the current code pointer value
>    quote getptr__lastbefunge  ''
> ' '  NB. just a space
> or character at any pointer:
>    getptr__lastbefunge 0 0
>>
> can resume where left off
>   33 start__lastbefunge  a:
>     ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
>      │H│e│l│l│o│ │W│o│r│l│d│!│ │r│e│d│d│i│t│
>      └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
>
> says to go forward another 33 steps.  When it terminates (hits @) returns 
> just the stack.
> can invoke a befunge program in one line specifying program as a string
> new_befunge_ '@';3  NB. running too many steps is ok.
>    new_befunge_ '23+@';6  NB. first > is optional
> 5
>  new_befunge_ 12 ;~ 2 4 $ '23+v@  <'
> same program as above.  J allows to format a table in one line:
> new_befunge_  < 2 4 $ '23+v@  <'
> also same program... number of steps is optional.
>
> parameters are implemented.  Pass a user function that could return any 
> number of new stack items to add.  all of these functions return 5
>   new_befunge_  '2&+@';_;'<@3:'
>   new_befunge_  '&+@';_;'2;3:'
>   new_befunge_  '2&+@';_;'1 + leaf {:'
> last function takes the last value on stack to modify it(add 1+2 in J code + 
> 2 on stack by befunge code)
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to