iniciar-programa
define-nueva-instruccion gira(n) como inicio
   repetir n veces
      gira-izquierda;
fin;
define-nueva-instruccion norte como inicio
   mientras no-orientado-al-norte hacer
      gira(1);
fin;
define-nueva-instruccion sur como inicio
   mientras no-orientado-al-sur hacer
      gira(1);
fin;
define-nueva-instruccion este como inicio
   mientras no-orientado-al-este hacer
      gira(1);
fin;
define-nueva-instruccion oeste como inicio
  mientras no-orientado-al-oeste hacer
      gira(1);
fin;

define-nueva-instruccion bloqueado como inicio
   si frente-bloqueado y orientado-al-sur entonces inicio
      este;
      mientras derecha-bloqueada y frente-libre hacer
         avanza;
      si derecha-libre entonces inicio
         sur;
         avanza;
      fin;
   fin;
fin;
define-nueva-instruccion orienta(n) como inicio
   oeste;
   mientras frente-libre hacer
      avanza;
   sur;
   mientras frente-libre hacer inicio
      si derecha-bloqueada y izquierda-bloqueada entonces inicio
         si frente-libre entonces
            avanza;
         orienta(sucede(n));
      fin
      sino inicio
         avanza;
         si frente-bloqueado entonces
            bloqueado;
         orienta(n);
      fin;
   fin;
   si frente-bloqueado entonces inicio
      si derecha-bloqueada y izquierda-bloqueada entonces inicio
         repetir sucede(n) veces
            deja-zumbador;
         apagate;
      fin;
      si izquierda-libre entonces inicio
         bloqueado;
         si orientado-al-sur entonces
            orienta(n);
      fin;
   fin;
   oeste;
   mientras frente-libre hacer
      avanza;
   repetir n veces
      deja-zumbador;
   apagate;
fin;
  inicia-ejecucion
      orienta(0);
        apagate;
    termina-ejecucion
finalizar-programa