a:(1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0) span:{:[0=#b:&x;b;(&1,~{y=-1+x}':b)_ b]} blob:{{(x;#x)}'span x} meet:{|/x[0]_lin*y} fuse:{(x[0],*y;x[1]+y 1)} pair:{ v:*x;x:x 1 r:(x;y)step/!#x x:*r;y:r 1 if[0<#x;v[x[&x[;1]>0;1]]+:1] (v;y)} step:{ if[0<#j:&x[0;y]meet/:x 1 x[1]:_di[x 1;j],,@[fuse/x[1;j];1;+;x[0;y;1]] x[0;y;1]:0] x} count:{tally@*pair/@[blob'x,,&#*x;0;{(y;x)};&*/^x]} tally:{+(i;x i:&x>0)} count a