Count the number of 1s if they are consecutive. For 0, 1, 0, 1, 1, 1, 0, 1, 1, 0 – Answer is 3, 2
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 221
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Count Consecutive 1s Only with Power Query
Power Query solution 1 for Count Consecutive 1s Only, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Res = Table.TransformRows(
Source,
each Text.Combine(
List.Transform(
List.Select(
List.Transform(Text.Split([String], "0"), each Text.Length(Text.Replace(_, ", ", ""))),
each _ > 1
),
Text.From
),
", "
)
)
in
Res
Power Query solution 2 for Count Consecutive 1s Only, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
S = Table.TransformRows(
Source,
each Text.Combine(
List.Transform(
List.Select(Text.Split(Text.Select([String], {"0", "1"}), "0"), each Text.Length(_) > 1),
each Text.From(Text.Length(_))
),
", "
)
)
in
S
Power Query solution 3 for Count Consecutive 1s Only, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.AddColumn(
Source,
"Answer",
each
let
a = Text.Split([String], ", "),
b = Table.FromColumns({a}),
c = Table.Group(b, {"Column1"}, {{"Count", each Table.RowCount(_)}}, GroupKind.Local),
d = Text.Combine(
List.Transform(
Table.SelectRows(c, each [Column1] = "1" and [Count] > 1)[Count],
Text.From
),
", "
),
e = if Text.Length(d) = 1 then Number.From(d) else d
in
e
)[[Answer]]
in
Sol
Power Query solution 4 for Count Consecutive 1s Only, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
res = Table.AddColumn(
Fonte,
"Personalizar",
each Text.Combine(
List.Transform(
List.Select(
List.Transform(
List.ReplaceValue(
Splitter.SplitTextByAnyDelimiter({"0"}, QuoteStyle.Csv)([String]),
",",
"",
Replacer.ReplaceText
),
each Text.Remove(_, " ")
),
each _ <> "" and _ <> "1"
),
each Text.From(Text.Length(_))
),
", "
)
)
in
res
Power Query solution 5 for Count Consecutive 1s Only, proposed by Alexis Olson:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Result = Table.AddColumn(
Source,
"Length",
each Text.Combine(
List.Select(
List.Transform(
Text.Split(Text.Remove([String], {",", " "}), "0"),
each Text.From(Text.Length(_))
),
each _ > "1"
),
", "
)
)
in
Result
Power Query solution 6 for Count Consecutive 1s Only, proposed by Brian Julius:
let
Source = Table.DuplicateColumn(
Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
"String",
"Number"
),
SplitToRows = Table.TransformColumnTypes(
Table.ExpandListColumn(
Table.TransformColumns(
Source,
{
{
"Number",
Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv),
let
itemType = (type nullable text) meta [Serialized.Text = true]
in
type {itemType}
}
}
),
"Number"
),
{"Number", Int64.Type}
),
GroupConsecutive = Table.Group(
SplitToRows,
{"String", "Number"},
{
{"All", each _, type table [String = text, Number = nullable number]},
{"Consecutive", each Table.RowCount(_), Int64.Type}
},
GroupKind.Local
),
Filter = Table.RemoveColumns(
Table.SelectRows(GroupConsecutive, each ([Number] = 1) and ([Consecutive] <> 1)),
{"Number", "All"}
),
ReGroup = Table.Group(Filter, {"String"}, {"AnswerExpected", each [Consecutive], type list}),
Extract = Table.RenameColumns(
Table.TransformColumns(
ReGroup,
{"AnswerExpected", each Text.Combine(List.Transform(_, Text.From), ", "), type text}
),
{"String", "StringKey"}
),
Join = Table.SelectColumns(
Table.Join(Source, "String", Extract, "StringKey", JoinKind.LeftOuter),
{"String", "AnswerExpected"}
)
in
Join
Solving the challenge of Count Consecutive 1s Only with Excel
Excel solution 1 for Count Consecutive 1s Only, proposed by Bo Rydobon 🇹🇭:
=MAP(A2:A9,LAMBDA(a,LET(b,LEN(SUBSTITUTE(TEXTSPLIT(a,0),", ",)),TEXTJOIN(", ",,REPT(b,b>1)))))
Excel solution 2 for Count Consecutive 1s Only, proposed by Bo Rydobon 🇹🇭:
=MAP(A2:A9,LAMBDA(a,LET(b,INT(LEN(TEXTSPLIT(a&11,0))/3),TEXTJOIN(", ",,REPT(b,b>1)))))
Excel solution 3 for Count Consecutive 1s Only, proposed by Bo Rydobon 🇹🇭:
=MAP(A2:A9,LAMBDA(a,LET(b,IFERROR(BYROW(TEXTSPLIT(a,", ",0,1),LAMBDA(a,COUNT(-a))),""),ARRAYTOTEXT(FILTER(b,b>1,"")))))
Excel solution 4 for Count Consecutive 1s Only, proposed by Rick Rothstein:
=MAP(A2:A9,LAMBDA(x,LET(a,LEN(TEXTSPLIT(SUBSTITUTE(x,", ",),0)),TEXTJOIN(", ",,FILTER(a,a>1,"")))))
Excel solution 5 for Count Consecutive 1s Only, proposed by Rick Rothstein:
=MAP(A2:A9,LAMBDA(x,LET(a,TEXTSPLIT(SUBSTITUTE(x,", ",""),0),l,IF(a="1","",LEN(a)),TEXTJOIN(", ",,IF(l=0,"",l)))))
Excel solution 6 for Count Consecutive 1s Only, proposed by John V.:
=MAP(A2:A9,LAMBDA(x,LET(c,LEN(TEXTSPLIT(SUBSTITUTE(x,", ",),0)),TEXTJOIN(", ",,REPT(c,c>1)))))
Excel solution 7 for Count Consecutive 1s Only, proposed by محمد حلمي:
=MAP(A2:A9,LAMBDA(a,LET(r,INT(LEN(TEXTSPLIT(a&",1",0))/3),TEXTJOIN(", ",,REPT(r,r>1)))))
Excel solution 8 for Count Consecutive 1s Only, proposed by محمد حلمي:
=MAP(A2:A9,LAMBDA(a,LET(r,SCAN(0,TEXTSPLIT(a&",0",,","),LAMBDA(a,d,a*d+d)),TEXTJOIN(", ",,REPT(r,IFNA((r>1)*(DROP(r,1)=0),))))))
Excel solution 9 for Count Consecutive 1s Only, proposed by Kris Jaganah:
=MAP(A2:A9,LAMBDA(x,LET(a,--TEXTSPLIT(x,,", "),b,SCAN(0,a,LAMBDA(x,y,IF(y=0,0,y+x))),d,EXPAND(b,ROWS(b)+1,,0),e,VSTACK(TAKE(d,-1),DROP(d,-1)),f,ARRAYTOTEXT(FILTER(e,(d=0)*(e>1),"")),IFERROR(--f,f))))
Excel solution 10 for Count Consecutive 1s Only, proposed by Kris Jaganah:
=MAP(A2:A9,LAMBDA(y,LET(a,--TEXTSPLIT(y,", ",0,1,,0),b,BYROW(a,LAMBDA(x,SUM(x))),IFERROR(ARRAYTOTEXT(FILTER(b,b>1)),""))))
Excel solution 11 for Count Consecutive 1s Only, proposed by Julian Poeltl:
=IFERROR(MAP(A2:A9,LAMBDA(A,LET(L,LEN(TEXTSPLIT(CONCAT(TEXTSPLIT(A,,", ")),"0")),J,TEXTJOIN(", ",,FILTER(L,L>1)),IFERROR(J*1,J)))),"")
Excel solution 12 for Count Consecutive 1s Only, proposed by Timothée BLIOT:
=MAP(A2:A9,LAMBDA(z,LET(A,SCAN(0,TEXTSPLIT(z,,", ")*1,LAMBDA(a,v, IF(v,a+1,v))),B,ROWS(A),TEXTJOIN(", ",,MAP(SEQUENCE(B),LAMBDA(x, LET(Q,INDEX(A,x),R,IF(x>1,IF(Q>INDEX(A,x-1),IF(xINDEX(A,x+1), Q,""),Q),""),""),IF(R<2,"",R))))))))
Excel solution 13 for Count Consecutive 1s Only, proposed by Hussein SATOUR:
=IFERROR(MAP(A2:A9, LAMBDA(x, LET(a, TEXTSPLIT(x, "0"), b, LEN(a)-LEN(SUBSTITUTE(a,"1","")), TEXTJOIN(", ",,FILTER(b, b>1))))), "")
Excel solution 14 for Count Consecutive 1s Only, proposed by Oscar Mendez Roca Farell:
=MAP(A2:A9, LAMBDA(a, LET(_n, --TEXTSPLIT(a, ,", "),_s, SEQUENCE(COUNT(_n)),_f, FREQUENCY(IF(_n,_s), IF(_n, ,_s)), IFERROR(ARRAYTOTEXT(TOROW(FILTER(_f, _f>1))),""))))
Excel solution 15 for Count Consecutive 1s Only, proposed by Sunny Baggu:
=MAP(
A2:A9,
LAMBDA(a,
LET(
_sub, SUBSTITUTE(a, ", ", ""),
_split, TEXTSPLIT(_sub, , 0) + 0,
IFERROR(
ARRAYTOTEXT(
TOCOL(
IFS(_split > 10, LEN(_split)),
3
)
),
""
)
)
)
)
Excel solution 16 for Count Consecutive 1s Only, proposed by Sunny Baggu:
=MAP(
A2:A9,
LAMBDA(x,
LET(
_list, VSTACK(TEXTSPLIT(x, , ",") + 0, 0),
_seq, SEQUENCE(ROWS(_list)),
_loc, TOCOL(IFS(_list = 0, _seq), 3),
_val, _loc - VSTACK(0, DROP(_loc, -1)) - 1,
IFERROR(ARRAYTOTEXT(FILTER(_val, _val > 1, "")), ROWS(_list) - 1)
)
)
)
Excel solution 17 for Count Consecutive 1s Only, proposed by Abdallah Ally:
=MAP(A2:A9,LAMBDA(a,TEXTJOIN(",",TRUE,IFERROR(FILTER(MAP(TRIM(REDUCE(a,{", 0, ",", 0"},LAMBDA(x,y,TEXTSPLIT(x,y)))),LAMBDA(z, SUM(VALUE(TEXTSPLIT(z,","))))),MAP(TRIM(REDUCE(a,{", 0, ",", 0"},LAMBDA(x,y,TEXTSPLIT(x,y)))),LAMBDA(z, SUM(VALUE(TEXTSPLIT(z,",")))))>1),""))))
Excel solution 18 for Count Consecutive 1s Only, proposed by Pieter de B.:
=MAP(A2:A9,LAMBDA(x,LET(y,LEN(TEXTSPLIT(SUBSTITUTE(x,", ",),0)),IFERROR(ARRAYTOTEXT(TOCOL(y/(y>1),3)),""))))
Excel solution 19 for Count Consecutive 1s Only, proposed by Charles Roldan:
=LET(
_f, LAMBDA(x,y, LEN(x) - LEN(SUBSTITUTE(x, y, ""))),
_g, LAMBDA(x, FILTER(x, x > 1, "")),
_h, LAMBDA(x, TEXTJOIN(", ", , _g(_f(TEXTSPLIT(x, 0), 1)))),
MAP(A2:A9, _h))
Excel solution 20 for Count Consecutive 1s Only, proposed by Julien Lacaze:
=BYROW(A2:A9,LAMBDA(a,LET(b,LEN(TEXTSPLIT(SUBSTITUTE(a,", ",""),0)),TEXTJOIN(",",1,IF(b>1,b,"")))))
Excel solution 21 for Count Consecutive 1s Only, proposed by Nicolas Micot:
=LET(longueur;NBCAR(FRACTIONNER.TEXTE(SUBSTITUE(A2;", ";"");"0"));JOINDRE.TEXTE(", ";VRAI;SI(longueur>1;longueur;"")))
Excel solution 22 for Count Consecutive 1s Only, proposed by Ziad A.:
=INDEX(BYROW(IFERROR(1/(1/LEN(TRIM(SPLIT(REGEXREPLACE(REGEXREPLACE(A2:A9,", ",),"(11+)|.","$1 ")," "))))),LAMBDA(r,TEXTJOIN(", ",1,r))))
Excel solution 23 for Count Consecutive 1s Only, proposed by Giorgi Goderdzishvili:
=LET(
string,A2,
split, --TEXTSPLIT(string,","),
scanning, SCAN(0,split,LAMBDA(x,y,IF(y,x+1,0))),
array, --MAKEARRAY(1,COUNT(scanning),LAMBDA(r,c,IF(c=COUNT(scanning),INDEX(scanning,r,c),IF(AND(INDEX(scanning,r,c)=0,c<>1),INDEX(scanning,r,c-1),0)))),
final,FILTER(array,(array<>0)*(array<>1)),
IFERROR(TEXTJOIN(", ",TRUE,final),""))
Excel solution 24 for Count Consecutive 1s Only, proposed by Daniel Garzia:
=MAP(A2:A9,LAMBDA(l,LET(s,LEN(TEXTSPLIT(SUBSTITUTE(CONCAT(SUBSTITUTE(l,", ","")),1,"a"),0)),TEXTJOIN(", ",,IF(s<2,"",s)))))
Excel solution 25 for Count Consecutive 1s Only, proposed by Daniel Garzia:
=MAP(A2:A9,LAMBDA(l,LET(s,SUBSTITUTE(CONCAT(TEXTSPLIT(l,", ")),1,"a"),t,LEN(TEXTSPLIT(s,0)),IF(ISERR(FIND("aa",s)),"",TEXTJOIN(", ",,IF(t<2,"",t))))))
Excel solution 26 for Count Consecutive 1s Only, proposed by Quadri Olayinka Atharu:
=MAP(A2:A9,LAMBDA(x,
LET(_nc,SUBSTITUTE(x,", ",""),
y,TEXTSPLIT(_nc,0),
r,TEXTJOIN(", ",1,IF(LEN(y)<2,"",LEN(y))),
IFERROR(--r,r))))
Excel solution 27 for Count Consecutive 1s Only, proposed by Anup Kumar:
=BYROW(A2:A9,LAMBDA(a,LET(str,SUBSTITUTE(a,", ",""),
strArr,TEXTSPLIT(str,{0,"010"},,1),
strFlr,FILTER(strArr,strArr<>"1"),
IFERROR(ARRAYTOTEXT(LEN(strFlr)),"")
)))
Excel solution 28 for Count Consecutive 1s Only, proposed by Diarmuid Early:
=MAP(A2:A9,LAMBDA(x,
LET(t,TEXTSPLIT(x,", "),
s,SCAN(0,t,LAMBDA(a,v,v*(a+1))),
o,FILTER(s,(s>1)*(HSTACK(DROP(s,,1),0)=0),""),
TEXTJOIN(", ",,o))))
Here:
t splits the string by ", " into digits
s returns a running count of 1s (resets to 0 at each non-1)
o filters s where s>1 and the next term in s is 0 (or we're at the end of the string)
Excel solution 29 for Count Consecutive 1s Only, proposed by Rayan S.:
=MAP(A2:A9,LAMBDA(a,LET(x,LEN(SUBSTITUTE(SUBSTITUTE(TEXTSPLIT(a,", 0"),", ",""),0,"")),TEXTJOIN(", ",,IFERROR(FILTER(x,x>1),"")))))
Excel solution 30 for Count Consecutive 1s Only, proposed by Caroline Blake:
=MAP(A2:A9,LAMBDA(_array,
LET(b,TEXTSPLIT(_array,,"0,"),
c,LEN(SUBSTITUTE(SUBSTITUTE(b," ",""),",","")),
IFERROR(ARRAYTOTEXT(TRANSPOSE(FILTER(c,c>1))),""))))
&&
