iniciar-programa
define-nueva-instruccion g(n) como
repetir n veces
gira-izquierda;
define-nueva-instruccion ordena(n) como
inicio
     si junto-a-zumbador entonces
     inicio
           coge-zumbador;
           ordena(sucede(n));

     fin
     sino
     inicio
           g(2);
           mientras frente-libre hacer
           avanza;
           g(3);
           avanza;
           g(3);
           repetir precede(n) veces avanza;
           deja-zumbador;
           g(2);
           mientras frente-libre hacer
           avanza;
           g(1);
           avanza;
           g(1);
           avanza;
           mientras no-junto-a-zumbador y frente-libre hacer
           avanza;
     fin;
fin;
define-nueva-instruccion cuenta como
inicio
      si junto-a-zumbador entonces
      inicio
            coge-zumbador;
            cuenta;
            ordena(0);
      fin
      sino
      inicio
       mientras algun-zumbador-en-la-mochila hacer
          deja-zumbador;
          avanza;
         mientras no-junto-a-zumbador hacer
          avanza;

      fin;
fin;
define-nueva-instruccion recoge(n) como
inicio
      si no junto-a-zumbador y frente-libre entonces
      inicio
           avanza;
           recoge(sucede(n));
      fin
      sino
      inicio
           si junto-a-zumbador entonces
            coge-zumbador;
            g(2);
            mientras frente-libre hacer
            avanza;
            g(1);
            avanza;
            g(1);
            avanza; avanza;
            mientras junto-a-zumbador hacer
            avanza;
            repetir n veces
            deja-zumbador;
            g(2);
      fin;
fin;
define-nueva-instruccion cuenta2 como
inicio
      si junto-a-zumbador entonces
      inicio
            coge-zumbador;
            cuenta2;
            si orientado-al-oeste entonces
            inicio

                 mientras frente-libre hacer avanza;
                 g(3);
                 avanza;
                 g(3);
            fin;
            recoge(1);
      fin
      sino
      inicio
            g(3);
            avanza;
            g(3);


      fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer
    g(1);
    cuenta;
    g(2);
    mientras frente-libre hacer
    avanza;

    cuenta2;


        apagate;
    termina-ejecucion
finalizar-programa
