iniciar-programa
define-nueva-instruccion gira (e) como inicio
repetir e veces gira-izquierda;
fin;

define-prototipo-instruccion llena (k);
define-prototipo-instruccion near (k);


define-nueva-instruccion mitad como inicio
 si frente-libre entonces inicio
  repetir 2 veces avanza;
   mitad;
    avanza;
     fin
     sino inicio
    gira (2);
 fin;
fin;


define-nueva-instruccion contar como inicio
 si frente-libre entonces inicio
  avanza;
   contar;
    deja-zumbador;
     fin
     sino inicio
     gira (2);
     mitad;
     deja-zumbador;
     gira (2);
    avanza;
   gira-izquierda;
  avanza;
 fin;
fin;



define-nueva-instruccion diagon (k) como inicio
 si izquierda-libre entonces inicio
  repetir k veces deja-zumbador;
   avanza;
    gira-izquierda;
     avanza;
     gira (3);

     diagon (sucede(k));
     fin
     sino inicio
     repetir k veces deja-zumbador;
     gira (3);
     mientras frente-libre hacer avanza;
    gira-izquierda;
   avanza;
   near (sucede(k));
 fin;
fin;




define-nueva-instruccion near (k) como inicio
 si frente-libre entonces inicio
  repetir k veces deja-zumbador;
   avanza;
    gira-izquierda;
     avanza;
     gira (3);

      si no-junto-a-zumbador entonces inicio
       near (sucede(k));
        fin
        sino inicio
        gira (2);
        avanza;
        gira-izquierda;
        avanza;
        si frente-bloqueado entonces apagate;
        avanza;
        gira-izquierda;
       near (sucede(k));
      fin;
     fin
    sino inicio
     repetir k veces deja-zumbador;
      gira (2);
       mientras frente-libre hacer avanza;
       gira (3);
       avanza;
      gira (3);
     diagon (sucede(k));
 fin;
fin;




define-nueva-instruccion zeta (k) como inicio
 si izquierda-libre entonces inicio

 si no-junto-a-zumbador entonces inicio
  repetir k veces deja-zumbador;
    avanza;
     gira-izquierda;
      avanza;
      gira (3);

      si no-junto-a-zumbador entonces inicio
      zeta (sucede(k));
      fin
      sino inicio

       (*primera vez???*)
      avanza;
      gira-izquierda;
      avanza;

      si junto-a-zumbador entonces inicio
      coge-zumbador;
      gira (2);
      si no-junto-a-zumbador entonces inicio
      deja-zumbador;
      repetir 2 veces avanza;
      gira (3);
      avanza;
      gira (2);
      zeta (sucede(sucede(k)));
      fin
      sino inicio
               (*GENERAL*)
      deja-zumbador;
      repetir 3 veces avanza;
      gira (3);
      repetir 2 veces avanza;
      gira (2);
      zeta (sucede(k));
      fin;

      fin;
      fin;

   (*-----  CASO DE 3x3  -------*)
       fin
       sino inicio
       gira (3);
      avanza;
      gira-izquierda;
      zeta (sucede(k));
      fin;
    (*--------*)

 fin
  sino inicio
   repetir k veces deja-zumbador;
   si frente-libre entonces inicio
    gira (3);
     mientras frente-libre hacer avanza;
      gira-izquierda;
       si frente-libre entonces avanza;

       llena (sucede(k));

       fin
       sino inicio
       gira (3);
       avanza;
       repetir k veces deja-zumbador;
       deja-zumbador;
      gira (3);
      mientras frente-libre hacer avanza;
     gira (3);
    avanza;
     gira (2);
      repetir k veces deja-zumbador;
       repetir 2 veces deja-zumbador;
        mientras frente-libre hacer avanza;
        gira-izquierda;
        avanza;
       near (sucede(sucede(sucede(k))));

   fin;

  fin;
 fin;



define-nueva-instruccion llena (k) como inicio
 si frente-libre o derecha-libre o no-junto-a-zumbador entonces inicio

  si frente-libre entonces inicio
   repetir k veces deja-zumbador;
    avanza;
     gira-izquierda;
      avanza;
      gira (3);
      llena (sucede(k));
      fin
      sino inicio
      repetir k veces deja-zumbador;

      gira (2);
      mientras frente-libre hacer avanza;
      gira (3);
      avanza;
     gira (3);

   zeta (sucede(k));
  fin;
 fin;
fin;




    inicia-ejecucion

    mientras no-orientado-al-norte hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    gira (3);
    contar;
    deja-zumbador;
    gira-izquierda;
    repetir 2 veces avanza;
    gira (3);
    mientras frente-libre hacer avanza;
    gira-izquierda;

    llena (2);





        apagate;
    termina-ejecucion
finalizar-programa
