iniciar-programa
 define-nueva-instruccion termina(n) como inicio
  si no si-es-cero (n) entonces inicio
  mientras derecha-bloqueada y orientado-al-este hacer inicio
 avanza;
 termina(n);
 fin;
 si derecha-libre y orientado-al-este entonces inicio
  repetir 3 veces gira-izquierda;
  si frente-libre entonces inicio
  avanza;
termina(precede(n));
fin;
 fin;
  si frente-bloqueado entonces inicio
  gira-izquierda;
  avanza;
  termina(n);
  fin;
    si frente-libre y orientado-al-sur entonces inicio
    avanza;
    termina(precede(n));
  fin;
 fin
 sino inicio
 si derecha-libre entonces inicio
 repetir 3 veces gira-izquierda;
 mientras frente-libre hacer avanza;   
 fin;
 deja-zumbador;
 apagate;
 fin;
 FIN;
define-nueva-instruccion pared(n) como inicio
si derecha-libre y orientado-al-norte entonces inicio
repetir 3 veces gira-izquierda;
avanza;
si derecha-bloqueada entonces inicio
pared(n);
fin
sino inicio
repetir 3 veces gira-izquierda;
termina(n);

fin;
fin;
si derecha-bloqueada y orientado-al-este entonces inicio
si frente-libre entonces inicio
avanza;
pared(n);
si derecha-libre y orientado-al-este entonces inicio
repetir 3 veces gira-izquierda;
termina(n);
fin;
fin
sino inicio
gira-izquierda;
pared(n);
fin;
fin;
si derecha-libre y orientado-al-oeste entonces inicio
repetir 3 veces gira-izquierda;
avanza;
pared(sucede(n));
fin;
si frente-bloqueado entonces inicio
 gira-izquierda;
 pared(n);
fin;
si derecha-bloqueada y frente-libre y orientado-al-norte entonces inicio
avanza;
pared(sucede(n));
fin;
si derecha-bloqueada y frente-libre y orientado-al-oeste entonces inicio
avanza;
pared(n);
fin;
   FIN;
    inicia-ejecucion
    pared(0);
        apagate;
    termina-ejecucion
finalizar-programa
