/*********************************************

* @name fnConwaySequenceInit

* @description Conway Sequence 초기화 처리 함수

**********************************************/

const fnConwaySequenceInit = () => {

 

// 첫번째 숫자가 될 변수 R 초기화

const R = 1;

 

// 출력할 라인번호가 될 숫자 변수 L 초기화

const L = 6;

 

// Conway Sequence를 만드는 함수를 담은 변수 sequence 초기화

const sequence = fnMakeSequence(R, L);

 

// fnMakeSequence 함수로 만들어진 sequence 배열을 문자열로 변환하기 위한 변수 output 초기화

const output = fnPrintSequence(sequence);

 

// 만들어진 output 콘솔에 표시!

console.log(output);

};



/*******************************************************************

* @name fnMakeSequence

* @params seed -> 첫번째 숫자

* @params iteration -> 출력할 라인 숫자

* @description 시작 숫자와 출력할 라인 숫자에 따라 Conway Sequence 생성

********************************************************************/

const fnMakeSequence = (seed, iteration) => {

 

// return 될 시퀀스 값을 저장 할 배열에 첫번째 숫자를 담은 seq변수 초기화

let seq = [seed];

 

// 0 ~ 5까지 반복하여 증가하는 반복문

for (let i = 0; i < iteration - 1; i++) {

 

// 출력할 라인 숫자까지 만들어질 동안의 시퀀스 값들을 저장하기 위한 배열 newSeq 초기화

let newSeq = [];

 

// 현재 index 숫자의 갯수 표시를 위한 변수 k 초기화

let k = 1;

 

// seq 배열의 index 비교를 위한 변수 j 초기화

let j = 1;

 

// 현재 반복이 첫번째 반복인지 검사하기위한 while문

while (j < seq.length) {

 

// seq 배열의 j번째 자리 숫자가 앞자리 숫자와 다르면 if문 실행

if(seq[j] != seq[j-1]) {

 

// newSeq 배열에 k를 push

newSeq.push(k);

 

// newSeq 배열에 seq[j-1]를 push

newSeq.push(seq[j-1]);

 

// k의 값을 1로 초기화한다.

k = 1;

}

 

// seq 배열의 j번째 자리 숫자가 앞자리 숫자와 같으면

else{

 

// k의 값에 1을 더한다.

k++;

}

 

// j의 값에 1을 더한다.

j++;

 

}

 

// newSeq 배열에 k를 push

newSeq.push(k);

 

// newSeq 배열에 seq[j-1]를 push

newSeq.push(seq[j-1]);

 

// 만들어진 시퀀스를 seq변수에 저장

seq = newSeq;

 

}

 

// 완성 된 Conway Sequence return

return seq;

 

};



/***************************************************************************************

* @name fnPrintSequence

* @params seq -> 시퀀스 값을 저장한 배열 seq

* @description fnMakeSequence 함수로 만든 시퀀스 값 담은 배열을 문자열로 변환시키기 위한 함수

****************************************************************************************/

const fnPrintSequence = (seq) => {

 

// 문자열로 변환된 시퀀스 값을 담을 변수 str 초기화

let str = '';

 

// 시퀀스 값을 담은 배열 seq의 갯수만큼 반복

for(var i = 0; i < seq.length; i++) {

 

// str 변수에 seq 배열 값 하나하나를 더한다.

str += seq[i] + ' ';

 

};

 

// str 값에 왼쪽/오른쪽 공백 제거 후 return

return str.trim();

 

};

 

// Conway Sequence init function 실행

fnConwaySequenceInit();

'Coding' 카테고리의 다른 글

HTTP & HTTPS ( SSL,TLS )  (2) 2020.06.22
eslint 자동정렬  (0) 2019.08.09
javascript 뒤로가기 시 경고창 표시 기능  (0) 2019.03.07
최고 권한 부여  (0) 2019.03.05
vanillaJS 부드러운 스크롤  (0) 2019.02.14

+ Recent posts