3D

From Esolang

Jump to: navigation, search

3D is a 3 dimensional esoteric programming language inspired by Befunge. It was created by User:Stop h time on 25 march 2008 and finished 31 march 2008.

Contents

[edit] Commands

  • LEFT, start moving to the left
  • RIGHT, start moving to the right
  • UP, start moving up
  • DOWN, start moving down
  • NEXT, start moving forewards through the 3rd dimension
  • PREV, start moving backwards through the 3rd dimension
  • JUMP, jump over an instruction
  • DBLJMP, jump over 2 instructions
  • INT, this one has 3 different usages: set integer variable, use integer variable, convert a string to an integer (next command must be an integer, INT, a string or STR, the first two for the first usages, the latter two for the third one)
  • STR, 2 different usages: set a string variable, or use a string variable (next command must be an integer or INT to let the interprenter know which string)
  • IFEQU, Jump if INT0 != INT1
  • STREQU, Jump if STR0 != STR1
  • IFLAR, Jump if INT0 <= INT1
  • IFRND, jump random (50% chance of JUMP)
  • RNDDIR, random direction (including back!)
  • END, end program
  • SWAP, swap 2 variables (example: SWAP INT 3 4, to swap INT3 and INT4 or: SWAP INT INT 0 1, to swap the integer no INT0 and INT1)
  • YNPRMT, prompt Yes/No (label text: STR0) (if user chooses No, JUMP)
  • SPRMT, prompt string (label text: STR0, default value/store var: STR1)
  • OUTPUT, output variable (example: OUTPUT STR 1 or: OUTPUT INT 1)
  • ADD, add something to an int (example: ADD 2 INT 3 would translate as INT2 += INT3, ADD 1 3 would be INT1 += 3). Useful as logical OR.
  • SUB, subtract something from the previous defined int, usage similar to ADD. Useful as logical XOR.
  • MUL, multiply, see above. Useful as logical AND.
  • DIV, integer division, usage: see above.
  • NOT, Usage: NOT 3. If INT3 would be 0, it is changed to 1, else it is changed to 0.
  • empty: do nothing
  • "abc, string constant
  • 123, integer constant

[edit] Implementation

User:Stop h time has written an interpreter and two simple editors in Python. (Scripts available for download at http://www.mediafire.com/?sharekey=27b11e61e345fad17069484bded33bcd20cda4445bd3f7cf)

[edit] Turing-complete

The author believes 3D is Turing-complete, but isn't quite sure. He thinks the following program may prove it:

RIGHT   ADD     0       1       INT     DOWN
UP              16      0       INT     LEFT

It's an infinite loop, every time adding 1 to INT0, and setting INT(INT0) to 16. So this would set INT1 to 16, INT2 to 16, INT3 to 16, until infinity.

[edit] Examples

The following examples are all valid 3D programs (laid out on 2 dimensions, due to technical limitations):

OUTPUT  "Hello world    END     prints "Hello World" on screen
DOWN    The program used by the author for testing his interprenter.
INT     It writes the numbers 1-10 on screen and exits.
0       (Note the suspended addition)
10
RIGHT   ADD             1               IFLAR   DOWN    END
UP      1       INT     OUTPUT          1       LEFT

3D is especially fit for creating 'marble-machines':

OUTPUT  IFRND   DOWN    DOWN
DOWN            LEFT    IFRND
IFRND                   RIGHT   IFRND   DOWN    DOWN
RIGHT   DOWN
0       1       2       4       5       6       7
END     END     END     END     END     END     END
Retrieved from "http://esolangs.org/wiki/3D"
Personal tools