We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

TripJump

From Esolang
Jump to navigation Jump to search
This article is not detailed enough and needs to be expanded. Please help us by adding some more information.

TripJump is to FlipJump what TritBitJump is to BitBitJump.

Description

It's a language whose only instruction is to flip a bit unconditionally and then jump unconditionally. The address of the bit to be flipped is obtained by finding the value, little-endian, that starts from the bit a the instruction pointer is on. If that bit and the bit after it are both 1 (so if it reads 11) it skips that and keeps skipping those pairs until it finds a pair with at least one 0. It keeps looking to the right until it hits a 1 bit an even number of bits from a immediately followed by another 1 bit. Sequences of 00, 10, and 01 are analyzed as 0, 1, and 2 respectively (remember, little-endian).

It then finds the value, little-endian, that starts from the bit b right after the 11 that ended the previous number. If that bit and the bit after it are both 1 (so if it reads 11 again) it skips that and keeps skipping those pairs until it finds a pair with at least one 0. Then it keeps looking to the right until it hits a 1 bit an even number of spaces from b immediately followed by another 1 bit. The same procedure: sequences of 00, 10, and 01 are analyzed as 0, 1, and 2 respectively again, and now the instruction reader jumps to that address in terms of bits (I did say bits and not sets of bits). It jumps relative to the first bit, which is indexed as 0.

Essentially, it does the flip and jump instructions of FlipJump in such a way that it doesn't need a fixed integer size (though not in the elegant way Subleq solves the same problem).

Actually Writing the Thing

You may realize that you can't write TripJump the same way as FlipJump without losing valuable power. Deliberately spacing out values can be very helpful in this language since you can change a smaller value to a significantly larger value that way. Therefore, this language is written similarly to TritBitJump instead.

  • Numbers are be written in base 3, little-endian with all of the digits written out, then a single slash (optionally surrounded by spaces), then base 10, big endian.
  • A single instance of 11 corresponds to a space between numbers
  • If there is more than one 11 between numbers, it is represented like "(# of 11s in base 10)" surrounded by spaces, so 00111100 will be "0 (2) 0".
  • Newlines have to be added to start a new instruction, but can also be added as one wishes, so blank lines are fine in this version of the code.
  • Comments are indicated by // and can appear at the start of a line or after a line of code.

So code which could be written:

101101110011011100111110111001110011

can be represented like:

1 2 / 1 2
0 2 / 0 2
0 (2) 1 / 0 (2) 1 // this is a comment
12 0 / 7 0

Computational Class

FlipJump is a bounded storage machine. If it's only bounded by its fixed address size, then TripJump is Turing-complete. Otherwise, it's also a bounded-storage machine for whatever reason FlipJump is.