iniciar-programa
define-nueva-instruccion travesia(x) como
inicio
    si derecha-bloqueada y izquierda-bloqueada y orientado-al-sur entonces
    inicio
        si frente-libre entonces
        inicio
            avanza;
            travesia(sucede(x));
            si frente-bloqueado y orientado-al-este entonces
            inicio
                repetir 2 veces
                    gira-izquierda;
                mientras frente-libre hacer
                    avanza;
            fin;
            deja-zumbador;
        fin;
        fin
    sino
    inicio
         si izquierda-libre y frente-libre entonces
        inicio
            gira-izquierda;
            mientras frente-libre hacer
                avanza;
            repetir 2 veces
                gira-izquierda;
        fin;
        mientras orientado-al-este o orientado-al-oeste hacer
        si derecha-bloqueada y izquierda-bloqueada entonces
        inicio
            si frente-libre entonces
                avanza
            sino
            inicio
                repetir x veces
                    deja-zumbador;
                apagate;
            fin;
        fin
        sino
        inicio
            si izquierda-libre entonces
            inicio
                gira-izquierda;
                avanza;
            fin
            sino
                si derecha-libre entonces
                inicio
                    repetir 3 veces
                        gira-izquierda;
                    avanza;
                fin
                sino
                    avanza;
        fin;
        si derecha-libre y frente-bloqueado y orientado-al-sur entonces
            inicio
                repetir 3 veces
                    gira-izquierda;
                avanza;
                si frente-bloqueado entonces
                inicio
                    repetir 2 veces
                        gira-izquierda;
                    avanza;
                    repetir 3 veces
                        gira-izquierda;
                fin;
            fin;
        si izquierda-libre y frente-bloqueado entonces
            inicio
                gira-izquierda;
                avanza;
            fin ;


        mientras izquierda-bloqueada y derecha-libre hacer
        inicio
            si frente-libre entonces
                avanza;
             si izquierda-libre y no orientado-al-oeste entonces
            inicio
                gira-izquierda;
                mientras frente-libre hacer
                    avanza;
                repetir 3 veces
                    gira-izquierda;
            fin;

            si frente-bloqueado y izquierda-bloqueada y no orientado-al-oeste entonces
                repetir 3 veces
                    gira-izquierda;
           si frente-bloqueado y izquierda-bloqueada y orientado-al-oeste entonces
           inicio
               gira-izquierda;
           fin;
           si izquierda-libre entonces
           inicio
               si frente-libre y no orientado-al-sur entonces
               inicio
                   gira-izquierda;
                   avanza;
               fin
               sino
               inicio
                   si frente-bloqueado y no orientado-al-sur entonces
                   inicio
                       gira-izquierda;
                       avanza;
                   fin;
               fin;

           fin;
        fin;

         si derecha-bloqueada y izquierda-bloqueada y frente-libre entonces
             travesia(x)
         sino
         inicio
             si derecha-bloqueada y izquierda-bloqueada y frente-bloqueado entonces
             inicio
                 repetir 2 veces
                     gira-izquierda;
                 mientras izquierda-bloqueada y frente-libre hacer
                     avanza;
                 gira-izquierda;
                 si frente-libre entonces
                 inicio
                     avanza;
                     travesia(x);
                 fin
                 sino
                 inicio
                     gira-izquierda;
                     mientras frente-libre hacer
                         avanza;
                 fin;
             fin;
         fin;


    fin;
fin;
    inicia-ejecucion
    repetir 2 veces
        gira-izquierda;
    mientras frente-libre hacer
        avanza;
    repetir 3 veces
        gira-izquierda;
    mientras frente-libre hacer
        avanza;
    repetir 3 veces
        gira-izquierda;
   travesia(0);
        apagate;
    termina-ejecucion
finalizar-programa
