iniciar-programa
  define-nueva-instruccion  media-vuelta como inicio
  repetir 2 veces gira-izquierda;
  fin;

  define-nueva-instruccion  gira-derecha como inicio
  repetir 3 veces gira-izquierda;
  fin;

  define-nueva-instruccion saca como inicio
    si junto-a-zumbador entonces inicio
      coge-zumbador;
      saca;
      deja-zumbador;
      fin
      sino
      si no junto-a-zumbador entonces inicio
         gira-izquierda;
          avanza;
          fin;
          fin;



   define-nueva-instruccion recoge1(m) como inicio
    si junto-a-zumbador y orientado-al-sur entonces inicio
     coge-zumbador;
     si junto-a-zumbador entonces inicio
     recoge1(sucede(m));
     fin
     sino si no junto-a-zumbador entonces inicio
      recoge1(m);
      fin;
     fin
     sino si no junto-a-zumbador entonces inicio
     avanza;
     gira-izquierda;
       si orientado-al-este entonces inicio
     repetir m veces  inicio
     avanza;
     fin;
     saca;
     media-vuelta;
     avanza;
     gira-derecha;
      fin;
      fin;

      fin;

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

     avanza;
     fin
     sino si no junto-a-zumbador entonces inicio
     avanza;
     gira-izquierda;
      recoge1(0);
      fin;
      fin;

    define-nueva-instruccion saca2(n) como inicio
    si junto-a-zumbador entonces inicio
      coge-zumbador;
      saca2(sucede(n));
     fin
      sino
         si no junto-a-zumbador entonces inicio
          gira-izquierda;
          avanza;
          repetir n veces deja-zumbador;
           media-vuelta;
           avanza;
           gira-izquierda;
           avanza;
           Si junto-a-zumbador entonces inicio
             Saca2(0);
             fin;
          fin;
          fin;

    define-nueva-instruccion ordena(h) como inicio
       si junto-a-zumbador y orientado-al-este entonces inicio
         coge-zumbador;
         ordena(sucede(h));
         fin
         sino
         si no junto-a-zumbador entonces inicio
          media-vuelta;
          avanza;
        mientras frente-libre y orientado-al-oeste y junto-a-zumbador hacer inicio
             avanza;
             fin;
             si no junto-a-zumbador entonces inicio
              media-vuelta;
              avanza;
              fin
              sino
              si frente-bloqueado entonces inicio
               media-vuelta;
               fin;
            gira-derecha;
            avanza;
            media-vuelta;
            repetir h veces deja-zumbador;
            gira-derecha;
            avanza;
            fin;
            fin;


      define-nueva-instruccion ordena3 como inicio
        si orientado-al-oeste y  junto-a-zumbador entonces inicio
          coge-zumbador;
          ordena3;
          deja-zumbador;
          fin
          sino si no junto-a-zumbador entonces inicio
            mientras frente-libre y orientado-al-oeste hacer inicio
          avanza;
          fin;
          si frente-bloqueado entonces inicio
             gira-izquierda;
             avanza;
             gira-izquierda;
             fin;
             mientras frente-libre y orientado-al-este y  junto-a-zumbador hacer inicio
               avanza;
               fin;
            fin;
            fin;

        define-nueva-instruccion ordena2 como inicio
        mientras frente-libre y orientado-al-oeste hacer inicio
          avanza;
          fin;
          si orientado-al-oeste entonces inicio
          si frente-bloqueado y orientado-al-oeste entonces inicio
             gira-derecha;
             avanza;
             gira-derecha;
             fin;
             mientras frente-libre y orientado-al-este y no junto-a-zumbador hacer inicio
               avanza;
               fin;
               si frente-bloqueado entonces inicio
                apagate;
                fin;
               fin;
           si junto-a-zumbador entonces inicio
               media-vuelta;

               fin;
          si junto-a-zumbador entonces inicio
              ordena3;
              media-vuelta;

             ordena2;



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

             fin
             sino si no junto-a-zumbador entonces inicio
             media-vuelta;
              mientras no junto-a-zumbador hacer inicio
                avanza;
                fin;
                si junto-a-zumbador entonces inicio
                 media-vuelta;
                 avanza;
                 repetir n veces deja-zumbador;
                 fin;
                 fin;
                 fin;


          define-nueva-instruccion pasa como inicio
          si junto-a-zumbador entonces inicio
            pasa2(0);
            avanza;
            mientras frente-libre y no junto-a-zumbador hacer inicio
              avanza;
              fin;
              si frente-bloqueado y no junto-a-zumbador entonces inicio
               media-vuelta;
               ordena2;
               ordena(0);
               fin;
            si junto-a-zumbador entonces inicio
            pasa;

            fin;

           fin;
           fin;

    inicia-ejecucion
       mientras no orientado-al-norte hacer inicio
        gira-izquierda;
        fin;

         avanza;
         gira-derecha;
         avanza;
         media-vuelta;

         recoge2(0);
          media-vuelta;
          saca2(0);
           gira-izquierda;
           avanza;
           gira-derecha;


          ordena(0);
          mientras frente-libre y no junto-a-zumbador hacer inicio
            avanza;
            fin;
         si junto-a-zumbador entonces inicio
         pasa;
          fin
          sino si frente-bloqueado entonces inicio
          media-vuelta;
          ordena2;
          ordena(0);
            fin;


        apagate;
    termina-ejecucion
finalizar-programa

