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-prototipo-instruccion cuenta(x);

define-prototipo-instruccion busca(x);

define-prototipo-instruccion cuenta1(x);

define-prototipo-instruccion busca1(x);

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));
                        deja-zumbador;
                    fin
                    sino
                        inicio
                            este;
                        fin;
            fin
            sino
                inicio
                fin;
    fin;

define-nueva-instruccion busca(x) como
    inicio
        si junto-a-zumbador entonces
            inicio
                compara(x);
                si orientado-al-este entonces
                    inicio
                        norte;
                       cuenta(0);

                    fin
                    sino
                        inicio
                            avanza;
                            si junto-a-zumbador entonces busca(x)
                                sino
                                inicio
                                    sur;
                                    mientras frente-libre hacer avanza;
                                    este;
                                    avanza;
                                    si junto-a-zumbador entonces
                                        inicio
                                            norte;
                                            busca(x);
                                        fin
                                        sino
                                            inicio
                                                mientras frente-libre hacer avanza;
                                                repetir x veces deja-zumbador;
                                                sal-de-instruccion;
                                            fin;
                                fin;
                        fin;
            fin
            sino
                inicio
                    avanza;
                    si junto-a-zumbador entonces
                        inicio
                            busca(x);
                        fin
                        sino
                            inicio
                                sur;
                                mientras frente-libre hacer avanza;
                                este;
                                avanza;
                                si junto-a-zumbador entonces
                                    inicio
                                        norte;
                                        busca(x);
                                    fin
                                    sino
                                        inicio
                                            mientras frente-libre hacer avanza;
                                            repetir x veces deja-zumbador;
                                            sal-de-instruccion;

                                        fin;
                            fin;
                fin;
    fin;

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

define-nueva-instruccion compara1(x) como
    inicio
        si no si-es-cero (x) entonces
            inicio
                si junto-a-zumbador entonces
                    inicio
                        coge-zumbador;
                        compara1(precede(x));
                        deja-zumbador;
                    fin
                    sino
                        inicio

                        fin;
            fin
            sino
                inicio
                    este;
                fin;
    fin;

define-nueva-instruccion busca1(x) como
    inicio
        si junto-a-zumbador entonces
            inicio
                compara1(x);
                si orientado-al-este entonces
                    inicio
                        norte;
                       cuenta1(0);

                    fin
                    sino
                        inicio
                            avanza;
                            si junto-a-zumbador entonces busca1(x)
                                sino
                                inicio
                                    sur;
                                    mientras frente-libre hacer avanza;
                                    este;
                                    avanza;
                                    si junto-a-zumbador entonces
                                        inicio
                                            norte;
                                            busca1(x);
                                        fin
                                        sino
                                            inicio
                                                oeste;
                                                mientras frente-libre hacer avanza;
                                                este;

                                                mientras junto-a-zumbador hacer coge-zumbador;
                                                repetir x veces deja-zumbador;
                                                sal-de-instruccion;
                                            fin;
                                fin;
                        fin;
            fin
            sino
                inicio
                    avanza;
                    si junto-a-zumbador entonces
                        inicio
                            busca1(x);
                        fin
                        sino
                            inicio
                                sur;
                                mientras frente-libre hacer avanza;
                                este;
                                avanza;
                                si junto-a-zumbador entonces
                                    inicio
                                        norte;
                                        busca1(x);
                                    fin
                                    sino
                                        inicio
                                            oeste;
                                            mientras frente-libre hacer avanza;
                                            este;

                                            mientras junto-a-zumbador hacer coge-zumbador;
                                            repetir x veces deja-zumbador;
                                            sal-de-instruccion;

                                        fin;
                            fin;
                fin;
    fin;

define-nueva-instruccion cuenta1(x) como
    inicio
        si junto-a-zumbador entonces
                inicio
                    coge-zumbador;
                    cuenta1(sucede(x));
                fin
                sino
                    inicio
                       repetir x veces deja-zumbador;
                       avanza;
                       si junto-a-zumbador entonces
                           inicio
                               busca1(x);
                           fin
                           sino
                               inicio
                                   sur;
                                   mientras frente-libre hacer avanza;
                                   este;
                                   avanza;
                                   si junto-a-zumbador entonces
                                       inicio
                                           norte;
                                           busca1(X);
                                       fin
                                       sino
                                           inicio
                                               oeste;
                                               mientras frente-libre hacer avanza;
                                               este;
                                               mientras junto-a-zumbador hacer coge-zumbador;
                                               repetir x veces deja-zumbador;
                                               sal-de-instruccion;
                                           fin;
                               fin;
                    fin;
    fin;

define-nueva-instruccion ve(x) como
    inicio
      si orientado-al-este entonces
        mientras frente-libre hacer avanzA;
        si junto-a-zumbador entonces
            inicio
                oeste;
                coge-zumbador;
                ve(sucede(x));
            fin
            sino
                inicio
                    mientras  frente-libre hacer avanza;
                    este;
                    avanza;
                    mientras junto-a-zumbador hacer coge-zumbador;
                    repetir x veces deja-zumbador;
                    apagate;
                fin;
    fin;

    inicia-ejecucion
       cuenta(0);
       oeste;
       mientras frente-libre hacer avanza;
       norte;
       cuenta1(0);
       ve(0);
       apagate;
    termina-ejecucion
finalizar-programa

