iniciar-programa
define-nueva-instruccion derecha como repetir 3 veces gira-izquierda;
define-nueva-instruccion retrocede como repetir 2 veces gira-izquierda;

define-nueva-instruccion empieza como
 inicio
mientras orientado-al-sur y frente-libre hacer
  inicio
  avanza;
  si derecha-bloqueada y izquierda-bloqueada entonces deja-zumbador;
   si frente-bloqueado entonces
   inicio
    derecha;
    mientras frente-libre hacer avanza;
    retrocede;
    mientras derecha-bloqueada y frente-libre hacer avanza;
    si derecha-libre entonces derecha;
   fin;
  fin;
 fin;

 define-nueva-instruccion vuelve como
  inicio
  retrocede;
   mientras derecha-bloqueada hacer avanza;
    si derecha-libre entonces derecha;
     mientras orientado-al-norte y frente-libre hacer
  inicio
  avanza;
   si frente-bloqueado entonces
   inicio
    derecha;
    mientras frente-libre hacer avanza;
    retrocede;
    mientras derecha-bloqueada y frente-libre hacer avanza;
    si derecha-libre entonces derecha;
   fin;
  fin;
  gira-izquierda;
  fin;

  define-nueva-instruccion deja como
   inicio
   si junto-a-zumbador y derecha-bloqueada y izquierda-bloqueada entonces coge-zumbador;
mientras orientado-al-sur y frente-libre hacer
  inicio
  avanza;
   si frente-bloqueado entonces
   inicio
    derecha;
    mientras frente-libre hacer avanza;
    retrocede;
    mientras derecha-bloqueada y frente-libre hacer avanza;
    si derecha-libre entonces derecha;
   fin;
  fin;
  retrocede;
   mientras frente-libre hacer avanza;
   si orientado-al-oeste entonces deja-zumbador;
   retrocede;
   mientras frente-libre hacer avanza;
   vuelve;
   fin;

 define-nueva-instruccion recorre como
  inicio
   mientras no-orientado-al-sur hacer gira-izquierda;
   si frente-bloqueado entonces
   inicio
    derecha;
    mientras frente-libre hacer avanza;
    retrocede;
    mientras derecha-bloqueada hacer avanza;
    si derecha-libre entonces derecha;
   fin;
   mientras orientado-al-sur y frente-libre hacer
  inicio
  avanza;
  si junto-a-zumbador entonces deja
  sino
   inicio
    si frente-bloqueado entonces
   inicio
    derecha;
    mientras frente-libre hacer avanza;
    retrocede;
    mientras derecha-bloqueada y frente-libre hacer avanza;
    si derecha-libre entonces derecha;
    fin;
   fin;
   fin;
   fin;







  inicia-ejecucion
  si frente-bloqueado entonces
   inicio
    derecha;
    mientras frente-libre hacer avanza;
    retrocede;
    mientras derecha-bloqueada hacer avanza;
    si derecha-libre entonces derecha;
   fin;

  empieza;
  vuelve;
  recorre;


         apagate;
    termina-ejecucion
finalizar-programa
