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


define-nueva-instruccion mover como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   mover;
    deja-zumbador;
    fin
    sino inicio
    gira (2);
   avanza;
  gira (2);
 fin;
fin;


define-nueva-instruccion cambia (m) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   cambia (sucede(m));
   fin
   sino inicio
   avanza;
   mover;
   avanza;
   gira (2);
  repetir m veces deja-zumbador;
  avanza;
 fin;
fin;


define-nueva-instruccion compara  (n) como inicio
 si junto-a-zumbador y no si-es-cero (n) entonces inicio
  coge-zumbador;
   compara (precede(n));
   deja-zumbador;
   fin
   sino inicio
  si no si-es-cero (n) entonces gira (2);
 fin;
fin;



define-nueva-instruccion sort (n) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   sort (sucede(n));
   fin
   sino inicio
   repetir n veces deja-zumbador;
   avanza;
  compara (n);
 fin;
fin;



define-nueva-instruccion ordena (k) como inicio
 si no si-es-cero (k) entonces inicio
  repetir k veces inicio
   sort (0);
   si orientado-al-oeste entonces cambia (0);
   fin;
   gira (2);
   mientras frente-libre hacer avanza;
   gira (2);
   ordena (precede(k));

 fin;
fin;



define-nueva-instruccion bubble (k) como inicio
 si frente-libre entonces inicio
  avanza;
   bubble (sucede(k));
   fin
   sino inicio
   gira (2);
   ordena (k);
  fin;
 fin;

(*-------------------------------------------------------------------*)

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


define-nueva-instruccion regresa como inicio
 si frente-bloqueado y izquierda-libre entonces inicio
  gira (2);
   mientras frente-libre hacer avanza;
   gira (3);
   avanza;
  gira (3);
 fin
 sino inicio
  gira (2);
   mientras frente-libre hacer avanza;
   gira-izquierda;
    mientras frente-libre hacer avanza;
    gira-izquierda;
    mientras junto-a-zumbador hacer avanza;
   gira (3);
 fin;
fin;

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


define-nueva-instruccion busca1 como inicio
 si no-junto-a-zumbador entonces inicio
  mientras frente-libre y no-junto-a-zumbador hacer avanza;
  si frente-bloqueado y no-junto-a-zumbador entonces regresa1;
  si frente-libre o izquierda-libre entonces busca1;
 fin;
fin;



define-nueva-instruccion comparar (k) como inicio
 si junto-a-zumbador y no si-es-cero (k) entonces inicio
  coge-zumbador;
   comparar (precede(k));
    si orientado-al-este entonces deja-zumbador;
    fin
    sino inicio
   si no-junto-a-zumbador y si-es-cero (k) entonces gira (2);
 fin;
fin;




define-nueva-instruccion cuenta (k) como inicio
 mientras no-orientado-al-sur hacer inicio
  busca;
   si junto-a-zumbador entonces comparar (k);

    si orientado-al-oeste entonces inicio
     gira (2);
      si frente-libre entonces inicio
       avanza;
        fin
        sino inicio
        regresa;
        fin;

        cuenta (k);
       
        deja-zumbador;


        fin
        sino inicio

       si frente-libre entonces inicio
       avanza;
      fin
     sino inicio
    regresa;
   fin;

  fin;

 fin;

fin;





define-nueva-instruccion sabor (k) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   sabor (sucede(k));
    fin
    sino inicio
    cuenta (k);

 fin;
fin;

(*------------------------------------------------------------------*)


define-nueva-instruccion separa (n) como inicio
 si junto-a-zumbador y no si-es-cero (n) entonces inicio
  coge-zumbador;
   separa (precede(n));
   deja-zumbador;
   fin
   sino inicio
   si si-es-cero (n) entonces gira (2);

 fin;
fin;


define-nueva-instruccion dulces (n) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   dulces (sucede(n));
    fin
     sino inicio
     repetir n veces deja-zumbador;
    avanza;
    gira-izquierda;

    mientras orientado-al-este hacer inicio
    separa (n);
    si orientado-al-este entonces avanza;
  fin;

 fin;
fin;


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




define-nueva-instruccion mayor (m) como inicio
 si junto-a-zumbador entonces inicio
  mientras junto-a-zumbador hacer coge-zumbador;
   si frente-libre entonces avanza;
    mayor (sucede(m));
    fin
    sino inicio
    gira-izquierda;
    avanza;
    gira-izquierda;
    mientras frente-libre hacer avanza;
   gira-izquierda;
   multi (m);
  repetir m veces coge-zumbador;
  deja-zumbador;

 fin;
fin;



define-nueva-instruccion menor como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   si no-junto-a-zumbador y frente-libre entonces avanza;
    menor;
    deja-zumbador;
    fin
     sino inicio
     gira-izquierda;
    avanza;
    gira-izquierda;
    mientras frente-libre hacer avanza;
  fin;
fin;


define-nueva-instruccion lleva como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   lleva;
    deja-zumbador;
    fin
   sino inicio
  mientras frente-libre hacer avanza;
 fin;
fin;




    inicia-ejecucion

    mientras no-orientado-al-norte hacer gira-izquierda;
    repetir 2 veces avanza;
    gira (3);


    mientras frente-libre o izquierda-libre hacer inicio
     busca1;
      si junto-a-zumbador entonces inicio
       sabor (0);
        si algun-zumbador-en-la-mochila entonces deja-zumbador;

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

   gira (2);

   si frente-bloqueado y derecha-bloqueada y junto-a-zumbador entonces inicio
    gira-izquierda;
     avanza;
      lleva;
    apagate;
  fin;

   mientras frente-libre hacer avanza;
   gira-izquierda;
   mientras frente-libre hacer avanza;
   gira-izquierda;

    mientras junto-a-zumbador y frente-libre hacer avanza;
    gira (2);
    si no-junto-a-zumbador y frente-libre entonces avanza;
    bubble (0);

    gira-izquierda;
    avanza;
    gira (2);
    dulces (0);

    gira (2);
    mayor (0);
    avanza;
    gira-izquierda;
    menor;
    gira-izquierda;
    lleva;



        apagate;
    termina-ejecucion
finalizar-programa
