TRAVEL 33

From Esolang
Jump to: navigation, search

TRAVEL 33 is an esolang invented by User:GDavid. It's capable of sending information in time, even backwards therefore it's uncomputable.
It got it's name from the fact that the Hello World example's first line was TRAVEL 33 (changed to GOTO 33).

Commands and two Hello Worlds

GOTO 33

COMMANDS
SET VARIABLE VALUE
ADD VARIABLE VALUE          VALUE BECOMES VALUE % 3 UNLESS IT'S NOW OR LINE
SUBTRACT VARIABLE VALUE     VALUE BECOMES VALUE % 3 UNLESS IT'S NOW OR LINE
SEND VARIABLE TIME
GOTO LINE
CAT VARIABLE TIME LENGTH    COPY CURRENT VALUE TO OUTPUT LENGTH TIMES AT TIME STEPPING 1
                            FOR EACH CHAR MAKING SURE IT RUNS UNTIL END IF NEEDED

REGISTERS
A B C D E F

SPECIAL VALUES
NOW                         THE CURRENT TIME
LINE                        THE CURRENT LINE
INPUT                       ONE CHARACTER READ FROM INPUT

THE PROGRAM MUST RUN AS LONG AS THERE'S INPUT OR OUTPUT OTHERWISE IT'S END GETS CUTTED
ERASING THE OUTPUT IS JUST MAKING SURE THE CAT DOESN'T GET EXECUTED AFTER IT HAS ALREADY
OR AT LEAST NOT WITH THAT CONTENT
THE END OF INPUT IS MINUS ONE
EACH VALUE IS AN ARBITARY SIZE INTEGER
THERE ARE NO COMMENTS
OH WAIT THIS IS A COMMENT BUT HOW
THE ENTIRE CODE IS INTERPRETED AND SYNTAX IS CHECKED JUST IN TIME SO IF WE JUMP OVER
COMMENTS THEY DON'T PRODUCE A SYNTAX ERROR

OH AND ENJOY THE OVERCOMPLICATED HELLO WORLD THINGY BELOW

SET A 'H'
SEND A B
ADD B 1
SET A 'e'
SEND A B
ADD B 1
SET A 'l'
SEND A B
ADD B 1
SEND A B
ADD B 1
SET A 'o'
SEND A B
ADD B 1
SET A ' '
SEND A B
ADD B 1
SET A 'W'
SEND A B
ADD B 1
SET A 'o'
SEND A B
ADD B 1
SET A 'r'
SEND A B
ADD B 1
SET A 'l'
SEND A B
ADD B 1
SET A 'd'
SEND A B
ADD B 1
SET A '!'
SEND A B
ADD B 1
SET B NOW
ADD B 2
ADD B 2
ADD B 2
SEND B 1
SUBTRACT B NOW
CAT A 0 B

SET C LINE
ADD C 2
ADD C 2
ADD C 2
ADD C 2
ADD C 2
GOTO C

AND HERE'S THE EASIEST HELLO WORLD

SET A 'H'
CAT A 0 12
SET A 'e'
SET A 'l'
SET A 'l'
SET A 'o'
SET A ' '
SET A 'W'
SET A 'o'
SET A 'r'
SET A 'l'
SET A 'd'
SET A '!'

Memory

TRAVEL 33 programs have 6 registers, A, B, C, D, E and F. All of these are signed integers.

Getting infinite memory

Infinite memory can be achieved in the following way

  • make a for loop that counts to A with F
    • for every step, check if B equals F
      • if yes, send the value of C to time D
      • otherwise waste the time running the true branch would take - if it's more or less time it won't work

To change memory size, send a different A to time <memory loop start>.

To get a memory value, send the address as B to time <memory loop start>.

To set a memory value, send C to time <first step time> + <step time> * <cell>.

/!\ WARNING /!\
A program taking truly infinite memory would take infinite time to start and terminating it would cause a paradox as it already got the memory size that was sent back in time but if it's terminated, it couldn't have got that information from anywhere. To avoid such weird stuff, every TRAVEL 33 program should be either impossible to terminate by external means or terminating it would mean sending back the values it got but not sent to the time it got them and then truly terminating it. It would still be an interesting question where the value came from actually then.

Turing completeness

Infinite memory and conditional loops are possible, so one can write a BF interpreter in it. Just don't run +[>+] with it or at least don't terminate it! (read the warning at infinite memory about why)