iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;

define-nueva-instruccion ubicar como
inicio
  norte;
  avanza;
  este;
  avanza;
  norte;
fin;

define-nueva-instruccion esquina como
inicio
  ubicar;
  mientras junto-a-zumbador hacer avanza;
  sur;
  avanza;
  este;
  mientras junto-a-zumbador hacer avanza;
fin;

define-nueva-instruccion pone2 como
inicio
  mientras frente-libre hacer
   inicio
     deja-zumbador;
     deja-zumbador;
     avanza;
   fin;
 deja-zumbador;
 deja-zumbador;
fin;

define-nueva-instruccion pintabajo como
inicio
  sur;
  pone2;
  oeste;
  avanza;
  pone2;
fin;

define-nueva-instruccion pintarriba como
inicio
  oeste;
  pone2;
  sur;
  avanza;
  pone2;
  coge-zumbador;
  coge-zumbador;
fin;

define-nueva-instruccion delimita como
inicio
  esquina;
  pintabajo;
  esquina;
  oeste;
  avanza;
  norte;
  avanza;
  oeste;
  pintarriba;
fin;

define-nueva-instruccion inicia como
inicio
  esquina;
  oeste;
  avanza;
  sur;
  mientras no-junto-a-zumbador hacer avanza;
fin;

define-nueva-instruccion buscaini como
inicio
  norte;
  mientras junto-a-zumbador hacer avanza;
  sur;
  avanza;
  este;
  mientras junto-a-zumbador hacer avanza;
  sur;
  mientras no-junto-a-zumbador hacer avanza;
fin;

define-nueva-instruccion arrastra como
inicio
  si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      arrastra;
      deja-zumbador;
    fin
  sino
    inicio
      deja-zumbador;
      gira-izquierda;
      gira-izquierda;
      avanza;    
    fin;
fin;

define-nueva-instruccion arrastraRegreso(n) como
inicio
  si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      arrastraRegreso(n);
      deja-zumbador;
    fin
 sino
   inicio
     deja-zumbador;
     si si-es-cero(n) entonces sur;
     si si-es-cero(precede(n)) entonces norte;
     si si-es-cero(precede(precede(n))) entonces oeste;
     si si-es-cero(precede(precede(precede(n)))) entonces este;
     avanza;
     coge-zumbador;
   fin;
fin;

define-nueva-instruccion busca(n) como
inicio
  si no-junto-a-zumbador entonces
    inicio
      si si-es-cero(n) entonces deja-zumbador
  sino
    inicio
      gira-izquierda;
      gira-izquierda;
      avanza;
      deja-zumbador;
      arrastra;
    fin;
   fin;

      norte;
      avanza;
      si no-junto-a-zumbador entonces
        inicio
          busca(1);
          arrastraRegreso(0);
        fin
      sino
        inicio
          sur;
          avanza;
        fin;

      sur;
      avanza;
      si no-junto-a-zumbador entonces
        inicio
          busca(1);
          arrastraRegreso(1);
        fin
      sino
        inicio
          norte;
          avanza;
        fin;

      este;
      avanza;
      si no-junto-a-zumbador entonces
        inicio
          busca(1);
          arrastraRegreso(2);
        fin
      sino
        inicio
          oeste;
          avanza;
        fin;

      oeste;
      avanza;
      si no-junto-a-zumbador entonces
        inicio
          busca(1);
          arrastraRegreso(3);
        fin
      sino
        inicio
          este;
          avanza;
        fin;
fin;

define-nueva-instruccion ir11 como
inicio
  oeste;
  mientras frente-libre hacer avanza;
  sur;
  mientras frente-libre hacer avanza;
fin;

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

define-nueva-instruccion compara(n) como
inicio
  si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      compara(sucede(n));
    fin
  sino
    inicio
      deja-zumbador;
      ir11;
      masgrande(n);
    fin;
fin;

define-nueva-instruccion buscalinea como
inicio
  mientras frente-libre y junto-a-zumbador hacer
    inicio
      avanza;
      si no-junto-a-zumbador entonces
        inicio
          busca(0);
          compara(0);
          buscaini;
          oeste;
        fin;
      si frente-bloqueado entonces
        inicio
          este;
          mientras junto-a-zumbador hacer avanza;
          oeste;
          avanza;
          sur;
          coge-zumbador;
          coge-zumbador;
        fin;
    fin;
fin;



     inicia-ejecucion
        delimita;
        inicia;
         mientras frente-libre hacer
          inicio
            oeste;
            buscalinea;
            avanza;
          fin;
        apagate;
    termina-ejecucion
finalizar-programa
