Find first 25 numbers starting with two digits where sum of individual digits of (Number = Square of Number = Cube of Number) Ex. 468 Sum of digits of Number = 4+6+8 = 18 Sum of digits of square of Number = 468^2 = 219024 =2+1+9+0+2+4 = 18 Sum of digits of cube of Number = 468^3 = 102503232 = 1+0+2+5+0+3+2+3+2 = 18
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 519
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Matching Digit Sums with Power Query
Power Query solution 1 for Matching Digit Sums, proposed by Kris Jaganah:
let
q = Table.FromColumns(
{
List.FirstN(
List.RemoveNulls(
List.Transform(
{10 .. 3000000},
(x) =>
let
a = List.Sum(List.Transform(Text.ToList(Text.From(x)), Number.From)),
b = List.Sum(
List.Transform(Text.ToList(Text.From(Number.Power(x, 2))), Number.From)
),
c = List.Sum(
List.Transform(Text.ToList(Text.From(Number.Power(x, 3))), Number.From)
),
d = if a = b and b = c and a = c then x else null
in
d
)
),
25
)
},
{"Answer Expected"}
)
in
q
Power Query solution 2 for Matching Digit Sums, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = List.RemoveFirstN(
List.Generate(
() => [x = 9, y = 0],
each [y] <= 25,
each [
x = [x] + 1,
t = List.Transform(
{x, Number.Power(x, 2), Number.Power(x, 3)},
each List.Sum(List.Transform(Text.ToList(Text.From(_)), Number.From))
),
u = t{0} = t{1} and t{1} = t{2},
y = if u then [y] + 1 else [y]
],
each Record.ToList([[x], [u]])
)
),
Sol = List.Transform(List.Select(Source, each _{1} = true), each _{0})
in
Sol
Power Query solution 3 for Matching Digit Sums, proposed by Ramiro Ayala Chávez:
let
A = Table.FromColumns({{10 .. 3000000}}, {"N"}),
Fx = (x) =>
let
L = List.Transform,
a = x,
G = List.Generate(
() => [i = 1],
each [i] < 4,
each [i = [i] + 1],
each
let
b = L({Number.Power(a, [i])}, each Text.ToList(Text.From(_))),
c = L(L(b, each L(_, Number.From)), List.Sum)
in
c
),
d = List.Combine(G),
e = if d{0} = d{1} and d{0} = d{2} then a else null
in
e,
B = Table.AddColumn(A, "Answer Expected", each Fx([N])),
Sol = Table.FirstN(Table.SelectRows(B, each [Answer Expected] <> null)[[Answer Expected]], 25)
in
Sol
Solving the challenge of Matching Digit Sums with Excel
Excel solution 1 for Matching Digit Sums, proposed by Bo Rydobon 🇹🇭:
=LET(s,SEQUENCE(5^7)+9,SORT(UNIQUE(TOCOL(FILTER(s,TOCOL(MAP(s,LAMBDA(n,LET(p,n^{1,2,3},IF(STDEV(p-INT(p/9)*9)=0,STDEV(BYCOL(--(0&MID(p,SEQUENCE(15),1)),SUM))=0))))))*10^{0,1,2}))))
Excel solution 2 for Matching Digit Sums, proposed by John V.:
=LET(s,9+SEQUENCE(9^5),TAKE(UNIQUE(SORT(TOCOL(s*10^{0,1,2}/MAP(s,LAMBDA(x,STDEV(BYCOL(--(0&MID(x^{1,2,3},ROW(1:15),1)),SUM))=0))))),25))
Excel solution 3 for Matching Digit Sums, proposed by محمد حلمي:
=SORT(UNIQUE(TOCOL(MAP(SEQUENCE(60000)+9,LAMBDA(n,
LET(r,LAMBDA(e,SUM(-MID(n^e,SEQUENCE(LEN(n^e)),1))),
n/AND(r(1)=r(2),r(1)=r(3)))))*10^{0,1,2},2)))
Excel solution 4 for Matching Digit Sums, proposed by Kris Jaganah:
=LET(
a,
SEQUENCE(
9^5,
,
10
),
b,
TOCOL(
a/MAP(
a,
a^2,
a^3,
LAMBDA(
x,
y,
z,
LET(
a,
LAMBDA(
u,
SUM(
--MID(
u,
SEQUENCE(
LEN(
u
)
),
1
)
)
),
AND(
a(
x
)=a(
y
),
a(
y
)=a(
z
),
a(
x
)=a(
z
)
)
)
)
),
3
),
c,
TAKE(
b,
-7
),
TAKE(
VSTACK(
b,
c*10,
c*100
),
25
)
)
Excel solution 5 for Matching Digit Sums, proposed by Julian Poeltl:
=LET(SD,LAMBDA(A,ROWS(UNIQUE(MAP(A^SEQUENCE(3),LAMBDA(A,SUM(--(MID(A,SEQUENCE(LEN(A)),1)))))))=1),TAKE(TOCOL(MAP(SEQUENCE(10^6,,2),LAMBDA(A,IF(SD(A),A,E))),3),25))
Excel solution 6 for Matching Digit Sums, proposed by Timothée BLIOT:
=LET(S,SEQUENCE(10^5,6)+1,F,LAMBDA(n,MAP(SUBSTITUTE(n,"0",""),LAMBDA(x,SUM(--MID(x,SEQUENCE(LEN(x)),1))))), TAKE(TOCOL(IF(F(IF(F(S^2)=F(S),S,0)^3)=F(S),S,1/0),3),25))
Excel solution 7 for Matching Digit Sums, proposed by Oscar Mendez Roca Farell:
=LET(s,
SEQUENCE(
9^5,
,
10
),
t,
TOCOL(s/MAP(s,
LAMBDA(a,
LET(n,
--(0&MID(
a^{1; 2; 3},
SEQUENCE(
,
20
),
1
)),
m,
MMULT(
n,
SEQUENCE(
20
)^0
),
AND(
m=AVERAGE(
m
)
)))),
3),
TAKE(
VSTACK(
t,
TOCOL(
TAKE(
t,
-7
)*10^{1,
2},
,
1
)
),
25
))
Excel solution 8 for Matching Digit Sums, proposed by Sunny Baggu:
=LET(
a,
SEQUENCE(
A26 / 20,
20,
10
),
b,
a ^ 2,
c,
a ^ 3,
l,
LAMBDA(
n,
SUM(
--MID(
n,
SEQUENCE(
LEN(
n
)
),
1
)
)
),
TAKE(
TOCOL(
IF(
MAP(
a,
b,
c,
LAMBDA(
x,
y,
z,
AND(
l(
x
) = l(
y
),
l(
y
) = l(
z
)
)
)
),
a,
NA()
),
3
),
25
)
)
Excel solution 9 for Matching Digit Sums, proposed by Anshu Bantra:
=1):
str_lst = [_ for _ in str(
num**pow
)]
return sum(
[int(
_
) for _ in str_lst]
)
num = 10
lst = []
while len(
lst
)<25:
if sum_lst(
num
)==sum_lst(
num,
2
)==sum_lst(
num,
3
): lst.append(
num
)
Excel solution 10 for Matching Digit Sums, proposed by Jaroslaw Kujawa:
=LET(x;
MAP(LAMBDA(
a;
LET(
b;
VSTACK(
a;
a^2;
a^3
);
b
)
)(SEQUENCE(
;
1000000
));
LAMBDA(
b;
SUM(
--MID(
b;
SEQUENCE(
LEN(
b
)
);
1
)
)
));
TAKE(TAKE(FILTER(VSTACK(
SEQUENCE(
;
1000000
);
x
);
(TAKE(
x;
-1
)=TAKE(
TAKE(
x;
-2
);
1
))*(TAKE(
x;
1
)=TAKE(
TAKE(
x;
-2
);
1
)));
1);
;
25))
Excel solution 11 for Matching Digit Sums, proposed by Bilal Mahmoud kh.:
=LET(ch,LAMBDA(m,SUM(--MID(m,SEQUENCE(LEN(m)),1))),res,REDUCE(10,SEQUENCE(10),LAMBDA(x,y,VSTACK(x,LET(re,MAP(SEQUENCE(500000,,MAX(x)+1),LAMBDA(in,IF(ch(in)=ch(in^2),IF(ch(in^2)=ch(in^3),in,0),0))),FILTER(re,re<>0,0))))),FILTER(res,res<>0))
Excel solution 12 for Matching Digit Sums, proposed by Eddy Wijaya:
=LET(
d,
SEQUENCE(
10^6,
,
10
),
sum_digits_power,
LAMBDA(
arr,
power,
MAP(
arr,
LAMBDA(
x,
SUM(
VALUE(
MID(
x^power,
SEQUENCE(
LEN(
x^power
)
),
1
)
)
)
)
)
),
a,
sum_digits_power(
d,
1
),
b,
sum_digits_power(
d,
2
),
c,
sum_digits_power(
d,
3
),
newDb,
HSTACK(
a,
b,
c
),
TAKE(TOCOL(IF( (a=b) * (b=c),
d,
x),
2),
25))
Excel solution 13 for Matching Digit Sums, proposed by Safa Macit:
=
LET(
a,
SEQUENCE(
600000,
1
),
b,
FILTER(a,
(LEN(
a
)>1)),
c,
BYROW(
NUMBERVALUE(
MID(
b,
MAKEARRAY(
1,
20,
LAMBDA(
a,
b,
a+b-1
)
),
1
)
),
LAMBDA(
a,
SUM(
a
)
)
),
d,
b^2,
e,
b^3,
f,
BYROW(
NUMBERVALUE(
MID(
d,
MAKEARRAY(
1,
20,
LAMBDA(
a,
b,
a+b-1
)
),
1
)
),
LAMBDA(
a,
SUM(
a
)
)
),
g,
BYROW(
NUMBERVALUE(
MID(
e,
MAKEARRAY(
1,
20,
LAMBDA(
a,
b,
a+b-1
)
),
1
)
),
LAMBDA(
a,
SUM(
a
)
)
),
FILTER(b,
(c=f)*(f=g))
)
Solving the challenge of Matching Digit Sums with Python
Python solution 1 for Matching Digit Sums, proposed by Konrad Gryczan, PhD:
Faster than R but still not satisfying me with speed. :D
import pandas as pd
path = "519 Sum of Digits of Number, Square and Cube are Same.xlsx"
test = pd.read_excel(path, usecols= "A")
def digit_sum(x):
return sum([int(d) for d in str(x)])
x = 9
results = []
while len(results) < 25:
n = digit_sum(x)
s = digit_sum(x**2)
c = digit_sum(x**3)
if n == s and n == c:
results.append({'x': x, 'n': n, 's': s, 'c': c})
x += 1
results = pd.DataFrame(results)['x']
print(results.equals(test['Answer Expected'])) # True
Solving the challenge of Matching Digit Sums with R
R solution 1 for Matching Digit Sums, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
library(gmp)
path = "Excel/519 Sum of Digits of Number, Square and Cube are Same.xlsx"
test = read_excel(path, range = "A1:A26")
digit_sum <- function(x) {
sum(as.integer(unlist(strsplit(as.character(x), ""))))
}
x <- 9
results <- tibble(x = numeric(), n= numeric(), s= numeric(), c= numeric())
while (nrow(results) < 25) {
n <- digit_sum(x)
s <- digit_sum(as.bigz(x)^2)
c <- digit_sum(as.bigz(x)^3)
if (n == s && n == c) {
results <- results %>% add_row(x = x, n = n, s = s, c = c)
}
x <- x + 1
}
identical(results$x, test$`Answer Expected`)
#> [1] TRUE
&&&
