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 ubicate como inicio
    mientras no orientado-al-oeste hacer inicio gira-izquierda; fin;
    mientras frente-libre hacer inicio avanza; fin;
    gira-izquierda;
    mientras frente-libre hacer inicio avanza; fin;
    media-vuelta;
  fin;

define-nueva-instruccion busca como inicio
 si frente-libre y no junto-a-zumbador entonces inicio
 mientras frente-libre y no junto-a-zumbador hacer inicio
 avanza;
 fin;


 busca;
 fin;
 si frente-bloqueado entonces inicio
 media-vuelta;
 mientras frente-libre hacer avanza;
 gira-izquierda;
 avanza;
 gira-izquierda;
 busca;
 fin;

 si junto-a-zumbador entonces inicio
 sal-de-instruccion;
 fin;
 fin;

define-nueva-instruccion largo(n) como inicio
 Si junto-a-zumbador entonces inicio
 coge-zumbador;
 si frente-libre entonces avanza;
 largo(sucede(n));
 fin
 sino inicio
 ubicate;
 repetir n veces deja-zumbador;
 gira-derecha; avanza;
 repetir n veces deja-zumbador;
 avanza;
 repetir n veces deja-zumbador;
 avanza;
 fin;
 fin;

define-nueva-instruccion ancho(n) como inicio
 Si junto-a-zumbador entonces inicio
  coge-zumbador;
  si frente-libre entonces avanza;
  ancho(sucede(n));
 fin
 sino si no junto-a-zumbador entonces inicio
 si frente-libre entonces inicio
 media-vuelta; avanza;
 Gira-izquierda; avanza;
 largo(0);
 repetir n veces deja-zumbador;
 avanza;
 repetir n veces deja-zumbador;
 coge-zumbador;
 media-vuelta; avanza; avanza; avanza; gira-derecha;
 fin
 sino inicio
 media-vuelta; gira-izquierda; avanza;
 largo(0);
 repetir n veces deja-zumbador;
 avanza;
 repetir n veces deja-zumbador;
 coge-zumbador;
 media-vuelta; avanza; avanza; avanza; gira-derecha;
 fin;
 fin;
 fin;

 define-nueva-instruccion uno1(n) como inicio
 si junto-a-zumbador entonces inicio
 coge-zumbador;
 uno1(n);
 repetir n veces deja-zumbador;
 fin;
 fin;

define-nueva-instruccion uno(n) como inicio
 Uno1(3);
 gira-derecha; avanza;
 uno1(2);
 fin;

 define-nueva-instruccion uno2(n) como inicio
 si junto-a-zumbador entonces inicio
 coge-zumbador;
 uno2(sucede(n));
 fin
 sino inicio
 avanza;
 uno1(n);
 fin;
 fin;

 define-nueva-instruccion dos(n) como inicio
 si junto-a-zumbador y frente-libre entonces inicio
 coge-zumbador;
 dos(sucede(n));
 fin
 sino inicio
 si frente-libre entonces
 avanza;
 si frente-bloqueado entonces inicio
  repetir n veces deja-zumbador;
  apagate;
 fin;
 dos(n);
 fin;
 fin;



    inicia-ejecucion
    mientras no orientado-al-oeste hacer inicio gira-izquierda; fin;
    mientras frente-libre hacer inicio avanza; fin;
    gira-izquierda;
    mientras frente-libre hacer inicio avanza; fin;
    media-vuelta;
    busca;
    Ancho(0);
    gira-izquierda; avanza; gira-derecha;
    Uno(0);
    avanza; avanza; media-vuelta;
    coge-zumbador; coge-zumbador;
    uno2(0);
    uno1(4);
    media-vuelta; avanza; avanza;
    media-vuelta;
    dos(0);

        apagate;
    termina-ejecucion
finalizar-programa
