iniciar-programa
define-nueva-instruccion g(n) como
repetir n veces gira-izquierda;
define-nueva-instruccion gira(n) como
inicio
    si orientado-al-oeste entonces
    inicio
        si junto-a-zumbador entonces
        inicio
            repetir 2 veces
            si junto-a-zumbador entonces
            coge-zumbador
            sino
            g(2);
            gira(sucede(n));
        fin
        sino
        inicio
            repetir n veces
            repetir 2 veces
            deja-zumbador;
        fin;
    fin
    sino
    inicio
        repetir n veces
        repetir 2 veces
        deja-zumbador;
        si junto-a-zumbador entonces
        coge-zumbador;
    fin;
fin;
define-nueva-instruccion regresa como
inicio
    repetir 98 veces
    si orientado-al-sur entonces
    si frente-libre entonces
    avanza
    sino
    inicio
        g(1);
        avanza;
        g(3);
        avanza;
        g(1);
        avanza;
    fin;
    si orientado-al-sur entonces
    inicio
        g(2);
        mientras frente-libre hacer
        avanza;
        g(3);
        avanza;
        g(3);
        regresa;
    fin;
fin;
define-nueva-instruccion dfs(n) como
inicio
    si junto-a-zumbador entonces
    inicio
        si orientado-al-este entonces
        inicio
            coge-zumbador;
            dfs(sucede(n))
        fin
        sino
        si orientado-al-oeste entonces
        inicio
            coge-zumbador;
            dfs(precede(n))
        fin;
    fin
    sino
    inicio
        repetir 4 veces
        inicio
            si frente-libre entonces
            inicio
                avanza;
                si junto-a-zumbador entonces
                inicio
                    mientras no-orientado-al-oeste hacer
                    g(1);
                    gira(0);
                    dfs(n);
                    sal-de-instruccion;
                fin;
                g(2);
                avanza;
                g(2);
            fin;
            gira-izquierda;
        fin;
        mientras no-orientado-al-norte hacer
        g(1);
        mientras frente-libre hacer
        avanza;
        g(3);
        mientras frente-libre hacer
        avanza;
        g(1);
        mientras frente-libre hacer
        avanza;
        g(1);
        mientras frente-libre hacer
        avanza;
        g(3);
        mientras frente-libre hacer
        avanza;
        g(1);
        mientras frente-libre hacer
        avanza;
        g(1);
        regresa;
        repetir n veces
        deja-zumbador;
        apagate;
    fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-oeste hacer
    gira-izquierda;
    gira(0);
    dfs(0);
        apagate;
    termina-ejecucion
finalizar-programa
