Piet

Piet  es un lenguaje de programación esotérico desarrollado por David Morgan-Mar. El lenguaje Piet usa imágenes coloridas como programas. Un programa de Piet parece una abstracción pospictórica . Piet obtuvo su nombre del artista holandés Piet Mondrian .

Descripción

El código del programa en lenguaje Piet se presenta en forma de dibujo abstracto.

#FFC0C0
rojo claro
#FFFFC0
amarillo claro
#C0FFC0
verde claro
#C0FFFF
cian claro
#C0C0FF
azul claro
#FFC0FF
magenta claro
#FF0000
rojo
#FFFF00
amarillo
#00FF00
verde
#00FFFF
cian
#0000FF
azul
#FF00FF
magenta
#C00000
rojo oscuro
#C0C000
amarillo oscuro
#00C000
verde oscuro
#00C0C0 azul
oscuro
#0000C0
azul oscuro
#C000C0
magenta oscuro
#FFFFFF blanco #000000 negro

Conceptos lingüísticos

Colores

Se utilizan 20 colores diferentes (tabla a la derecha). Los 18 colores de las tres primeras filas de la tabla están conectados cíclicamente por los siguientes dos ciclos:

Esto implica que la luz es más oscura que la oscuridad y viceversa. Los colores blanco y negro no están incluidos en los ciclos.

También se pueden usar colores complementarios, aunque su efecto depende de la implementación. En el caso más simple, el intérprete de idioma trata los colores no estándar como blancos (de lo contrario, se pueden usar como análogos al negro).

Códigos

El código Piet es una forma de gráficos ensamblados a partir de colores reconocibles. Los píxeles de color individuales son importantes en un idioma, por lo que la regla se aplica a los programas que deben ampliarse para mostrar detalles. En dichos programas ampliados, el término códelo se usa para describir un bloque con un color equivalente a un píxel de código, para evitar confusiones con los píxeles reales de los gráficos ampliados, que de hecho pueden ser un códelo.

Bloques de color

El elemento principal del lenguaje Piet es el bloque de color. Un bloque de color es un bloque de cualquier número de códigos contiguos del mismo color, delimitados por bloques de un color diferente o por el borde de los gráficos del programa. Los bloques de colores que solo son adyacentes en diagonal no se consideran adyacentes. Un bloque de color puede tener cualquier forma y puede tener "agujeros" de otros colores en el interior que no forman parte del bloque.

Pila

Piet usa una pila para almacenar todos los datos. Los datos existen solo como números enteros, aunque se pueden leer o generar como caracteres Unicode mediante los comandos apropiados.

D.P. CC Código seleccionado
Correcto A la izquierda más alto
Correcto más bajo
camino hacia abajo A la izquierda más a la derecha
Correcto más a la izquierda
A la izquierda A la izquierda más bajo
Correcto más alto
arriba A la izquierda más a la izquierda
Correcto más a la derecha

Ejecución del programa

El intérprete de lenguaje Piet comienza a ejecutar el programa en el bloque de color que contiene el código superior izquierdo del programa. El intérprete contiene un puntero de dirección (DP), que inicialmente apunta a la derecha. DP puede apuntar a la derecha, izquierda, arriba, abajo. El intérprete también contiene un Selector de Codel (CC), apuntando primero a la izquierda. CC puede apuntar hacia la izquierda o hacia la derecha. Las direcciones de DP y CC suelen cambiar con frecuencia durante la ejecución del programa.

Durante la ejecución del programa, el intérprete atraviesa bloques de colores de acuerdo con las siguientes reglas:

  1. El intérprete encuentra el borde del bloque de color actual que está más alejado en la dirección DP (es posible que este borde no esté conectado directamente si el bloque es una forma compuesta)
  2. El intérprete encuentra el código del bloque de color actual en este límite, que está más alejado en la dirección CC de la dirección de movimiento DP. (ver tabla a la derecha)
  3. El intérprete se mueve de este códelo al bloque de color que contiene el códelo directamente en la dirección DP.

El intérprete continúa realizando estas acciones hasta que finaliza el programa.

Elementos de sintaxis

Números

Cada bloque de color que no sea negro ni blanco en Piet es el equivalente entero del número de códelos en ese bloque. Tenga en cuenta que los enteros negativos no se pueden representar, aunque se pueden construir mediante operadores. Cuando el intérprete codifica un número, no tiene que hacer nada con él. En particular, no lo empuja a la pila automáticamente; hay un comando especial para esto (ver más abajo).

Bloques y bordes negros

Los bloques negros y los límites del programa limitan el flujo del programa. Si el intérprete del programa Piet intenta moverse hacia un bloque negro o fuera de los límites, se detiene y CC cambia. A continuación, el intérprete intenta moverse de nuevo desde este bloque actual. Si falla por segunda vez, el DP cambia 90 grados en el sentido de las agujas del reloj. Estos intentos se repiten mientras CC y DP cambian entre intentos alternativos. Si, después de ocho intentos, el intérprete no puede abandonar el bloque actual, no hay ruta de salida y el programa termina.

Bloques blancos

Los bloques blancos quedan libres a través de zonas que el intérprete salta libremente. Si se mueve de un bloque de color a un espacio en blanco, el intérprete se mueve a través de los códelos blancos hacia el DP hasta que llega a un bloque que no es blanco. Si el intérprete golpea un bloque o borde negro, se considera limitado; de lo contrario, se mueve al bloque de color que golpeó. Moverse a través de un bloque blanco a uno nuevo de color no activa un comando (ver más abajo). En este caso, los bloques blancos se pueden usar para cambiar el color actual sin ejecutar comandos, lo cual es muy útil para la codificación de bucles.

Aclaración sobre bloque blanco

Moverse a lo largo del bloque blanco lleva al intérprete en línea recta antes de tocar un píxel o borde de color. No utiliza el procedimiento descrito anteriormente para determinar dónde saldrá el intérprete de un bloque de color que no sea blanco.

Exactamente lo que sucede cuando el intérprete se mueve sobre un bloque blanco y golpea un bloque o borde negro no estaba claro en la especificación original. La interpretación se deriva de una lectura literal del siguiente texto:

Comandos

cambio de brillo
cambio de tono No Más oscuro por 1 Más oscuro por 2
No empujar estallido
1 paso agregar sustraer multiplicar
2 pasos dividir modificación no
3 pasos mayor que puntero cambiar
4 pasos duplicar rodar en número)
5 pasos en (char) fuera (número) fuera (char)

Los comandos se definen moviéndose de un bloque de color a otro de acuerdo con el movimiento a través del programa. El número de pasos a través del ciclo de color y el ciclo de luminancia en cada transición determina el comando a ejecutar, como se muestra en la tabla de la derecha. Si la transición es a través de un bloque blanco, el comando no se ejecuta.

Algunos se describen a continuación.

Las operaciones que no se pueden realizar se ignoran (ejemplo: extraer un valor inexistente de la pila).

Enlaces