iniciar-programa
define-nueva-instruccion mv como
inicio
  repetir 2 veces gira-izquierda;
fin;

define-nueva-instruccion gd como
inicio
  repetir 3 veces gira-izquierda;
fin;

define-nueva-instruccion multiplica(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    multiplica(sucede(n));
  fin
  sino
  inicio
    repetir n veces
    inicio
      repetir 10 veces deja-zumbador;
    fin;
  fin;
fin;

define-nueva-instruccion  lobo(x) como
inicio
  si no(si-es-cero(x)) entonces
  inicio
    si frente-libre entonces
    inicio
      avanza;
     lobo(precede(x));
     fin
     sino
     inicio
     mv;
     mientras frente-libre hacer avanza;
     mv;
     avanza;
     lobo(precede(x));
     apagate;
   fin;
 fin;
 fin;


define-nueva-instruccion koala(x) como
inicio
  si no si-es-cero(x) entonces
  inicio
    si frente-libre entonces
    inicio
      avanza;
      koala(precede(x));
       mientras no-orientado-al-norte hacer gira-izquierda;
      apagate;
    fin;
    si frente-bloqueado y (derecha-libre o izquierda-libre) entonces
    inicio
     si orientado-al-este y izquierda-libre entonces
     inicio
     gira-izquierda;
     avanza;
     gira-izquierda;
     koala(precede(x));
      mientras no-orientado-al-norte hacer gira-izquierda;
      apagate;
     fin;
     si orientado-al-oeste y derecha-libre entonces
     inicio
     gd;
     avanza;
     gd;
     koala(precede(x));
      mientras no-orientado-al-norte hacer gira-izquierda;
      apagate;
     fin;
    fin;
    si (frente-bloqueado y derecha-bloqueada) o (frente-bloqueado y izquierda-bloqueada) entonces
    inicio
      mientras no-orientado-al-oeste hacer gira-izquierda;
      mientras frente-libre hacer avanza;
      gira-izquierda;
      mientras frente-libre hacer avanza;
       gira-izquierda;
      mientras frente-libre hacer avanza;
      mv;
      koala(precede(x));
 mientras no-orientado-al-norte hacer gira-izquierda;
 apagate;
    fin;
  fin;
fin;







define-nueva-instruccion cine(x) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    cine(sucede(x));
  fin
  sino
  inicio
    mientras frente-libre hacer avanza;
    gira-izquierda;
    avanza;
    si derecha-bloqueada y izquierda-bloqueada entonces
    inicio
      lobo(precede(x));
    fin;
    gira-izquierda;
    koala(precede(x));
  fin;
fin;



    inicia-ejecucion

    mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    repetir 100 veces coge-zumbador;
    mv;
    avanza;
    mientras no-junto-a-zumbador hacer avanza;
    si frente-libre entonces
    inicio
    avanza;
     mv;
    avanza;
    mv;
    multiplica(0);
    fin;
    mv;
    mientras frente-libre hacer avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
    mv;
    avanza;
    mientras no-junto-a-zumbador hacer avanza;
    mientras junto-a-zumbador hacer coge-zumbador;
    si frente-libre entonces avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
    cine(0);

    apagate;
    termina-ejecucion
finalizar-programa
