iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;

define-nueva-instruccion regresa como
    inicio
        sur;
        mientras no-junto-a-zumbador hacer
            inicio
                si frente-libre entonces avanza
                sino
                    inicio
                        norte;
                        mientras frente-libre hacer avanza;
                        oeste;
                        avanza;
                        sur;

                    fin;
            fin;
        repetir 99 veces deja-zumbador;
        apagate;
    fin;

define-nueva-instruccion compara(x) como
    inicio
        si no si-es-cero (x) entonces
            inicio
                si junto-a-zumbador entonces
                    inicio
                        coge-zumbador;
                        compara(precede(x));
                        si orientado-al-este entonces deja-zumbador;
                    fin
                    sino
                        inicio
                            este;
                        fin;
            fin
            sino
                inicio
                    mientras junto-a-zumbador hacer coge-zumbador;


                fin;
    fin;

define-nueva-instruccion busca(x) como
    inicio
        si junto-a-zumbador entonces
            inicio
                compara(x);
                si orientado-al-este entonces
                    inicio
                        mientras frente-bloqueado hacer gira-izquierda;

                        sal-de-instruccion;
                    fin
                    sino
                        inicio
                            si frente-libre entonces avanza
                            sino
                                inicio
                                    sur;
                                    mientras frente-libre hacer avanza;
                                    este;
                                    si frente-libre entonces avanza

                                    sino
                                        inicio
                                            norte;
                                            mientras frente-libre hacer avanza;
                                            regresa;
                                        fin;
                                    norte;
                                fin;
                        fin;
                 busca(x);
            fin;
    fin;

define-nueva-instruccion cuenta(x) como
    inicio
        si junto-a-zumbador entonces
                inicio
                    coge-zumbador;
                    cuenta(sucede(x));
                fin
                sino
                    inicio
                       deja-zumbador;
                       si frente-libre entonces avanza
                       sino
                           inicio
                               sur;
                               mientras frente-libre hacer avanza;
                               este;
                               si frente-libre entonces avanza
                               sino
                                  inicio
                                      norte;
                                      mientras frente-libre hacer avanza;
                                      regresa;
                                      apagate;
                                  fin;
                               norte;
                           fin;
                        busca(x);
                    fin;
    fin;

    inicia-ejecucion
        oeste;
        mientras frente-libre hacer avanza;
        sur;
        mientras frente-libre hacer avanza;
        norte;
        si frente-bloqueado y derecha-bloqueada entonces
            inicio
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir 100 veces deja-zumbador;
                apagate;
            fin;
        mientras junto-a-zumbador hacer
            inicio
                norte;
                cuenta(0);
            fin;
        apagate;
    termina-ejecucion
finalizar-programa
