iniciar-programa
define-nueva-instruccion gira(G) como repetir G veces gira-izquierda;
define-nueva-instruccion pan-derecho como
inicio
    si frente-libre entonces inicio
        avanza;

    fin sino
    inicio
            gira(1);
            mientras frente-libre y derecha-bloqueada hacer avanza;
            gira(3);
            si frente-libre entonces avanza;
            gira(3);
            mientras frente-libre hacer avanza;
            gira(1);
    fin;
fin;
define-nueva-instruccion pan-revez como
inicio
    si frente-libre entonces inicio
        avanza;
        si frente-libre entonces inicio
            avanza;
        fin sino
        inicio
            gira(3);
            mientras frente-libre y izquierda-bloqueada hacer avanza;
            gira(1);
            si frente-libre entonces inicio
                avanza;
                gira(1);
                mientras frente-libre hacer avanza;
                gira(3);
            fin sino
            inicio
                gira(1);
                mientras frente-libre hacer avanza;
                gira(1);
            fin;
        fin;

    fin sino
    inicio
    si orientado-al-oeste entonces inicio
            gira(3);
            mientras frente-libre y izquierda-bloqueada hacer avanza;
            gira(1);
            si frente-libre entonces inicio
                avanza;
                gira(1);
                mientras frente-libre hacer avanza;
                gira(3);
                si frente-libre entonces inicio
                   avanza;
                fin sino
                inicio
                    gira(3);
                    mientras frente-libre y izquierda-bloqueada hacer avanza;
                    gira(1);
                    si frente-libre entonces inicio
                        avanza;
                        gira(1);
                        mientras frente-libre hacer avanza;
                        gira(3);
                    fin sino
                    inicio
                        gira(1);
                        mientras frente-libre hacer avanza;
                        gira(1);
                    fin;
                fin;
            fin sino
            inicio
                gira(1);
                mientras frente-libre hacer avanza;
                gira(1);
            fin;
        fin;
    fin;
fin;
define-nueva-instruccion pan como
inicio
    si frente-libre entonces inicio
        avanza;
        pan;
        si orientado-al-oeste entonces pan-revez;
        si orientado-al-este entonces pan-derecho;
    fin sino
    inicio
        si frente-bloqueado y izquierda-libre entonces inicio
            gira(1);
            mientras frente-libre hacer avanza;
            gira(3);
            si frente-libre entonces inicio
            avanza;
            gira(3);
            mientras frente-libre hacer avanza;
                gira(1);
                pan;
                si orientado-al-oeste entonces pan-revez;
                si orientado-al-este entonces pan-derecho;
            fin sino
            inicio
                gira(3);
                mientras frente-libre hacer avanza;
                gira(3);
            fin;
        fin;
        si frente-bloqueado y orientado-al-este y izquierda-bloqueada entonces gira(2);
    fin;



fin;
define-nueva-instruccion pan2 como
inicio
    si frente-libre entonces inicio
        avanza;
        pan2;
        si orientado-al-oeste entonces inicio
        pan-revez;
        fin sino
        inicio
        si orientado-al-este entonces pan-derecho;
        fin;
    fin sino
    inicio
    si frente-bloqueado y izquierda-libre entonces inicio
        gira(1);
        mientras frente-libre y derecha-bloqueada hacer avanza;
        gira(3);
        si frente-libre entonces inicio
            avanza;
            gira(3);
            mientras frente-libre hacer avanza;
            gira(1);
            pan2;
            si orientado-al-oeste entonces inicio
            pan-revez;
            fin sino
            inicio
            si orientado-al-este entonces pan-derecho;
            fin;
        fin sino
        inicio
            gira(3);
            mientras frente-libre hacer avanza;
            gira(3);
        fin;
        fin;
        si frente-bloqueado y izquierda-bloqueada y orientado-al-este entonces gira(2);
    fin;

fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer gira-izquierda;
    si frente-libre entonces inicio
        pan;
    fin sino
    inicio
        pan2;
        si frente-libre entonces inicio
            avanza;
        fin sino
        inicio
            gira(1);
            mientras frente-libre hacer avanza;
            gira(3);
            si frente-libre entonces avanza;
            gira(3);
            mientras frente-libre hacer avanza;
            gira(1);
        fin;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
