iniciar-programa
define-nueva-instruccion norte como inicio
    mientras no-orientado-al-norte hacer inicio
       gira-izquierda;
     fin;
   fin;
       define-nueva-instruccion sur como inicio
       mientras no-orientado-al-sur hacer inicio
           gira-izquierda;
          fin;
        fin;
    define-nueva-instruccion este como inicio
       mientras no-orientado-al-este hacer inicio
           gira-izquierda;
          fin;
        fin;
        define-nueva-instruccion oeste como inicio
       mientras no-orientado-al-oeste hacer inicio
           gira-izquierda;
          fin;
        fin;
   define-nueva-instruccion  cambiar como inicio
        gira-izquierda;
        gira-izquierda;
     mientras frente-libre  hacer inicio
         avanza;
     fin;
     norte;
     si frente-libre entonces inicio
         avanza;
         este;
     fin;

    fin;

    define-nueva-instruccion buscar como inicio
        mientras frente-libre y no-junto-a-zumbador hacer inicio
         avanza;
      fin;
      si frente-bloqueado y no-junto-a-zumbador entonces inicio
          cambiar;
      fin;

    fin;
    define-nueva-instruccion  buscar2 como inicio
        mientras frente-libre y no-junto-a-zumbador hacer inicio
            avanza;
        fin;
    fin;
    define-nueva-instruccion coger(a) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            coger(sucede(a));
        fin sino inicio
            buscar2;
            si junto-a-zumbador entonces inicio
                coger(0);
           fin;
           oeste;
           mientras frente-libre hacer inicio
               avanza;
           fin;
           si si-es-cero (precede(a)) entonces inicio
               deja-zumbador;
           fin;
        fin;
    fin;


   define-nueva-instruccion recoger(n) como inicio
       si junto-a-zumbador entonces  inicio
           coge-zumbador;
           recoger(sucede(n));
      fin sino inicio
          buscar;
          si no-orientado-al-norte entonces inicio
              recoger(0);
          fin;
          sur;
          mientras frente-libre hacer inicio
              avanza;
          fin;
          este;
          si no si-es-cero(n) entonces inicio
              repetir precede (n) veces inicio
                   avanza;
               fin;
               deja-zumbador;
               gira-izquierda;
               gira-izquierda;
               mientras frente-libre hacer inicio
               avanza;
              fin;
              este;
           fin;
      fin;
  fin;

    inicia-ejecucion
    norte;
    avanza;
    este;
    recoger(0);
    oeste;
    mientras frente-libre  hacer inicio
        avanza;
    fin;
    este;
    coger(0);
        apagate;
    termina-ejecucion
finalizar-programa
