iniciar-programa
define-nueva-instruccion gira-derecha como repetir 3 veces gira-izquierda;
define-nueva-instruccion media-vuelta como repetir 2 veces gira-izquierda;

    define-nueva-instruccion recursiva como inicio


       repetir 5000 veces inicio

    mientras no-junto-a-zumbador hacer inicio
        mientras no-junto-a-zumbador y frente-libre hacer avanza;

          si orientado-al-oeste y frente-bloqueado y izquierda-bloqueada y derecha-bloqueada entonces inicio

               mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
               si ningun-zumbador-en-la-mochila entonces apagate;


          fin;

            si frente-bloqueado entonces inicio
                si orientado-al-este y frente-bloqueado entonces inicio
                si junto-a-zumbador entonces coge-zumbador;
                  gira-derecha;
                  si frente-libre entonces avanza;
                  gira-derecha;
                 fin;

                 si orientado-al-oeste y frente-bloqueado entonces inicio
                  si junto-a-zumbador entonces coge-zumbador;
                    gira-izquierda;
                    avanza;
                    si derecha-libre entonces inicio
                        gira-izquierda;
                        mientras frente-libre hacer avanza;
                        si frente-bloqueado entonces inicio
                            media-vuelta;
                                mientras no junto-a-zumbador hacer inicio
                                mientras no junto-a-zumbador y frente-libre hacer avanza;

         si orientado-al-oeste y frente-bloqueado y izquierda-bloqueada y derecha-bloqueada entonces inicio

               mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
               si ningun-zumbador-en-la-mochila entonces apagate;


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

               mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
               si ningun-zumbador-en-la-mochila entonces apagate;


          fin;
          fin;

                   fin;


                    gira-izquierda;
                 fin;

            fin;
    fin;

    si junto-a-zumbador entonces inicio
        coge-zumbador;
        mientras frente-libre hacer avanza;
         si orientado-al-oeste y frente-bloqueado y izquierda-bloqueada y derecha-bloqueada entonces inicio

               mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
               si ningun-zumbador-en-la-mochila entonces apagate;


          fin;

         si frente-bloqueado entonces inicio
                si orientado-al-este y frente-bloqueado entonces inicio
                  gira-derecha;
                  si frente-libre entonces avanza;
                  gira-derecha;
                 fin;

                 si orientado-al-oeste y frente-bloqueado entonces inicio
                    gira-izquierda;
                    avanza;
                    gira-izquierda;
                 fin;
      fin;
    fin;
fin;










    fin;

    inicia-ejecucion

mientras ningun-zumbador-en-la-mochila hacer inicio

  si orientado-al-este y no-junto-a-zumbador y frente-bloqueado y derecha-bloqueada y izquierda-bloqueada entonces apagate;

    si no junto-a-zumbador y frente-libre entonces inicio

    mientras no junto-a-zumbador y orientado-al-este y frente-libre hacer avanza;

         si junto-a-zumbador entonces inicio

             gira-izquierda;

                   mientras junto-a-zumbador  hacer inicio

si orientado-al-este y derecha-bloqueada entonces inicio

                                                 gira-izquierdA;
                           mientras frente-libre hacer avanza;
                           si orientado-al-norte y frente-bloqueado entonces
                            gira-izquierda;


                                              recursiva;

                                               fin;

                       coge-zumbador;
                       si frente-libre entonces inicio
                       avanza;
                           si no-junto-a-zumbador entonces inicio
                               repetir 2 veces gira-izquierda;
                               si frente-libre entonces avanza;
                               mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                               si ningun-zumbador-en-la-mochila entonces inicio
                               mientras frente-libre hacer avanza;
                               si frente-bloqueado entonces  gira-izquierda;
                               si junto-a-zumbador y frente-libre entonces inicio
                               avanza;
                               si junto-a-zumbador entonces gira-izquierda;
                               fin;
                               fin;
                           fin;
                       fin
                       sino
                       inicio
                                   si frente-bloqueado y izquierda-bloqueada y derecha-bloqueada y orientado-al-oeste entonces inicio
                                       repetir 2 veces gira-izquierda;
                                       avanza;
                                       deja-zumbador;
                                       apagate;
                                    fin;
                       si junto-a-zumbador entonces coge-zumbador;
                       repetir 2 veces gira-izquierda;
                       mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                       mientras ningun-zumbador-en-la-mochila y frente-libre hacer avanza;
                       si frente-bloqueado entonces gira-izquierda;
                       fin;

                  fin;
         fin;


        si orientado-al-este y frente-bloqueado entonces inicio

                           gira-izquierdA;
                           mientras frente-libre hacer avanza;
                           si orientado-al-norte y frente-bloqueado entonces
                            gira-izquierda;


                               si orientado-al-oeste y derecha-bloqueada entonces inicio


                                              recursiva;

                                               fin;


        fin;


    fin;

fin;



        apagate;
    termina-ejecucion
finalizar-programa
