nimisewi.c (view raw)
1#include <err.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <unistd.h>
5
6#include <sys/types.h>
7#include <sys/time.h>
8
9#include "nimisewi.h"
10#include "nimitoki.h" /* nimi_toki, suli_pi_nimi_toki */
11
12void
13open_e_nanpa_sewi() {
14 pid_t pid;
15 struct timeval time;
16
17 gettimeofday(&time, NULL);
18 pid = getpid();
19 srand(pid * time.tv_usec * time.tv_sec);
20}
21
22const char
23*pana_e_nimi(const char *nimi_mute[],
24 const int suli_pi_nimi_mute,
25 const int nanpa_nimi)
26{
27 if (nanpa_nimi > suli_pi_nimi_mute) {
28 err(EXIT_FAILURE, "index out of bounds");
29 } else if (nanpa_nimi == -1) {
30 return "pi";
31 } else {
32 return nimi_mute[nanpa_nimi];
33 }
34}
35
36void
37pana_e_nanpa_nimi(struct nanpa_nimi *nn)
38{
39 nn->pi_li_lon = 0;
40 nn->nanpa_pi = -1;
41 nn->nanpa_nimi = (rand() % 6);
42
43 if (nn->nanpa_nimi == 2) {
44 nn->pi_li_lon = rand() % 2;
45 } else if (nn->nanpa_nimi > 2) {
46 nn->pi_li_lon = 1;
47 }
48 if (nn->pi_li_lon) {
49 nn->nanpa_nimi++;
50 nn->nanpa_pi = (nn->nanpa_nimi / 2);
51 }
52}
53
54void
55pana_e_nanpa_pi_nimi_sewi(int *nanpa_sewi_mute,
56 const int suli_nimi,
57 struct nanpa_nimi *nn)
58{
59 int i;
60
61 for (i = 0; i <= nn->nanpa_nimi; i++) {
62 nanpa_sewi_mute[i] = rand() % suli_nimi;
63 }
64
65 if (nn->pi_li_lon) {
66 nanpa_sewi_mute[nn->nanpa_pi] = -1;
67 }
68}
69
70int
71main(void)
72{
73 int *nanpa_sewi_nimi;
74 int i;
75 struct nanpa_nimi nn;
76
77#ifdef __OpenBSD__
78 if (pledge("stdio", NULL) == -1) {
79 err(EXIT_FAILURE, "pledge");
80 }
81#endif
82 open_e_nanpa_sewi();
83
84 pana_e_nanpa_nimi(&nn);
85
86 nanpa_sewi_nimi = (int *) calloc(nn.nanpa_nimi + 1, sizeof(int));
87 if (nanpa_sewi_nimi == NULL) {
88 err(EXIT_FAILURE, "calloc");
89 }
90
91 pana_e_nanpa_pi_nimi_sewi(nanpa_sewi_nimi, suli_pi_nimi_toki, &nn);
92
93 for (i = 0; i < nn.nanpa_nimi; i++) {
94 printf("%s ",
95 pana_e_nimi(nimi_toki, suli_pi_nimi_toki, nanpa_sewi_nimi[i]));
96 }
97 printf("%s", pana_e_nimi(nimi_toki, suli_pi_nimi_toki, nanpa_sewi_nimi[i]));
98 printf("\n");
99
100 free(nanpa_sewi_nimi);
101
102 return 0;
103}
104