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


define-nueva-instruccion virus como inicio
 mientras derecha-libre hacer inicio
     mientras frente-libre hacer inicio
         si junto-a-zumbador entonces deja-zumbador;
         avanza;
     fin;
     si junto-a-zumbador entonces deja-zumbador;
     gira (2);
     mientras frente-libre hacer avanza;
     gira-izquierda;
     avanza;
     gira-izquierda;
 fin;
    mientras frente-libre hacer inicio
         si junto-a-zumbador entonces deja-zumbador;
         avanza;
     fin;
     si junto-a-zumbador entonces deja-zumbador;
     gira-izquierda;
     mientras frente-libre hacer avanza;
     gira-izquierda;
     mientras frente-libre hacer avanza;
     gira (2);
fin;

define-nueva-instruccion replica como inicio
    mientras derecha-libre hacer inicio
    mientras frente-libre hacer inicio
        si junto-a-zumbador entonces inicio
           coge-zumbador;
           si junto-a-zumbador entonces inicio
           deja-zumbador;
           si frente-libre entonces inicio
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
               gira (2);
           fin;
           si izquierda-libre entonces inicio
              gira-izquierda;
              avanza;
              si no-junto-a-zumbador entonces deja-zumbador;
              gira (2);
              avanza;
              gira-izquierda;

           fin;
           si derecha-libre entonces inicio
               gira (3);
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
               gira (3);
           fin;
           gira (2);
            si frente-libre entonces inicio
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
           fin
           sino inicio
               gira (2);

           fin;


           fin
           sino inicio
               deja-zumbador;
           fin;



        fin;
        avanza;

    fin;
    si junto-a-zumbador entonces inicio
           coge-zumbador;
           si junto-a-zumbador entonces inicio
           deja-zumbador;
           si frente-libre entonces inicio
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
               gira (2);
           fin;
           si izquierda-libre entonces inicio
              gira-izquierda;
              avanza;
              si no-junto-a-zumbador entonces deja-zumbador;
              gira (2);
              avanza;
              gira-izquierda;

           fin;
           si derecha-libre entonces inicio
               gira (3);
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
               gira (3);
           fin;
           gira (2);
            si frente-libre entonces inicio
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
           fin
           sino inicio
               gira (2);

           fin;


           fin
           sino inicio
               deja-zumbador;
           fin;
           fin;
           gira (2);
           mientras frente-libre hacer avanza;
           gira-izquierda;
           avanza;
           gira-izquierda;
    fin;
     mientras frente-libre hacer inicio
        si junto-a-zumbador entonces inicio
           coge-zumbador;
           si junto-a-zumbador entonces inicio
           deja-zumbador;
           si frente-libre entonces inicio
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
               gira (2);
           fin;
           si izquierda-libre entonces inicio
              gira-izquierda;
              avanza;
              si no-junto-a-zumbador entonces deja-zumbador;
              gira (2);
              avanza;
              gira-izquierda;

           fin;
           si derecha-libre entonces inicio
               gira (3);
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
               gira (3);
           fin;
           gira (2);
            si frente-libre entonces inicio
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
           fin
           sino inicio
               gira (2);

           fin;


           fin
           sino inicio
               deja-zumbador;
           fin;



        fin;
        avanza;

    fin;
    si junto-a-zumbador entonces inicio
           coge-zumbador;
           si junto-a-zumbador entonces inicio
           deja-zumbador;
           si frente-libre entonces inicio
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
               gira (2);
           fin;
           si izquierda-libre entonces inicio
              gira-izquierda;
              avanza;
              si no-junto-a-zumbador entonces deja-zumbador;
              gira (2);
              avanza;
              gira-izquierda;

           fin;
           si derecha-libre entonces inicio
               gira (3);
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
               gira (3);
           fin;
           gira (2);
            si frente-libre entonces inicio
               avanza;
               si no-junto-a-zumbador entonces deja-zumbador;
               gira (2);
               avanza;
           fin
           sino inicio
               gira (2);

           fin;


           fin
           sino inicio
               deja-zumbador;
           fin;
           fin;

fin;

define-nueva-instruccion quitar como inicio
mientras derecha-libre hacer inicio
mientras frente-libre hacer inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    si no-junto-a-zumbador entonces deja-zumbador;
    fin;
    avanza;
fin;
  si junto-a-zumbador entonces inicio
  coge-zumbador;
    si no-junto-a-zumbador entonces deja-zumbador;
    fin;
   gira (2);
   mientras frente-libre hacer avanza;
   gira-izquierda;
   avanza;
   gira-izquierda;


fin;
  mientras frente-libre hacer inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    si no-junto-a-zumbador entonces deja-zumbador;
    fin;
    avanza;
fin;
  si junto-a-zumbador entonces inicio
  coge-zumbador;
  si no-junto-a-zumbador entonces deja-zumbador;
  fin;
  gira-izquierda;
  mientras frente-libre hacer avanza;
  gira-izquierda;
  mientras frente-libre hacer avanza;
  gira (2);

fin;

define-nueva-instruccion dias (t) como inicio
    si junto-a-zumbador entonces inicio
       coge-zumbador;
       dias (sucede(t));
    fin
    sino inicio
    repetir t veces inicio
        virus;
        replica;
        gira-izquierda;
        mientras frente-libre hacer avanza;
        gira-izquierda;
        mientras frente-libre hacer avanza;
        gira (2);
        quitar;
        fin;

    fin;
    fin;

define-nueva-instruccion count (k) como inicio
    si derecha-libre o frente-libre entonces inicio
    si junto-a-zumbador entonces inicio
       coge-zumbador;
       count (sucede(k));

    fin
    sino inicio
        si frente-libre entonces inicio
           avanza;
        fin
        sino inicio
                  gira (2);
                  mientras frente-libre hacer avanza;
                  gira-izquierda;
                  avanza;
                  gira-izquierda;
        fin;

    fin;
    count (k);


    fin
    sino inicio
        si junto-a-zumbador entonces inicio

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

        fin;

    fin;                                               


fin;


    inicia-ejecucion
    si no-junto-a-zumbador entonces apagate;
    dias (0);
    count (0);

        apagate;
    termina-ejecucion
finalizar-programa
