iniciar-programa
 define-nueva-instruccion guarda-zumbador como
    inicio
      mientras junto-a-zumbador hacer
        coge-zumbador;
    fin;
   define-nueva-instruccion adelante como
     inicio
      si frente-libre entonces
          avanza;
      fin;
     define-nueva-instruccion gira-reversa como
     inicio
      gira-izquierda;
      gira-izquierda;
     fin;

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


define-nueva-instruccion sube1 como
    mientras frente-libre y orientado-al-norte hacer
       inicio
           si no-junto-a-zumbador entonces
           deja-zumbador;
       avanza;
       si no-junto-a-zumbador entonces
           deja-zumbador;

     fin;
define-nueva-instruccion sube como
    si derecha-libre entonces
      inicio
         mientras junto-a-zumbador hacer
          inicio
            coge-zumbador;
            adelante;
          fin;
      fin
    sino
       inicio
           mientras junto-a-zumbador hacer
             inicio
               coge-zumbador;
               adelante;
             fin;
             gira-reversa;
             mientras frente-libre hacer
               avanza;

       fin;

      define-nueva-instruccion baja como
        inicio
             mientras frente-libre hacer
              inicio
                 si junto-a-zumbador entonces
                   coge-zumbador;
                 avanza;
                 si junto-a-zumbador entonces
                   coge-zumbador;
              fin;
        fin;


    define-nueva-instruccion un-paso-derecha como
     inicio
        si frente-libre y izquierda-libre  entonces
          inicio
            si derecha-libre entonces
                inicio
                  gira-derecha;
                  adelante;
                  si junto-a-zumbador entonces
                    inicio
                      gira-izquierda;
                      mientras junto-a-zumbador hacer
                      avanza;
                      gira-reversa;
                      mientras frente-libre hacer
                        inicio
                          avanza;
                          si junto-a-zumbador entonces
                            coge-zumbador;
                        fin;
                   fin
                 sino
                   gira-derecha;
                   baja;
                 fin
               sino

               si no-junto-a-zumbador entonces
                  inicio
                    gira-derecha;
                    mientras frente-libre hacer
                      baja;
                  fin
             fin
        sino
            si derecha-libre y izquierda-libre entonces
               inicio
                  gira-derecha;
                  avanza;
                  gira-derecha;
                  baja;
               fin
            sino
              si izquierda-bloqueada entonces
                 inicio
                    gira-derecha;

                      avanza;
                      si junto-a-zumbador entonces
                        gira-izquierda
                      sino

                      mientras junto-a-zumbador hacer
                        inicio
                           avanza;
                           gira-reversa;
                        fin;
                       si no-junto-a-zumbador entonces
                         gira-derecha;

                        mientras junto-a-zumbador hacer
                        inicio
                          si junto-a-zumbador entonces
                            coge-zumbador;
                          avanza;

                        fin;
                 fin
             sino
              inicio
                gira-reversa;
              fin;
   fin;



      define-nueva-instruccion un-paso-izquierda como
     inicio
        si izquierda-libre entonces
           inicio
             gira-izquierda;
             si frente-libre entonces
                inicio
                  si junto-a-zumbador entonces
                   coge-zumbador;
                  avanza;
                  gira-izquierda;
                fin
              sino
                inicio
                  gira-derecha;
                  baja;

                fin;
            fin
          sino
            si frente-bloqueado y izquierda-bloqueada entonces
             inicio
               gira-derecha;
               mientras frente-libre hacer
                 inicio
                   avanza;
                    si junto-a-zumbador entonces
                     coge-zumbador;
                 fin;
                 gira-izquierda;
             fin;

    fin;

 define-nueva-instruccion un-paso-derecha-2 como
     inicio
       gira-derecha;
       avanza;
     fin;

 define-nueva-instruccion adelante-1 como
     inicio
      si frente-libre entonces
          avanza;
      fin;

 define-nueva-instruccion baja-1 como
     inicio
      mientras no-orientado-al-sur hacer
         gira-izquierda;
      mientras frente-libre hacer
        inicio
           si junto-a-zumbador entonces
           coge-zumbador;
           avanza;
           si junto-a-zumbador entonces
           coge-zumbador;
        fin;
      fin;
 define-nueva-instruccion gestiona-rumbo como
     inicio
        si junto-a-zumbador entonces
           inicio
              gira-izquierda;
              mientras junto-a-zumbador hacer
                adelante-1;
              gira-reversa;
              baja-1;
           fin
        sino
           si derecha-libre entonces
            inicio
              gira-derecha;
              baja-1;
            fin;
     fin;
 define-nueva-instruccion un-paso-izquierda-2 como
     inicio
       gira-izquierda;
       avanza;
     fin;



define-nueva-instruccion sube-1 como
    inicio

      mientras no-orientado-al-norte hacer
         gira-izquierda;
     mientras junto-a-zumbador hacer
      inicio
       guarda-zumbador;
         avanza;
       fin;
       si (derecha-libre y izquierda-libre) y frente-libre entonces
          inicio
             gira-derecha;
             si frente-libre entonces
               avanza;
             si frente-bloqueado entonces
                inicio
                  gira-derecha;
                  baja-1;


                fin;
          fin
       sino
         inicio
           si orientado-al-sur entonces
              gira-derecha
           sino
              inicio
               si orientado-al-norte entonces
                 inicio
                   gira-reversa;
                   baja-1;
                 fin;
           fin;


         fin;
    fin;
 define-nueva-instruccion horizontal como
     inicio
        mientras algun-zumbador-en-la-mochila y frente-libre hacer
          inicio
             deja-zumbador;
             adelante;
          fin;

     fin;

   define-nueva-instruccion abandona como
     inicio
       si algun-zumbador-en-la-mochila  entonces
          inicio
             deja-zumbador;
             adelante;
          fin;

     fin;
  define-nueva-instruccion baja-2 como
     inicio
      mientras no-orientado-al-sur hacer
         gira-izquierda;
      mientras frente-libre hacer
        inicio
          abandona;

        fin;
      fin;
   define-nueva-instruccion sube-2 como
     inicio
      mientras no-orientado-al-norte hacer
         gira-izquierda;
      mientras frente-libre y junto-a-zumbador hacer
        inicio
          avanza;

        fin;
      fin;
(*************************************************************************)
(*************************************************************************)
    inicia-ejecucion
           abandona;
           mientras algun-zumbador-en-la-mochila hacer
             inicio
               un-paso-derecha-2;
               baja-2;
               abandona;
               sube-2;
             fin;   




        apagate;
    termina-ejecucion
finalizar-programa
