Skip to main content
added 60 characters in body
Source Link
Erik the Outgolfer
  • 40.6k
  • 1
  • 24
  • 40

Sesos

Sesos is a language largely based upon brainfuck, but it has some extra features:

  • Unbounded signed integers (can be disabled)
  • I/O with numbers (input and output must be enabled separately)
  • Conditional jump based on whether the input's EOF has been reached
  • Conditional jump, with the code before it having been executed at least once.

Additionally, it has a difference from brainfuck: While brainfuck's + and - increment and decrement the current cell respectively, Sesos's add and sub take an argument determining how much to add or subtract respectively. The same difference also applies between brainfuck's > (go one cell right) and < (go one cell left) and Sesos's fwd and rwd.

Another important difference is that you can't put certain instructions next to each other, due to how the program is encoded into a binary file. More specifically, add/sub, fwd/rwd and jmp/jnz are pairs of instructions which can't be put one after the other. Also, get can't go after add or sub.

The final difference is that jmp and nop can't be the last instructions of a program.


Programs are written top-to-bottom, instead of left-to-right, before compilation. There are 10 instructions and 3 assembler directives.

The instructions are:

  • add <n>: Adds <n> to the current cell.
  • sub <n>: Subtracts <n> from the current cell.
  • fwd <n>: Moves <n> cells forward.
  • bwd <n>: Moves <n> cells backward.
  • put: Prints the content of the current cell.
  • get: Takes one input character (or integer) and replaces the current cell's content with it.
  • jmp: Sets an entry point, and jumps to its corresponding exit point (i.e. the closest following exit point that doesn't belong to any following jmps).
  • nop: Sets an entry point.
  • jnz: Sets an exit point and, if the current cell is non-zero, jumps right below its corresponding entry point.
  • jne: Sets an exit point and, if STDIN's EOF hasn't been reached, calls get and jumps right below its corresponding entry point.

Leading jmp instructions can be omitted, as long as their corresponding exit points are explicitly present in the code. The same is true for trailing jnz, where their corresponding entry points must be explicitly specified.

The assembler directives are:

  • set numin: Take input as integers instead of characters.
  • set numout: Print as numbers instead of characters.
  • set mask: Use 8-bit unsigned integers instead of unbounded signed integers.

In the source code, those directives can be put anywhere, and the result will be the same.

Extra whitespace is ignored.

Details about the compilation process can be found over the GitHub repository.


I'm nominating this language because interest was always little and gradually faded away. I think it's a very interesting language, and it definitely has golfing potential.


Tips for golfing in Sesos

Sesos

Sesos is a language largely based upon brainfuck, but it has some extra features:

  • Unbounded signed integers (can be disabled)
  • I/O with numbers (input and output must be enabled separately)
  • Conditional jump based on whether the input's EOF has been reached
  • Conditional jump, with the code before it having been executed at least once.

Additionally, it has a difference from brainfuck: While brainfuck's + and - increment and decrement the current cell respectively, Sesos's add and sub take an argument determining how much to add or subtract respectively. The same difference also applies between brainfuck's > (go one cell right) and < (go one cell left) and Sesos's fwd and rwd.

Another important difference is that you can't put certain instructions next to each other, due to how the program is encoded into a binary file. More specifically, add/sub, fwd/rwd and jmp/jnz are pairs of instructions which can't be put one after the other. Also, get can't go after add or sub.

The final difference is that jmp and nop can't be the last instructions of a program.


Programs are written top-to-bottom, instead of left-to-right, before compilation. There are 10 instructions and 3 assembler directives.

The instructions are:

  • add <n>: Adds <n> to the current cell.
  • sub <n>: Subtracts <n> from the current cell.
  • fwd <n>: Moves <n> cells forward.
  • bwd <n>: Moves <n> cells backward.
  • put: Prints the content of the current cell.
  • get: Takes one input character (or integer) and replaces the current cell's content with it.
  • jmp: Sets an entry point, and jumps to its corresponding exit point (i.e. the closest following exit point that doesn't belong to any following jmps).
  • nop: Sets an entry point.
  • jnz: Sets an exit point and, if the current cell is non-zero, jumps right below its corresponding entry point.
  • jne: Sets an exit point and, if STDIN's EOF hasn't been reached, calls get and jumps right below its corresponding entry point.

Leading jmp instructions can be omitted, as long as their corresponding exit points are explicitly present in the code. The same is true for trailing jnz, where their corresponding entry points must be explicitly specified.

The assembler directives are:

  • set numin: Take input as integers instead of characters.
  • set numout: Print as numbers instead of characters.
  • set mask: Use 8-bit unsigned integers instead of unbounded signed integers.

In the source code, those directives can be put anywhere, and the result will be the same.

Extra whitespace is ignored.

Details about the compilation process can be found over the GitHub repository.


I'm nominating this language because interest was always little and gradually faded away. I think it's a very interesting language, and it definitely has golfing potential.

Sesos

Sesos is a language largely based upon brainfuck, but it has some extra features:

  • Unbounded signed integers (can be disabled)
  • I/O with numbers (input and output must be enabled separately)
  • Conditional jump based on whether the input's EOF has been reached
  • Conditional jump, with the code before it having been executed at least once.

Additionally, it has a difference from brainfuck: While brainfuck's + and - increment and decrement the current cell respectively, Sesos's add and sub take an argument determining how much to add or subtract respectively. The same difference also applies between brainfuck's > (go one cell right) and < (go one cell left) and Sesos's fwd and rwd.

Another important difference is that you can't put certain instructions next to each other, due to how the program is encoded into a binary file. More specifically, add/sub, fwd/rwd and jmp/jnz are pairs of instructions which can't be put one after the other. Also, get can't go after add or sub.

The final difference is that jmp and nop can't be the last instructions of a program.


Programs are written top-to-bottom, instead of left-to-right, before compilation. There are 10 instructions and 3 assembler directives.

The instructions are:

  • add <n>: Adds <n> to the current cell.
  • sub <n>: Subtracts <n> from the current cell.
  • fwd <n>: Moves <n> cells forward.
  • bwd <n>: Moves <n> cells backward.
  • put: Prints the content of the current cell.
  • get: Takes one input character (or integer) and replaces the current cell's content with it.
  • jmp: Sets an entry point, and jumps to its corresponding exit point (i.e. the closest following exit point that doesn't belong to any following jmps).
  • nop: Sets an entry point.
  • jnz: Sets an exit point and, if the current cell is non-zero, jumps right below its corresponding entry point.
  • jne: Sets an exit point and, if STDIN's EOF hasn't been reached, calls get and jumps right below its corresponding entry point.

Leading jmp instructions can be omitted, as long as their corresponding exit points are explicitly present in the code. The same is true for trailing jnz, where their corresponding entry points must be explicitly specified.

The assembler directives are:

  • set numin: Take input as integers instead of characters.
  • set numout: Print as numbers instead of characters.
  • set mask: Use 8-bit unsigned integers instead of unbounded signed integers.

In the source code, those directives can be put anywhere, and the result will be the same.

Extra whitespace is ignored.

Details about the compilation process can be found over the GitHub repository.


I'm nominating this language because interest was always little and gradually faded away. I think it's a very interesting language, and it definitely has golfing potential.


Tips for golfing in Sesos

Source Link
Erik the Outgolfer
  • 40.6k
  • 1
  • 24
  • 40

Sesos

Sesos is a language largely based upon brainfuck, but it has some extra features:

  • Unbounded signed integers (can be disabled)
  • I/O with numbers (input and output must be enabled separately)
  • Conditional jump based on whether the input's EOF has been reached
  • Conditional jump, with the code before it having been executed at least once.

Additionally, it has a difference from brainfuck: While brainfuck's + and - increment and decrement the current cell respectively, Sesos's add and sub take an argument determining how much to add or subtract respectively. The same difference also applies between brainfuck's > (go one cell right) and < (go one cell left) and Sesos's fwd and rwd.

Another important difference is that you can't put certain instructions next to each other, due to how the program is encoded into a binary file. More specifically, add/sub, fwd/rwd and jmp/jnz are pairs of instructions which can't be put one after the other. Also, get can't go after add or sub.

The final difference is that jmp and nop can't be the last instructions of a program.


Programs are written top-to-bottom, instead of left-to-right, before compilation. There are 10 instructions and 3 assembler directives.

The instructions are:

  • add <n>: Adds <n> to the current cell.
  • sub <n>: Subtracts <n> from the current cell.
  • fwd <n>: Moves <n> cells forward.
  • bwd <n>: Moves <n> cells backward.
  • put: Prints the content of the current cell.
  • get: Takes one input character (or integer) and replaces the current cell's content with it.
  • jmp: Sets an entry point, and jumps to its corresponding exit point (i.e. the closest following exit point that doesn't belong to any following jmps).
  • nop: Sets an entry point.
  • jnz: Sets an exit point and, if the current cell is non-zero, jumps right below its corresponding entry point.
  • jne: Sets an exit point and, if STDIN's EOF hasn't been reached, calls get and jumps right below its corresponding entry point.

Leading jmp instructions can be omitted, as long as their corresponding exit points are explicitly present in the code. The same is true for trailing jnz, where their corresponding entry points must be explicitly specified.

The assembler directives are:

  • set numin: Take input as integers instead of characters.
  • set numout: Print as numbers instead of characters.
  • set mask: Use 8-bit unsigned integers instead of unbounded signed integers.

In the source code, those directives can be put anywhere, and the result will be the same.

Extra whitespace is ignored.

Details about the compilation process can be found over the GitHub repository.


I'm nominating this language because interest was always little and gradually faded away. I think it's a very interesting language, and it definitely has golfing potential.