iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-prototipo-instruccion ubica;
define-nueva-instruccion VeNorte como
    inicio
        ubica;
        norte;
        mientras (derecha-libre o izquierda-libre) hacer
            inicio
                si frente-libre entonces avanza;
                si frente-bloqueado entonces
                    inicio
                        oeste;
                        mientras derecha-bloqueada hacer avanza;
                        norte;
                        avanza;
                    fin;
            fin;
        mientras izquierda-bloqueada y derecha-bloqueada hacer avanza;
        ubica;
    fin;
define-nueva-instruccion VeSur como
    inicio
       ubica;
       sur;
       mientras (derecha-libre o izquierda-libre) hacer
           inicio
               si frente-libre entonces avanza;
               si frente-bloqueado entonces
                   inicio
                       oeste;
                       mientras izquierda-bloqueada hacer avanza;
                       sur;
                       avanza;
                   fin;
           fin;
       mientras izquierda-bloqueada y derecha-bloqueada hacer avanza;
       ubica;
    fin;
define-nueva-instruccion VeOeste como
    inicio
        ubica;
        oeste;
        mientras (derecha-libre o izquierda-libre) hacer
            inicio
                si frente-libre entonces avanza;
                si frente-bloqueado entonces
                    inicio
                        sur;
                        mientras derecha-bloqueada hacer avanza;
                        oeste;
                        avanza;
                    fin;
            fin;
            mientras izquierda-bloqueada y derecha-bloqueada hacer avanza;
                ubica;
    fin;
define-nueva-instruccion VeEste como
    inicio
       ubica;
        este;
        mientras (derecha-libre o izquierda-libre) hacer
            inicio
                si frente-libre entonces avanza;
                si frente-bloqueado entonces
                    inicio
                        sur;
                        mientras izquierda-bloqueada hacer avanza;
                        este;
                        avanza;
                    fin;

            fin;
            mientras izquierda-bloqueada y derecha-bloqueada hacer avanza;
                ubica;
    fin;
define-nueva-instruccion ubica como
    inicio
        norte;
        mientras frente-libre y (derecha-libre o izquierda-libre) hacer
            inicio
               avanza;
            fin;
        si izquierda-bloqueada y derecha-bloqueada entonces
            inicio
                sur;
                avanza;
                este;
                mientras frente-libre y (derecha-libre o izquierda-libre) hacer avanza;
                    si izquierda-bloqueada y derecha-bloqueada entonces
                        inicio
                            oeste;
                            avanza;
                        fin;
            fin sino
                inicio
                    este;
                    mientras frente-libre y (derecha-libre o izquierda-libre) hacer avanza;
                    si izquierda-bloqueada y derecha-bloqueada entonces
                        inicio
                            oeste;
                            avanza;
                        fin;
                fin;
         sur;

    fin;
define-nueva-instruccion compara como
    inicio
        coge-zumbador;
        si junto-a-zumbador entonces
            inicio
               coge-zumbador;
               si junto-a-zumbador entonces
                   inicio
                       coge-zumbador;
                     si junto-a-zumbador entonces
                         inicio
                             coge-zumbador;
                             VeOeste;
                         fin sino VeSur;
                   fin sino VeEste;
            fin sino veNorte;
    fin;
define-nueva-instruccion camina como
    inicio
        si frente-libre y (derecha-libre o izquierda-libre) entonces
            inicio
                si no-junto-a-zumbador entonces avanza;
                si derecha-bloqueada y izquierda-bloqueada entonces
                    inicio
                        repetir 2 veces gira-izquierda;
                        avanza;
                        si orientado-al-norte entonces
                            inicio
                                gira-izquierda;
                                avanza;
                                repetir 3 veces gira-izquierda;
                            fin sino
                                inicio
                                    repetir 3 veces gira-izquierda;
                                    si frente-libre entonces
                                        inicio
                                            avanza;
                                        fin sino
                                            inicio
                                                ubica;
                                                apagate;
                                            fin;
                                    si (izquierda-libre o derecha-libre) entonces
                                        inicio
                                            gira-izquierda;
                                        fin sino
                                            inicio
                                                repetir 2 veces gira-izquierda;
                                                avanza;
                                                ubica;
                                                apagate;
                                            fin;
                                fin;
                    fin;
                 si junto-a-zumbador entonces compara;
            fin;
    fin;
define-nueva-instruccion busca como
    inicio
        mientras no-junto-a-zumbador hacer
            inicio
                   camina;
                   si frente-bloqueado entonces
                       inicio
                           si orientado-al-sur entonces
                               inicio
                                   repetir 3 veces gira-izquierda;
                                   si frente-libre entonces
                                       inicio
                                           avanza;
                                           si (izquierda-bloqueada y derecha-bloqueada) entonces
                                               inicio
                                                   repetir 2 veces gira-izquierda;
                                                   avanza;
                                                   ubica;
                                                   apagate;
                                               fin;
                                           repetir 3 veces gira-izquierda;
                                           camina;
                                       fin sino
                                           inicio
                                               ubica;
                                               apagate;
                                           fin;
                                fin sino
                                    inicio
                                       gira-izquierda;
                                       si frente-libre entonces
                                           inicio
                                               avanza;
                                               si (izquierda-bloqueada y derecha-bloqueada) entonces
                                                   inicio
                                                       repetir 2 veces gira-izquierda;
                                                       avanza;
                                                       ubica;
                                                       apagate;
                                                   fin;
                                               gira-izquierda;
                                               camina;
                                           fin sino
                                               inicio
                                                   ubica;
                                                   apagate;
                                               fin;
                                    fin;
                       fin;
            fin;
            si junto-a-zumbador entonces compara;
    fin;
    inicia-ejecucion
        ubica;
        repetir 100 veces busca;
        apagate;
    termina-ejecucion
finalizar-programa
