iniciar-programa
define-nueva-instruccion gira(k) como
repetir k veces gira-izquierda;
define-nueva-instruccion pir(n) como inicio
si frente-libre entonces avanza;
mientras no junto-a-zumbador y frente-libre hacer avanza;
       si (izquierda-bloqueada y frente-bloqueado) y orientado-al-norte entonces gira(3);
       mientras no junto-a-zumbador y frente-libre hacer avanza;
       si orientado-al-este y frente-bloqueado entonces inicio
           gira(2);
           mientras frente-libre hacer avanza;
           gira(3);
       fin;
       mientras (frente-bloqueado y orientado-al-norte) y derecha-libre hacer inicio
           gira(2);
           mientras frente-libre hacer avanza;
           gira-izquierda;
           avanza;
           gira-izquierda;
           avanza;
           mientras no junto-a-zumbador y frente-libre hacer avanza;
       fin;
   si frente-libre o derecha-libre entonces inicio
       si junto-a-zumbador y frente-libre entonces coge-zumbador;
        pir(sucede(n));
   fin sino inicio
       gira(2);
       mientras frente-libre hacer avanza;
       gira(3);
       mientras frente-libre hacer avanza;
       gira(2);
       mientras junto-a-zumbador hacer avanza;
       repetir n veces deja-zumbador;
       gira(2);
       mientras frente-libre hacer avanza;
       gira(3);
       avanza;
   fin;
fin;
define-nueva-instruccion end(p) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        end(sucede(p));
    fin sino inicio
        mientras frente-libre hacer avanza;
        gira-izquierda;
        mientras frente-libre hacer avanza;
        gira-izquierda;
        repetir p veces inicio
            deja-zumbador;
            si frente-libre entonces avanza;
        fin;
    fin;
fin;
    inicia-ejecucion
    repetir 10 veces
    pir(0);
    mientras frente-libre hacer avanza;
    gira(3);
    mientras frente-libre hacer avanza;
    gira(2);
    end(0);
        apagate;
    termina-ejecucion
finalizar-programa
 