iniciar-programa
define-nueva-instruccion girando(n) como repetir n veces gira-izquierda;

define-nueva-instruccion separa(n) como inicio
si algun-zumbador-en-la-mochila entonces inicio
repetir n veces
deja-zumbador;
avanza;
separa(sucede(sucede(n)));
fin;
fin;
define-nueva-instruccion reparte como inicio
si algun-zumbador-en-la-mochila entonces inicio
deja-zumbador;
si frente-libre entonces
avanza;
reparte;
fin;
fin;
define-nueva-instruccion orientate como inicio
si junto-a-zumbador entonces inicio
avanza;
si junto-a-zumbador entonces
avanza;
orientate;
avanza;
fin
sino inicio
girando(2);
fin;
fin;


define-nueva-instruccion base(n) como inicio
mientras junto-a-zumbador hacer inicio
coge-zumbador;
fin;
mientras frente-libre y orientado-al-sur hacer
avanza;
girando(2);
repetir n veces
avanza;
girando(3);
repetir n veces
avanza;
reparte;
girando(2);
mientras frente-libre y orientado-al-oeste hacer
avanza;
girando(3);
mientras frente-libre hacer
avanza;
girando(2);
mientras frente-libre y no-junto-a-zumbador hacer
avanza;
si frente-libre entonces inicio
base(sucede(n));
fin;
fin;

define-nueva-instruccion recoge como inicio
si frente-libre y no-junto-a-zumbador y orientado-al-norte entonces inicio
avanza;
recoge;
fin;
si junto-a-zumbador entonces inicio
coge-zumbador;
recoge;
fin;
si frente-bloqueado y orientado-al-norte entonces inicio
girando(2);
mientras frente-libre y orientado-al-sur hacer
avanza;
gira-izquierda;
si frente-libre entonces inicio
avanza;
gira-izquierda;
recoge;
fin
sino inicio
girando(2);
mientras frente-libre y orientado-al-oeste hacer
avanza;
girando(3);
avanza;
  separa(1);
  girando(2);
  avanza;
  base(0);
  mientras no-orientado-al-este hacer
  gira-izquierda;
  orientate;
  girando(3);
  mientras junto-a-zumbador hacer
  avanza;
  girando(2);
  avanza;
  girando(2);
apagate;
fin;
fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-norte hacer
    gira-izquierda;
     recoge;
        apagate;
    termina-ejecucion
finalizar-programa
