iniciar-programa
define-nueva-instruccion g(n) como
    repetir n veces gira-izquierda;
define-nueva-instruccion avanzar(n) como
inicio
    si frente-bloqueado y izquierda-bloqueada entonces
    inicio
        g(2);
        repetir n veces
        inicio
            si frente-libre entonces
                avanza
            sino
            inicio
                g(3);
                mientras izquierda-bloqueada hacer avanza;
                g(1);
                avanza;
                g(1);
                mientras frente-libre hacer avanza;
                g(3);
            fin;
        fin;
        apagate;
    fin
    sino
    inicio
        repetir 2 veces
        inicio
            si frente-libre entonces avanza
            sino
            inicio
                g(1);
                mientras derecha-bloqueada y frente-libre hacer avanza;
                si derecha-bloqueada entonces
                inicio
                    g(2);
                    mientras frente-libre hacer avanza;
                    g(3);
                    repetir n veces
                    inicio
                        si frente-libre entonces avanza
                        sino
                        inicio
                            g(3);
                            mientras izquierda-bloqueada hacer avanza;
                            g(1);
                            avanza;
                            g(1);
                            mientras frente-libre hacer avanza;
                            g(3);
                        fin;
                    fin;
                    apagate;
                fin;
                g(3);
                avanza;
                g(3);
                mientras frente-libre hacer avanza;
                g(1);
            fin;
        fin;
        avanzar(sucede(n));
    fin;
fin;
    inicia-ejecucion
        mientras no-orientado-al-este hacer gira-izquierda;
        avanzar(0);
        apagate;
    termina-ejecucion
finalizar-programa
