iniciar-programa
define-nueva-instruccion ub como
inicio
si frente-libre entonces
inicio
avanza;
si junto-a-zumbador entonces
inicio
repetir 2 veces gira-izquierda;
avanza;
repetir 3 veces gira-izquierda;
si frente-libre entonces avanza;
fin;
fin
sino
inicio
si frente-bloqueado entonces
gira-izquierda;
si frente-libre entonces avanza;
fin;
fin;
define-nueva-instruccion delta(n) como
inicio
si (frente-bloqueado y orientado-al-norte y izquierda-bloqueada)o (derecha-bloqueada y orientado-al-sur y frente-bloqueado) entonces
inicio
si orientado-al-sur entonces
inicio
mientras no-orientado-al-norte hacer gira-izquierda;
si frente-libre entonces
inicio
avanza;
si no-junto-a-zumbador entonces inicio
mientras frente-libre hacer avanza;
repetir 2 veces gira-izquierda;
fin
sino
inicio
repetir 2 veces gira-izquierda;
avanza;
gira-izquierda;
fin;
fin;
fin;
si orientado-al-norte entonces
inicio
mientras no-orientado-al-norte hacer gira-izquierda;
mientras frente-libre hacer avanza;
repetir 2 veces gira-izquierda;
fin;
fin;
si no(si-es-cero(n)) entonces
inicio
repetir n veces deja-zumbador;
ub;
delta(precede(n));
fin;
fin;
define-nueva-instruccion d(n) como
inicio
si no(frente-bloqueado y orientado-al-norte y izquierda-bloqueada) y no(derecha-bloqueada y orientado-al-sur y frente-bloqueado) entonces
inicio
si frente-libre entonces
inicio
avanza;
d(sucede(n));
fin
sino
inicio
si frente-bloqueado y orientado-al-sur y derecha-libre entonces
inicio
repetir 3 veces gira-izquierda;
avanza;
repetir 3 veces gira-izquierda;
d(sucede(n));
fin
sino
inicio
si frente-bloqueado y orientado-al-norte y izquierda-libre entonces
inicio
gira-izquierda;
avanza;
gira-izquierda;
d(sucede(n));
fin
sino
inicio
d(n);
fin;
fin;
fin;
fin
sino
inicio
delta(n);
fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-sur hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    gira-izquierda;
    mientras frente-libre hacer avanza;
    gira-izquierda;
    d(1);
                    apagate;
    termina-ejecucion
finalizar-programa
