iniciar-programa
    define-nueva-instruccion buska(n)como
    inicio
        si no si-es-cero(n) entonces
        inicio
            si frente-libre entonces
            inicio
                si no-junto-a-zumbador entonces repetir 2 veces deja-zumbador;
                avanza;
                buska(precede(n));
                avanza;
            fin
            sino
            inicio
                si no-junto-a-zumbador entonces repetir 2 veces deja-zumbador;
                repetir 2 veces gira-izquierda;
            fin;
        fin
        sino
        inicio
            repetir 2 veces gira-izquierda;
        fin;
    fin;

 define-nueva-instruccion cuenta(m) como
 inicio
     si no-junto-a-zumbador entonces
     inicio
         si frente-libre entonces
         inicio
             avanza;
             cuenta(m);
         fin
         sino
         inicio
             repetir 2 veces gira-izquierda;
             mientras frente-libre hacer avanza;
             repetir 3 veces gira-izquierda;
             si frente-bloqueado entonces
             inicio
                 mientras junto-a-zumbador hacer coge-zumbador;
                 repetir m veces deja-zumbador;
                 apagate;
             fin
             sino
             inicio
                 avanza;
                 repetir 3 veces gira-izquierda;
                 cuenta(m);
             fin;
         fin;
     fin
     sino
     inicio
         coge-zumbador;
         si frente-libre entonces
         inicio
             avanza;
             cuenta(sucede(m));
         fin
         sino
         inicio
             repetir 2 veces gira-izquierda;
             mientras frente-libre hacer avanza;
             repetir 3 veces gira-izquierda;
             si frente-bloqueado entonces
             inicio
                 mientras junto-a-zumbador hacer coge-zumbador;
                 repetir m veces deja-zumbador;
                 deja-zumbador;
                 apagate;
             fin
             sino
             inicio
                 avanza;
                 repetir 3 veces gira-izquierda;
                 cuenta(sucede(m));
             fin;
         fin;
     fin;
 fin;

    define-nueva-instruccion zum como
    inicio
     mientras no-junto-a-zumbador hacer
         inicio
             si frente-bloqueado entonces
             inicio
                 repetir 2 veces gira-izquierda;
                 mientras frente-libre hacer avanza;
                 gira-izquierda;
                 si frente-bloqueado entonces
                 inicio
                     gira-izquierda;
                     cuenta(0);
                 fin;
                 avanza;
                 gira-izquierda;
             fin
             sino
             inicio
                 avanza;
             fin;
         fin;
         coge-zumbador;
         si junto-a-zumbador entonces
         inicio
             deja-zumbador;
             si frente-bloqueado entonces
             inicio
                 repetir 2 veces gira-izquierda;
                 mientras frente-libre hacer avanza;
                 gira-izquierda;
                 si frente-bloqueado entonces
                 inicio
                    gira-izquierda;
                    cuenta(0);
                 fin;
                 avanza;
                 gira-izquierda;
             fin
             sino
             inicio
                 avanza;
             fin;
             zum;
         fin;
        fin;
   define-nueva-instruccion elen(v) como
   inicio
   si no si-es-cero(v) entonces
   inicio

             repetir 2 veces buska(v);
             gira-izquierda;
             si frente-libre entonces
             inicio
                 avanza;
                 repetir 3 veces gira-izquierda;
                 elen(precede(v));
                 avanza;
             fin
             sino
             inicio
                 repetir 2 veces gira-izquierda;
             fin;
   fin
   sino
   inicio
       repetir 3 veces gira-izquierda;

   fin;
   fin;

      define-nueva-instruccion elen2(v) como
   inicio
   si no si-es-cero(v) entonces
   inicio

             repetir 2 veces buska(v);
             repetir 3 veces gira-izquierda;
             si frente-libre entonces
             inicio
                 avanza;
                 gira-izquierda;
                 elen2(precede(v));
                 avanza;
             fin
             sino
             inicio
                 repetir 2 veces gira-izquierda;
             fin;
   fin
   sino
   inicio
   gira-izquierda;

   fin;
   fin;
 define-nueva-instruccion dias(n) como
 inicio
     si junto-a-zumbador entonces
     inicio
         coge-zumbador;
         dias(sucede(n));
     fin
     sino
     inicio
     mientras algun-zumbador-en-la-mochila hacer
     inicio
      zum;
      elen(n);
      si frente-libre entonces
      inicio
          avanza;
          gira-izquierda;
          elen2(precede(n));
           si frente-libre entonces avanza;
      repetir 3 veces gira-izquierda;
      fin
      sino
      inicio
          gira-izquierda;
      fin;


     fin;
     fin;
 fin;



    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira-izquierda;
        deja-zumbador;
           dias(0);
           apagate;
    termina-ejecucion
finalizar-programa


