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


define-nueva-instruccion regresa como inicio
 gira (2);
  mientras frente-libre hacer avanza;
  gira (3);
  si frente-bloqueado entonces apagate;
  avanza;
  gira (3);
fin;




define-nueva-instruccion recoge como inicio
 si junto-a-zumbador entonces inicio
  mientras junto-a-zumbador hacer coge-zumbador;
   repetir 4 veces inicio
    si frente-libre entonces inicio
     avanza;
      recoge;
      repetir 2 veces gira-izquierda;
      avanza;
     repetir 2 veces gira-izquierda;
    fin;
   gira-izquierda;
  fin;
 fin;
fin;



define-nueva-instruccion infectado (k) como inicio
 si junto-a-zumbador y no si-es-cero (k) entonces inicio
  coge-zumbador;
   infectado (precede(k));
    fin
    sino inicio
    si no-junto-a-zumbador y si-es-cero (k) entonces inicio
   deja-zumbador;

    recoge;
     mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    gira-izquierda;
    mientras frente-libre hacer avanza;
    deja-zumbador;

   fin;
 fin;
fin;



define-nueva-instruccion bp como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   si no-junto-a-zumbador entonces inicio
    repetir 2 veces deja-zumbador;

   repetir 4 veces inicio
    si frente-libre entonces inicio
     avanza;
      bp;

     si frente-libre o derecha-libre entonces inicio
       repetir 2 veces gira-izquierda;
       avanza;
       repetir 2 veces gira-izquierda;
      fin;
       fin;
       si frente-libre o derecha-libre entonces gira-izquierda;
      fin;
      fin
      sino inicio
     deja-zumbador;
    fin;

  fin
   sino inicio
    deja-zumbador;
    repetir 4 veces inicio
    si frente-libre entonces inicio
     avanza;
     mientras no-junto-a-zumbador y frente-libre  hacer avanza;
     repetir 2 veces gira-izquierda;

      si junto-a-zumbador entonces inicio
       coge-zumbador;
       si junto-a-zumbador entonces inicio
        deja-zumbador;
        avanza;
        mientras no-junto-a-zumbador hacer avanza;
        deja-zumbador;
        fin
        sino inicio
        deja-zumbador;
        avanza;
        mientras no-junto-a-zumbador hacer avanza;
       fin;

       fin
       sino inicio
       mientras no-junto-a-zumbador hacer avanza;
      fin;
     repetir 2 veces gira-izquierda;
    fin;
    gira-izquierda;
  fin;
  infectado (5);
 fin;

fin;


define-nueva-instruccion globo (m) como inicio
 mientras no-junto-a-zumbador hacer inicio

si derecha-bloqueada entonces inicio
gira-izquierda;
repetir m veces avanza;
gira (3);
fin;

    mientras frente-libre y no-junto-a-zumbador hacer avanza;
    si frente-bloqueado entonces inicio
    regresa;
    globo (sucede(m));
    fin;
    si junto-a-zumbador entonces inicio

    repetir 4 veces inicio
    avanza;
    gira(2);
    si no-junto-a-zumbador entonces inicio
    avanza;
    si junto-a-zumbador entonces coge-zumbador;
    fin
    sino inicio
    avanza;
    repetir 4 veces deja-zumbador;
    fin;
    gira(3);
    fin;


    si junto-a-zumbador entonces inicio
    mientras junto-a-zumbador hacer coge-zumbador;
    deja-zumbador;
    bp;
    fin;

     si frente-bloqueado y derecha-bloqueada entonces inicio
     gira-izquierda;
     si frente-libre entonces avanza;
     fin
     sino inicio
     si junto-a-zumbador entonces recoge;
     fin;

    fin;

    fin;


fin;




    inicia-ejecucion

    mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    gira-izquierda;
    mientras frente-libre hacer avanza;
    gira-izquierda;

    globo (0);


        apagate;
    termina-ejecucion
finalizar-programa
