Silverback9

#야생으로

Creative Coding 독학 제156일 2024년08월30일(금)

오늘은 씨앗 세포가 심어진 한 줄의 세포 공간들에게, [왼쪽이웃] –[나] –[오른쪽이웃]의 관계성을 부여해 보기로 해요~

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]와 연결되는 코드 공부를 함께 할까요~~^^*

네~~!! 꿈은 이루어 집니다~~!!

댓글 남기기