iniciar-programa
    define-prototipo-instruccion checa(a);

    define-nueva-instruccion norte(a) como inicio
        checa(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(a)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))));
    fin;

    define-nueva-instruccion sur(a) como inicio
        checa(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(precede(a)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))));
    fin;

    define-nueva-instruccion oeste(a) como inicio
        checa(sucede(a));
    fin;

    define-nueva-instruccion este(a) como inicio
        checa(precede(a));
    fin;

    define-nueva-instruccion camina(a) como inicio
        avanza;
        si orientado-al-norte entonces inicio
            norte(a);
        fin sino si orientado-al-este entonces inicio
            este(a);
        fin sino si orientado-al-oeste entonces inicio
            oeste(a);
        fin sino si orientado-al-sur entonces inicio
            sur(a);
        fin;
    fin;

    define-nueva-instruccion termina como inicio

        mientras no-orientado-al-sur hacer inicio
            gira-izquierda;
        fin;
        apagate;
    fin;


    define-nueva-instruccion checaAvanza como inicio
        si frente-libre entonces inicio
            avanza;
            si izquierda-libre entonces
                termina;
        fin sino
            termina;

    fin;

    define-nueva-instruccion checaGira como inicio
        si frente-libre entonces inicio
            avanza;
            si izquierda-libre entonces inicio
                gira-izquierda;
            fin sino
                termina;
        fin sino
            termina;
    fin;

    define-nueva-instruccion checa(a) como inicio
        si no si-es-cero(a) entonces inicio
            si izquierda-libre entonces inicio
                gira-izquierda;
                camina(a);
                checaGira;
            fin sino inicio
                si frente-libre entonces inicio
                    camina(a);
                    checaAvanza;
                fin sino inicio
                    gira-izquierda;
                    gira-izquierda;
                    gira-izquierda;
                    checa(a);
                    gira-izquierda;
                    gira-izquierda;
                    gira-izquierda;
                fin;
            fin;
        fin sino inicio
            mientras no-orientado-al-norte hacer inicio
                gira-izquierda;
            fin;
            mientras izquierda-libre hacer
                gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion checaInicio como inicio
        si frente-libre entonces inicio
            si izquierda-libre entonces inicio
                gira-izquierda;
                camina(0);
                checaGira;
            fin sino inicio
                camina(0);
                checaAvanza;
            fin;
        fin sino inicio
            gira-izquierda;
            gira-izquierda;
            gira-izquierda;
            checa(0);
            gira-izquierda;
            gira-izquierda;
            gira-izquierda;
        fin;
    fin;

    inicia-ejecucion
        mientras izquierda-libre hacer
            gira-izquierda;
        checaInicio;
        mientras no-orientado-al-norte hacer
            gira-izquierda;
        apagate;
    termina-ejecucion
finalizar-programa