오늘은 씨앗 세포가 심어진 한 줄의 세포 공간들에게, [왼쪽이웃] –[나] –[오른쪽이웃]의 관계성을 부여해 보기로 해요~
cells[0]–cells[1]–cells[2]……..cells[마지막-2]–cells[마지막-1]–cells[마지막]
질문 한 세트 드리겠습니다~^^*
Q1: cells[1]의 [왼쪽이웃]--[나]--[오른쪽이웃]은?
A!: cells[0]--cells[1]--cells[2]
Q2: cells[2]의 [왼쪽이웃]--[나]--[오른쪽이웃]은?
A2: cells[1]--cells[2]--cells[3]
Q3: cells[마지막-2]의 [왼쪽이웃]--[나]--[오른쪽이웃]은?
A3: cells[마지막-3]--cells[마지막-2]--cells[마지막-1]
Q4: cells[마지막-1]의 [왼쪽이웃]--[나]--[오른쪽이웃]은?
A4: cells[마지막-2]--cells[마지막-1]--cells[마지막]
질문 한 세트 또! 드리겠습니다~^^*
Q5: cells[0]의 [왼쪽이웃]--[나]--[오른쪽이웃]은?
A5: cells[???]--cells[0]--cells[1]
Q6: cells[마지막]의 [왼쪽이웃]--[나]--[오른쪽이웃]은?
A6: cells[마지막-1]--cells[마지막]--cells[???]
네~~^^* 한 줄의 세포공간들의 맨 첫번째 세포의 왼쪽이웃과 맨 마지막 세포의 오른쪽이웃이 누구인지 아리송하네요~~^^*
맨 첫번째 세포의 왼쪽이웃과 맨 마지막 세포의 오른쪽이웃을 우리가 정해주면 어떨까요~?
음…크리스마스 트리 장식물을 만들 때~~^^*
예쁜 색종이를 가늘고 길게 오려서~~^^*
시작과 끝을 풀로 붙이면 예쁜 고리가 되잖아요~~^^*
그때처럼, 우리 이 한 줄의 세포공간들의 처음과 끝을 붙여 주면 어떨까요?
네!!
cells[0]의 왼쪽이웃을 cells[마지막] 으로 정해주고~~
cells[마지막]의 오른쪽이웃을 cells[0]로 정해주면~~
될 것 같아요~~^^*
어맛! 벌써 코드가 준비되었어요~~함께 보실까요~~^^*
let len = cells.length;
//배열 cells의 길이값을 변수 len에 저장합니다~^^*
//변수 len은 배열 구성요소의 총 갯수를 나타냅니다~~^^*
//배열의 순번은 0, 1, 2, ....., len-3, len-2, len-1 이 되네요~^^*
//cells[0],cells[1],cells[2],...,cells[len-3],cells[len-2],cells[len-1]
//배열의 맨 첫번째는 cells[0], 맨 마지막은 cells[len-1]~~~^^*
for (let i = 0; i < len; i++) {
let left = cells[(i - 1 + len) % len];
let right = cells[(i + 1) % len];
let state = cells[i];
//변수 state는 해당 세포를 나타내게 됩니다~~
//변수 left는 왼쪽 이웃세포를 나타내게 됩니다~~
//변수 right는 오른쪽 이웃세포를 나타내게 됩니다~~
}
음….그런데..왼쪽 이웃을 계산하는 방식과 오른쪽 이웃을 계산하는 방식이 선뜻 눈에 들어오지 않으신다구요?
괜찮아요!! 우리~~ 한 글자 한 글자 짚어가며 계산 방식을 이해해 보면 될 것 같아요~~!!
먼저! 왼쪽 이웃!
let left = cells[(i - 1 + len) % len];
//해당 세포의 순번에서 1을 빼요.
//거기에다가 배열 구성요소 총 갯수를 더해요.
//이것을 배열 구성요소 총 갯수로 나누었을 때 발생하는 나머지값을 챙겨요.
//이 나머지 값을 변수 left에 저장해요.
자~~배열 첫 구성요소부터 차근차근 그 왼쪽 이웃을 구해 봅시다~~^^*
cells[0] : i = 0
let left = cells[(0 - 1 + len) % len]
= cells[(len-1) % len] //몫 0, 나머지 len-1
= cells[len-1]
//배열 맨 첫번째 구성요소의 왼쪽 이웃: 배열 맨 마지막 구성요소 당첨!!
cells[1] : i = 1
let left = cells[(1 - 1 + len) % len]
= cells[(len) % len] //몫 1, 나머지 0
= cells[0]
//배열 두번째 구성요소의 왼쪽 이웃: 배열 맨 첫번째 구성요소 당첨!!
cells[2] : i = 2
let left = cells[(2 - 1 + len) % len]
= cells[(len + 1) % len] //몫 1, 나머지 1
= cells[1]
//배열 세번째 구성요소의 왼쪽 이웃: 배열 두번쨰 구성요소 당첨!!
.
.
.
cells[len-3]: i = len-3
let left = cells[(len-3 - 1 + len) % len]
= cells[(len-4) % len] //몫 0 , 나머지 len-4
= cells[len-4]
//배열 끝에서 두 칸 앞 구성요소의 왼쪽 이웃: 배열 끝에서 세 칸 앞 구성요소 당첨!
cells[len-2]: i = len-2
let left = cells[(len-2 - 1 + len) % len]
= cells[(len-3) % len] //몫 0 , 나머지 len-3
= cells[len-3]
//배열 끝에서 한 칸 앞 구성요소의 왼쪽 이웃: 배열 끝에서 두 칸 앞 구성요소 당첨!
cells[len-1]: i = len-1
let left = cells[(len-1 - 1 + len) % len]
= cells[(len-2)% len] //몫 0, 나머지 len - 2
= cells[len-2]
//배열 맨 마지막 구성요소의 왼쪽 이웃: 배열 끝에서 한 칸 앞 구성요소 당첨!!
왼쪽 이웃 끝내었으니 이제 오른쪽 이웃 도전!!
let right = cells[(i + 1) % len];
//해당 세포의 순번에다가 1을 더해요~^^*
//이것을 배열 구성요소 총 갯수로 나누었을 때 발생하는 나머지값을 챙겨요~
//이 나머지 값을 변수 right에 저장해요~~
자~~배열 첫 구성요소부터 차근차근 그 오른쪽 이웃을 구해 봅시다~~^^*
cells[0] : i = 0
let left = cells[(0 + 1) % len]
= cells[(1) % len] //몫 0, 나머지 1
= cells[1]
//배열 맨 첫번째 구성요소의 오른쪽 이웃: 배열 두번째 구성요소 당첨!!
cells[1] : i = 1
let left = cells[(1 + 1) % len]
= cells[(2) % len] //몫 0, 나머지 2
= cells[2]
//배열 두번째 구성요소의 오른쪽 이웃: 배열 세번째 구성요소 당첨!!
cells[2] : i = 2
let left = cells[(2 + 1) % len]
= cells[(3) % len] //몫 0, 나머지 3
= cells[3]
//배열 세번째 구성요소의 오른쪽 이웃: 배열 네번쨰 구성요소 당첨!!
.
.
.
cells[len-3]: i = len-3
let left = cells[(len-3 + 1) % len]
= cells[(len-2) % len] //몫 0 , 나머지 len-2
= cells[len-2]
//배열 끝에서 두 칸 앞 구성요소의 오른쪽 이웃: 배열 끝에서 한 칸 앞 구성요소 당첨!
cells[len-2]: i = len-2
let left = cells[(len-2 + 1) % len]
= cells[(len-1) % len] //몫 0 , 나머지 len-1
= cells[len-1]
//배열 끝에서 한 칸 앞 구성요소의 오른쪽 이웃: 배열 맨 마지막 구성요소 당첨!
cells[len-1]: i = len-1
let left = cells[(len-1 + 1) % len]
= cells[(len)% len] //몫 1, 나머지 0
= cells[0]
//배열 맨 마지막 구성요소의 왼쪽 이웃: 배열 맨 첫번째 구성요소 당첨!!
와우!!!
차근차근 생각하기 도전을 우리가 해내었어요!!!
도전 성공을 우리 함께 축하해요~~!!!
이 멋진 도전을 시작으로~~
꾸준히 우리 함께 도전을 이어나가 볼까요~~^^*
오늘 우리는~^^*
나머지 연산자 %의 쓰임새가 참 매력적으로 느껴지는 코드를 만난 것 같아요~^^* Congratulations~^^* and Celebrations~^^*




오늘도 저와 함께 손가락으로 차근차근 짚어가며 코드를 읽어 주셔서 감사합니다~~^^*
아리송한 것은 우리 손으로 차근차근 짚어보면서 코드 읽기의 유창성을 조금씩 조금씩 꾸준히 계속 키워나가면 좋겠어요~~^^*
오늘도 멋진 아침! 멋진 하루! 보내시고요~~^^*
내일 우리 또 만나서, [왼쪽이웃-나-오른쪽이웃] 관계성이 생긴 한 줄의 세포공간이 Wolfram Rule[0~255]와 연결되는 코드 공부를 함께 할까요~~^^*
네~~!! 꿈은 이루어 집니다~~!!
댓글 남기기