Los puntos de cruza se definen por individuo

Antes se elegía aleatoriamente los puntos de cruza para toda una
generación, ahora se eligen por cada individuo.
Arreglos menores (formato, liberación de memoria)
Se cambia la forma de hacer la cruza

En vez de tomar puntos de cruza se seleccionan dos genes al azar y se
intercambian de lugar. Esta operaci?n se repite la longitud de la
aptitud del individuo. Ejemplo: en un individuo con aptitud 1782 la
cruza se realiza 4 veces, en uno con aptitud 81 se repite dos veces.
Se establece como mínimo 1 individuo de elite

Por defecto se toma el 5% de la población como elite, pero si ese 5% no
llega a 1, en vez de no tomar elite se elige el mejor individuo
únicamente.
No se cruzan genes vacíos

Si los genes aleatoriamente seleccionados para la cruza son caracteres
nulos ('\0') vuelve a generar otro número, porque intercambiar dos genes
vacíos no aporta cambio.
Los caracteres nulos indican que ese número no fue asignado a letra
alguna.
Función para generación de números aleatorios

Se define una función para generar números aleatorios en el intervalo
[min, max].
Se agrega la opción `-d'

Con la opción [-d|--debug] se puede controlar mejor la información
a mostrar en cada corrida. Se puede especificar varias veces para
mostrar más información (actualmente tiene sentido 0, 1 o 2).
Arreglo de salida cuando encuentra solución

Muestra en orden de aparición las letras con su asignación cuando
encuentra solución.
También se borra un poco de código que estaba vaya a saber porqué.
Arreglo de verificación de división por 0
Eliminación de comentarios superfluos
Modificación en la finalización del programa

No libera memoria al salir, no hace falta. Se cambia a un código de
salida no exitoso cuando no encuentra solución.
Se implementa función para mostrar operación

Cuándo se encuentra la solución se imprime la operación con el resultado
correspondiente en formato numérico.
Arreglo de bug en el cálculo de la aptitud

Cuando calculaba la aptitud continuaba aunque el individuo fuese
inválido.
Se muestran las letras en orden de aparición

Cuando se imprime el cálculo de aptitud se muestra la asignación de
números a letras en el orden de aparición de las letras, y no en orden
númerico, lo que facilita la visualización.
Se verifica restricción de operaciones

Se verifica que en la resta el minuendo sea mayor o igual al sustraendo
y que en la división el numerador sea mayor o igual al denominador. Caso
contrario se toma al individuo como inválido y se le asigna aptitud =
-1. En el primer caso porque no se trabajo con números negativos y en el
segundo porque siempre la división sería igual a 0.
Lo que se llamaba cruza en realidad es mutacion

La cruza siempre trabaja con dos individuos (madre y padre), lo que
estabamos llamando cruza en realidad es mutación. Trabaja sobre un solo
individuo intercambiando genes.
Cambio flujo del GA. Histórico aptitud.

Varios cambios grandes y chicos. Por ahora la cruza es como la mutación,
pero se ejecuta una vez por cada dígito de la aptitud, se va a
implementar cruza cíclica, y eliminar la actual.

Ahora la mutación (y futura cruza) siempre actúa en la población inicial
de cada generación, que luego va a formar parte de la nueva generación.

Por cada generación se guarda la aptitud promedio, mejor y peor. Al
final de la corrida (haya encontrado o no solución) se calcula la
aptitud promedio global (promedio de todos los promedios).

Se implementan 3 nuevas opciones:
	[-e|--elite] para especificar el porcentaje de elite
	[-x|--cruza] para especificar el porcentaje de cruza
	[-t|--mutacion] para especificar el porcentaje de mutación