iniciar-programa
  define-nueva-instruccion gd como repetir 3 veces gira-izquierda;
  define-nueva-instruccion mv como repetir 2 veces gira-izquierda;
  define-nueva-instruccion checa como
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      avanza;
      mv;
      checa;
      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 copia(X) como
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      copia(sucede(X));
    fin
    sino
    inicio
      si frente-libre entonces avanza;
      si frente-libre entonces avanza;
      repetir X veces deja-zumbador;
      avanza;
      repetir X veces deja-zumbador;
      avanza;
      repetir X veces deja-zumbador;
      mv;
      avanza;
      mv;
    fin;
  fin;
  define-nueva-instruccion copia1(X) como
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      copia1(sucede(X));
    fin
    sino
    inicio
      repetir X veces deja-zumbador;
      avanza;
      repetir X veces deja-zumbador;
    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 pez(p) como
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      pez(sucede(p));
    fin
    sino
    inicio
      mv;
      repetir p veces deja-zumbador;
      avanza;
      repetir p veces deja-zumbador;
    fin;
  fin;
  define-nueva-instruccion gato(Z) como
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      gato(sucede(Z));
    fin
    sino
    inicio
      mv;
      repetir Z veces deja-zumbador;
      repetir 2 veces avanza;
      repetir Z veces deja-zumbador;
    fin;
  fin;
  define-nueva-instruccion perro(A) como
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      perro(sucede(A));
    fin
    sino
    inicio
      repetir A veces deja-zumbador;
      avanza;
      mientras junto-a-zumbador hacer coge-zumbador;
      repetir A veces deja-zumbador;
    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;
        apagate;
      fin;
      si no junto-a-zumbador y no(si-es-cero(X)) entonces
      inicio
        avanza;
        pez(0);
        mv;
        repetir 2 veces avanza;
        gato(0);
        mv;
        perro(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
      compara(X);
    fin;
  fin;
    inicia-ejecucion
    mv;
    mientras frente-libre hacer avanza;
      mientras no orientado-al-sur hacer gira-izquierda;
      mientras frente-libre hacer avanza;
      mientras no orientado-al-oeste hacer gira-izquierda;
      mientras frente-libre hacer avanza;
      mv;
      checa;
      mientras no orientado-al-oeste hacer gira-izquierda;
      mientras frente-libre hacer avanza;
      mv;
      copia(0);
      mv;
      avanza;
      avanza;
      copia1(0);
      mv;
      avanza;
      come(0);
        apagate;
    termina-ejecucion
finalizar-programa
