iniciar-programa

    define-nueva-instruccion dos(x) como
    inicio
        mientras no-orientado-al-sur hacer gira-izquierda;
        apagate;
    fin;







    define-nueva-instruccion uno(n) como
    inicio
        si no si-es-cero(n) entonces
        inicio
            si frente-libre y derecha-bloqueada entonces
            inicio
                avanza;
                si orientado-al-este y derecha-bloqueada entonces
                inicio
                    uno(sucede(n));
                    si frente-bloqueado o derecha-libre  entonces dos(0);
                    avanza;
                fin
                sino
                inicio
                    si orientado-al-oeste y derecha-bloqueada entonces
                    inicio
                    uno(precede(n));
                    si frente-bloqueado o derecha-libre  entonces dos(0);
                    avanza;
                    fin
                    sino
                    inicio
                        si derecha-libre entonces
                        inicio
                            si orientado-al-este entonces uno(sucede(n))
                            sino si orientado-al-oeste entonces uno(precede(n))
                            sino uno(n);
                            si frente-libre entonces
                            inicio
                            avanza;

                            fin
                            sino dos(0);
                        fin
                        sino
                        inicio
                            uno(n);
                            si frente-bloqueado o derecha-libre  entonces dos(0);
                            avanza;
                        fin;
                    fin;
                fin;


            fin
            sino
            inicio
                si derecha-bloqueada entonces
                inicio
                    gira-izquierda;
                    uno(n);
                    si derecha-libre o frente-libre entonces dos(0);
                    gira-izquierda;
                fin
                sino
                inicio
                    repetir 3 veces gira-izquierda;
                    avanza;
                    si orientado-al-este y derecha-bloqueada entonces
                    inicio
                        uno(sucede(n));
                        si frente-bloqueado o derecha-libre  entonces dos(0);
                         avanza;
                        repetir 3 veces gira-izquierda;

                    fin
                    sino
                    inicio
                        si orientado-al-oeste y derecha-bloqueada entonces
                        inicio
                        uno(precede(n));
                        si frente-bloqueado o derecha-libre  entonces dos(0);
                         avanza;
                        repetir 3 veces gira-izquierda;

                        fin
                        sino
                        inicio
                            si derecha-libre entonces
                            inicio
                                si orientado-al-este entonces uno(sucede(n))
                            sino si orientado-al-oeste entonces uno(precede(n))
                            sino uno(n);
                            si frente-libre entonces
                            inicio
                            avanza;
                            repetir 3 veces gira-izquierda;
                            fin
                            sino dos(0);
                            fin
                            sino
                            inicio
                                uno(n);
                                si frente-bloqueado o derecha-libre  entonces dos(0);
                                 avanza;
                                repetir 3 veces gira-izquierda;

                            fin;
                        fin;
                    fin;
                 fin;
            fin;
        fin
        sino
        inicio
            si orientado-al-este entonces
            inicio
                si frente-libre y derecha-bloqueada entonces
                inicio
                    avanza;
                    si orientado-al-este y derecha-bloqueada entonces
                    inicio
                        uno(sucede(n));
                        si frente-bloqueado o derecha-libre  entonces dos(0);
                        avanza;
                    fin
                    sino
                    inicio
                        si orientado-al-oeste y derecha-bloqueada entonces
                        inicio
                            uno(precede(n));
                            si frente-bloqueado o derecha-libre  entonces dos(0);
                            avanza;
                        fin
                        sino
                        inicio
                            si derecha-libre entonces
                            inicio
                               si orientado-al-este entonces uno(sucede(n))
                            sino si orientado-al-oeste entonces uno(precede(n))
                            sino uno(n);
                            si frente-libre entonces
                            inicio
                            avanza;

                            fin
                            sino dos(0);
                            fin
                            sino
                            inicio
                                uno(n);
                                si frente-bloqueado o derecha-libre  entonces dos(0);
                                avanza;
                            fin;
                        fin;
                    fin;


                fin
                sino
                inicio
                    si derecha-bloqueada entonces
                    inicio
                        gira-izquierda;
                        uno(n);
                        si derecha-libre o frente-libre entonces dos(0);
                        gira-izquierda;
                    fin
                    sino
                    inicio
                        repetir 3 veces gira-izquierda;
                        avanza;
                        si orientado-al-este y derecha-bloqueada entonces
                        inicio
                            uno(sucede(n));
                            si frente-bloqueado o derecha-libre  entonces dos(0);
                             avanza;
                            repetir 3 veces gira-izquierda;

                        fin
                        sino
                        inicio
                            si orientado-al-oeste y derecha-bloqueada entonces
                            inicio
                                uno(precede(n));
                                si frente-bloqueado o derecha-libre  entonces dos(0);
                                 avanza;
                                repetir 3 veces gira-izquierda;

                            fin
                            sino
                            inicio
                                si derecha-libre entonces
                                inicio
                                    si orientado-al-este entonces uno(sucede(n))
                            sino si orientado-al-oeste entonces uno(precede(n))
                            sino uno(n);
                           si frente-libre entonces
                            inicio
                            avanza;
                            repetir 3 veces gira-izquierda;
                            fin
                            sino dos(0);
                                fin
                                sino
                                inicio
                                    uno(n);
                                    si frente-bloqueado o derecha-libre  entonces dos(0);
                                     avanza;
                                    repetir 3 veces gira-izquierda;

                                fin;
                            fin;
                        fin;
                     fin;
                 fin;
            fin
            sino
            inicio
                si orientado-al-norte o derecha-libre entonces
                inicio
                    si frente-libre y derecha-bloqueada entonces
                    inicio
                        avanza;
                        si orientado-al-este y derecha-bloqueada entonces
                        inicio
                            uno(sucede(n));
                            si frente-bloqueado o derecha-libre  entonces dos(0);
                            avanza;
                        fin
                        sino
                        inicio
                            si orientado-al-oeste y derecha-bloqueada entonces
                            inicio
                                uno(precede(n));
                                si frente-bloqueado o derecha-libre  entonces dos(0);
                                avanza;
                            fin
                            sino
                            inicio
                                si derecha-libre entonces
                                inicio
                                    si orientado-al-este entonces uno(sucede(n))
                            sino si orientado-al-oeste entonces uno(precede(n))
                            sino uno(n);
                           si frente-libre entonces
                            inicio
                            avanza;

                            fin
                            sino dos(0);
                                fin
                                sino
                                inicio
                                    uno(n);
                                    si frente-bloqueado o derecha-libre  entonces dos(0);
                                    avanza;
                                fin;
                            fin;
                        fin;


                    fin
                    sino
                    inicio
                        si derecha-bloqueada entonces
                        inicio
                            gira-izquierda;
                            uno(n);
                            si derecha-libre o frente-libre entonces dos(0);
                            gira-izquierda;
                        fin
                        sino
                        inicio
                            repetir 3 veces gira-izquierda;
                            avanza;
                            si orientado-al-este y derecha-bloqueada entonces
                            inicio
                                uno(sucede(n));
                                si frente-bloqueado o derecha-libre  entonces dos(0);
                                avanza;
                                repetir 3 veces gira-izquierda;
                            fin
                            sino
                            inicio
                                si orientado-al-oeste y derecha-bloqueada entonces
                                inicio
                                    uno(precede(n));
                                    si frente-bloqueado o derecha-libre  entonces dos(0);
                                    avanza;
                                    repetir 3 veces gira-izquierda;
                                fin
                                sino
                                inicio
                                    si derecha-libre entonces
                                    inicio
                                        si orientado-al-este entonces uno(sucede(n))
                            sino si orientado-al-oeste entonces uno(precede(n))
                            sino uno(n);
                            si frente-libre entonces
                            inicio
                            avanza;
                            repetir 3 veces gira-izquierda;
                            fin
                            sino dos(0);
                                    fin
                                    sino
                                    inicio
                                        uno(n);
                                        si frente-bloqueado o derecha-libre  entonces dos(0);
                                        avanza;
                                        repetir 3 veces gira-izquierda;

                                    fin;
                                fin;
                            fin;
                         fin;
                    fin;
                fin;
            fin;
        fin;
    fin;
    inicia-ejecucion
        repetir 3 veces gira-izquierda;
        uno(0);
        mientras no-orientado-al-norte hacer gira-izquierda;
        apagate;
    termina-ejecucion
finalizar-programa
