创建一个计算特定数字之间距离的新数组

Creating a new array that counts the distance between specific numbers

这很容易被误解,所以我会简化它。假设我有一个数组,它是掷骰子的结果。喜欢:

1 2 4 6 1 2 6 6 2 4 等等

每次你掷出 6,你就赢了。我想创建一个新数组,其中包含在基于原始数组的基础上你将赢得多少回合。所以上面的数组将创建一个数组:

4 3 1

(需要4回合获胜,然后3回合,然后1回合)

所以我只想计算6之间的距离。 (我也可以将骰子结果转换为二进制 win/lose)

如何在 excel 中执行此操作? (或javascript,但更喜欢excel)

如果第一个数组是 B1:K1,则第二个数组可能创建为:

=IF(B1=6,COLUMN()-SUM(A2:$B2)-1,"")  

在 B2 中复制到花色。

您需要做的是遍历数组并通过累加到收集器变量中来计算空格。您可以找到下面的代码,它只是弹出并提醒 window.(Javascript)

var array = [1, 2, 4, 6, 1, 2, 6, 6, 2, 4]
var resultArray = []
var i = 0;
var distance = 0;
for (i = 0; i < array.length; i++) {
  distance++;
  if (array[i] == 6) {
    resultArray.push(distance);
    distance = 0;
  }
}

alert(resultArray);

我尝试在 excel 中做。

您可以放置​​一个命令按钮并定义一个子函数,如下所示,您将获得预期的结果。有关如何放置命令按钮的说明 http://www.excel-easy.com/vba/create-a-macro.html#command-button

Sub DistanceOf6InString(x As String)
Size = Len(x)
distance = 0
result = ""
Dim i As Integer

For i = 1 To Size
    distance = distance + 1
    If (Mid(x, i, 1) = "6") Then
        result = result & distance
        distance = 0
    End If
Next i

MsgBox result

End Sub



Private Sub CommandButton1_Click()
DistanceOf6InString ("1246126624")
End Sub

这可能对你有用:

var rollsUntil6 = function(rolls) {
  return rolls.reduce(function(indices, roll, idx) {
    if (roll == 6) {indices.push(idx);} return indices;
  }, [-1]).map(function(val, idx, arr) {
    return val - arr[idx - 1];
  }).slice(1);
};

rollsUntil6([1, 2, 4, 6, 1, 2, 6, 6, 2, 4]); //=> [4, 3, 1]

您可以重复找到 array.indexOf(6,lastmatch)

var 数组= [1, 2, 4, 6, 1, 2, 6, 6, 2, 4];

var resultArray= [], i, incr= 0;

while((i= array.indexOf(6, incr))!= -1){
    i+= 1;
    resultArray.push(i-incr);
    incr= i;
}

resultArray 返回值:(数组)[4,3,1]

创建辅助列(Excel 的 A 列)。将 1 放在 Helper 列的第一个单元格 (A2) 中。跟进公式(在 A3 中)=IF(B3=6,A2+1,A2)。将它拖到给定数组的最后一行。

然后创建结果列(Excel 的 C 列)。输入公式(在 C2 中) =IF(ROW()-1=MAX(A:A),"",IF(IF(ROW()-1=1,COUNTIF(A:A,ROW()-1)+1,COUNTIF(A: A,ROW()-1))=0,"",IF(ROW()-1=1,COUNTIF(A:A,ROW()-1)+1,COUNTIF(A:A,ROW()- 1))))

在结果列的第一个单元格中(Excel 的 C 列)。拖动并获得所需的结果。

隐藏辅助列。

注意:数组数据从单元格B2开始