iniciar-programa
define-nueva-instruccion gira-derecha como inicio
gira-izquierda;
gira-izquierda;
gira-izquierda;
fin;

define-nueva-instruccion media-vuelta como inicio
gira-izquierda;
gira-izquierda;
fin;

define-nueva-instruccion mitad(x) como inicio
si orientado-al-oeste entonces inicio
si no si-es-cero(x) entonces inicio
si frente-libre entonces inicio
avanza;
mitad(precede(precede(x)));
fin
sino inicio
si derecha-libre entonces inicio
gira-derecha;
mientras frente-libre hacer avanza;
gira-izquierda;
fin
sino inicio
gira-izquierda;
mientras no derecha-libre y frente-libre hacer avanza;
gira-derecha;
fin;
si frente-libre entonces avanza;
mitad(precede(precede(x)));
fin;
fin
sino inicio
si izquierda-libre entonces inicio
gira-izquierda;
mientras frente-libre hacer avanza;
media-vuelta;
apagate;
fin
sino inicio
gira-derecha;
apagate;
fin;
fin;
fin;
si orientado-al-norte entonces inicio
gira-izquierda;
mitad(x);
fin;
fin;

define-nueva-instruccion pasos(x) como inicio
si frente-bloqueado y derecha-bloqueada y izquierda-bloqueada entonces inicio
media-vuelta;
mitad(x);
fin
sino inicio
si frente-libre entonces inicio
avanza;
pasos(sucede(x));
fin
sino inicio
si izquierda-libre entonces inicio
gira-izquierda;
mientras frente-libre hacer avanza;
gira-derecha;
fin
sino inicio
gira-derecha;
mientras no izquierda-libre y frente-libre hacer avanza;
si izquierda-libre entonces gira-izquierda;
fin;
si frente-libre entonces inicio
avanza;
pasos(sucede(x));
fin
sino inicio
pasos(x);
fin;
fin;
fin;
fin;

    inicia-ejecucion
        mientras no orientado-al-este hacer gira-izquierda;
        pasos(0);
        apagate;
    termina-ejecucion
finalizar-programa
