iniciar-programa
define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    gira-izquierda;
fin;
define-nueva-instruccion gira-derecha como
inicio
  repetir 3 veces
    gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
  mientras no-orientado-al-sur hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    gira-izquierda;
fin;
define-nueva-instruccion paso-atras como
inicio
  repetir 2 veces
    gira-izquierda;
  avanza;
  repetir 2 veces
    gira-izquierda;
fin;
define-nueva-instruccion encuentra como
inicio
mira-este;
    mientras frente-libre hacer
      avanza;
    gira-izquierda;
    mientras frente-libre hacer
      avanza;
   gira-izquierda;
   mientras derecha-bloqueada hacer
     avanza;
   gira-derecha;
   mientras frente-libre hacer
     avanza;
   gira-izquierda;
   mientras frente-libre hacer
     avanza;
   gira-derecha;
   si frente-libre entonces
     avanza;
   mientras derecha-bloqueada hacer
     avanza;
   gira-derecha;
   avanza;
   gira-derecha;
   avanza;
   repetir 2 veces
     gira-izquierda;
fin;
define-nueva-instruccion recoge(n) como
inicio
   si junto-a-zumbador y orientado-al-norte entonces
   inicio
     coge-zumbador;
     recoge(sucede(n));
   fin
   sino
   inicio
     avanza;
     si no-junto-a-zumbador y orientado-al-norte entonces
     inicio
       paso-atras;
       mira-sur;
       mientras frente-libre hacer
         avanza;
         si izquierda-libre entonces
         inicio
         gira-izquierda;
         avanza;
         gira-izquierda;
         recoge(n);
       fin
       sino
       inicio
        mira-sur;
        repetir n veces
          deja-zumbador;
       fin;
     fin;
     si junto-a-zumbador y orientado-al-norte entonces
     inicio
       recoge(n);
     fin;
   fin;
fin;
define-nueva-instruccion traslada como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    traslada;
    deja-zumbador;
  fin
  sino
  inicio
    gira-derecha;
    mientras frente-libre hacer
      avanza;
    mira-norte;
    mientras izquierda-bloqueada hacer
      avanza;
   gira-izquierda;
   repetir 3 veces
     avanza;
   mira-sur;
   mientras frente-libre hacer
     avanza;
   gira-derecha;
    avanza;
  fin;
fin;
define-nueva-instruccion cuenta(s) como
inicio
  si si-es-cero(s) entonces
  inicio
    si junto-a-zumbador entonces
      mira-norte
    sino
    inicio
      mira-norte;
    fin;
  fin
  sino
  inicio
    si junto-a-zumbador entonces
    inicio
      coge-zumbador;
      cuenta(precede(s));
    fin
    sino
    inicio
      repetir s veces
        deja-zumbador;
    fin;
  fin;
fin;
define-nueva-instruccion compara(m) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    compara(sucede(m));
  fin
  sino
  inicio
    gira-derecha;
    avanza;
    mira-norte;
    cuenta(m);
  fin;
fin;
define-nueva-instruccion divide(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    repetir 2 veces
      coge-zumbador;
    divide(sucede(n));
  fin
  sino
  inicio
    repetir n veces
  deja-zumbador;
  fin;
fin;
define-nueva-instruccion mueve como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    mueve;
    deja-zumbador;
  fin
  sino
  inicio
    mira-norte;
    gira-izquierda;
    mientras frente-libre hacer
      avanza;
    gira-derecha;
    mientras izquierda-bloqueada hacer
      avanza;
    gira-izquierda;
    avanza;
    mientras frente-libre hacer
      avanza;
    mira-sur;
    mientras frente-libre hacer
      avanza;

  fin;
fin;
    inicia-ejecucion
       encuentra;
       recoge(0);
       mira-norte;
       avanza;
       gira-derecha;
       repetir 3 veces
         avanza;
       gira-derecha;
       avanza;
       mira-norte;
       recoge(0);
       traslada;
       mira-norte;
       compara(0);
       divide(0);
       mueve;
        apagate;
    termina-ejecucion
finalizar-programa
