Aquí hay una definición de lenguaje muy simple:
A Variable is any string that does not contain ^, <, >, !, or ?
The empty string is a valid variable identifier
The value of every variable starts at 0.
A Statement is one of (var is a Variable, P is a Program):
var^ -> changes var to be equal to 1 more than itself
var<P> -> while var > 0, changes var to be equal to 1 less than itself, then runs P
var! -> output value of var
var? -> ask for non-negative integer as input, increase var by that value
A Program is a concatenation of Statements, running a Program means running each Statement in order
Programas de ejemplo (tenga en cuenta que la cadena vacía es una variable, pero la usaré con moderación en aras de la claridad, y algunas variables se ponen a cero en el programa cuando generalmente son 0 por defecto):
<>: sets the value of the empty string variable to 0
b<>b?b<a^>: asks for b, then adds the value stored in b to a, zeroing b in the process
b<>b?a<>b<a^>: asks for b, then sets a to the value of b, zeroing b in the process
a<>c<>b<a^c^>c<b^> : copies the value in b into a without zeroing it
b<>c<>a<c^c^c<b^>>b! : outputs a multiplied by 2
b^b<a<>a?a!b^> : outputs what you input, forever
Su objetivo es escribir el intérprete más pequeño para este idioma.
El valor de una variable puede ser arbitrariamente grande y solo debe estar limitado por la memoria total a la que tiene acceso su idioma, en teoría, pero solo debe manejar valores de hasta 2 ^ 256.
Su programa debería ser capaz de manejar programas arbitrariamente largos, en teoría, pero solo se le pedirá que trabaje en programas de menos de 2 ^ 32 caracteres de longitud. También debe manejar bucles anidados de profundidad de hasta 2 ^ 32.
Puede suponer que el programa es válido y que solo obtendrá enteros no negativos cuando solicite información. También puede suponer que solo los caracteres imprimibles ASCII se incluyen en la cadena de entrada.
La velocidad del programa que interpreta no importa, ya será muy lenta para cosas tan simples como la multiplicación de 5 dígitos, sin optimización.
Si desea utilizar un idioma que no puede aceptar razonablemente la entrada o producir la salida de la manera descrita por el idioma, utilice cualquier interpretación que desee para que sea posible. Esto se aplica a cualquier razón por la cual su idioma no pueda implementar algún comportamiento requerido. Quiero que todos los idiomas puedan competir.
El programa más corto gana. Se aplican lagunas estándar.