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

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

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

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

define-nueva-instruccion saltar como inicio
norte;
mientras frente-libre y derecha-bloqueada  hacer avanza;
este;
si frente-libre entonces avanza;
sur;
mientras frente-libre hacer avanza;
este;

fin;

define-nueva-instruccion regresa como inicio
norte;
mientras frente-libre y izquierda-bloqueada hacer avanza;
oeste;
si frente-libre entonces avanza;
sur;
mientras frente-libre hacer avanza;
oeste;

fin;

define-nueva-instruccion prueva como inicio
norte;
mientras frente-libre y derecha-bloqueada hacer avanza;
este;
si frente-libre entonces
inicio
sur;
mientras frente-libre hacer avanza;
este;
fin
sino
inicio
 sur;
 mientras frente-libre hacer avanza;
oeste;
fin;


fin;


define-nueva-instruccion final(b) como inicio

si frente-bloqueado y izquierda-bloqueada entonces oeste;
   si ningun-zumbador-en-la-mochila  entonces
    inicio
       si si-es-cero(b) entonces apagate;
       si frente-libre entonces
          inicio
            si frente-libre entonces avanza;
          fin
          sino
          inicio
             regresa;
          fin;
       final(precede(precede(b)));

     fin;
fin;


define-nueva-instruccion caminar(a) como inicio
si frente-libre y no-orientado-al-oeste entonces
   inicio
     si frente-libre entonces avanza;
     caminar(sucede(a));
   fin
   sino
   inicio
      si izquierda-libre y frente-bloqueado  entonces
      inicio
       saltar;
      si frente-bloqueado entonces
      inicio
        prueva;
        si izquierda-bloqueada entonces final(sucede(a));

      fin;

      caminar(sucede(a));
      si frente-libre entonces inicio avanza;   fin;
      caminar(sucede(a));
      fin;
    fin;
 si frente-bloqueado entonces final(a);
 fin;

    inicia-ejecucion
 este;
 caminar(0);

        apagate;
    termina-ejecucion
    finalizar-programa
