iniciar-programa
define-nueva-instruccion norte como mientras no orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no orientado-al-oeste hacer gira-izquierda;

define-nueva-instruccion contar como
  inicio
    si orientado-al-este  entonces
      inicio
           si frente-libre entonces avanza
            sino
              inicio
                 si izquierda-bloqueada y derecha-libre entonces
              inicio
                sur;
                mientras izquierda-bloqueada y frente-libre  hacer avanza;
                este;
              fin
            sino
              inicio
                norte;
                si frente-libre entonces
                  inicio
                    mientras derecha-bloqueada y frente-libre hacer avanza;
                    este;
                  fin;
              fin;
               si frente-libre entonces avanza sino
                 inicio
                   sur;
                 fin;
              fin;
            si frente-libre entonces avanza
            sino
              inicio
                 si izquierda-bloqueada y derecha-libre entonces
              inicio
                sur;
                mientras izquierda-bloqueada y frente-libre hacer avanza;
                este;
              fin
            sino
              inicio
                norte;
                si frente-libre entonces
                  inicio
                    mientras frente-libre hacer avanza;
                    este;
                  fin;
              fin;
               si frente-libre entonces avanza sino
                 inicio
                  sur;
                 fin;
              fin;

            contar;
            si frente-libre entonces avanza
            sino
              inicio
              si izquierda-bloqueada y derecha-libre entonces
              inicio
                norte;
                mientras izquierda-bloqueada y frente-libre  hacer avanza;
                oeste;
              fin
            sino
              inicio
                sur;
                si frente-libre entonces
                  inicio
                    mientras derecha-bloqueada y frente-libre hacer avanza;
                    oeste;
                  fin;
              fin;
               si frente-libre entonces avanza;
              fin;


      fin
    sino
      inicio
        oeste;
      fin;
  fin;
    inicia-ejecucion
          este;
          contar;
          este;
           si frente-libre entonces avanza
            sino
              inicio
                 si izquierda-bloqueada y derecha-libre entonces
              inicio
                sur;
                mientras izquierda-bloqueada y frente-libre  hacer avanza;
                este;
              fin
            sino
              inicio
                norte;
                si frente-libre entonces
                  inicio
                    mientras derecha-bloqueada y frente-libre hacer avanza;
                    este;
                  fin;
              fin;
               si frente-libre entonces avanza;
              fin;
          sur;
          mientras frente-libre hacer avanza;
        apagate;
    termina-ejecucion
finalizar-programa
