英文:
Zero Array Questions -- Figuring Out How a Solution Works
问题
代码的描述:
这段代码的目标是判断给定的数组是否是"zero-plentiful",也就是说数组中包含多个零,并且每个零序列至少有4个连续的零。
这段代码的解释:
代码使用了一个zeroPlentiful
函数来实现这一目标。以下是代码的逐步解释:
- 创建一个空数组
counter
,用于存储每个零序列的长度。 - 创建一个变量
index
,初始化为0,用于追踪counter
数组的索引。
接下来是forEach
循环,它遍历输入数组arr
中的每个元素,并执行一个回调函数。这个回调函数的目的是确定每个零序列的长度,以便后续的判断。
- 对于每个数组元素,回调函数会检查元素的值。如果元素的值为0,它会执行以下操作:
- 如果
counter
数组中已经有一个与index
相对应的元素,就将该元素的值加1,表示已经找到一个连续的零。 - 如果
counter
数组中没有一个与index
相对应的元素,就创建一个,并将其值初始化为1。
- 如果
- 如果元素的值不是0(即非零),则将
index
设置为counter
数组的长度,表示当前零序列结束,需要开始统计下一个零序列。
最后,代码返回的结果是根据counter
数组中的值来确定是否输入数组是"zero-plentiful"。如果counter
数组中的每个元素都大于或等于4(即每个零序列至少包含4个连续的零),则返回counter
数组的长度(表示零序列的个数)。否则,返回0,表示输入数组不是"zero-plentiful"。
这段代码的目标是通过迭代输入数组,查找零序列,并检查它们的长度是否符合条件。如果所有零序列都满足条件,就返回它们的数量,否则返回0。
英文:
https://www.codewars.com/kata/59e270da7997cba3d3000041/javascript
DESCRIPTION:
An array is called zero-plentiful if it contains multiple zeros, and every sequence of zeros is at least 4 items long.
Your task is to return the number of zero sequences if the given array is zero-plentiful, oherwise 0.
Examples
[0, 0, 0, 0, 0, 1] --> 1
1 group of 5 zeros (>= 4), thus the result is 1
[0, 0, 0, 0, 1, 0, 0, 0, 0] --> 2
2 group of 4 zeros (>= 4), thus the result is 2
[0, 0, 0, 0, 1, 0] --> 0
1 group of 4 zeros and 1 group of 1 zero (< 4)
every sequence of zeros must be at least 4 long, thus the result is 0
[0, 0, 0, 1, 0, 0] --> 0
1 group of 3 zeros (< 4) and 1 group of 2 zeros (< 4)
[1, 2, 3, 4, 5] --> 0
no zeros
[] --> 0
no zeros
function zeroPlentiful(arr) {
let counter = [];
let index = 0;
arr.forEach((num, idx) => {
if (num === 0) {
counter[index] = counter[index] ? counter[index] + 1 : 1;
} else {
index = counter.length;
}
});
return counter.every(item => item >= 4) ? counter.length : 0;
}
Would someone please give me a play-by-play about what's going on in this code? I've attempted this question a bunch of times and looked at all the solutions, but I'm still having trouble figuring out what's going on. I understand that the forEach is looking for 0s and non-0 numbers but, beyond that, I'm not sure what's happening.
答案1
得分: 0
这段代码实际上非常简单,两个主要变量是counter
和index
,counter
用来跟踪数组中零的数量。然后,它遍历数组,并验证当前位置是否为零,如果是,则将index
位置的counter
递增。
因此,对于第一个数组[0,0,0,0,0,1]
,counter[index]
将为5
,因为有5个连续的零,而index
的值没有从其原始值增加。
如果值不是0,则不会在counter
上递增任何内容,但会递增index
,因为零的序列被打破了,现在计数器从新的位置开始。
基本上,它创建了一个包含每个序列中零的数量的数组,然后return
语句简单地运行了每个函数,并验证序列是否为4个或更多。
英文:
The code is quite simple actually, the two main variables are counter
and index
, counter keeps track of the number of zeros in the array. Then, it iterates through the array, and validates if the current position is a zero, and if it is, the counter
in the position of index
is incremented.
So for the first array, [0,0,0,0,0,1]
, the counter[index]
will be 5
, because there are 5 zeros in sequence, and index was not incremented from it's original value.
And if the value is not 0, then it doesn't increment anything on the counter
but increments index
, because the sequence of 0s was broken, and now the counter starts on a new position.
Basically it creates an array with the number of zeros in each sequence, then the return
statement simply runs the every function, and validates if the sequence was 4 or more.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论