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

    si junto-a-zumbador entonces inicio
        coge-zumbador;
        acomoda(sucede(n));
    fin
    sino inicio
        g(2);
        mientras frente-libre hacer avanza;
        g(3);
        avanza;
        g(3);
        repetir n veces avanza;
        g(2);
        avanza;
        deja-zumbador;
        mientras frente-libre hacer avanza;
        g(1);
        avanza;
        g(1);
        mientras no junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces inicio
            acomoda(0);
        fin
        sino inicio
            g(2);
            mientras frente-libre hacer avanza;
            g(3);
            avanza;
            g(3);
        fin;
    fin;

fin;
define-nueva-instruccion resta(r) como inicio
     si no junto-a-zumbador y frente-libre entonces inicio

             avanza;
             resta(sucede(r));

     fin
     sino inicio
         si junto-a-zumbador entonces inicio
         g(2);
         avanza;
         mientras no junto-a-zumbador y frente-libre hacer avanza;
         si junto-a-zumbador entonces coge-zumbador;
         mientras frente-libre hacer avanza;
         g(3);
         avanza;
         g(3);

         repetir r veces avanza;
         si no junto-a-zumbador entonces inicio
             repetir r veces deja-zumbador;
             deja-zumbador;
         fin;
         g(2);
         mientras frente-libre hacer avanza;
         g(1);
         avanza;
         g(1);
         mientras no junto-a-zumbador y frente-libre hacer avanza;
         si junto-a-zumbador y frente-libre entonces inicio
             avanza;
             resta(0);
         fin
         sino inicio
             g(2);
             mientras frente-libre hacer avanza;
             g(3);
             avanza;
             g(3);
         fin;

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

fin;
define-nueva-instruccion lleva(x) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        lleva(sucede(x));
    fin
    sino inicio
        g(2);
        mientras frente-libre hacer avanza;
        g(1);
        mientras frente-libre hacer avanza;
        g(2);
        repetir x veces deja-zumbador;

    fin;
fin;
define-nueva-instruccion menor como inicio
    mientras no junto-a-zumbador y frente-libre hacer avanza;
    si junto-a-zumbador entonces inicio
        lleva(0);
    fin
    sino inicio
        g(2);
        mientras frente-libre hacer avanza;
        g(1);
        mientras frente-libre hacer avanza;
        g(2);
    fin;
fin;
define-nueva-instruccion limpia como inicio
    si frente-libre entonces inicio
        si junto-a-zumbador entonces inicio
            mientras junto-a-zumbador hacer coge-zumbador;
        fin
        sino inicio

        fin;
        avanza;
        limpia;
    fin
    sino inicio
        si junto-a-zumbador entonces inicio
            mientras junto-a-zumbador hacer coge-zumbador;
        fin;
        g(2);
        mientras frente-libre hacer avanza;
        g(1);
        mientras frente-libre hacer avanza;
        g(2);
    fin;
fin;

    inicia-ejecucion

    mientras no orientado-al-este hacer gira-izquierda;
    acomoda(0);
    mientras no junto-a-zumbador y frente-libre hacer avanza;
    si junto-a-zumbador entonces inicio
          si frente-libre entonces avanza;
          resta(0);
    fin;
    menor;
    repetir 2 veces avanza;
    g(3);
    limpia;

        apagate;
    termina-ejecucion
finalizar-programa
