#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define LSTR 128
int ogni; /// visualizza ogni OGNI valori

void randomizza()
/* Chiamare 1 sola volta, prima di random() */
{
	time_t t;
	srand((unsigned) time(&t));
	/* inizializza generatore pseudocasuale sul tempo di sistema */
}


char base() // Adenina (A), Timina (T), Guanina (G), Citosina (C) sono le unità
//fondamentali che compongono il codice genetico.
{
	char codice[] = "ATGC";
	return codice[rand() % 4];
}


void genera_parola(char s[]) { /// prova a generare a caso la parola MAIUSCOLA
	int i;
	int len = strlen(s);
	char generata[LSTR] = {0};
	long double tentativo = 0;
	clock_t inizio = clock();   /// Calcolo tempo
	do {
		for (i = 0; i < len; i++)
			generata[i] = base(); /// valore a caso compreso fra 'A' e 'Z'
		tentativo++;
		if ((long long int) tentativo % ogni == 0)
			printf("Tentativo %30.0Lf, DNA generato=[%s], da generare=[%s]\n", tentativo, generata,s);
	} while (strcmp(s, generata) != 0);
	printf("DNA generato di %d lettere = [%s] in %30.0Lf tentativi\n", len, generata, tentativo);
	clock_t fine = clock();   /// Calcolo tempo
	double tempo_trascorso = ((double)(fine - inizio)) / CLOCKS_PER_SEC;
	printf("Tempo trascorso: %f secondi\n", tempo_trascorso);

}

int main() {
	char s[LSTR];
	char invio;
	randomizza();

	printf("Sequenza di DNA Adenina (A), Timina (T), Guanina (G), Citosina (C) ->");
	gets(s);
	printf("Visualizzo tentativi ogni ---->");
	scanf("%d%c", &ogni, &invio);
	genera_parola(s);
	printf("Premi invio...");
	getchar();
	return 0;
}
