iniciar-programa
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 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 limpea como inicio
      mientras frente-libre o derecha-libre hacer inicio
          mientras no junto-a-zumbador y frente-libre hacer avanza;
          si junto-a-zumbador y frente-libre entonces inicio
              coge-zumbador;
              si frente-libre entonces avanza;
          fin;
          si frente-bloqueado y derecha-libre y junto-a-zumbador entonces inicio
              coge-zumbador;
              sur;
              mientras frente-libre hacer avanza;
              este;
              si frente-libre entonces avanza;
              norte;
          fin;
          si frente-bloqueado y derecha-libre entonces inicio
              sur;
              mientras frente-libre hacer avanza;
              este;
              si frente-libre entonces avanza;
              norte;
          fin;
      fin;
      si derecha-bloqueada y frente-bloqueado y junto-a-zumbador entonces inicio
          coge-zumbador;
          si junto-a-zumbador entonces inicio
             sur;
              mientras frente-libre hacer avanza;
              este;
              si frente-libre entonces avanza;
              norte;
          fin sino inicio
             deja-zumbador;
             sur;
              mientras frente-libre hacer avanza;
              este;
              si frente-libre entonces avanza;
              norte;
          fin;
      fin;
  fin;
define-nueva-instruccion inf como inicio
    norte;
    si frente-libre entonces inicio
        avanza;
        si no junto-a-zumbador entonces repetir 2 veces deja-zumbador;
        sur;
        si frente-libre entonces avanza;
    fin;
    sur;
     si frente-libre entonces inicio
        avanza;
       si no junto-a-zumbador entonces repetir 2 veces deja-zumbador;
        norte;
        si frente-libre entonces avanza;
    fin;
    este;
     si frente-libre entonces inicio
        avanza;
        si no junto-a-zumbador entonces repetir 2 veces deja-zumbador;
        oeste;
        si frente-libre entonces avanza;
        norte;
    fin;
    oeste;
     si frente-libre entonces inicio
        avanza;
         si no junto-a-zumbador entonces repetir 2 veces deja-zumbador;
        este;
        si frente-libre entonces avanza;
        norte;
        fin;
    norte;
    si frente-libre entonces avanza;
fin;
define-nueva-instruccion cuenta(n) como inicio
        si frente-bloqueado y derecha-bloqueada entonces inicio
        sur;
        mientras frente-libre hacer avanza;
        oeste;
        mientras frente-libre hacer avanza;
        norte;
        limpea;
         sur;
        mientras frente-libre hacer avanza;
        oeste;
        mientras frente-libre hacer avanza;
        norte;
        fin;
    si si-es-cero(n) entonces inicio
        sal-de-instruccion;
    fin sino inicio
        mientras frente-libre o derecha-libre hacer inicio
            mientras no junto-a-zumbador y frente-libre hacer avanza;
            si junto-a-zumbador entonces inicio
            coge-zumbador;
                si no junto-a-zumbador entonces inicio
                    repetir 2 veces deja-zumbador;
                    inf;
                fin sino inicio
                    deja-zumbador;
                    si frente-libre entonces avanza;
                fin;
            fin;
             si frente-bloqueado y junto-a-zumbador entonces inicio
             coge-zumbador;
             si no junto-a-zumbador entonces inicio
             repetir 2 veces deja-zumbador;
             inf;
             fin sino inicio
                 deja-zumbador;
             fin;
          fin;
             si frente-bloqueado y derecha-libre entonces inicio
                    sur;
                    mientras frente-libre hacer avanza;
                    este;
                    si frente-libre entonces avanza;
                    norte;
                fin;
        fin;
         si frente-bloqueado y derecha-bloqueada y junto-a-zumbador entonces inicio
            inf;
            cuenta(precede(n));
        fin;
        si frente-bloqueado y derecha-bloqueada entonces inicio
            cuenta(precede(n));
        fin;
    fin;
fin;
define-nueva-instruccion infec(n) como inicio
   mientras frente-libre o derecha-libre hacer inicio
          mientras no junto-a-zumbador y frente-libre hacer avanza;
          si junto-a-zumbador entonces inicio
             mientras junto-a-zumbador hacer coge-zumbador;
              si frente-libre entonces avanza;
              infec(sucede(n));
          fin;
          si frente-bloqueado y derecha-libre y junto-a-zumbador entonces inicio
              coge-zumbador;
              sur;
              mientras frente-libre hacer avanza;
              este;
              si frente-libre entonces avanza;
              norte;
              infec(sucede(n));
          fin;

          si frente-bloqueado y derecha-libre entonces inicio
              sur;
              mientras frente-libre hacer avanza;
              este;
              si frente-libre entonces avanza;
              norte;
          fin;
      fin;
      si frente-bloqueado y derecha-bloqueada y junto-a-zumbador entonces inicio
           coge-zumbador;
           infec(sucede(n));
        fin;
        si frente-bloqueado y derecha-bloqueada entonces inicio
            sur;
            mientras frente-libre hacer avanza;
            oeste;
            mientras frente-libre hacer avanza;
            repetir n veces deja-zumbador;
            apagate;
        fin;
fin;
define-nueva-instruccion diaz(n) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        diaz(sucede(n));
    fin sino inicio
        cuenta(n);
    fin;
fin;
    inicia-ejecucion
    si junto-a-zumbador entonces inicio
        diaz(0);
    fin;
    infec(0);
         apagate;
    termina-ejecucion
finalizar-programa
