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-nueva-instruccion erosiona como
    inicio
        si junto-a-zumbador entonces
            inicio
                si frente-libre entonces
                    inicio
                        avanza;
                    fin;
                 si no-junto-a-zumbador entonces mientras no-junto-a-zumbador y frente-libre hacer avanza;
                 si no-junto-a-zumbador entonces
                     inicio
                         norte;
                         mientras frente-libre hacer avanza;
                         oeste;
                         mientras frente-libre hacer
                             inicio
                                 si junto-a-zumbador entonces
                                     inicio
                                         coge-zumbador;
                                         sur;
                                         mientras no-junto-a-zumbador hacer avanza;
                                         norte;
                                         avanza;
                                         deja-zumbador;
                                         mientras frente-libre hacer avanza;
                                         oeste;
                                     fin;
                                  avanza;
                             fin;
                         sur;
                         mientras frente-libre hacer avanza;
                         sal-de-instruccion;
                     fin;
                norte;
                mientras junto-a-zumbador hacer avanza;
                avanza;
                oeste;
                avanza;
                si junto-a-zumbador entonces
                    inicio
                        norte;
                        mientras junto-a-zumbador hacer avanza;
                        sur;
                        avanza;
                        coge-zumbador;
                        este;
                        avanza;
                        norte;
                        mientras frente-libre hacer avanza;
                        deja-zumbador;
                        sur;
                        mientras frente-libre hacer avanza;
                        este;
                        erosiona;
                    fin
                    sino
                        inicio
                           este;
                           avanza;
                           sur;
                           mientras frente-libre hacer avanza;
                           este;
                           erosiona;
                        fin;
            fin
            sino
                inicio
                    si frente-libre entonces avanza;
                    erosiona;
                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 inicio
                    este;
                    avanza;
                    erosiona;
                    oeste;
                    mientras frente-libre hacer avanza;
                  fin;
                fin;
    fin;

    inicia-ejecucion
        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
        cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
