iniciar-programa
    define-nueva-instruccion este como inicio
      mientras no-orientado-al-este hacer
        gira-izquierda;
    fin;

    define-nueva-instruccion oeste como inicio
      mientras no-orientado-al-oeste hacer
        gira-izquierda;
    fin;

    define-nueva-instruccion norte como inicio
      mientras no-orientado-al-norte hacer
        gira-izquierda;
    fin;

    define-nueva-instruccion sur como inicio
      mientras no-orientado-al-sur hacer
        gira-izquierda;
    fin;

    define-nueva-instruccion izq como inicio
      oeste;
      mientras frente-libre hacer
        avanza;
      este;
    fin;

    define-nueva-instruccion acomodalos2(w) como inicio
      si junto-a-zumbador y no si-es-cero(w) entonces inicio
        coge-zumbador;
        acomodalos2(precede(w));
        deja-zumbador;
      fin sino inicio
        si no-junto-a-zumbador entonces inicio
          oeste;
          avanza;
        fin;
      fin;
    fin;

    define-nueva-instruccion acomodalos(w) como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        acomodalos(sucede(w));
        deja-zumbador;
      fin sino inicio
        avanza;
        acomodalos2(w);
        si orientado-al-este entonces inicio
          oeste;
          avanza;
        fin sino inicio
          este;
          avanza;
        fin;
      fin;
    fin;

    define-nueva-instruccion ordenar(w) como inicio
      si no si-es-cero(w) entonces inicio
        izq;
        repetir w veces inicio
          acomodalos(0);
          si orientado-al-oeste entonces inicio
            este;
            avanza;
          fin;
        fin;
        ordenar(precede(w));
      fin;
    fin;

    define-nueva-instruccion restar(w) como inicio
      si junto-a-zumbador y no si-es-cero(w) entonces inicio
        coge-zumbador;
        restar(precede(w));
        deja-zumbador;
      fin sino inicio
        norte;
        avanza;
        repetir w veces
          deja-zumbador;
        sur;
        avanza;
        oeste;
      fin;
    fin;

    define-nueva-instruccion resta(w) como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        resta(sucede(w));
      fin sino inicio
        repetir w veces
          deja-zumbador;
        avanza;
        restar(w);
      fin;
    fin;

    define-nueva-instruccion buscar2(w) como inicio
      si junto-a-zumbador y no si-es-cero(w) entonces inicio
        coge-zumbador;
        buscar2(precede(w));
        deja-zumbador;
      fin sino inicio
        mientras junto-a-zumbador hacer
          coge-zumbador;
      fin;
    fin;

    define-nueva-instruccion buscar(w) como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        buscar(sucede(w));
      fin sino inicio
        avanza;
        buscar2(w);
      fin;
    fin;

    define-nueva-instruccion contar(w) como inicio
      si junto-a-zumbador entonces inicio
        avanza;
        contar(sucede(w));
      fin sino inicio
        ordenar(precede(w));
        este;
        mientras junto-a-zumbador hacer
          avanza;
        oeste;
        avanza;
        repetir precede(w) veces
          resta(0);
        norte;
        avanza;
        este;
        repetir precede(precede(w))veces
          buscar(0);
      fin;
    fin;

    define-nueva-instruccion dejarlos como inicio
      si junto-a-zumbador entonces inicio
        coge-zumbador;
        dejarlos;
        deja-zumbador;
      fin sino inicio
        oeste;
        mientras frente-libre hacer
          avanza;
        sur;
        avanza;
        mientras junto-a-zumbador hacer
          coge-zumbador;
      fin;
    fin;

    inicia-ejecucion
        este;
        contar(0);
        dejarlos;
        apagate;
    termina-ejecucion
finalizar-programa
