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 ordena como
  inicio
  si junto-a-zumbador entonces
  inicio
   coge-zumbador;
   avanza;
   mv;
   ordena;
   deja-zumbador;
   avanza;
   mv;
  fin
  sino
  inicio
   si orientado-al-oeste entonces
   inicio
    avanza;
    mv;
    mientras junto-a-zumbador hacer
    inicio
     coge-zumbador;
     avanza;
     mv;
     deja-zumbador;
     avanza;
     mv;
    fin;
   fin;
   avanza;
   mv;
  fin;
  fin;
  define-nueva-instruccion copia(N) como
  inicio
   si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    copia(sucede(N));
   fin
   sino
   inicio
   repetir N veces deja-zumbador;
    mientras no orientado-al-norte hacer gira-izquierda;
    avanza;
    repetir N veces deja-zumbador;mv;
    avanza;
    mv;
   fin;
  fin;
  define-nueva-instruccion respuesta(N) como
  inicio
   si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    respuesta(sucede(N));
   fin
   sino
   inicio
    repetir N veces deja-zumbador;
    gd;
    avanza;
    repetir N veces deja-zumbador;
    mv;
    avanza;
    mv;
   fin;
  fin;
  define-nueva-instruccion suma(N) como
  inicio
  si junto-a-zumbador entonces
  inicio
   coge-zumbador;
   suma(sucede(N));
  fin
  sino
  inicio
   repetir N veces deja-zumbador;
   mv;
   avanza;
   repetir N veces deja-zumbador;
   mv;
   respuesta(0);
  fin;
  fin;
  define-nueva-instruccion copia2(N) como
  inicio
   si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    copia2(sucede(N));
   fin
   sino
   inicio
    repetir N veces deja-zumbador;
    mientras no orientado-al-este hacer gira-izquierda;
    avanza;
    repetir N veces deja-zumbador;mv;
    avanza;
    gd;
   fin;
  fin;
  define-nueva-instruccion copia3(N) como
  inicio
   si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    copia3(sucede(N));
   fin
   sino
   inicio
    repetir N veces deja-zumbador;
    mientras no orientado-al-norte hacer gira-izquierda;
    avanza;
    repetir N veces deja-zumbador;
    mv;
    avanza;
    mv;
   fin;
  fin;
  define-nueva-instruccion divide(N) como
  inicio
   si no si-es-cero(N) y junto-a-zumbador entonces
   inicio
    coge-zumbador;
    divide(precede(N))
   fin
   sino
   inicio
     si no si-es-cero(N) y no junto-a-zumbador entonces
     inicio
      avanza;
      mv;
      mientras junto-a-zumbador hacer
      inicio
       coge-zumbador;
       avanza;
       deja-zumbador;
       mv;
       avanza;
       mv;
      fin;
      avanza;
      gd;
      avanza;
      suma(0);
     fin
     sino
     inicio
      si si-es-cero(N) y no junto-a-zumbador entonces
      apagate;
     fin;
    fin;
  fin;
  define-nueva-instruccion compara(N) como
  inicio
   si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    compara(sucede(N));
   fin
   sino
   inicio
    repetir N veces deja-zumbador;
    avanza;
    mientras junto-a-zumbador hacer
    divide(N);
   fin;
  fin;
    inicia-ejecucion
      mientras no orientado-al-sur hacer gira-izquierda;
      mientras frente-libre hacer avanza;
      gd;
      mientras frente-libre hacer avanza;
      mv;
      ordena;
      mientras no orientado-al-oeste hacer gira-izquierda;
      mientras frente-libre hacer avanza;
      mv;
      copia(0);
      gd;
      avanza;
      copia2(0);
      copia3(0);
      gira-izquierda;
      avanza;
      mv;
      compara(0);
        apagate;
    termina-ejecucion
finalizar-programa
