aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-06-10 18:15:43 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-06-10 18:15:43 +0200
commit4cea6652cb127b78e01aaf27cb69f8a54d97cb47 (patch)
tree4ad2462f692db13db6c921d7f53d3ff2008925bd
parentd1875047c6b38a8b01d05f6ad54fab6ac99c720c (diff)
Back to random(), compile at Lnx
-rw-r--r--weasel.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/weasel.c b/weasel.c
index 22f9bcb..06a9f7f 100644
--- a/weasel.c
+++ b/weasel.c
@@ -58,6 +58,7 @@ struct creature {
int locked;
} *cp, **generation;
+#if __openbsd__
int
ncpu(void)
{
@@ -73,11 +74,12 @@ ncpu(void)
return n;
}
+#endif
static inline char
rndchar()
{
- return alphabet[arc4random() % alphalen];
+ return alphabet[random() % alphalen];
}
float
@@ -157,7 +159,7 @@ Creature *
pickrandom()
{
do
- cp = generation[arc4random() % population];
+ cp = generation[random() % population];
while (cp->locked);
cp->locked = 1;
@@ -194,8 +196,8 @@ intercourse()
qsort(c, 3, sizeof(Creature *), cmp);
for (i = 0; i < c[2]->length; i++) {
- if (arc4random() % mutationrate)
- c[2]->genom[i] = c[arc4random() % 2]->genom[i];
+ if (random() % mutationrate)
+ c[2]->genom[i] = c[random() % 2]->genom[i];
else
c[2]->genom[i] = rndchar();
}
@@ -213,7 +215,7 @@ intercourse()
pthread_mutex_lock(&gen);
++ngeneration;
pthread_mutex_unlock(&gen);
-
+ usleep(100); // REMOVE to speed up
}
pthread_exit(NULL);
@@ -262,7 +264,11 @@ main(int argc, char **argv)
int display = 1;
alphabet = defalpha;
+#if __openbsd__
nthreads = ncpu();
+#else
+ nthreads = 1;
+#endif
while ((c = getopt(argc, argv, "a:m:np:sS:t:")) != -1)
switch (c) {
@@ -302,6 +308,7 @@ main(int argc, char **argv)
alphalen = strlen(alphabet);
initscr();
+ srandom(time(NULL));
initpopulation(strlen(aim));
pthread_mutex_init(&mutexsum, NULL);