iniciar-programa
define-nueva-instruccion gira(q) como repetir q veces gira-izquierda;
define-nueva-instruccion parte(x) como inicio
    mientras no orientado-al-oeste hacer gira(1);
    repetir x veces inicio
        si frente-libre entonces inicio
            avanza;
            parte(precede(x));
            fin sino inicio
                si izquierda-libre entonces inicio
                    gira(1);
                    mientras derecha-bloqueada y frente-libre hacer avanza;
                    fin sino inicio
                        si derecha-libre entonces gira(3);
                        mientras izquierda-bloqueada y frente-libre  hacer avanza;
                        fin;
                        mientras no orientado-al-oeste hacer gira(1);
                        si frente-libre entonces avanza;
                        parte(precede(x));
                fin;
        fin;
        si si-es-cero(x) entonces inicio
            mientras no orientado-al-sur hacer gira(1);
            mientras frente-libre hacer avanza;
            apagate;
            fin;
    fin;
    define-nueva-instruccion salta(x) como inicio
            si izquierda-libre entonces inicio
                    gira(1);
                    mientras frente-libre y derecha-bloqueada hacer avanza;
                    fin sino inicio
                        si derecha-libre entonces gira(3);
                        mientras izquierda-bloqueada y frente-libre hacer avanza;
                        fin;
                        mientras no orientado-al-este hacer gira(1);
                                si frente-bloqueado entonces parte(x);
        fin;
define-nueva-instruccion mitad(x) como inicio
    si frente-libre entonces inicio
        avanza;
        si frente-libre entonces inicio
            avanza;
            mitad(sucede(x));
            fin sino inicio
                salta(x);
                si frente-libre entonces avanza;
                mitad(sucede(x));
                fin;
        fin sino inicio
            salta(x);
            mitad(x);
            fin;
    fin;
    inicia-ejecucion
    mientras no orientado-al-este hacer gira(1);
    mitad(0);
        apagate;
    termina-ejecucion
finalizar-programa
