2010-04-29 694 views
5

De acuerdo con la especificación,¿Cómo cambian DP y CC en Piet?

bloques de color Negro y los bordes del programa de restringir el flujo del programa. Si el intérprete de Piet intenta moverse dentro de un bloque negro o fuera de un borde, se detiene y el CC se alterna. El intérprete intenta volver a moverse desde su bloque actual. Si falla por segunda vez, el DP se mueve un paso en el sentido de las agujas del reloj. Estos intentos se repiten, con CC y DP cambiando entre intentos alternativos. Si después de ocho intentos, el intérprete no puede abandonar su bloque de color actual, no hay salida y el programa finaliza.

A menos que estoy leyendo de forma incorrecta, esto está en contradicción con el comportamiento de la sucesión de Fibonacci ejemplo aquí: http://www.dangermouse.net/esoteric/piet/fibbig1.gif (a partir de: http://www.dangermouse.net/esoteric/piet/samples.html)

Específicamente, ¿por qué el giro a la izquierda en DP (0, 3) ((0,0) siendo (arriba, izquierda)) cuando golpea el borde izquierdo? En este punto, tanto DP y CC quedan, así, por mi lectura, la secuencia debe ser entonces:

  1. intento (y fallar) para dejar el bloque yendo fuera del borde, (0,4),
  2. Alternar CC a DERECHA,
  3. Intento (y no) salir del bloque saltando por el borde a (0,2).
  4. Girar a DP UP,
  5. intento (y éxito) para dejar el bloque en (1,2) mediante la introducción de la manzana blanca en (1,1)

El comportamiento indicado por la traza parece para ser ese DP se gira todo el camino, dejando CC a la IZQUIERDA.

¿Qué he entendido mal?

+3

Nunca esperaría ver la pregunta de Piet en SOX) –

Respuesta

6

Su análisis parece correcto; la muestra tiene errores. El bloque blanco en (1,1) debe ser negro. Puede verificar esto tomando la imagen de muestra y ejecutándola.

Tenga en cuenta que al menos tres de los interpreters enlazado desde la página de DMM son cochecito - Marc Majcher de está marcado como tal, travesías y salidas correctamente, de Sylvain Tintillier pero cambia el significado de en y fonda de la especificación (this es un libre de errores versión), y PietDev cruza incorrectamente bloques de color.

EDITAR: otros bloques blancos probablemente también tengan que ser negros, p. Ej. el bloque en (6,3).

+2

Gracias. Pasé un buen rato preguntándome por qué mi implementación entró en un ciclo infinito en ese punto. Blanco (6,3) está bien, como en ese punto, CC es IZQUIERDA, por lo que el cursor sale del bloque azul claro (7,3) y (7,4) al ingresar (6,4) de todos modos. –