나는 1D 생명의 게임에 대해 (여기에 설명 된 규칙에 따라 Mathworld에 기초하여) 일하고 있습니다. 본질적으로, 각 세대는 0 또는 1의 행 (죽었거나 살아있다)으로 표현되고 차세대는 "규칙"명령 행 인수의 2 진 표현을 기반으로 작성됩니다.2D C 배열의 이전 "행"에서 값 가져 오기
예를 들어, 규칙 30은 00011110 (30은 2 진수)으로 바뀌며 이는 새 셀을 생성하거나 다음 세대에서 스스로를 죽일 비트 패턴을 결정하는 데 사용됩니다.
이것을 프로그래밍하려면 이전 행에서 규칙을 적용하기 위해 3 개의 그룹으로 비트에 액세스 할 수 있어야합니다. 행, 그때 세 및 그룹에 위의 행의 비트 봐야한다을 생성하기 위해
00000100000 #seed row
11001011001 #generated from seed row
...........
11110010101 #n-th row, generated from n-1 row
: 아래 샘플 이미지 (시작 행은 항상 중앙 1과 0의 대상이므로주의)입니다 규칙을 1/0, 라이브/다이 결정으로 적용하십시오.
기본적으로 3 비트 패턴과 규칙을 일치시키고 자손에 대해 0 또는 1을 인쇄 할 계획입니다. 이것은 일반적인 알 고입니다 :
if three_bit_pattern == 'xxx' && rule[x] == 0/1 {print 0/1} else {print 1/0}
프로그램의 난 부분에서 이전 행의 내용에 액세스하는 데 어려움이 있습니다. 내 모든 시도는 쓰레기 나 잘못된 데이터를 산출합니다.
간단히 말해, 이전 행의 값을 3 비트 그룹으로 어떻게 액세스합니까? 나는이 훨씬 간단했다, 그래서
int i, j, k;
int row = atoi(argv[1]) + 1;
int col = 2 * atoi(argv[1]) + 1;
int arr[col];
int output[col];
char rule[9]; //binary representation of rule (2^8 stores up to 255 + null term)
int2binary(atoi(argv[2]), &rule, 10);
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
if(i == 0){
if(j == col/2) //print 1 in center of first row
arr[i] = 1;
else
arr[i] = 0;
printf("%d", arr[i]);
}
else{
//output[i] = arr[i-1];
output[i+1] = arr[i];
output[i+2] = arr[i+1];
output[i+3] = arr[i+2];
printf("%s", output);
}
}//end inner for_loop
printf("\n");
}//end outer for_loop
}
확인을 그냥합니다 (하나 이전의 열을 잡고 하나를 두 배열을해야 할 것입니다 :
행은 다음과 같이 생성됩니다 흐름). 내가 이해하지 못하는 것은 왜 출력 배열을 출력하면 쓰레기가 생기는 것입니까? output [i] = arr [i]가 유효한 표현식이 아닌가?
작동하지 않는 코드가 표시되지 않습니다. 눈에 보이지 않는 코드가 왜 작동하지 않는지 신이하는 것은 철저히 불가능합니다. 모든 코드를 표시하십시오. –
"row"또는 "i"라고하는 행 인덱스가 있습니까? 첫 번째 행에 대해서는 아마도 0을 사용합니다. 값이 달라질 때까지 변수를 도입하려고 대기 중입니다. –
사실입니다. 지금은 코드가 없습니다 (비 실용적인 시도를 해왔습니다). 그러나 일부 시도를 반영하기 위해 게시물을 편집 할 것입니다. –