iniciar-programa
       define-nueva-instruccion camina(n) como inicio
   repetir n veces
   avanza;
   fin;


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

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

            mientras frente-libre hacer inicio
             avanza;
             si frente-bloqueado y no orientado-al-oeste entonces inicio
              gira-derecha;
              fin;
              si frente-bloqueado y orientado-al-oeste entonces inicio
               apagate;
               fin;
               fin;

               fin;

        define-nueva-instruccion recorre como inicio
          mientras frente-libre  y orientado-al-sur o orientado-al-oeste hacer inicio
       avanza;
           si frente-bloqueado  y orientado-al-oeste  entonces inicio
          gira-izquierda;
           fin;
           si frente-bloqueado y  orientado-al-sur y derecha-bloqueada entonces inicio
          gira-izquierda;
          gira-izquierda;
           recorre2;
             fin
             sino si frente-bloqueado y  orientado-al-sur y derecha-libre entonces inicio
               gira-derecha;
               recorre2;
            fin;
            fin;
            fin;



     inicia-ejecucion
       mientras no orientado-al-sur  hacer inicio
        gira-izquierda;
        fin;
        si frente-bloqueado y orientado-al-sur y izquierda-libre entonces  inicio
         gira-izquierda;
         fin;
      mientras frente-libre y orientado-al-sur o orientado-al-este hacer inicio
       avanza;

       si frente-bloqueado y izquierda-libre entonces inicio
        gira-izquierda;
        fin
        sino si frente-bloqueado y derecha-libre entonces  inicio
        gira-derecha;

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

          mientras orientado-al-oeste y derecha-bloqueada y frente-libre hacer inicio
           avanza;

           si derecha-libre y orientado-al-oeste entonces inicio
            gira-derecha;


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

             mientras orientado-al-sur y derecha-bloqueada y frente-libre hacer inicio
              avanza;
             si derecha-libre y orientado-al-sur entonces inicio
             gira-derecha;
             fin
             sino si izquierda-libre y orientado-al-sur y frente-bloqueado entonces inicio
              gira-izquierda;
              avanza;

               fin;


               fin;
               fin;

          fin;
           fin;


            si  orientado-al-este y derecha-bloqueada y izquierda-libre entonces inicio
             gira-izquierda;
             mientras frente-libre hacer inicio
              avanza;
              si frente-bloqueado entonces inicio
               gira-derecha;
               mientras izquierda-bloqueada y orientado-al-este y frente-libre hacer inicio
                avanza;
                fin;
                si izquierda-libre entonces inicio
                 gira-izquierda;
                 avanza;
                 avanza;
                 gira-izquierda;
                 recorre;
                 fin
                 sino si izquierda-bloqueada y orientado-al-este
                 entonces inicio
                 mientras frente-libre y no-orientado-al-norte hacer inicio
                  avanza;
                  si frente-bloqueado entonces  inicio
                   gira-derecha;
                   si orientado-al-norte entonces
                    apagate;
                    fin;
                    fin;
                 fin;
                 fin;
                 fin;
                 fin;
             si orientado-al-este y frente-bloqueado y izquierda-bloqueada entonces inicio
              gira-derecha;
              fin;


             mientras frente-libre  hacer inicio
               avanza;
               si frente-bloqueado y no orientado-al-sur  entonces inicio
               gira-izquierda;
               fin
               sino si orientado-al-sur y frente-bloqueado entonces
               gira-izquierda;
               recorre;
               fin;





            recorre;
             recorre2;


        apagate;
    termina-ejecucion
finalizar-programa
