شما هنوز به سیستم وارد نشده اید.
شاید سایت بهتری دوستانم سراغ داشته باشن که لطفا به اشتراک بذارید. ولی اینجا که روزیروز هم جامع تر میشه برای من خیلی مفیده و با مروری بر الگوریتم حل، کدهای معروف رو در سینتکس زبانهای مختلف گردآوری کرده.
http://rosettacode.org/wiki/Category:Pr … _Languages
آفلاین
جان کانوِی به خاطر ویروس کرونا از دنیا رفت. ایشون یک ریاضیدان تراز اول بود که کارهای بزرگی انجام داده است. یکی از معروف ترینشون هم معرفی خوش تعریفِ یک cellular automata هست که در شبیه سازی های تئوری بسیار کاربرد داره. به یاد او دوباره پیاده سازی های بازی زندگی کانوی را در رزتا کد مرور کردم. به ویژه، پیاده سازی C این بازی را خالی از لطف نیست که اجرا کنید.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define for_x for (int x = 0; x < w; x++)
#define for_y for (int y = 0; y < h; y++)
#define for_xy for_x for_y
void show(void *u, int w, int h)
{
int (*univ)[w] = u;
printf("\033[H");
for_y {
for_x printf(univ[y][x] ? "\033[07m \033[m" : " ");
printf("\033[E");
}
fflush(stdout);
}
void evolve(void *u, int w, int h)
{
unsigned (*univ)[w] = u;
unsigned new[h][w];
for_y for_x {
int n = 0;
for (int y1 = y - 1; y1 <= y + 1; y1++)
for (int x1 = x - 1; x1 <= x + 1; x1++)
if (univ[(y1 + h) % h][(x1 + w) % w])
n++;
if (univ[y][x]) n--;
new[y][x] = (n == 3 || (n == 2 && univ[y][x]));
}
for_y for_x univ[y][x] = new[y][x];
}
void game(int w, int h)
{
unsigned univ[h][w];
for_xy univ[y][x] = rand() < RAND_MAX / 10 ? 1 : 0;
while (1) {
show(univ, w, h);
evolve(univ, w, h);
usleep(200000);
}
}
int main(int c, char **v)
{
int w = 0, h = 0;
if (c > 1) w = atoi(v[1]);
if (c > 2) h = atoi(v[2]);
if (w <= 0) w = 30;
if (h <= 0) h = 30;
game(w, h);
}
آفلاین
جادی هم درست کردش اینو
آفلاین