iniciar-programa

define-nueva-instruccion norte como
inicio
   mientras no-orientado-al-norte hacer gira-izquierda;
fin;

define-nueva-instruccion este como
inicio
   mientras no-orientado-al-este hacer gira-izquierda;
fin;

define-nueva-instruccion sur como
inicio
   mientras no-orientado-al-sur hacer gira-izquierda;
fin;

define-nueva-instruccion oeste como
inicio
   mientras no-orientado-al-oeste hacer gira-izquierda;
fin;

define-nueva-instruccion izquierda como
inicio
   oeste;
   mientras frente-libre hacer avanza;
   este;
fin;

define-nueva-instruccion cambia como
inicio

   sur;
   si frente-libre entonces avanza;
   si derecha-bloqueada y izquierda-bloqueada y orientado-al-sur entonces
     inicio
        sal-de-instruccion;
     fin
   sino
     inicio
        este;
     fin;
fin;

define-nueva-instruccion deja(x) como
inicio
   izquierda;
   sur;
   mientras frente-libre hacer avanza;
   repetir x veces deja-zumbador;
   este;
   apagate;
fin;

define-nueva-instruccion camina(x) como
inicio
  si derecha-libre o izquierda-libre y orientado-al-sur entonces izquierda;
   si derecha-bloqueada y orientado-al-este entonces
     inicio
        mientras frente-libre y derecha-bloqueada y orientado-al-este hacer avanza;
     fin
   sino
     inicio
        si derecha-libre y orientado-al-este y frente-libre entonces
          inicio
             cambia;
             camina(x);
          fin;
     fin;
      si derecha-libre y orientado-al-este entonces
        inicio
           sur;
           si frente-libre y orientado-al-sur entonces avanza;
        fin;
        si derecha-bloqueada y izquierda-bloqueada y orientado-al-sur entonces
          inicio
             mientras derecha-bloqueada y izquierda-bloqueada y orientado-al-sur y frente-libre hacer
               inicio
                  si frente-libre entonces avanza;
                  camina(sucede(x))
               fin;
          fin;
          si frente-bloqueado y derecha-bloqueada y izquierda-bloqueada y orientado-al-este entonces
            inicio
               deja(x);
            fin;
          si frente-bloqueado y derecha-bloqueada y izquierda-libre y orientado-al-este entonces
            inicio
               deja(x);
            fin;
     camina(x);
fin;

    inicia-ejecucion
    izquierda;
    camina(0);
        apagate;
    termina-ejecucion
finalizar-programa
