iniciar-programa
define-nueva-instruccion media-vuelta como  repetir 2 veces gira-izquierda;
define-nueva-instruccion gira-derecha como  repetir 3 veces gira-izquierda;
define-nueva-instruccion busca(n) como inicio
si no junto-a-zumbador y frente-libre o ( no junto-a-zumbador y frente-bloqueado y orientado-al-oeste) entonces inicio
   si frente-libre y no orientado-al-sur y orientado-al-oeste entonces inicio
   avanza;
   busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; media-vuelta;
   fin
   sino
   si orientado-al-sur y frente-bloqueado entonces inicio
    repetir 1 veces deja-zumbador;
    gira-izquierda; si frente-libre entonces avanza; gira-derecha;
   fin;
   fin;
   si frente-libre y no orientado-al-sur y orientado-al-norte entonces inicio
   avanza;
   busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; media-vuelta;
   fin
   sino
   si orientado-al-sur y frente-bloqueado entonces inicio
    repetir 2 veces deja-zumbador;
    gira-izquierda; si frente-libre entonces avanza; gira-derecha;
   fin;
   fin;
   si frente-libre  y no orientado-al-sur y orientado-al-este entonces inicio
   avanza;
   busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; media-vuelta;
   fin
   sino
   si orientado-al-sur y frente-bloqueado entonces inicio
    repetir 3 veces deja-zumbador;
    gira-izquierda; si frente-libre entonces avanza; gira-derecha;
   fin;
   fin;
 (*  si derecha-libre y no orientado-al-sur y orientado-al-este entonces inicio
    gira-derecha; avanza;
    busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; gira-derecha;
   fin
   sino
   si orientado-al-sur y frente-bloqueado entonces inicio
    repetir 0 veces deja-zumbador;
    gira-izquierda; avanza; gira-derecha;
   fin;
   fin;    *)
  si derecha-libre y no orientado-al-sur y orientado-al-norte entonces inicio
    gira-derecha; avanza;
    busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; gira-derecha;
   fin
   sino
   si orientado-al-sur y frente-bloqueado entonces inicio
   repetir 3 veces deja-zumbador;  (* *)
    gira-izquierda; si frente-libre entonces avanza; gira-derecha;
   fin;
   fin;
   si derecha-libre y no orientado-al-sur y orientado-al-oeste entonces inicio
    gira-derecha; avanza;
    busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; gira-derecha;
   fin
   sino
   si orientado-al-sur y frente-bloqueado entonces inicio
    repetir 2 veces deja-zumbador;  (* *)
    gira-izquierda; si frente-libre entonces avanza; gira-derecha;
   fin;
   fin;
   si izquierda-libre y no orientado-al-norte y orientado-al-este entonces inicio
   gira-izquierda; avanza;
   busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; gira-izquierda;
   fin
   sino
   si orientado-al-sur y frente-bloqueado entonces inicio
    repetir 2 veces deja-zumbador;  (* *)
    gira-izquierda; si frente-libre entonces avanza; gira-derecha;
   fin;
   fin;
   si izquierda-libre y no orientado-al-sur y orientado-al-norte entonces inicio
   gira-izquierda;  avanza;
   busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; gira-izquierda;
   fin
   sino
    si orientado-al-sur y frente-bloqueado entonces inicio
    repetir 1 veces deja-zumbador; (* *)
    gira-izquierda; si frente-libre entonces avanza; gira-derecha;
   fin;
   fin;
  (* si izquierda-libre y no orientado-al-sur y orientado-al-oeste entonces inicio
   gira-izquierda;        avanza;
   busca(n);
   si no orientado-al-sur  entonces inicio
   media-vuelta; avanza; gira-izquierda;
   fin
   sino
   si orientado-al-sur y frente-bloqueado entonces inicio
    repetir 0 veces deja-zumbador;
    gira-izquierda; avanza; gira-derecha;
   fin;
  fin;    *)
fin
sino
si frente-bloqueado y no junto-a-zumbador y orientado-al-norte entonces inicio
 mientras no orientado-al-oeste hacer gira-izquierda;
 mientras frente-libre hacer avanza;
 gira-izquierda;
 mientras frente-libre hacer avanza;
fin;
fin;

define-nueva-instruccion alr(n) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
  alr(n);
  deja-zumbador;
 fin
 sino inicio
  si frente-libre entonces avanza;
  si junto-a-zumbador entonces inicio
   alr(n);
   avanza;
  fin
  sino inicio
  media-vuelta;
  mientras frente-libre hacer avanza;
  media-vuelta;
  fin;
 fin;
fin;



    inicia-ejecucion
    mientras no orientado-al-norte hacer gira-izquierda;
    busca(0);
    gira-derecha;
    mientras frente-libre hacer avanza;
    media-vuelta;
    alr(0);
        apagate;
    termina-ejecucion
finalizar-programa
