iniciar-programa
define-nueva-instruccion esquina como inicio
  mientras no-orientado-al-oeste hacer gira-izquierda;
  Repetir 2 veces inicio
     Mientras frente-libre hacer avanza;
     Gira-izquierda;
  fin;
fin;
define-nueva-instruccion Busca-zumbador como inicio
   Mientras no-junto-a-zumbador hacer inicio
     Mientras frente-libre y no-junto-a-zumbador hacer
      avanza;
      si frente-bloqueado y no-junto-a-zumbador entonces
        gira-izquierda;
   fin;
 Fin;
define-nueva-instruccion buscar(x) como inicio
 si no(si-es-cero(x)) entonces inicio
    si no(si-es-cero(x)) entonces inicio
     si frente-libre entonces
      avanza
     sino
       inicio
         gira-izquierda;
         avanza;
       fin;
    fin;
      busca-zumbador;
    buscar(precede(x));
 fin;
fin;
define-nueva-instruccion Zumbador-avanza(x) como inicio
 si junto-a-zumbador entonces inicio
    coge-zumbador;
    zumbador-avanza(sucede(x));
 fin
 sino
    inicio
    Buscar(x);
    fin;
Fin;
define-nueva-instruccion descuenta(cantidad) como inicio
 Si  no(si-es-cero(cantidad)) entonces inicio
     zumbador-avanza(0);
     descuenta(precede(cantidAd));
 fin;
Fin;
define-nueva-instruccion Cuenta-valores(n) como inicio
   si frente-libre  o no-orientado-al-sur entonces inicio
      si frente-libre entonces inicio
       avanza;
       si frente-bloqueado y no-orientado-al-sur  entonces
        gira-izquierda;
       cuenta-valores(sucede(n));
   fin;
  fin
  sino
   inicio
     Gira-izquierda;
     Descuenta(n);
   fin;
Fin;
define-nueva-instruccion cuenta como inicio
 si junto-a-zumbador entonces inicio
    coge-zumbador;
    cuenta;
    esquina;
    si no-orientado-al-sur y  frente-bloqueado entonces inicio

      Repetir 3 veces gira-izquierda;
    fin;
    deja-zumbador;
 fin;
fin;
define-nueva-instruccion Solucion como inicio
  Esquina;
  avanza;
  cuenta-valores(0);
  busca-zumbador;
  cuenta;
Fin;
    inicia-ejecucion
    solucion;
        apagate;
    termina-ejecucion
finalizar-programa

