iniciar-programa
define-nueva-instruccion gira(n) como inicio
   repetir n veces gira-izquierda;
   fin;
define-nueva-instruccion a como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      a;
      avanza;
      fin
   sino si orientado-al-oeste entonces inicio
      mientras frente-libre hacer avanza;
      gira(2);
      fin;
   fin;
define-nueva-instruccion b como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      b;
      si frente-libre entonces avanza;
      fin
   sino si orientado-al-oeste entonces inicio
      avanza;
      coge-zumbador;
      a;
      gira(1);
      fin;
   fin;
define-nueva-instruccion c como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      c;
      si orientado-al-norte entonces gira(2);
      mientras no-junto-a-zumbador hacer inicio
         si no-junto-a-zumbador entonces deja-zumbador;
         si frente-libre entonces avanza;
         fin;
      gira(2);
      mientras junto-a-zumbador hacer inicio
         si frente-libre entonces inicio
            avanza;
            fin
         sino inicio
            gira(3);
            si frente-libre entonces inicio
               avanza;
               gira(3);
               fin
            sino sal-de-instruccion;
            fin;
         fin;
      si orientado-al-norte y junto-a-zumbador entonces inicio
         gira(3);
         si frente-libre entonces avanza;
         fin
      sino si orientado-al-norte entonces inicio
         gira(2);
         avanza;
         gira(1);
         si frente-libre entonces avanza;
         gira(3);
         fin;
      fin
   sino si orientado-al-oeste entonces inicio
      avanza;
      si junto-a-zumbador entonces coge-zumbador;
      b;
      fin;
   fin;
define-nueva-instruccion e como inicio
   si frente-libre entonces inicio
      avanza;
      e;
      deja-zumbador;
      fin
   sino si frente-bloqueado entonces inicio
      gira(3);
      mientras izquierda-bloqueada hacer avanza;
      gira(1);
      avanza;
      deja-zumbador;
      fin;
   fin;
define-nueva-instruccion d como inicio
   si frente-libre entonces inicio
      avanza;
      d;
      si frente-libre entonces inicio
         avanza;
         fin
      sino inicio
         gira(2);
         e;
         apagate;
         fin;
      fin
   sino si orientado-al-este entonces inicio
      gira(2);
      mientras no-junto-a-zumbador y frente-libre hacer avanza;
      mientras junto-a-zumbador hacer inicio
         si frente-libre entonces inicio
            avanza;
            fin
         sino inicio
            gira(2);
            e;
            apagate;
            fin;
         fin;
      fin;
   fin;
inicia-ejecucion
    gira(3);
    repetir 3 veces avanza;
    gira(2);
    c;
    mientras no-orientado-al-este hacer gira-izquierda;
    d;
    gira(2);
   mientras frente-libre hacer avanza;
   gira(3);
   mientras izquierda-bloqueada hacer avanza;
   gira(1);
   avanza;
   deja-zumbador;
        apagate;
    termina-ejecucion
finalizar-programa

