List the numbers which are Harshad number (also known as Niven number or Multidigital number). A Harshad number is that number which is divisible by the sum of its digits Example: 1729 is a Harshad number as 1+7+2+9 = 19 and 1729 is divisible by 19 as remainder is 0 when 1729 is divided by 19.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 143
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of List Harshad Numbers with Power Query
Power Query solution 1 for List Harshad Numbers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Calc = Table.FromColumns(
{
Source[Number],
List.Transform(
Source[Number],
each Number.Mod(_, List.Sum(List.Transform(Text.ToList(Text.From(_)), Number.From)))
)
}
),
Sol = Table.SelectRows(Calc, each [Column2] = 0)[Column1]
in
Sol
Power Query solution 2 for List Harshad Numbers, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
tab = Table.AddColumn(
Fonte,
"Personalizar",
each [
a = List.Sum(List.Transform(Text.ToList(Text.From([Number])), each Number.From(_))),
b = Number.From([Number] / a) = Number.From(Int64.From([Number] / a))
][b]
),
res = Table.SelectRows(tab, each ([Personalizar] = true))[[Number]]
in
res
Power Query solution 3 for List Harshad Numbers, proposed by Jaroslaw Kujawa:
let
Source = Excel.CurrentWorkbook(){[Name = "Table16"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source, {{"Number", Int64.Type}}),
#"Added Custom" = Table.AddColumn(
#"Changed Type",
"Custom",
each Number.Mod(
[Number],
List.Sum(List.Transform(Text.ToList(Text.From([Number])), Number.FromText))
)
)
in
Table.SelectRows(#"Added Custom", each ([Custom] = 0))[Number]
Power Query solution 4 for List Harshad Numbers, proposed by Rafael González B.:
let
Source = Excel.CurrentWorkbook(){[Name = "Numbers"]}[Content],
NumberToText = Table.TransformColumnTypes(Source, {{"Number", type text}}),
Operations = Table.AddColumn(
NumberToText,
"CustomList",
each Text.Contains(
Text.From(
Number.From([Number]) / List.Sum(List.Transform(Text.ToList([Number]), each Number.From(_)))
),
","
)
),
Result = Table.TransformColumnTypes(
Table.RemoveColumns(Table.SelectRows(Operations, each ([CustomList] = false)), {"CustomList"}),
{"Number", Int64.Type}
)
in
Result
Power Query solution 5 for List Harshad Numbers, proposed by Victor Momoh (MVP, MOS, R.Eng):
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Result = Table.SelectRows(
Source,
each Number.Mod(
_[Number],
List.Sum(List.Transform(Text.ToList(Text.From(_[Number])), Number.From))
)
= 0
)
in
Result
Power Query solution 6 for List Harshad Numbers, proposed by Udit Chatterjee:
let
Source = #"Challenge-143",
ccHarshadNumCheck = Table.AddColumn(
Source,
"Harshad Number Check",
each Number.Mod(
[Number],
List.Sum(List.Transform(Text.ToList(Number.ToText([Number])), each Number.FromText(_)))
)
= 0,
type logical
),
filteredRows = Table.SelectRows(ccHarshadNumCheck, each ([Harshad Number Check] = true)),
keepRequiredCol = Table.RemoveColumns(filteredRows, {"Harshad Number Check"})
in
keepRequiredCol
Power Query solution 7 for List Harshad Numbers, proposed by Sue Bayes:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Type = Table.TransformColumnTypes(Source, {{"Number", type text}}),
TextToList = Table.AddColumn(Type, "Custom", each Text.ToList([Number])),
Expand = Table.TransformColumnTypes(
Table.ExpandListColumn(TextToList, "Custom"),
{{"Custom", Int64.Type}, {"Number", Int64.Type}}
),
Grp = Table.Group(Expand, {"Number"}, {{"Sum", each List.Sum([Custom]), type nullable number}}),
Divide = Table.TransformColumnTypes(
Table.AddColumn(Grp, "Division", each [Number] / [Sum], type number),
{{"Division", Int64.Type}}
),
Answer = Table.AddColumn(
Divide,
"Answer",
each if [Division] * [Sum] = [Number] then [Number] else null,
type number
)[[Answer]],
Filter = Table.SelectRows(Answer, each ([Answer] <> null))
in
Filter
Solving the challenge of List Harshad Numbers with Excel
Excel solution 1 for List Harshad Numbers, proposed by Rick Rothstein:
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(x,MOD(x,SUM(0+MID(x,SEQUENCE(LEN(x)),1)))))=0)
Excel solution 2 for List Harshad Numbers, proposed by John V.:
=LET(n,A2:A9,s,ROW(1:10),FILTER(n,MOD(n,MMULT(-(0&MID(n,TOROW(s),1)),s^0))=0))
Excel solution 3 for List Harshad Numbers, proposed by محمد حلمي:
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(a,
MOD(a,SUM(-MID(a,SEQUENCE(LEN(a)),1)))=0)))
Excel solution 4 for List Harshad Numbers, proposed by Kris Jaganah:
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(x,MOD(x,SUM(--MID(x,SEQUENCE(LEN(x)),1)))))=0)
Excel solution 5 for List Harshad Numbers, proposed by Julian Poeltl:
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(N,MOD(N,SUM(--MID(N,SEQUENCE(LEN(N)),1)))=0)))
Excel solution 6 for List Harshad Numbers, proposed by Alejandro Campos:
=TOCOL(
MAP(
A2:A9,
LAMBDA(x,
LET(
e, SUM(--MID(x, SEQUENCE(LEN(x)), 1)),
FILTER(x, MOD(x, e) = 0)))),
3)
Excel solution 7 for List Harshad Numbers, proposed by Timothée BLIOT:
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(x,MOD(x,SUM(MID(x,SEQUENCE(LEN(x)),1)*1))=0)))
Excel solution 8 for List Harshad Numbers, proposed by Hussein SATOUR:
=FILTER(A2:A9, MAP(A2:A9, LAMBDA(x, MOD(x, SUM(--MID(x, SEQUENCE(LEN(x)), 1)))=0)))
Excel solution 9 for List Harshad Numbers, proposed by Sunny Baggu:
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(a,
LET(_m,MID(a,SEQUENCE(LEN(a)),1),
_sum,SUM(--_m),
MOD(a,_sum)=0))))
Excel solution 10 for List Harshad Numbers, proposed by Sunny Baggu:
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(a,MOD(a,SUMPRODUCT(--MID(a,SEQUENCE(LEN(a)),1)))=0)))
Excel solution 11 for List Harshad Numbers, proposed by Md. Zohurul Islam:
=LET(z,A2:A9,u,MAP(z,LAMBDA(x,IF(MOD(x,SUM(ABS(MID(x,SEQUENCE(LEN(x)),1))))=0,1,0))),FILTER(z,u>0))
Excel solution 12 for List Harshad Numbers, proposed by Stefan Olsson:
=FILTER(A2:A9, BYROW(A2:A9, LAMBDA(x, 1>MOD(x, SUM(--MID(x, SEQUENCE(LEN(x)),1))))))
Excel solution 13 for List Harshad Numbers, proposed by Victor Momoh (MVP, MOS, R.Eng):
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(x,MOD(x,SUM(--MID(x,SEQUENCE(LEN(x)),1)))))=0)
Excel solution 14 for List Harshad Numbers, proposed by Abhishek Kumar Jain:
=FILTER(A2:A9,MAP(A2:A9,LAMBDA(x,MOD(x,SUM(--MID(x,SEQUENCE(LEN(x)),1)))=0)))
Excel solution 15 for List Harshad Numbers, proposed by Guillermo Arroyo:
=LET(m,A2:A9,FILTER(m,MAP(m,LAMBDA(n,MOD(n,(SUM(--MID(n,SEQUENCE(LEN(n)),1))))=0))))
Excel solution 16 for List Harshad Numbers, proposed by Rayan S.:
=LET(
Sol, MAP(
A2:A9,
LAMBDA(a,
LET(
split, MID(a, SEQUENCE(LEN(a)), 1),
Divide, a / SUM(split + 0),
IF(Divide = ROUND(Divide, 0), a, 0)
)
)
),
FILTER(Sol, Sol > 0)
)
Excel solution 17 for List Harshad Numbers, proposed by Ibrahim Sadiq:
=LET(a,A2:A9,FILTER(a,MOD(a,MMULT(0+(0&MID(a,SEQUENCE(,9),1)),ROW(1:9)^0))=0))
Excel solution 18 for List Harshad Numbers, proposed by Amr Tawfik CMA®,FMVA,Lean Coach:
=FILTER(A2:A9,IF(MOD(A2:A9,MAP(A2:A9,LAMBDA(x,SUM(--MID(x,SEQUENCE(LEN(x),,),1)))))=0,TRUE,FALSE))
Solving the challenge of List Harshad Numbers with Python in Excel
Python in Excel solution 1 for List Harshad Numbers, proposed by Alejandro Campos:
[n for n in xl("A2:A9")[0] if n % sum(map(int, str(n))) == 0]
Solving the challenge of List Harshad Numbers with SQL
SQL solution 1 for List Harshad Numbers, proposed by Zoran Milokanović:
WITH /* Microsoft SQL Server 2019 */
CALC
AS
(
SELECT
D.NUMBER, CAST(D.NUMBER AS BIGINT) AS TEMP, CAST(0 AS BIGINT) AS DIGIT
FROM DATA D
UNION ALL
SELECT
C.NUMBER, CAST(C.TEMP / 10 AS BIGINT) AS TEMP, CAST(C.TEMP % 10 AS BIGINT) AS DIGIT
FROM CALC C
WHERE
C.TEMP > 0
)
SELECT
C.NUMBER AS ANSWER_EXPECTED
FROM CALC C
GROUP BY
C.NUMBER
HAVING
C.NUMBER % SUM(C.DIGIT) = 0
ORDER BY
1
;
&&&
