Home » Check Pandigital by Base

Check Pandigital by Base

List Yes if a Number is Pandigital number in a given base else No. A Pandigital number is that number which contains each digits of its base at least once. For base, 0….9A…Z needs to be considered in the order. Maximum base size would be 36. In case of base 3, digits would be 0, 1, 2. In case of base 12, digits would be 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B.

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

Solving the challenge of Check Pandigital by Base with Power Query

Power Query solution 1 for Check Pandigital by Base, proposed by Bo Rydobon 🇹🇭:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Ans = Table.AddColumn(
    Source, 
    "Ans", 
    each 
      if List.AllTrue(
        List.Transform(
          List.Zip(
            {
              List.Sort(List.Distinct(Text.ToList(Text.From([Number])))), 
              List.Transform({0 .. List.Min({[Base] - 1, 9})}, Text.From)
                & List.Transform({1 .. [Base] - 10}, each Character.FromNumber(_ + 64))
            }
          ), 
          each _{0} = _{1}
        )
      )
      then
        "Yes"
      else
        "No"
  )
in
  Ans
Power Query solution 2 for Check Pandigital by Base, proposed by Zoran Milokanović:
let
  Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
  S = Table.AddColumn(
    Source, 
    "Answer", 
    each 
      let
        n = Text.ToList(Text.From([Number])), 
        d = List.FirstN({"0" .. "9", "A" .. "Z"}, [Base])
      in
        if List.ContainsAll(n, d) and List.ContainsAll(d, n) = true then "Yes" else "No"
  )
in
  S
Power Query solution 3 for Check Pandigital by Base, proposed by Aditya Kumar Darak 🇮🇳:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  Char = {"0" .. "9", "A" .. "Z"}, 
  Return = Table.AddColumn(
    Source, 
    "Return", 
    each [
      Text   = Text.From([Number]), 
      ToList = List.Sort(List.Distinct(Text.ToList(Text))), 
      Base   = List.FirstN(Char, [Base]), 
      Check  = ToList = Base
    ][Check]
  )
in
  Return
Power Query solution 4 for Check Pandigital by Base, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sol = Table.AddColumn(
    Source, 
    "Answer", 
    each 
      let
        a = List.FirstN({"0" .. "9", "A" .. "Z"}, [Base]), 
        b = List.Sort(List.Distinct(Text.ToList(Text.From([Number])))), 
        c = if a = b then "Yes" else "No"
      in
        c
  )[[Answer]]
in
  Sol
Power Query solution 5 for Check Pandigital by Base, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  res = Table.AddColumn(
    Fonte, 
    "Answer", 
    each [
      a = List.Sort(Text.ToList(Text.From([Number]))), 
      b = List.FirstN({"0" .. "9", "A" .. "Z"}, [Base]), 
      c = List.Distinct(a) = b, 
      d = if c = true then "Yes" else "No"
    ][d]
  )
in
  res
Power Query solution 6 for Check Pandigital by Base, proposed by Venkata Rajesh:
let
  Source = Data, 
  Output = Table.AddColumn(
    Source, 
    "Pandigital", 
    each 
      if List.FirstN({"0" .. "9"} & {"A" .. "Z"}, [Base])
        = List.Sort(List.Distinct(Text.ToList([Number])))
      then
        "Yes"
      else
        "No"
  )
in
  Output

Solving the challenge of Check Pandigital by Base with Excel

Excel solution 1 for Check Pandigital by Base, proposed by Bo Rydobon 🇹🇭:
=MAP(A2:A10,B2:B10,LAMBDA(n,b,IF(IFNA(AND(UNIQUE(SORT(MID(n,SEQUENCE(LEN(n)),1)))=BASE(SEQUENCE(b)-1,b)),),"Yes","No")))
Excel solution 2 for Check Pandigital by Base, proposed by Bo Rydobon 🇹🇭:
=MAP(A2:A10,B2:B10,LAMBDA(n,b,IF((ROWS(UNIQUE(MID(n,SEQUENCE(LEN(n)),1)))=b)*COUNT(DECIMAL(n,b)),"Yes","No")))
Excel solution 3 for Check Pandigital by Base, proposed by Rick Rothstein:
=MAP(A2:A10,B2:B10,LAMBDA(a,b,IF(LEN(REDUCE(LEFT("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",b),MID(a,SEQUENCE(LEN(a)),1),LAMBDA(a,x,IF(LEN(a),SUBSTITUTE(a,x,""),"x")))),"No","Yes")))
Excel solution 4 for Check Pandigital by Base, proposed by John V.:
=IF(BYROW(FIND(BASE(COLUMN(A:AJ)-1,36),A2:A10),LAMBDA(x,COUNT(x)))=B2:B10,"Yes","No")
Excel solution 5 for Check Pandigital by Base, proposed by محمد حلمي:
=MAP(A2:A10,B2:B10,LAMBDA(a,b,LET(i,SEQUENCE(b,,0),v,MID(a,SEQUENCE(LEN(a)),1),IF(IF((b<10)*(ROWS(UNIQUE(v))<>b),,AND(IFNA(XMATCH(IF(i>9,i+55,CODE(i)),CODE(v)),))),"Yes","No"))))
Excel solution 6 for Check Pandigital by Base, proposed by محمد حلمي:
=MAP(A2:A10,B2:B10,LAMBDA(x,y,IF(OR(ISERR(FIND(BASE(SEQUENCE(y)-1,y),x)*DECIMAL(x,y))),"No","Yes")))
Excel solution 7 for Check Pandigital by Base, proposed by محمد حلمي:
=MAP(A2:A10,B2:B10,LAMBDA(a,b,IF(SUM(CODE(UNIQUE(MID(a,SEQUENCE(LEN(a)),1))),-CODE(BASE(
SEQUENCE(b)-1,b))),"No","Yes")))
Excel solution 8 for Check Pandigital by Base, proposed by Julian Poeltl:
=MAP(A2:A10,B2:B10,LAMBDA(N,B,IF(CONCAT(SORT(UNIQUE(MID(N,SEQUENCE(LEN(N)),1))))=CONCAT(TAKE(CHAR(VSTACK(SEQUENCE(10,,48),SEQUENCE(26,,65))),B)),"Yes","No")))
Excel solution 9 for Check Pandigital by Base, proposed by Aditya Kumar Darak 🇮🇳:
=MAP(
 A2:A10,
 B2:B10,
 LAMBDA(a, b,
 AND(
 ISNUMBER(
 FIND(TAKE(VSTACK(SEQUENCE(10, , 0), CHAR(SEQUENCE(26, , 65))), b), a)
 )
 )
 )
)
Excel solution 10 for Check Pandigital by Base, proposed by Timothée BLIOT:
=IF(MAP(A2:A10,B2:B10,LAMBDA(v,w,LET(A,VSTACK(SEQUENCE(10,,0),CHAR(SEQUENCE(26,,65))),SUM(MAP(TAKE(A,w),LAMBDA(x,--ISNUMBER(FIND(x,v)))))=w* IF(w<36,SUM(MAP(DROP(A,w),LAMBDA(x,--ISNUMBER(FIND(x,v)))))=0,1)))),"Yes","No")
Excel solution 11 for Check Pandigital by Base, proposed by Hussein SATOUR:
=MAP(A2:A10,B2:B10, LAMBDA(x,y,LET(
a, MID(x,SEQUENCE(LEN(x)),1),
b, TAKE(BASE(SEQUENCE(36,,0),36),y),
IFS(ISERROR(SUM(XMATCH(a,b))), "No", COUNTA(UNIQUE(a))=y, "Yes", 1, "No"))))
Excel solution 12 for Check Pandigital by Base, proposed by Sunny Baggu:
=MAP(
 A2:A10,
 B2:B10,
 LAMBDA(a, b,
 LET(
 _var, VSTACK(TEXT(SEQUENCE(10, , 0), "0"), CHAR(SEQUENCE(26, , 65))),
 _tbase, TAKE(_var, b),
 _m, SORT(UNIQUE(MID(a, SEQUENCE(LEN(a)), 1))),
 IFNA(IF(AND(_tbase = _m), "Yes"), "No")
 )
 )
)
Excel solution 13 for Check Pandigital by Base, proposed by Charles Roldan:
=LET(s, LAMBDA(x,y, SEQUENCE(x, , CODE(y))), 
c, CHAR(VSTACK(s(10, "0"), s(26, "A"))), w, CONCAT(c), 
f, LAMBDA(x, (ISNUMBER(FIND(c, x)))), 
g, LAMBDA(a,b, AND(f(a) = f(LEFT(w, b)))), 
IF(MAP(A2:A10, B2:B10, g), "Yes", "No"))
Excel solution 14 for Check Pandigital by Base, proposed by JvdV -:
=MAP(A2:A10,B2:B10,LAMBDA(x,y,IF(OR(ISERR(FIND(BASE(SEQUENCE(y)-1,y),x))),"No","Yes")))
Excel solution 15 for Check Pandigital by Base, proposed by Julien Lacaze:
=LET(data,A2:A10,bases,B2:B10,
_b36,VSTACK(SEQUENCE(10,,0),CHAR(SEQUENCE(26,,65))),
getBase,LAMBDA(b,CONCAT(TAKE(_b36,b))),
MAP(data,bases,
LAMBDA(d,b,IF(
CONCAT(SORT(UNIQUE(MID(d,SEQUENCE(LEN(d)),1),0),,,0))=
getBase(b),"Yes","No"))))

First, create a BASE 36 Array, and a lambda to extract base n from it.
Then, split the datas in cells (MID+SEQUENCE), 
Remove duplicates (UNIQUE),
Sort them Ascending (SORT)
Excel solution 16 for Check Pandigital by Base, proposed by Nicolas Micot:
=LET(_digits;SI(B2<=11;SEQUENCE(MIN(10;B2-1);;0);ASSEMB.V(SEQUENCE(MIN(10;B2-1);;0);CAR(SEQUENCE(B2-11;;65))));SI(LIGNES(_digits)=LIGNES(FILTRE(_digits;SIERREUR(CHERCHE(_digits;A2);0)>0));"Yes";"No"))
Excel solution 17 for Check Pandigital by Base, proposed by Giorgi Goderdzishvili:
=LET(
nmb,A2,
bs,B2,
list,VSTACK(CHAR(47+SEQUENCE(10)),CHAR(64+SEQUENCE(26))),
trgt,TAKE(list,bs),
maping,MAP(trgt,LAMBDA(t,IFERROR(ISNUMBER(FIND(t,nmb)),FALSE))),
IF(SUM(--TRANSPOSE(maping))=bs,"yes","No"))
Excel solution 18 for Check Pandigital by Base, proposed by Quadri Olayinka Atharu:
=MAP(A2:A10,B2:B10,LAMBDA(n,b,LET(c,VSTACK(SEQUENCE(10,,0),CHAR(SEQUENCE(26,,65))),
r,TAKE(c,b),d,N(COUNTA(FIND(r,n))=b)+N(COUNTA(UNIQUE(MID(n,SEQUENCE(LEN(n)),1)))=b),
IF(d=2,"Yes","No"))))
Excel solution 19 for Check Pandigital by Base, proposed by Henriette Hamer:
=MAP(A2:A10;B2:B10;LAMBDA(_data;_base;IF(COUNTA(UNIQUE(MID(_data;SEQUENCE(LEN(_data));1)))=_base;"Yes";"No")))
If number of unique characters equals the base number, it's a pandigital number. 
I like the BASE-function, even if it's not really used here :-)

&&&

Leave a Reply