iniciar-programa

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

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

define-nueva-instruccion coja(x) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    coja (sucede(x));
  fin
  sino
    inicio
    avanza;
    repetir x veces deja-zumbador;
    avanza;
    repetir x veces deja-zumbador;
    avanza;
    repetir x veces deja-zumbador;
    avanza;
    fin;
fin;

define-nueva-instruccion coja1(x) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    coja1 (sucede(x));
  fin
  sino
    inicio
    repetir x veces deja-zumbador;
    avanza;
    repetir x veces deja-zumbador;
    fin;
  fin;

define-nueva-instruccion acomoda como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    avanza;
    mv;
    acomoda;
    deja-zumbador;
    avanza;
    mv;
  fin
  sino
  inicio
    si orientado-al-este entonces
    inicio
      avanza;
      mv;
      mientras junto-a-zumbador hacer
      inicio
        coge-zumbador;
        avanza;
        mv;
        deja-zumbador;
        avanza;
        mv;
      fin;
    fin
    sino
    inicio
      avanza;
      mv;
    fin;
  fin;
fin;

define-nueva-instruccion respuesta como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    respuesta;
    deja-zumbador;
  fin
  sino
  inicio
    avanza;
  fin;
fin;

define-nueva-instruccion koala(l) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    koala(sucede(l));
  fin
  sino
  inicio
    mv;
    repetir l veces deja-zumbador;
    avanza;
    repetir l veces deja-zumbador;
  fin;
fin;

define-nueva-instruccion toma(z) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    toma(sucede(z));
  fin
  sino
  inicio
    mv;
    repetir z veces deja-zumbador;
    avanza; avanza;
    repetir z veces deja-zumbador;
  fin;
fin;

define-nueva-instruccion hola(t) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    hola(sucede(t));
  fin
  sino
  inicio
    repetir t veces deja-zumbador;
    avanza;
    mientras junto-a-zumbador hacer coge-zumbador;
    repetir t veces deja-zumbador;
  fin;
fin;

define-nueva-instruccion perro como
inicio
 si junto-a-zumbador entonces
 inicio
 coge-zumbador;
 perro;
 deja-zumbador;
 fin
 sino
 inicio
 repetir 3 veces avanza;
 fin;
 fin;

define-nueva-instruccion compara(x) como
inicio
  si junto-a-zumbador y no(si-es-cero(x)) entonces
  inicio
    coge-zumbador;
    compara(precede(x));
  fin
  sino
  inicio
    si si-es-cero(x) y no-junto-a-zumbador entonces
    inicio
      avanza;
      mv;
      respuesta;
      mv;
      repetir 2 veces avanza;
      mv;
      perro;
      apagate;
    fin;
    si no-junto-a-zumbador y no(si-es-cero(x)) entonces
    inicio
      avanza;
      koala(0);
      mv;
      repetir 2 veces avanza;
      toma(0);
      mv;
      hola(0);
      mv;
      avanza;
      mv;
    fin;
  fin;
fin;

define-nueva-instruccion come(x) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    come(sucede(x));
  fin
  sino
  inicio
    avanza;
    mientras junto-a-zumbador hacer
    inicio
    compara(x)
    fin;
  fin;
fin;

    inicia-ejecucion
    mientras no orientado-al-sur hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    gd;
    mientras frente-libre hacer avanza;
    mv;
    acomoda;
    mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    mientras no-orientado-al-este hacer gira-izquierda;
    avanza;
    coja(0);
    mv;
    mientras frente-libre hacer avanza;
    mv;
    coja1(0);
    come(0);

        apagate;
    termina-ejecucion
finalizar-programa
