    iniciar-programa
define-nueva-instruccion a como avanza;
define-nueva-instruccion sa como mientras frente-libre hacer a;
define-nueva-instruccion gi como gira-izquierda;
define-nueva-instruccion gd como repetir 3 veces gira-izquierda;
define-nueva-instruccion mv como repetir 2 veces gira-izquierda;
define-nueva-instruccion recursion como
inicio
    si frente-libre entonces
    inicio
        a;
        si frente-libre entonces
        inicio
            a;
            recursion;
            si frente-libre entonces a
            sino
            inicio
                si derecha-libre entonces
                inicio
                    gd;
                    mientras frente-libre hacer a;
                    gi;
                    a;
                fin
                sino
                inicio
                    gi;
                    sa;
                    gd;
                    a;
                fin;
            fin;
        fin
        sino
        inicio
            si izquierda-libre entonces
            inicio
                gi;
                mientras derecha-bloqueada y frente-libre hacer a;
                gd;
                a;
                si derecha-libre entonces
                inicio
                    gd;
                     mientras frente-libre hacer a;
                     gi;
                     recursion;
                     si frente-libre entonces a
                sino
                inicio
                    si derecha-libre entonces
                    inicio
                        gd;
                        sa;
                        gi;
                        a;
                    fin
                    sino
                    inicio
                        gi;
                        sa;
                        gd;
                        si frente-libre entonces a
                        sino
                        inicio
                            gd;
                            mientras izquierda-bloqueada hacer a;
                            gi;
                            a;
                        fin;
                    fin;
                fin;
                fin
                sino
                inicio
                    recursion;
                    si frente-libre entonces a
                sino
                inicio
                    si derecha-libre entonces
                    inicio
                        gd;
                        sa;
                        gi;
                        a;
                    fin
                    sino
                    inicio
                        gi;
                        sa;
                        gd;
                        a;
                    fin;
                fin;
                fin;
             fin
             sino
             si derecha-bloqueada entonces mv
             sino
             inicio
                 gd;
                 sa;
                 gi;
                 recursion;
                  si frente-libre entonces a
                sino
                inicio
                    si derecha-libre entonces
                    inicio
                        gd;
                        sa;
                        gi;
                        a;
                    fin
                    sino
                    inicio
                        gi;
                        sa;
                        gd;
                        a;
                    fin;
                fin;
             fin;
        fin;
    fin
    sino
    inicio
        si izquierda-libre entonces
        inicio
            gi;
            mientras derecha-bloqueada y frente-libre hacer a;
            gd;
            si frente-libre entonces
            inicio
                a;
                si derecha-libre entonces
                inicio
                    gd;
                    mientras frente-libre hacer a;
                    gi;
                    si frente-libre entonces a
                    sino
                    inicio
                        gi;
                        mientras derecha-bloqueada y frente-libre hacer a;
                        gd;
                        si frente-libre entonces
                        inicio
                            a;
                            gd;
                            mientras frente-libre hacer a;
                            gi;
                        fin;
                    fin;
                    recursion;
                    si frente-libre entonces a
                    sino
                inicio
                    si derecha-libre entonces
                    inicio
                        gd;
                        sa;
                        gi;
                        si frente-libre entonces a;
                    fin
                    sino
                    inicio
                        gi;
                        sa;
                        gd;
                        si frente-libre entonces a
                        sino
                        inicio
                            gd;
                            mientras izquierda-bloqueada hacer a;
                            gi;
                            a;
                        fin;
                    fin;
                fin;
                fin
                sino
                inicio
                    si frente-libre entonces
                    inicio
                        a;
                        recursion;
                        si frente-libre entonces a
                        sino
                        inicio
                            gd;
                            sa;
                            gi;
                            a;
                            gi;
                            sa;
                        fin;
                    fin;
                fin;
            fin
            sino
            inicio
                gd;
                mientras frente-libre hacer a;
                gd;
            fin;
        fin
        sino
        si derecha-bloqueada entonces mv
        sino
        inicio
            gd;
            sa;
            gi;
            si frente-libre entonces
            inicio
                a;
                recursion;
                si frente-libre entonces a
                sino
                inicio
                    si derecha-libre entonces
                    inicio
                        gd;
                        sa;
                        gi;
                        a;
                    fin
                    sino
                    inicio
                        gi;
                        sa;
                        gd;
                        a;
                    fin;
                fin;
            fin
            sino
            inicio
                gi;
                sa;
                gd;
                si frente-libre entonces
                inicio
                    a;
                    si derecha-libre entonces
                    inicio
                        gd;
                        sa;
                        gi;
                        recursion;
                        si frente-libre entonces a
                sino
                inicio
                    si derecha-libre entonces
                    inicio
                        gd;
                        sa;
                        gi;
                        a;
                    fin
                    sino
                    inicio
                        gi;
                        sa;
                        gd;
                        a;
                    fin;
                fin;
                    fin
                    sino
                    inicio
                        recursion;
                        si frente-libre entonces a
                sino
                inicio
                    si derecha-libre entonces
                    inicio
                        gd;
                        sa;
                        gi;
                        a;
                    fin
                    sino
                    inicio
                        gi;
                        sa;
                        gd;
                        a;
                    fin;
                fin;
                    fin;
                fin
                sino
                mv;
            fin;
        fin;
    fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer gi;
    recursion;
    si izquierda-libre entonces
    inicio
        gi;
        sa;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
