iniciar-programa
 define-nueva-instruccion gira-derecha como repetir 3 veces gira-izquierda;
 define-nueva-instruccion media-vuelta como repetir 2 veces gira-izquierda;
 define-nueva-instruccion suma(n) como inicio
 si junto-a-zumbador y orientado-al-norte  entonces inicio
 coge-zumbador;
 suma(sucede(n));
 fin sino
 si no junto-a-zumbador y orientado-al-norte y izquierda-libre entonces inicio
 media-vuelta; avanza;
 fin;
 si junto-a-zumbador y orientado-al-sur entonces inicio
 coge-zumbador;
 suma(sucede(n));
 fin sino
 si orientado-al-sur y no junto-a-zumbador entonces inicio
 avanza;
 fin;
 si orientado-al-sur entonces
 repetir n veces deja-zumbador;
 si orientado-al-sur entonces
 gira-derecha;
 si frente-libre y orientado-al-oeste entonces inicio
 avanza; gira-derecha; avanza; avanza;  suma(0);
 fin sino si frente-bloqueado entonces inicio
 media-vuelta; avanza;
 mientras frente-libre hacer avanza; gira-derecha;
 sal-de-instruccion;
 fin;
 fin;
   define-nueva-instruccion anexa(x) como inicio
   si junto-a-zumbador entonces inicio
   coge-zumbador;
   anexa(sucede(x));
   fin sino inicio
   avanza;
   gira-izquierda; avanza; avanza; gira-derecha;
   repetir x veces deja-zumbador;
   fin;
   fin;
define-nueva-instruccion residuo(u) como inicio
 si junto-a-zumbador entonces inicio
 coge-zumbador;
 residuo(sucede(u));
 fin sino
 inicio
 avanza; gira-derecha;
 repetir u veces deja-zumbador;
 si frente-libre entonces inicio
 gira-derecha; avanza; avanza; gira-izquierda;
 anexa(0);
 fin
 sino inicio
 apagate;
 fin;
 fin;
fin;
 define-nueva-instruccion coge(k) como inicio
  repetir k veces  inicio
  si junto-a-zumbador y orientado-al-oeste entonces inicio
  coge-zumbador;
  gira-derecha; avanza;  deja-zumbador; media-vuelta;  avanza; gira-derecha;
  fin
  sino inicio
  gira-derecha;   avanza; media-vuelta;
  Residuo(0);
  coge(k);
  fin;
  fin;
  si orientado-al-oeste entonces inicio
  gira-derecha;  avanza;
  mientras junto-a-zumbador hacer inicio coge-zumbador; fin; avanza;
  deja-zumbador; media-vuelta; avanza; avanza; gira-derecha;
  fin;
  si junto-a-zumbador entonces inicio
  coge(k);
  fin sino
  si no junto-a-zumbador entonces inicio
  gira-derecha; avanza; avanza; gira-izquierda;
  Anexa(0);
  coge(k);
  fin;
  fin;
 define-nueva-instruccion base(k) como
 inicio
 si junto-a-zumbador y orientado-al-norte entonces inicio
 coge-zumbador;
 base(sucede(k));
 fin sino si orientado-al-norte y no junto-a-zumbador entonces
 inicio
 media-vuelta; avanza; avanza;  avanza;
 gira-izquierda; repetir 11 veces avanza;
 media-vuelta;
 coge(k);
 fin;
 fin;
inicia-ejecucion
mientras no orientado-al-este hacer gira-izquierda;
repetir 11 veces avanza;
gira-izquierda;
avanza; avanza;
suma(0);
mientras no orientado-al-oeste hacer gira-izquierda;
mientras frente-libre hacer avanza;
gira-derecha;
mientras no junto-a-zumbador hacer avanza;
base(0);
    apagate;
    termina-ejecucion
finalizar-programa
