iniciar-programa
    define-nueva-instruccion  gira(n) como inicio
      repetir n veces
      gira-izquierda;
      fin;

       define-nueva-instruccion  media-vuelta como inicio
      gira-izquierda;
      gira-izquierda;
       fin;


      define-nueva-instruccion  gira-derecha como inicio
      gira-izquierda;
      gira-izquierda;
      gira-izquierda;
      fin;

           define-nueva-instruccion avanzar como inicio
            mientras frente-libre y junto-a-zumbador hacer inicio
     avanza;
     fin;
     fin;

         define-nueva-instruccion ubicate-norte  como inicio
           si no junto-a-zumbador y no-orientado-al-sur  entonces inicio
     media-vuelta;
     avanza;
    gira(1);
    si orientado-al-este entonces
    avanza;
    si junto-a-zumbador entonces  inicio
     avanzar;
     fin
     sino si  no-junto-a-zumbador entonces inicio
      media-vuelta;
       avanza;
      si orientado-al-oeste entonces
     avanza;

      si junto-a-zumbador entonces inicio
        avanzar;
      fin
      sino si no-junto-a-zumbador  entonces inicio
           media-vuelta;
           avanza;
      apagate;
      fin;
    fin;
    fin;
    fin;

        define-nueva-instruccion ubicate-oeste  como inicio
         si no-junto-a-zumbador y orientado-al-oeste entonces inicio
          media-vuelta;
          avanza;
          gira-izquierda;
          si orientado-al-norte entonces
          avanza;
             si junto-a-zumbador entonces  inicio
     avanzar;
     fin
     sino si  no-junto-a-zumbador entonces inicio
      media-vuelta;

      si orientado-al-sur entonces
     avanza;
     si junto-a-zumbador entonces inicio
        avanzar;
      fin
      sino si no-junto-a-zumbador  entonces inicio
           media-vuelta;
           avanza;
      apagate;
      fin;

          fin;
    fin;
    fin;


              define-nueva-instruccion ubicate-este  como inicio
               si no-junto-a-zumbador y orientado-al-este entonces inicio
          media-vuelta;
          avanza;
          gira-izquierda;
          si orientado-al-sur entonces
          avanza;
             si junto-a-zumbador entonces  inicio
     avanzar;
     fin
     sino si  no-junto-a-zumbador entonces inicio
      media-vuelta;
        avanza;
      si orientado-al-norte entonces
     avanza;

        si junto-a-zumbador entonces inicio
        avanzar;
      fin
      sino si no-junto-a-zumbador  entonces inicio
           media-vuelta;
           avanza;
      apagate;
      fin;
          fin;
    fin;
    fin;

            define-nueva-instruccion ubicate-sur  como inicio
               si no-junto-a-zumbador y orientado-al-sur entonces inicio
          media-vuelta;
          avanza;
          gira-izquierda;
          avanza;
             si junto-a-zumbador entonces  inicio
     avanzar;
     fin
     sino si  no-junto-a-zumbador entonces inicio
      media-vuelta;
     avanza;
       avanza;
       si junto-a-zumbador entonces inicio
        avanzar;
      fin
      sino si no-junto-a-zumbador  entonces inicio
           media-vuelta;
           avanza;
      apagate;
      fin;
      fin;
      fin;
    fin;


             define-nueva-instruccion ubicate-sur-bloqueado  como inicio
               si frente-bloqueado y orientado-al-sur entonces inicio

               gira-derecha;
                avanza;
                si junto-a-zumbador entonces inicio
        avanzar;
      fin
      sino si no-junto-a-zumbador  entonces inicio
           media-vuelta;
           avanza;
      apagate;
      fin;
                fin;
                fin;


           define-nueva-instruccion ubicate-oeste-bloqueado  como inicio
               si frente-bloqueado y orientado-al-oeste y derecha-libre y izquierda-bloqueada entonces inicio
                 gira-derecha;
               si frente-libre entonces
                avanza;
                si junto-a-zumbador entonces inicio
                avanzar;
                fin;
               fin

               sino si frente-bloqueado y orientado-al-oeste y derecha-libre  entonces inicio
               gira-izquierda;
               si frente-libre entonces
                avanza;
                si junto-a-zumbador entonces inicio
               avanzar;
        fin;
        fin;
        fin;


               define-nueva-instruccion ubicate-oeste-bloque  como inicio
               si no-junto-a-zumbador y orientado-al-sur entonces inicio
          media-vuelta;
          avanza;
          gira-derecha;
          avanza;
             si junto-a-zumbador entonces  inicio
     avanzar;
     fin
     sino si  no-junto-a-zumbador entonces inicio
      media-vuelta;
     avanza;
       avanza;
       si junto-a-zumbador entonces inicio
        avanzar;
      fin
      sino si no-junto-a-zumbador  entonces inicio
           media-vuelta;
           avanza;
      apagate;
      fin;
      fin;
      fin;
    fin;



    inicia-ejecucion
     mientras frente-libre y junto-a-zumbador hacer
     inicio
      avanzar;
       si no-junto-a-zumbador y orientado-al-sur entonces inicio
        media-vuelta;
        avanza;
        fin;

      inicio
    mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;

              si frente-bloqueado y orientado-al-sur entonces inicio
           ubicate-sur-bloqueado;
           fin;
               si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado
               fin;

          mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;
               si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado
               fin;


           mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;

           si frente-bloqueado y orientado-al-sur entonces inicio
           ubicate-sur-bloqueado;
           fin;
            si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado
               fin;


             mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;

              si frente-bloqueado y orientado-al-sur entonces inicio
           ubicate-sur-bloqueado;
           fin;
               si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado
               fin;

             mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;

               si frente-bloqueado y orientado-al-sur entonces inicio
           ubicate-sur-bloqueado;
           fin;
                si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado
               fin;


           mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;

              si frente-bloqueado y orientado-al-sur entonces inicio
           ubicate-sur-bloqueado;
           fin;
                si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado
               fin;


           mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;
                 si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado
               fin;


              mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;

              si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado
               fin;

           mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;

                si frente-bloqueado y orientado-al-oeste entonces inicio
               ubicate-oeste-bloqueado;
               mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
           ubicate-oeste-bloque;
          fin;

               fin;


           mientras no junto-a-zumbador y orientado-al-norte  hacer inicio
      ubicate-norte;
        fin;
     mientras no junto-a-zumbador y orientado-al-este  hacer  inicio
      ubicate-este;
        fin;
       mientras no junto-a-zumbador y orientado-al-oeste hacer  inicio
      ubicate-oeste;
          fin;
         mientras no junto-a-zumbador y orientado-al-sur hacer  inicio
      ubicate-sur;
          fin;


        fin;
       fin;









        apagate;
    termina-ejecucion
finalizar-programa
