FizzBuzz in Befunge93
Here's mine, done basically without consulting yours.

v    &gt;          0v    &gt;              v &gt;\#v_:.v
0&gt;:3%|           &gt;\:5%|              &gt;:|  &gt;   v
&gt;    &gt;"zziF",,,,1^    &gt;"zzuB",,,,\1+\^ &gt;\"!",$v
 ^+1 _@#-**455: ,*25                          &lt;


My strategy for writing it was just to write the very simplest code possible — the body of the main loop is just

if (i divisible by 3) "Fizz"
if (i divisible by 5) "Buzz"
if (i equals 0) "!"


and then throw a loop around that. So I started by writing just

     &gt;          v   &gt;          v &gt;    v
0&gt;:3%|          &gt;:5%|          &gt;:|    v
&gt;    &gt;"zziF",,,,^   &gt;"zzuB",,,,^ &gt;"!",v
 ^+1 _@#-**455:                       &lt;


But this is missing three pieces: (1) there should be a newline after each line; (2) there should be a :. to print i whenever we don't print Fizz or Buzz; and (3) we need to avoid printing i whenever we did print Fizz or Buzz.

(1) is easy to fix; we just add ,*25 to the "carriage return" code along the bottom of the loop.

(3) is awkward. I made an abortive attempt to squeeze a recomputation of something like ::3%!\5%!+#v_:. (read left-to-right) into the "carriage return" line before realizing that computing logical AND ("i mod 3 AND i mod 5") is awkward in Befunge, and I would have to add a fifth line if I wanted to branch again here with #v_. So it makes sense to do what you did and keep track of whether we've printed "Fizz" or "Buzz" as we print them. This lengthens the loop body by a few characters (most of which are \).

With (3) out of the way, (2) is easy to squeeze into the blank rectangle in the upper right. As a bonus, if we just printed "!", then we know we don't need to test for :.!



As for your code: It's definitely more convoluted than mine! :D  But in Befunge, this is not necessarily a bad thing.

There are some infelicities; for example you use *2*5*52:+1,*52,*84 where I would have used **455:+1,*52 — I don't understand why you bother printing that space character with *84 since it comes at the end of a line. Possibly a vestige of an earlier version of the code?

On the right-hand side you have a # jumping over a 5. If you were trying to be obfuscated, then you could replace this with a codepath that just runs straight through the 5 and then corrects with a $ further up. You have plenty of white space where a $ could fit in.

Rather than always using

 &gt;A
&gt;|
 &gt;B


consider using

  &gt;A
&gt;#^_B


where it saves you a line. In my long-rusted experience, Befunge idiom still values "small number of lines" over "small number of columns" — the language may be 2D but it's still written by line-oriented chauvinists. :)



Can they be reworked into functions? — No. :) Befunge-93 has no concept of the (non-#) GOTO, and as a corollary it has no GOSUB and no RETURN. I can imagine a programming idiom that applies a binary search tree of "line numbers" down the left side of the program and can "GOTO" a line whose number is specified on the stack; but this would be way overengineered for FizzBuzz.

Can this be condensed? — Yes. :)

Do other people understand the steps I've taken? — Yes. It's pretty straightforward. :)