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

Define-nueva-instruccion guarda(n) como
    inicio
    Si frente-libre y no-junto-a-zumbador y izquierda-bloqueada entonces
        inicio
        avanza;
        guarda(0);
        Si no-junto-a-zumbador entonces
                inicio
                Si si-es-cero(precede(n)) entonces
                    inicio
                    Mientras no-orientado-al-norte hacer
                        g(1);
                    avanza;

                    fin;
                Si si-es-cero(precede(precede(n))) entonces
                    inicio
                    Mientras no-orientado-al-este hacer
                        g(1);

                    avanza;
                    fin;
                Si si-es-cero(precede(precede(precede(n)))) entonces
                    inicio
                    Mientras no-orientado-al-sur hacer
                        g(1);

                    avanza;
                    fin;
                Si si-es-cero(precede(precede(precede(precede(n))))) entonces
                    inicio
                    Mientras no-orientado-al-oeste hacer
                        g(1);

                    avanza;
                    fin;


                fin;
        fin
        sino
            inicio
            Si junto-a-zumbador entonces
                inicio
                coge-zumbador;
                Si no-junto-a-zumbador entonces
                    guarda(1)
                    sino
                        inicio
                        coge-zumbador;
                        Si no-junto-a-zumbador entonces
                            guarda(2)

                            sino
                                inicio
                                coge-zumbador;
                                si no-junto-a-zumbador entonces
                                    guarda(3)

                                    sino
                                        inicio
                                        coge-zumbador;
                                        Guarda(4);
                                        fin;
                                 fin;
                          fin;
                 fin;
              Si frente-bloqueado y no-junto-a-zumbador y izquierda-bloqueada entonces
                  inicio
                   Si no-junto-a-zumbador entonces
                inicio
                Si si-es-cero(precede(n)) entonces
                    inicio
                    Mientras no-orientado-al-norte hacer
                        g(1);
                    avanza;

                    fin;
                Si si-es-cero(precede(precede(n))) entonces
                    inicio
                    Mientras no-orientado-al-este hacer
                        g(1);

                    avanza;
                    fin;
                Si si-es-cero(precede(precede(precede(n)))) entonces
                    inicio
                    Mientras no-orientado-al-sur hacer
                        g(1);

                    avanza;
                    fin;
                Si si-es-cero(precede(precede(precede(precede(n))))) entonces
                    inicio
                    Mientras no-orientado-al-oeste hacer
                        g(1);

                    avanza;
                    fin;


                fin;
                fin;

          fin;
   fin;
    inicia-ejecucion
    Mientras frente-libre y junto-a-zumbador hacer
        avanza;
    g(2);
    guarda(0);

    apagate;
    termina-ejecucion
finalizar-programa
