오늘은 한 개의 씨앗이 Wolfram Rule[0 ~ 255]를 만나서 세대를 거듭해 나가며 신기한 풍경의 숲을 이루어 가는 프로그램을 본격적으로 공부해 보겠습니다!
어제 우리는 Cells의 구성요소들 각각을 중심으로 [왼쪽이웃- 나 – 오른쪽이웃] 관계성을 만들어 보았습니다!
왼쪽이웃은 변수 left, 나는 변수 state, 오른쪽이웃은 변수 right에 저장을 했었지요~~^^*
Wolfram Rule [0 ~255]의 각각의 ruleSet[ ]를 지지난 번에 만들어 놓았었구요~^^*
오늘은 [왼쪽이웃-나-오른쪽이웃]을 ruleSet의 해당요소와 짝지어서, [나]의 내용을 변화시켜 보려고 해요.
네~^^* ruleSet에 따라 nextGeneration!을 만들어 내는 것이지요~~^^*
근데, 여기서 주의해야 할 점이 하나 있어요!
ruleSet은 8자리 이진법 형태로 되어 있어서, 맨 앞자리 ruleSet[0] 의 가중치가 가장 높고 ruleSet[7]의 가중치가 가장 낮아요. 그래서, [왼쪽이웃-나-오른쪽이웃] 값이 가장 큰 것이 ruleSet[0], 가장 작은 것이 ruleSet[7]과 호응하도록 만들고자 해요~
그래서! 7 – [왼쪽이웃-나-오른쪽이웃] 처리를 하면 어떨까해요~^^*
0 : 7 – 0 = 7
1: 7 – 1 = 6
2: 7 – 2 = 5
3: 7 – 3 = 4
4: 7 – 4 = 3
5: 7 – 5 = 2
6: 7 – 6 = 1
7: 7 – 7 = 0
어머 참 신기하네요! 순서를 거꾸로 하고 싶으면, [전체 구성요소 갯수 – 자신의 순서]를 하면 되는 군요!!!
[왼쪽이웃-나-오른쪽이웃] => 이진수 => 십진수 => 7에서 빼기 => ruleSet[]
[0,0,0] => 000(2) => 0(10) => 7-0 = 7 => ruleSet[7]
[0,0,1] => 001(2) => 1(10) => 7-1 = 6 => ruleSet[6]
[0,1,0] => 010(2) => 2(10) => 7-2 = 5 => ruleSet[5]
[0,1,1] => 011(2) => 3(10) => 7-3 = 4 => ruleSet[4]
[1,0,0] => 100(2) => 4(10) => 7-4 = 3 => ruleSet[3]
[1,0,1] => 101(2) => 5(10) => 7-5 = 2 => ruleSet[2]
[1,1,0] => 110(2) => 6(10) => 7-6 = 1 => ruleSet[1]
[1,1,1] => 111(2) => 7(10) => 7-7 = 0 => ruleSet[0]
자, 그럼 이제 알고리즘을 구상해 볼까요~~우리~~^^*
하나. 0 또는1로 표현된 [왼쪽이웃, 나, 오른쪽이웃]을 나란히 모아 문자열을 만듭니다.
둘. 이 문자열을 이진수로 변환합니다.
셋. 이 이진수를 십진수로 변환합니다.
넷. 7에서 이 십진수를 뺀 결과를 저장합니다.
다섯. ruleSet의 이 결과값 번째의 내용(0 또는 1)을 “나의 후예”로 저장합니다.
이제 오늘의 핵심코드 두 가지를 살펴 볼까요~~^^*
정수 a, b, c를 차례로 모아 문자열 neighborhood를 만드는 핵심코드#1!
let neighborhood = "" + a + b + c;
문자열 neighborhood를 이진수로 변환하고, 다시 십진수로 변환하고, 7에서 이 십진수를 빼서 변수 value에 저장하는 핵심코드#2!
let value = 7 - parseInt(neighborhood, 2);
이제 [왼쪽이웃-나-오른쪽이웃] 상태와 ruleSet[ ] 매칭하기 전체 코드를 살펴 볼까요~^^*
계산처리 과정을 우리가 상세하게 살펴보았기 떄문에, 주석은 넣지 않도록 할게요~^^*
let nextCells = [];
let newState = calculateState(left, state, right);
nextCells[i] = newState;
function calculateState(a, b, c) {
let neighborhood = "" + a + b + c;
let value = 7 - parseInt(neighborhood, 2);
return parseInt(ruleSet[value]);
}
오늘 공부 내용을 손으로 정리해 보았습니다~ 저와 같이 한 번 보실까요~^^*

Wolfram Rule 89를 따를 때의 경우를 그림으로 그려 보았습니다~^^*

네~~^^*
오늘 Next Generation!!! 만들기 코드 공부를 함께 해 주셔서 감사합니다~~^^*
이제 우리는 Wolfram Rule [0 ~ 255]를 그림으로 표현할 핵심 코드들을 다 준비해 놓은 것 같아요~~^^*
오늘, 순서 거꾸로 바꾸기의 아이디어도 참 신기했던 것 같구요~~^^*
전체 구성 요소 총 갯수 - 나의 순번
정수들을 모아 문자열로 만들고, 이 문자열을 이진수로 바꾸고, 이 이진수를 십진수로 만드는 과정도 재미있었어요~~
새로운 함수 parseInt()야~~ 만나서 반가워~~^^* Thank you~~!!
내일은 우리, 전체 코드를 짜맞추어, Wolfram Rule [0 ~255]를 화면 위에 펼쳐 보도록 할까요~~^^*
Wolfram의 세계를 만나러 가는 길, 함께 해주셔서 감사합니다~ 어제도, 오늘도, 내일도!
오늘도 멋진 아침! 멋진 하루! 보내시구요!
네~~!!! 꿈은 이루어 집니다~~!!!
댓글 남기기