计算一组值的前 x 个整数

Count the first x integers of a group of values

我想从 1 开始计算 Y 的出现次数,直到它的后续值为 N。可以在下面找到一个简单的示例 table,我添加了一个名为预期输出以突出我正在努力实现的目标。

tab:([]x:`N`N`Y`N`N`Y`Y`Y`N`N`Y`Y`Y;expected_output:0 0 1 0 0 1 2 3 0 0 1 2 3)

我一直在尝试使用 cut 的想法(假设我可以找到正确的索引)我可以将 table 拆分,获取每个列表的计数,然后将其拼凑以某种方式回到一起,例如

0 2 3 5 8 10 cut tab

一种使用扫描的方法

q)update c:0{y*x+y}\x=`Y from tab
x expected_output c
-------------------
N 0               0
N 0               0
Y 1               1
N 0               0
N 0               0
Y 1               1
Y 2               2
Y 3               3
N 0               0
N 0               0
Y 1               1
Y 2               2
Y 3               3

本质上是 sums 的修改版本,每当下一个布尔值为零时,它会将计数器重置为零(使用 zero/false 乘法)

无需扫描的方法,不像 Terry 的那样整洁,但在较大的选项卡上应该更快。

q)update o:{a+r-maxs differ[x]*r:sums a:`Y=x}x from tab
x expected_output o
-------------------
N 0               0
N 0               0
Y 1               1
N 0               0
N 0               0
Y 1               1
Y 2               2
Y 3               3
N 0               0
N 0               0
Y 1               1
Y 2               2
Y 3               3