iniciar-programa


define-nueva-instruccion agrupar(b) como inicio
   mientras no-orientado-al-sur hacer
      gira-izquierda;
   mientras frente-libre hacer
      avanza;
   gira-izquierda;
   avanza;
   gira-izquierda;

   repetir b veces inicio
   mientras junto-a-zumbador hacer inicio
      coge-zumbador;
      avanza;
   fin;

   gira-izquierda;
   gira-izquierda;

   mientras frente-libre hacer
      avanza;

   mientras algun-zumbador-en-la-mochila hacer
      deja-zumbador;
   gira-izquierda;
   avanza;
   gira-izquierda;
   fin;

   apagate;

fin;

define-nueva-instruccion ordenar(x) como inicio

repetir 99 veces inicio
   mientras no-orientado-al-oeste hacer
      gira-izquierda;
   avanza;

   repetir x veces inicio                    
      si junto-a-zumbador entonces
         coge-zumbador;
      avanza;
   fin;

    si no algun-zumbador-en-la-mochila entonces
      agrupar(x);

   mientras no-orientado-al-este hacer
      gira-izquierda;
   avanza;
   repetir x veces
      avanza;
   mientras no orientado-al-oeste hacer
      gira-izquierda;
   avanza;
   repetir x veces inicio
     si algun-zumbador-en-la-mochila entonces
        deja-zumbador;
     avanza
   fin;

   mientras no-orientado-al-este hacer
      gira-izquierda;
   avanza;

   repetir x veces
      avanza;
   gira-izquierda;
   avanza;



fin;
fin;


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


         mientras no orientado-al-este hacer
            gira-izquierda;
            avanza;
            avanza;
            gira-izquierda;

         repetir n veces inicio
         mientras junto-a-zumbador hacer
               coge-zumbador;

            mientras algun-zumbador-en-la-mochila hacer inicio
               deja-zumbador;
               avanza;
            fin;

            gira-izquierda;
            gira-izquierda;

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

         ordenar(n);

      fin;

fin;
    inicia-ejecucion
    contar(0);
        apagate;
    termina-ejecucion
finalizar-programa
