#include #include #include #include #include #include #include "nimisewi.h" #include "nimitoki.h" /* nimi_toki, suli_pi_nimi_toki */ void open_e_nanpa_sewi() { pid_t pid; struct timeval time; gettimeofday(&time, NULL); pid = getpid(); srand(pid * time.tv_usec * time.tv_sec); } const char *pana_e_nimi(const char *nimi_mute[], const int suli_pi_nimi_mute, const int nanpa_nimi) { if (nanpa_nimi > suli_pi_nimi_mute) { err(EXIT_FAILURE, "index out of bounds"); } else if (nanpa_nimi == -1) { return "pi"; } else { return nimi_mute[nanpa_nimi]; } } void pana_e_nanpa_nimi(struct nanpa_nimi *nn) { nn->pi_li_lon = 0; nn->nanpa_pi = -1; nn->nanpa_nimi = (rand() % 6); if (nn->nanpa_nimi == 2) { nn->pi_li_lon = rand() % 2; } else if (nn->nanpa_nimi > 2) { nn->pi_li_lon = 1; } if (nn->pi_li_lon) { nn->nanpa_nimi++; nn->nanpa_pi = (nn->nanpa_nimi / 2); } } void pana_e_nanpa_pi_nimi_sewi(int *nanpa_sewi_mute, const int suli_nimi, struct nanpa_nimi *nn) { int i; for (i = 0; i <= nn->nanpa_nimi; i++) { nanpa_sewi_mute[i] = rand() % suli_nimi; } if (nn->pi_li_lon) { nanpa_sewi_mute[nn->nanpa_pi] = -1; } } int main(void) { int *nanpa_sewi_nimi; int i; struct nanpa_nimi nn; #ifdef __OpenBSD__ if (pledge("stdio", NULL) == -1) { err(EXIT_FAILURE, "pledge"); } #endif open_e_nanpa_sewi(); pana_e_nanpa_nimi(&nn); nanpa_sewi_nimi = (int *) calloc(nn.nanpa_nimi + 1, sizeof(int)); if (nanpa_sewi_nimi == NULL) { err(EXIT_FAILURE, "calloc"); } pana_e_nanpa_pi_nimi_sewi(nanpa_sewi_nimi, suli_pi_nimi_toki, &nn); for (i = 0; i < nn.nanpa_nimi; i++) { printf("%s ", pana_e_nimi(nimi_toki, suli_pi_nimi_toki, nanpa_sewi_nimi[i])); } printf("%s", pana_e_nimi(nimi_toki, suli_pi_nimi_toki, nanpa_sewi_nimi[i])); printf("\n"); free(nanpa_sewi_nimi); return 0; }