iniciar-programa
define-prototipo-instruccion AluxMayor(n);
define-prototipo-instruccion AluxMenor(n);
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur 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 ir11 como
    inicio
         sur;
         mientras frente-libre hacer avanza;
         oeste;
         mientras frente-libre hacer avanza;
         este;
         avanza;
         mientras junto-a-zumbador hacer coge-zumbador;
    fin;
    define-nueva-instruccion compara2(n) como
    inicio
        si junto-a-zumbador entonces
            inicio
               si no si-es-cero (n) entonces
                   inicio
                       coge-zumbador;
                       compara2(precede(n));
                       deja-zumbador;
                   fin sino
                       inicio
                           si junto-a-zumbador entonces sur;
                       fin;
            fin;
    fin;
define-nueva-instruccion contar2(n) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                contar2(sucede(n));
            fin sino
                inicio
                    repetir n veces deja-zumbador;
                    norte;
                    si frente-libre entonces avanza;
                    AluxMenor(n);
                fin;
    fin;
define-nueva-instruccion compara(n) como
    inicio
        si junto-a-zumbador entonces
            inicio
               si no si-es-cero (n) entonces
                   inicio
                       coge-zumbador;
                       compara(precede(n));
                       deja-zumbador;
                   fin;
            fin sino
                inicio
                    si no si-es-cero (n) entonces
                        inicio
                            sur;
                        fin;
                fin;
    fin;
define-nueva-instruccion contar(n) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                contar(sucede(n));
            fin sino
                inicio
                    repetir n veces deja-zumbador;
                    norte;
                    si frente-libre entonces avanza;
                    AluxMayor(n);
                fin;
    fin;
define-nueva-instruccion recoge como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                recoge;
                deja-zumbador;
            fin sino
                inicio
                    este;
                    avanza;
                    mientras junto-a-zumbador hacer avanza;
                fin;
    fin;
define-nueva-instruccion AluxMayor(n) como
    inicio
        si junto-a-zumbador entonces
            inicio
                compara2(n);
                si orientado-al-sur entonces
                    inicio
                        contar(0);
                    fin sino
                        inicio
                            avanza;
                            AluxMayor(n);
                        fin;
            fin sino
                inicio
                    sur;
                    mientras frente-libre hacer avanza;
                    este;
                    avanza;
                    norte;
                    si junto-a-zumbador entonces
                        inicio
                            AluxMayor(n);
                        fin sino
                            inicio
                                oeste;
                                mientras frente-libre hacer avanza;
                                recoge;
                                oeste;
                                mientras frente-libre hacer avanza;
                                repetir n veces deja-zumbador;
                                norte;
                                AluxMenor(100);
                            fin;
                fin;
    fin;
define-nueva-instruccion AluxMenor(n) como
    inicio
       si junto-a-zumbador entonces
           inicio
               compara(n);
               si orientado-al-sur entonces
                   inicio
                     contar2(0);
                   fin;
           fin;
           avanza;
           si junto-a-zumbador entonces
               inicio
                   AluxMenor(n);
               fin sino
                   inicio
                       sur;
                       mientras frente-libre hacer avanza;
                       este;
                       avanza;
                       norte;
                       si junto-a-zumbador entonces
                           inicio
                               aluxMenor(n);
                           fin sino
                               inicio
                                   ir11;
                                   repetir n veces deja-zumbador;
                                   apagate;
                               fin;
                   fin;
    fin;
    inicia-ejecucion
        AluxMayor(0);
        apagate;
    termina-ejecucion
finalizar-programa
