Home » Compare Odd Even Counts

Compare Odd Even Counts

If odd numbers are less, then post odd numbers. If even numbers are less, then post even numbers. If both are equal, answer would be none. Ex. 3, 8, 9, 4, 6 => It contains 2 odd numbers 3, 9 and 3 even numbers 8, 4, 6. Hence, answer would be 3, 9.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 186
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Compare Odd Even Counts with Power Query

Power Query solution 1 for Compare Odd Even Counts, proposed by Omid Motamedisedeh:
= Table.AddColumn(Source, "Custom", each [a= try List.Transform(Text.Split([Numbers],", "), each Number.From(_)) otherwise {Number.From([Numbers])},b=List.Select(a,Number.IsOdd), c=(List.Select(a,Number.IsEven)), d= if List.Count(b)>List.Count(c) then c else if List.Count(b)
Power Query solution 2 for Compare Odd Even Counts, proposed by Bo Rydobon 🇹🇭:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Ans = Table.TransformColumns(
    Source, 
    {
      "Numbers", 
      each 
        let
          t = Text.Split(_, ", "), 
          o = List.Select(t, each Number.IsOdd(Number.From(_))), 
          d = List.Count(t) - 2 * List.Count(o)
        in
          Text.Combine(if d = 0 then {} else if d > 0 then o else List.Difference(t, o), ", ")
    }
  )
in
  Ans
Power Query solution 3 for Compare Odd Even Counts, proposed by Zoran Milokanović:
let
  Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
  Solution = Table.TransformRows(
    Source, 
    each 
      let
        n  = Text.Split([Numbers], ", "), 
        o  = List.Select(n, each Number.IsOdd(Number.From(_))), 
        oc = List.Count(o), 
        e  = List.Difference(n, o), 
        ec = List.Count(e)
      in
        Text.Combine(if ec < oc then e else if oc < ec then o else {}, ", ")
  )
in
  Solution
Power Query solution 4 for Compare Odd Even Counts, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sol = Table.AddColumn(
    Source, 
    "Answer", 
    each 
      let
        a = Text.Split([Numbers], ", "), 
        b = List.Transform(a, Number.From), 
        c = List.Select(b, Number.IsOdd), 
        d = List.Select(b, Number.IsEven), 
        e = 
          if List.Count(d) > List.Count(c) then
            c
          else if List.Count(d) < List.Count(c) then
            d
          else
            null, 
        f = try Text.Combine(List.Transform(e, Text.From), ", ") otherwise ""
      in
        f
  )[[Answer]]
in
  Sol
Power Query solution 5 for Compare Odd Even Counts, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  res = Table.AddColumn(
    Fonte, 
    "Personalizar", 
    each [
      odd = List.Select(
        List.Transform(Text.Split([Numbers], ", "), Number.From), 
        each Number.IsOdd(_)
      ), 
      even = List.Select(
        List.Transform(Text.Split([Numbers], ", "), Number.From), 
        each Number.IsEven(_)
      ), 
      a = 
        if List.Count(odd) < List.Count(even) then
          Text.Combine(List.Transform(odd, Text.From), ", ")
        else if List.Count(odd) = List.Count(even) then
          null
        else
          Text.Combine(List.Transform(even, Text.From), ", ")
    ][a]
  )
in
  res
Power Query solution 6 for Compare Odd Even Counts, proposed by Brian Julius:
let
  Source = Table.DuplicateColumn(
    Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
    "Numbers", 
    "Numbers2"
  ), 
  AddReturnList = Table.AddColumn(
    Source, 
    "Answer", 
    each [
      b = _[Numbers2], 
      b1 = List.Transform(Text.Split(b, ", "), each Number.FromText(_)), 
      evenlist = List.Select(b1, each Number.IsEven(_)), 
      oddlist = List.Select(b1, each Number.IsOdd(Number.From(_))), 
      evencount = try List.Count(evenlist) otherwise 0, 
      oddcount = try List.Count(oddlist) otherwise 0, 
      return = 
        if evencount < oddcount then
          evenlist
        else if oddcount < evencount then
          oddlist
        else
          null
    ][return]
  ), 
  Extract = Table.TransformColumns(
    AddReturnList, 
    {"Answer", each try Text.Combine(List.Transform(_, Text.From), ", ") otherwise null, type text}
  ), 
  RemoveCol = Table.RemoveColumns(Extract, {"Numbers2"})
in
  RemoveCol
Power Query solution 7 for Compare Odd Even Counts, proposed by Guillermo Arroyo:
let
  Origen = Excel.CurrentWorkbook(){[Name = "Tabla1"]}[Content], 
  a = List.Transform(
    List.Transform(Origen[Numbers], each Text.Split(_, ", ")), 
    each 
      let
        b = List.Transform(_, each Number.FromText(_)), 
        c = List.Select(b, each Number.IsOdd(_)), 
        d = List.RemoveItems(b, c), 
        e = 
          if List.Count(c) > List.Count(d) then
            d
          else if List.Count(c) < List.Count(d) then
            c
          else
            {null}
      in
        Text.Combine(List.Transform(e, each Text.From(_)), ", ")
  )
in
  a
Power Query solution 8 for Compare Odd Even Counts, proposed by Felipe Perez Arevalo:
let
  Source = Table1, 
  Custom1 = Table.RenameColumns(
    Table.TransformColumns(
      Source, 
      {
        "Numbers", 
        each [
          l = Text.Split(_, ", "), 
          e = List.Select(l, each Number.IsEven(Number.From(_))), 
          o = List.Select(l, each not Number.IsEven(Number.From(_))), 
          l1 = Text.Combine(
            if List.Count(e) = List.Count(o) then
              {}
            else if List.Count(e) > List.Count(o) then
              o
            else
              e, 
            ", "
          )
        ][l1], 
        type text
      }
    ), 
    {"Numbers", "Answer"}
  )
in
  Custom1

Solving the challenge of Compare Odd Even Counts with Excel

Excel solution 1 for Compare Odd Even Counts, proposed by Bo Rydobon 🇹🇭:
=MAP(A2:A7,LAMBDA(a,LET(t,TEXTSPLIT(a,,", "),o,FILTER(t,ISEVEN(t),""),e,FILTER(t,ISODD(t),""),
ARRAYTOTEXT(SWITCH(SIGN(ROWS(o)-ROWS(e)),0,"",1,e,o)))))
Excel solution 2 for Compare Odd Even Counts, proposed by Rick Rothstein:
=MAP(A2:A7,LAMBDA(a,LET(n,TEXTSPLIT(a,", "),e,MOD(n,2)=0,o,MOD(n,2),so,SUM(o),se,SUM(0+e),IFERROR(TEXTJOIN(", ",,IF(so>se,FILTER(n,e),IF(se>so,FILTER(n,o),""))),""))))
Excel solution 3 for Compare Odd Even Counts, proposed by Rick Rothstein:
=MAP(A2:A7,LAMBDA(a,LET(n,TEXTSPLIT(a,", "),z,MOD(n,2),s,2*SUM(z),c,COUNT(z),TEXTJOIN(", ",,IF(s=c,"",IFERROR(FILTER(n,z=(1-(s>c))),""))))))

NOTE: This formula is 27 characters shorter than my first one; however, for the first time in a LONG time, my formula is even shorter (by 10 characters)
Excel solution 4 for Compare Odd Even Counts, proposed by John V.:
=MAP(A2:A7,LAMBDA(x,LET(n,TEXTSPLIT(x,", "),m,MOD(n,2),TEXTJOIN(", ",,IF(CHOOSE(2+SIGN(SUM(1-m)-SUM(m)),1-m,,m),n,"")))))
Excel solution 5 for Compare Odd Even Counts, proposed by محمد حلمي:
=MAP(A2:A7,LAMBDA(a,LET(
e,TEXTSPLIT(a,,", "),
v,--ISODD(e),
n,SUM(v),
r,ROWS(e)-n,
TEXTJOIN(", ",,IFS(rn,IF(v,e,""),1,"")))))
Excel solution 6 for Compare Odd Even Counts, proposed by Kris Jaganah:
=MAP(A2:A7,LAMBDA(k,LET(a,--TEXTSPLIT(k,,", "),b,MOD(a,2),c,MAP(b,LAMBDA(x,SUM(--(x=b)))),IF(MIN(c)=MAX(c),"",ARRAYTOTEXT(FILTER(a,SMALL(c,1)=c))))))
Excel solution 7 for Compare Odd Even Counts, proposed by Julian Poeltl:
=MAP(A2:A7,LAMBDA(N,LET(SP,--TEXTSPLIT(N,", "),O,FILTER(SP,ISODD(SP)),E,FILTER(SP,ISEVEN(SP)),IFERROR(TEXTJOIN(", ",,IFS(COLUMNS(O)COLUMNS(E),E)),""))))
Excel solution 8 for Compare Odd Even Counts, proposed by Timothée BLIOT:
=MAP(A2:A7, LAMBDA(x, ARRAYTOTEXT(LET(A,1*TEXTSPLIT(x,", "),
IF(SUM(--ISODD(A))=COUNT(A),"",
IF(SUM(--ISODD(A))>SUM(--NOT(ISODD(A))), FILTER(A,NOT(ISODD(A))),FILTER(A,ISODD(A)))) ))))
Excel solution 9 for Compare Odd Even Counts, proposed by Hussein SATOUR:
=IFERROR(MAP(A2:A7, LAMBDA(x, LET(a, --TEXTSPLIT(x,,", "),b,ISODD(a), c, SUM(b*1)/COUNT(b*1), TEXTJOIN(", ",,FILTER(a,IFS(c = 0.5, "", c<0.5, b, 1, NOT(b))))))),"")
Excel solution 10 for Compare Odd Even Counts, proposed by Oscar Mendez Roca Farell:
=MAP(A2:A7, LAMBDA(a, LET(_n,--TEXTSPLIT(a,", "),_m, MOD(_n,2),_c, SUM(_m)/COUNT(_n), TEXTJOIN(", ",1, IFERROR(FILTER(_n,_m=(_c<0,5)/(_c<>0,5)),"")))))
Excel solution 11 for Compare Odd Even Counts, proposed by Sunny Baggu:
=MAP(
 A2:A7,
 LAMBDA(x,
 LET(
 _split, TEXTSPLIT(x, , ", ") + 0,
 _odd, FILTER(_split, ISODD(_split), ""),
 _oddnum, ROWS(_odd),
 _even, FILTER(_split, ISEVEN(_split), ""),
 _evennum, ROWS(_even),
 IFNA(
 ARRAYTOTEXT(IFS(_oddnum < _evennum, _odd, _oddnum > _evennum, _even)),
 ""
 )
 )
 )
)
Excel solution 12 for Compare Odd Even Counts, proposed by Md. Zohurul Islam:
=MAP(A2:A7,LAMBDA(x,LET(a,TEXTSPLIT(x,,", ")+0,
b,FILTER(a,ISODD(a)),
c,FILTER(a,ISEVEN(a)),
d,COUNT(a),e,COUNT(b),f,COUNT(c),
ARRAYTOTEXT(IFS(OR(d=1,e=f),"",e
Excel solution 13 for Compare Odd Even Counts, proposed by Charles Roldan:
=MAP(A2:A7, LAMBDA(x,LET(
 Arr, --TEXTSPLIT(x, , ", "), 
 Res, MOD(Arr, 2), Avg, AVERAGE(Res),
 Bool, ABS(ROUND(Avg, ) - Res) * (Avg <> 0.5),
 ARRAYTOTEXT(FILTER(Arr, Bool, "")))))
Excel solution 14 for Compare Odd Even Counts, proposed by Nicolas Micot:
=LET(_nombres;FRACTIONNER.TEXTE(A2;",")+0;
_pair;FILTRE(_nombres;MOD(_nombres;2)=0);
_impair;FILTRE(_nombres;MOD(_nombres;2)>0);
JOINDRE.TEXTE(", ";VRAI;SI(NBVAL(_pair)
Excel solution 15 for Compare Odd Even Counts, proposed by Guillermo Arroyo:
=MAP(A2:A7,LAMBDA(a,LET(b,--TEXTSPLIT(a,,", "),TEXTJOIN(", ",0,FILTER(b,CHOOSE(IFERROR(2+ROUNDUP(1-COUNT(b)/2/SUM(--ISODD(b)),0),2),ISODD(b),SEQUENCE(COUNT(b),,0,0),ISEVEN(b)),"")))))
Excel solution 16 for Compare Odd Even Counts, proposed by Quadri Olayinka Atharu:
=DROP(REDUCE("",A2:A7,LAMBDA(x,y,
LET(num,--TEXTSPLIT(y,","),
eT,ISEVEN(--num),
oT,ISODD(--num),
oC,SUM(N(oT)),
eC,SUM(N(eT)),
_min,MIN(oC,eC),
_con,IFS(oC=eC,FALSE,_min=oC,oT,_min=eC,eT),
VSTACK(x,TEXTJOIN(", ",1,FILTER(num,_con,"")))))),1)
Excel solution 17 for Compare Odd Even Counts, proposed by Rayan S.:
= odd,
 "",
 IF(even > odd, FILTER(f, ISODD(f)), FILTER(f, ISEVEN(f)))
 ),
 sol
 )
 ),
 ""
 )
 )
)
Excel solution 18 for Compare Odd Even Counts, proposed by Amardeep Singh:
=BYROW(A2:A7,LAMBDA(r,
ARRAYTOTEXT(LET(d,--TEXTSPLIT(r,", "),od,SUM(--ISODD(d)),ev,SUM(--ISEVEN(d)),IFS(od=ev,"",od
Excel solution 19 for Compare Odd Even Counts, proposed by Miguel Angel Franco García:
=UNIRCADENAS(","; VERDADERO; LET(a;ORDENAR(ENCOL(ABS(DIVIDIRTEXTO(A2;","))));b;SI(BYROW(a; LAMBDA(c;ES. IMPAR(c)))=VERDADERO;a;""); d;SI(BYROW(a; LAMBDA(e;ES. PAR(e)))=VERDADERO;a;""); SI(SUMA(b)
Excel solution 20 for Compare Odd Even Counts, proposed by Hussain Ali Nasser:
=IFERROR(
    MAP(
        A2:A7,
        LAMBDA(
            _range,
            LET(
                _splitrange,
                TEXTSPLIT(
                    _range,
                    ,
                    ", "
                ),
                _even,
                FILTER(
                    _splitrange,
                     ISEVEN(
                         _splitrange
                     )
                ),
                _odd,
                FILTER(
                    _splitrange,
                     ISODD(
                         _splitrange
                     )
                ),
                _evenrows,
                ROWS(
                    _even
                ),
                _oddrows,
                ROWS(
                    _odd
                ),
                TEXTJOIN(
                    ", ",
                    ,
                    IFS(
                        _evenrows>_oddrows,
                        _odd,
                        _evenrows<_oddrows,
                        _even
                    )
                )
            )
        )
    ),
    ""
)
Excel solution 21 for Compare Odd Even Counts, proposed by Stevenson Yu:
=MAP(A2:A7, LAMBDA(X,
LET(A, TEXTSPLIT(X, ", "),
B, FILTER(A, ISODD(A)),
C, FILTER(A, ISEVEN(A)),
D, COUNTA(B)-COUNTA(C),
E, TEXTJOIN(", ",,IFS(D=0, "", D>0, C, 1, B)),
E)))
Excel solution 22 for Compare Odd Even Counts, proposed by Erik Oehm:
=LAMBDA(list, LET(
 _split, VALUE(TRIM(TEXTSPLIT(list,,","))),
 _isEven, MAP(_split,LAMBDA(x,ISEVEN(x))),
 _evenCount, SUM(N(_isEven)),
 _oddCount, ROWS(_isEven)-_evenCount,
 _filtered, FILTER(_split,_isEven=(_evenCount<_oddCount),""),
 _result, IF(_evenCount=_oddCount,"",TEXTJOIN(", ",,_filtered)),
 _result
 )
)(A2)
Excel solution 23 for Compare Odd Even Counts, proposed by Lorenzo Foti:
=LET(
 rng;NUMBERVALUE(TEXTSPLIT(A2;","));
 evenCheck;IF(ISEVEN(rng);1;0);
 oddCheck;IF(ISODD(rng);1;0);
 outP;IFERROR(IFS(SUM(evenCheck)>SUM(oddCheck);TEXTJOIN(", ";;FILTER(rng;oddCheck=1));SUM(evenCheck)
Excel solution 24 for Compare Odd Even Counts, proposed by Caroline Blake:
=MAP(A2:A7,LAMBDA(_a,LET(a,TEXTSPLIT(_a,", "),
_even,SUM(--ISEVEN(a)),
_odd,SUM(--ISODD(a)),
ARRAYTOTEXT(IFERROR(IF(_even<_odd,FILTER(a,ISEVEN(a)=TRUE),IF(_odd<_even,FILTER(a,ISODD(a)=TRUE),"")),"")))))

&&

Leave a Reply