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 encuentra como inicio
 mientras frente-libre y derecha-libre hacer inicio
 avanza;
 fin;
 si derecha-bloqueada y frente-libre entonces inicio
 Mientras derecha-bloqueada hacer avanza;
 Gira-derecha;
 avanza;
 Mientras derecha-bloqueada hacer avanza;
 gira-derecha;
 avanza;
 gira-izquierda;
 mientras frente-libre hacer avanza;
 fin;
 si frente-bloqueado y orientado-al-norte entonces inicio
 media-vuelta;
 mientras frente-libre hacer avanza;
 gira-izquierda;
 avanza;
 gira-izquierda;
 encuentra;
 fin;
 fin;


define-nueva-instruccion busca(k) como inicio
mientras no orientado-al-oeste y no junto-a-zumbador hacer
inicio
 si  frente-libre y no junto-a-zumbador entonces inicio
 avanza;
 si Junto-a-zumbador entonces inicio
 mientras no orientado-al-norte hacer gira-izquierda;
 Sal-de-instruccion;
 Fin
 sino inicio
 Media-vuelta; avanza;
 Gira-izquierda;
 fin;
 fin
 sino si frente-bloqueado entonces inicio
 Gira-derecha;
 fin;
 fin;

 Si orientado-al-oeste entonces inicio
 Avanza;
 Si junto-a-zumbador entonces inicio
 mientras no orientado-al-norte hacer gira-izquierda;
 Sal-de-instruccion;
 fin
 sino si no junto-a-zumbador entonces inicio
 mientras no orientado-al-oeste hacer gira-izquierda;
 mientras frente-libre hacer avanza;
 gira-izquierda;
 mientras frente-libre hacer avanza;
 media-vuelta;
 encuentra;
 fin;
 fin;

 fin;


Define-nueva-instruccion Determina(k) Como inicio
Si junto-a-zumbador entonces inicio
Coge-zumbador;
  Si junto-a-zumbador entonces inicio
  Coge-zumbador;
  Fin
  sino inicio
  Repetir 2 veces inicio
  Repetir k veces deja-zumbador;
  fin;
  Deja-zumbador;
  Mientras no orientado-al-oeste hacer Inicio
  Gira-izquierda;
  fin;
  Fin;
Si orientado-al-norte entonces
Determina(sucede(k));
Fin
sino Si no junto-a-zumbador y orientado-al-norte entonces inicio
Repetir 2 veces inicio
Repetir k veces deja-zumbador;
fin;
Mientras no orientado-al-este hacer Gira-izquierda;
fin;
fin;


Define-nueva-instruccion Uno(n) como Inicio
 Si Junto-a-zumbador y orientado-al-norte entonces inicio
 Determina(0);
 fin;

 Si orientado-al-este y junto-a-zumbador entonces inicio
 Coge-zumbador;
 Uno(n);
 Si no orientado-al-este entonces inicio
 mientras no orientado-al-este hacer gira-izquierda;
 avanza;
 fin;
 deja-zumbador;
 sal-de-instruccion;
 Fin
 sino si no junto-a-zumbador y orientado-al-este entonces inicio
 Mientras no orientado-al-norte hacer inicio
 Gira-izquierda;
 fin;
 Busca(n);
 fin;

 Si orientado-al-oeste y junto-a-zumbador entonces inicio
 Coge-zumbador;
 Uno(n);
 Si no orientado-al-oeste entonces inicio
 mientras no orientado-al-oeste hacer gira-izquierda;
 avanza;
 fin;
 deja-zumbador;
 sal-de-instruccion;
 Fin
 sino si no junto-a-zumbador y orientado-al-oeste entonces inicio
 Mientras no orientado-al-norte hacer inicio
 Gira-izquierda;
 fin;
 Busca(n);
 fin;
 Si frente-libre entonces
 Uno(n);
 fin;

 define-nueva-instruccion resta(n) como inicio
 Si junto-a-zumbador entonces inicio
 Coge-zumbador;
 Resta(sucede(n));
 Fin
 sino inicio
 media-vuelta;
 avanza;
 Repetir n veces
 Si junto-a-zumbador y orientado-al-este entonces inicio
 Coge-zumbador;
 Fin sino inicio
 mientras no orientado-al-oeste hacer gira-izquierda;
 Deja-zumbador;
 fin;
 fin;
 fin;

    inicia-ejecucion

    mientras no orientado-al-norte hacer Gira-izquierda;
    si junto-a-zumbador entonces
    coge-zumbador;
    si no junto-a-zumbador entonces
    avanza;

    Si no junto-a-zumbador entonces inicio
    media-vuelta; avanza; gira-izquierda; avanza; deja-zumbador;
    apagate;
    fin
    sino inicio
    deja-zumbador;
    uno(1);
    fin;

    mientras no orientado-al-este hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    media-vuelta;
    avanza;
    Resta(0);
        apagate;
    termina-ejecucion
finalizar-programa

