Quantcast
Channel: Interpret TwoMega - Code Golf Stack Exchange
Viewing all articles
Browse latest Browse all 6

Interpret TwoMega

$
0
0

In this challenge, you will write an interpreter for 2Ω (transcribed as TwoMega), a language based loosely on brainfuck with an infinite-dimensional storage space.

The Language

2Ω contains three pieces of state:

  • The Tape, which is an infinite list of bits, all initialized to 0. It has a leftmost element, but no rightmost element.

  • The Memory Pointer, which is a nonnegative integer that is an index of an element in the tape. A higher memory pointer refers to a tape cell further to the right; a memory pointer of 0 refers to the leftmost element. The memory pointer is initialized to 0.

  • The Hypercube, which is a conceptually -dimensional "box" of cells, each of which contains a bit initialized to 0. The width of the Hypercube is bound in every dimension to only 2 cells, but the infinity of dimensions means the number of cells is uncountable.

An index into the hypercube is an infinite list of bits that refers to a cell in the hypercube (in the same way that a finite list of bits could be used to refer to a hypercube of finite dimension). Because the tape is an infinite list of bits, the entire tape always refers to an element of the Hypercube; this element is called the referent.

2Ω gives meaning to 7 different characters:

  • < decrements the memory pointer by 1. Decrementing it below 0 is undefined behavior, so you do not need to handle it.
  • > increments the memory pointer by 1.
  • ! flips the bit at the referent.
  • . outputs the bit at the referent.
  • ^ replaces the bit at the cell pointed to by the memory pointer on the tape with the inverse of the bit at the referent.
  • [x] runs the code x as long as the bit at the referent is 1.

The Challenge

Your task is to write a program that takes a string as input and executes that input as a 2Ω program.

This is , so the shortest valid answer (measured in bytes) wins.

Notes

  • You can assume that the program will consist solely of the characters <>!.^[] and that [] will be properly nested.
  • Your interpreter should only be limited by available memory on the system. It should be able to run the sample programs in a reasonable amount of time.

Sample Programs

Print 1:

!.

Print 010:

.!.!.

Print 0 forever:

![!.!]

Print 0 forever, or 1 forever if ! is prepended:

[.]![!.!]

Viewing all articles
Browse latest Browse all 6

Latest Images

Trending Articles





Latest Images