iniciar-programa

Define-nueva-instruccion norte como inicio
  mientras no orientado-al-norte hacer inicio
    gira-izquierda;
   fin;
  fin;

define-nueva-instruccion sur como inicio
   mientras no orientado-al-sur hacer inicio
      gira-izquierdA;
     fin;
  fin;

define-nueva-instruccion este como inicio
   mientras no orientado-al-este hacer inicio
     gira-izquierdA;
    fin;
  fin;

define-nueva-instruccion oeste como inicio
    mientras no orientado-al-oeste hacer inicio
       gira-izquierdA;
      fin;
  fin;

define-nueva-instruccion iresq1 como inicio
   oeste;
   mientras frente-libre hacer inicio
     avanza;
   fin;
   sur;
    mientras frente-libre hacer inicio
      avanza;
      fin;
     este;
  fin;

define-nueva-instruccion iresq2 como inicio
    este;
    mientras frente-libre hacer inicio
      avanza;
      fin;
      oeste;
  fin;

define-nueva-instruccion pasar1 como inicio
              si frente-libre entonces inicio
                 avanza;
                 si derecha-bloqueada entonces inicio
                    gira-izquierda;
                   fin sino inicio
                     repetir 3 veces inicio
                        gira-izquierda;
                       fin;
                  fin;
                fin;

  fin;



define-nueva-instruccion recoge1(m) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        recoge1 (sucede(m));

     fin sino inicio
        si frente-libre entonces inicio
           avanza;
           recoge1(m);
          fin sino inicio
            sur;
             pasar1;

             si orientado-al-sur entonces inicio
                iresq1;
                norte;
                repetir m veces inicio
                 deja-zumbador;
                 si frente-libre entonces inicio
                   avanza;
                  fin;
                 fin;
              fin;
              si no orientado-al-norte entonces inicio
               recoge1(m);
               fin;
          fin;
      fin;

  fin;

define-nueva-instruccion recoge2(n) como inicio
   si junto-a-zumbador entonces inicio
       coge-zumbador;
       si junto-a-zumbador entonces inicio
           coge-zumbador;
           recoge2(sucede(n));

         fin sino inicio
            deja-zumbador;
                     si frente-libre y no orientado-al-norte entonces inicio
                           avanza;
                       fin sino inicio

                               si orientado-al-norte entonces inicio
                                   iresq2;
                                    recoge1(0);

                                       iresq1;
                                       avanza;
                                       norte;
                                     repetir n veces inicio
                                       deja-zumbador;
                                       deja-zumbador;
                                       si frente-libre entonces inicio
                                        avanza;
                                        fin;
                                        fin;
                                        apagate;


                             fin sino inicio
                                 norte;
                                      pasar1;

                        fin;
                    fin;
             recoge2(n);

          fin;
     fin sino inicio
     si frente-libre y no orientado-al-norte entonces inicio
           avanza;
         fin sino inicio

               si orientado-al-norte entonces inicio
                   iresq2;
                    recoge1(0);
                    iresq1;
                                       avanza;
                                       norte;
                                     repetir n veces inicio
                                       deja-zumbador;
                                       deja-zumbador;
                                       si frente-libre entonces inicio
                                        avanza;
                                        fin;
                                        fin;
                                        apagate;
             fin sino inicio
             norte;
                  pasar1;

            fin;
        fin;
       recoge2(n);
    fin;

  fin;

    inicia-ejecucion
           iresq1;
          recoge2(0);

        apagate;
    termina-ejecucion
finalizar-programa
