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 mayor(a) como inicio
    si junto-a-zumbador y no si-es-cero(a) entonces inicio
        coge-zumbador;
        mayor(precede(a));
        deja-zumbador;
    fin sino inicio
        repetir a veces deja-zumbador;
    fin;
fin;


define-nueva-instruccion busca(z) como inicio
  si junto-a-zumbador y no si-es-cero(z) entonces inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces inicio
          norte;
          si frente-libre entonces inicio
              avanza;
              busca(z);
              sur;
              avanza;

          fin;

          este;
          si frente-libre entonces inicio
              avanza;
              busca(z);
              oeste;
              avanza;

          fin;

          sur;
          si frente-libre entonces inicio
              avanza;
              busca(z);
              norte;
              avanza;

          fin;

          oeste;
          si frente-libre entonces inicio
              avanza;
              busca(z);
              este;
              avanza;

          fin;
          deja-zumbador;

      fin sino inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces inicio
      deja-zumbador;
      busca(precede(z));
      deja-zumbador;
      fin sino inicio
          deja-zumbador;
          deja-zumbador;
          este;
          avanza;
          si no-junto-a-zumbador entonces inicio
              repetir precede(z) veces deja-zumbador;
          fin sino inicio
              mayor(precede(z));
          fin;
          oeste;
          avanza;
      fin;

      fin;
  fin;
fin;

define-nueva-instruccion cuenta(x) como inicio
   si junto-a-zumbador entonces inicio
       coge-zumbador;
       cuenta(sucede(x));
   fin sino inicio
       deja-zumbador;
       busca(x);
       repetir precede(x) veces deja-zumbador;
   fin;
fin;

    inicia-ejecucion
    cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
