CodeWars符号化問題2021/01/22-シーケンス収束
[質問]
Consider the following series:1, 2, 4, 8, 16, 22, 26, 38, 62, 74, 102, 104, 108, 116, 122
It is generated as follows:
16 + (6 * 1) = 22 and 104 + (4 * 1) = 108
.Let's begin the same series with a seed value of
3
instead of 1
:3, 6, 12, 14, 18, 26, 38, 62, 74, 102, 104, 108, 116, 122
Notice that the two sequences converge at 26
and are identical therefter. We will call the series seeded by a value of 1
the "base series"and the other series the "test series".You will be given a seed value for the test series and your task will be to return the number of integers that have to be generated in the test series before it converges to the base series. In the case above:
convergence(3) = 5, the length of [3, 6, 12, 14, 18].
(要約)現在の要素には、
0
のほかに、次の要素を数値で乗算する配列があります.1
からの配列はbase
であり、他の数字からの配列はtest
である.test
の配列要素において、配列長はbase
に設定される.[回答] function convergence(n){
const base = [1];
const test = [n];
while(!base.includes(test[test.length - 1])) {
const baseLen = base.length;
const testLen = test.length;
base[baseLen - 1] > test[testLen - 1]
? test.push(makeNum(test[testLen - 1], testLen - 1))
: base.push(makeNum(base[baseLen - 1], baseLen - 1))
}
test.pop();
return test.length;
}
function makeNum(num, index) {
return num + `${num}`.split('').filter(str => str * 1).reduce((acc, str) => acc *= str, 1);
}
まず、return
を作成し、0
を除くすべての要素の積を求めます.makeNum
は、base
1
を含み、test
を第1の要素として含む.
その後、n
の最後の要素がtest
になるまで、繰り返し文が回転する.
最後はbase
の中の元素なので、base
を除いて残りの個数はpop
です.
Reference
この問題について(CodeWars符号化問題2021/01/22-シーケンス収束), 我々は、より多くの情報をここで見つけました
https://velog.io/@hemtory/CodeWars20210122-2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
function convergence(n){
const base = [1];
const test = [n];
while(!base.includes(test[test.length - 1])) {
const baseLen = base.length;
const testLen = test.length;
base[baseLen - 1] > test[testLen - 1]
? test.push(makeNum(test[testLen - 1], testLen - 1))
: base.push(makeNum(base[baseLen - 1], baseLen - 1))
}
test.pop();
return test.length;
}
function makeNum(num, index) {
return num + `${num}`.split('').filter(str => str * 1).reduce((acc, str) => acc *= str, 1);
}
Reference
この問題について(CodeWars符号化問題2021/01/22-シーケンス収束), 我々は、より多くの情報をここで見つけました https://velog.io/@hemtory/CodeWars20210122-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol