iniciar-programa
    define-nueva-instruccion g(x) como inicio
        repetir x veces gira-izquierda;
    fin;
    define-nueva-instruccion c(x) como inicio
        repetir x veces coge-zumbador;
    fin;
    define-nueva-instruccion fla como inicio
        mientras frente-libre hacer avanza;
    fin;
    define-nueva-instruccion lugar(x) como inicio
        si junto-a-zumbador entonces inicio
            c(1); lugar(sucede(x));
            si orientado-al-norte entonces inicio
                g(2); avanza; g(1); repetir x veces avanza;
            fin;
        fin;
    fin;
    define-nueva-instruccion recoge(x) como inicio
        si junto-a-zumbador entonces inicio
            c(1); recoge(sucede(x));
        fin;
        si orientado-al-oeste entonces inicio
            g(3); avanza;
        fin;
        si orientado-al-norte entonces inicio
            repetir x veces deja-zumbador;
        fin;
        si orientado-al-norte entonces inicio
            g(2); avanza; g(1);
        fin;
    fin;
    define-nueva-instruccion quita1(x) como inicio
        si junto-a-zumbador entonces inicio
            c(1); quita1(sucede(x));
        fin;
        si no(si-es-cero (x)) entonces inicio
            si orientado-al-sur entonces inicio
                avanza; g(3);
            fin;
            repetir x veces avanza;
            recoge(0);
            repetir x veces avanza; g(2);
        fin;
    fin;
    define-nueva-instruccion quita(x) como inicio
        si junto-a-zumbador entonces inicio
            c(1); quita(sucede(x));
        fin;
        si derecha-libre y orientado-al-este entonces inicio
        mientras no-junto-a-zumbador hacer avanza;
        si junto-a-zumbador entonces coge-zumbador;
        si orientado-al-este entonces g(3);
          fin;
        si no(si-es-cero (x)) entonces inicio
            si orientado-al-sur entonces inicio
                avanza; g(3);
            fin;
            repetir x veces avanza;
            recoge(0);
            repetir x veces avanza; g(2);
        fin;
    fin;
    define-nueva-instruccion recorre(x) como inicio
        si junto-a-zumbador entonces inicio
            c(1); recorre(sucede(x))
        fin;
        si orientado-al-oeste entonces inicio
        mientras frente-libre y no-junto-a-zumbador hacer avanza;
        si frente-bloqueado y no-junto-a-zumbador entonces inicio
            g(2);
            repetir x veces deja-zumbador;
        fin
        sino inicio
        si junto-a-zumbador entonces inicio
            si orientado-al-oeste entonces g(2);
            avanza; repetir x veces deja-zumbador;
        fin;    
        fin;
        fin;
    fin;
    define-nueva-instruccion coloca(x) como inicio
        si derecha-bloqueada entonces inicio
            g(1); avanza; g(1); fla; g(2);
            mientras no-junto-a-zumbador y frente-libre hacer avanza;
            si frente-bloqueado y no-junto-a-zumbador entonces inicio
               g(2); fla; g(3); apagate;
           fin;
        fin;
        si junto-a-zumbador y derecha-libre entonces inicio
            c(1); coloca(sucede(x));
        fin;
        si derecha-libre entonces inicio
            g(3); avanza; g(1);
            mientras junto-a-zumbador hacer avanza;
            repetir x veces deja-zumbador;
        fin;
    fin;
    inicia-ejecucion
       mientras no-orientado-al-norte hacer g(1);
       avanza;
       lugar(0);
       g(1); avanza;
       si junto-a-zumbador entonces inicio
           g(2);
           quita1(0);
       fin
       sino inicio
           deja-zumbador;
           g(1); fla; g(2); avanza;
           quita(0);
       fin;
       mientras junto-a-zumbador hacer inicio
           recorre(0);
           avanza;
           mientras frente-libre y no-junto-a-zumbador hacer avanza;
           si junto-a-zumbador entonces g(2);
       fin;
       mientras derecha-bloqueada hacer inicio
           coloca(0);
       fin;
        apagate;
    termina-ejecucion
finalizar-programa

 