aboutsummaryrefslogtreecommitdiffstats
path: root/nimisewi.c
diff options
context:
space:
mode:
Diffstat (limited to 'nimisewi.c')
-rw-r--r--nimisewi.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/nimisewi.c b/nimisewi.c
new file mode 100644
index 0000000..34623d0
--- /dev/null
+++ b/nimisewi.c
@@ -0,0 +1,104 @@
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+#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;
+}
+