iniciar-programa
define-nueva-instruccion gira(n) como inicio
   repetir n veces gira-izquierda;
   fin;
define-nueva-instruccion a como inicio
   mientras no-orientado-al-oeste hacer gira-izquierda;
   mientras frente-libre hacer avanza;
   gira(1);
   mientras frente-libre hacer avanza;
   gira(2);
   fin;
define-nueva-instruccion b como inicio
   mientras no-junto-a-zumbador y (derecha-libre o frente-libre)hacer inicio
      si frente-bloqueado entonces inicio
         si derecha-libre entonces inicio
            gira(2);
            mientras frente-libre hacer avanza;
            gira(1);
            avanza;
            gira(1);
            fin;
         fin
      sino avanza;
      fin;
   fin;
define-nueva-instruccion c como inicio
   avanza;
   gira(3);
   mientras frente-libre hacer avanza;
   gira(2);
   fin;
define-nueva-instruccion compara(n) como inicio
   si frente-bloqueado y derecha-bloqueada y no-junto-a-zumbador
   y algun-zumbador-en-la-mochila entonces inicio
       a;
       gira(3);
       deja-zumbador;
       avanza;
       mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
       gira(2);
       avanza;
       gira(3);
       fin;
   repetir n veces si orientado-al-oeste entonces inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         fin
      sino si no-junto-a-zumbador entonces inicio
         mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
         repetir n veces coge-zumbador;
         si frente-bloqueado entonces inicio
            si derecha-libre entonces inicio
            gira(2);
            mientras frente-libre hacer avanza;
            gira(1);
            si frente-libre entonces avanza;
            gira(1);
            compara(n);
            fin
            sino inicio
               a;
               gira(3);
               deja-zumbador;
               avanza;
               mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
               gira(2);
               avanza;
               gira(3);
               fin;
            fin
         sino inicio
            avanza;
            compara(n);
            fin;
         fin;
      fin;
   si junto-a-zumbador y orientado-al-oeste entonces inicio
      repetir n veces deja-zumbador;
      si frente-bloqueado entonces inicio
         si derecha-libre entonces inicio
         gira(2);
         mientras frente-libre hacer avanza;
         gira(1);
         avanza;
         gira(1);
         b;
         compara(n);
         fin;
         fin
      sino inicio
         avanza;
         b;
         compara(n);
         sal-de-instruccion;
         fin;
      fin
   sino si orientado-al-oeste entonces inicio
      a;
      gira(3);
      avanza;
      mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
      gira(2);
      avanza;
      gira(3);
      sal-de-instruccion;
      fin;
   si frente-bloqueado y derecha-bloqueada y algun-zumbador-en-la-mochila entonces inicio
      a;
      deja-zumbador;
      gira(3);
      avanza;
      mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
      gira(2);
      avanza;
      gira(3);
      sal-de-instruccion;
      fin;
   fin;
define-nueva-instruccion cuenta(n) como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      cuenta(sucede(n));
      fin
   sino inicio
      b;
      si junto-a-zumbador entonces inicio
         compara(n);
         fin
      sino inicio
         a;
         deja-zumbador;
         gira(3);
         avanza;
         mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
         gira(2);
         avanza;
         gira(3);
         fin;
      fin;
   fin;
define-nueva-instruccion busca como inicio
   si no-junto-a-zumbador entonces b;
   si junto-a-zumbador entonces cuenta(0);
   fin;
    inicia-ejecucion
        mientras no-orientado-al-norte hacer gira(1);
        mientras frente-libre o derecha-libre o junto-a-zumbador hacer inicio
           a;
           c;
           busca;
           fin;
        apagate;
    termina-ejecucion
finalizar-programa
