Square the individual digits of a number and sum them. Keep repeating this step again till the number reduces to a single digit. Work out the final single digit and number of iterations taken. Ex. 94 Iteration 1 = 9^2+4^2 = 97 Iteration 2 = 9^2+7^2 = 130 Iteration 3 = 1^2+3^2+0^2 = 10 Iteration 4 = 1^2+0^2 = 1 Hence answer is Final single digit = 1 and Number of iterations = 4
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 412
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Square Digits Until Single Number with Power Query
Power Query solution 1 for Square Digits Until Single Number, proposed by John V.:
let
S = Excel.CurrentWorkbook(){0}[Content],
N = Number.From,
R = Table.AddColumn(S, "R", each
let
r = (n, i) => let s = List.Sum(List.Transform(Text.ToList(Text.From(n)), each N(_) * N(_))) in if s < 10 then {s, i} else @r(s, 1 + i)
in
Table.FromRows({r([Number], 1)}, {"Final Single Digit", "Number of Iterations"})
)[R]
in
Table.Combine(R)
Blessings!
Power Query solution 2 for Square Digits Until Single Number, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content][Number],
R = each
let
d = List.Sum(
List.Transform(
Text.ToList(Text.From(_{0})),
each
let
n = Number.From(_)
in
n * n
)
),
c = {d, _{1} + 1}
in
{@R(c), c}{Number.From(d < 10)},
S = Table.FromRows(
List.Transform(Source, each {_} & R({_, 0})),
{"Number", "Final Single Digit", "Number of Iterations"}
)
in
S
Power Query solution 3 for Square Digits Until Single Number, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.Combine(
Table.AddColumn(
Source,
"A",
each
let
a = [Number],
b = (x, y) =>
let
c = Text.From(x),
d = List.Transform(Text.ToList(c), Number.From),
e = List.Sum(List.Transform(d, each Number.Power(_, 2)))
in
if e < 10 then {e, y} else @b(e, y + 1),
f = b(a, 1)
in
Table.FromRows({f}, {"Final Single Digit", "Number of Iterations"})
)[A]
)
in
Sol
Power Query solution 4 for Square Digits Until Single Number, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
loop = (n, i) =>
[
a = List.Sum(
List.Transform(Text.ToList(Text.From(n)), (x) => Number.Power(Number.From(x), 2))
),
b = if a < 10 then {a, i} else @loop(a, 1 + i)
][b],
tab = Table.AddColumn(
Fonte,
"Personalizar",
each Table.FromRows({loop([Number], 1)}, {"Final", "N Iteração"})
),
res = Table.ExpandTableColumn(tab, "Personalizar", Table.ColumnNames(tab[Personalizar]{0}))
in
res
Power Query solution 5 for Square Digits Until Single Number, proposed by Alexis Olson:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
f = (x) =>
List.Sum(
List.Transform(
Text.ToList(Text.From(x)),
each let n = Number.FromText(_) in n * n
)
),
iter = (n) => if f(n) <= 9 then f(n) else @iterate(f(n)),
AddCol = Table.AddColumn(Source, "Final Digit", each iter([Number]))
in
AddCol
With Column C:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
f = (x) => List.Sum(List.Transform(Text.ToList(Text.From(x)), each let n = Number.FromText(_) in n * n )),
iterate = (L as list) => if f(L{0}) <= 9 then {f(L{0}), L{1}} else @iterate({f(L{0}), L{1} + 1}),
AddCol = Table.AddColumn(Source, "iterate", each Record.FromList(iterate({[Number], 1}), {"D", "i"})),
Expand = Table.ExpandRecordColumn(AddCol, "iterate", {"D", "i"}, {"Final Single Digit", "Number of Iterations"})
in
Expand
Power Query solution 6 for Square Digits Until Single Number, proposed by Ramiro Ayala Chávez:
let
S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Fx = (x) =>
let
M = x,
N = if M < 10 then M * 10 else M,
G = List.Generate(
() => [i = 0, m = N],
each [m] >= 10,
each [
i = [i] + 1,
m =
let
a = Text.ToList(Text.From([m])),
b = List.Transform(a, Number.From),
c = List.Transform({0 .. List.Count(b) - 1}, each Number.Power(b{_}, 2)),
d = List.Sum(c)
in
d
]
),
e = List.Last(List.Transform(G, each Record.ToList(_))),
f = e{0} + 1,
g = Text.ToList(Text.From(e{1})),
h = List.Transform(g, Number.From),
i = List.Sum(List.Transform({0, 1}, each Number.Power(h{_}, 2))),
j = {i} & {f}
in
j,
k = Table.AddColumn(S, "Final Single Digit", each Fx([Number]){0}),
Sol = Table.AddColumn(k, "Number of Iterations", each Fx([Number]){1})
in
Sol
Power Query solution 7 for Square Digits Until Single Number, proposed by Rafael González B.:
let
Source = Excel.CurrentWorkbook(){0}[Content],
NP = Number.Power, LG = List.Generate, LL = List.Last,
PreAnw = Table.AddColumn(Source, "Lists", each
let
num = [Number],
FxNP = (x) =>
let
o = Text.From(x),
p = Text.ToList(o),
q = List.Transform(p, each NP(Number.From(_),2)),
r = List.Sum(q)
in
r,
FxSN = (y) =>
let
num2 = y,
b = LL( LG(
() => [i2 = 0, N1 = num2],
each [N1] < 100,
each [
i2 = [i2] + 1,
N1 = NP([N1],2)
]))
in
b,
NF = if num <= 9 then FxSN(num) else num,
Cicle = LG(
() => [i = if NF is number then 0 else NF[i2], N = if NF is number then num else NF[N1]],
each [N] >= 10,
each [
i = [i] + 1,
N = FxNP([N])]),
R = LL(Cicle),
a = {FxNP(R[N]), R[i] + 1}
in
a)[Lists]
in
Table.FromRows(PreAnw, {"Final Single Digit", "Number of Iterations"})
🧙♂️
Power Query solution 8 for Square Digits Until Single Number, proposed by Mihai Radu O:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
sol = Table.Combine(
Table.AddColumn(
Source,
"sol",
each
let
s = [Number],
fct = (z) =>
Text.From(
List.Sum(List.Transform(Text.ToList(z), (x) => (Number.Power(Number.From(x), 2))))
),
b = List.Generate(
() => [x = fct(s)],
each Number.From([x]) >= 10,
each [x = fct([x])],
each [x]
),
c =
if Number.From(fct(s)) < 10 then
{{Number.From(fct(s))}, {1}}
else
{{Number.From(fct(List.Last(b)))}, {List.Count(b) + 1}}
in
Table.FromColumns(c, {"Final Single Digit", "Number of iterations"})
)[sol]
)
in
sol
Power Query solution 9 for Square Digits Until Single Number, proposed by Glyn Willis:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source, {{"Number", Int64.Type}}),
#"Added Custom" = Table.AddColumn(
#"Changed Type",
"c",
each List.Last(
List.Generate(
() => [
Final Single Digit = List.Sum(
List.Transform(Text.ToList(Text.From([Number])), (x) => Number.Power(Int64.From(x), 2))
),
c = Text.Length(Text.From(#"Final Single Digit")),
Number of Iterations = 1,
s = false
],
each not [s],
each [
Final Single Digit = List.Sum(
List.Transform(
Text.ToList(Text.From([#"Final Single Digit"])),
(x) => Number.Power(Int64.From(x), 2)
)
),
c = Text.Length(Text.From(#"Final Single Digit")),
Number of Iterations = [Number of Iterations] + 1,
s = [c] = 1
],
each Record.SelectFields(_, {"Final Single Digit", "Number of Iterations"})
)
)
),
#"Expanded c" = Table.ExpandRecordColumn(
#"Added Custom",
"c",
{"Final Single Digit", "Number of Iterations"},
{"Final Single Digit", "Number of Iterations"}
)
in
#"Expanded c"
Solving the challenge of Square Digits Until Single Number with Excel
Excel solution 1 for Square Digits Until Single Number, proposed by Bo Rydobon 🇹🇭:
=REDUCE(
B2:C2,
A3:A11,
LAMBDA(
a,
v,
LET(
r,
LAMBDA(
r,
n,
i,
LET(
b,
SUM(
MID(
n,
SEQUENCE(
LEN(
n
)
),
1
)^2
),
IF(
b<10,
HSTACK(
b,
i
),
r(
r,
b,
i+1
)
)
)
),
VSTACK(
a,
r(
r,
v,
1
)
)
)
)
)
Excel solution 2 for Square Digits Until Single Number, proposed by Bo Rydobon 🇹🇭:
=REDUCE(
B2:C2,
A3:A11,
LAMBDA(
c,
v,
VSTACK(
c,
REDUCE(
v,
SEQUENCE(
20
),
LAMBDA(
a,
n,
LET(
b,
SUM(
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
)^2
),
IF(
b<10,
HSTACK(
b,
n
),
IF(
COUNT(
a
)>1,
a,
b
)
)
)
)
)
)
)
)
Excel solution 3 for Square Digits Until Single Number, proposed by Rick Rothstein:
=TEXTSPLIT(
TEXTJOIN(
"|",
,
MAP(
A3:A11,
LAMBDA(
x,
LET(
s,
SEQUENCE(
25
),
n,
SCAN(
x,
s,
LAMBDA(
a,
x,
SUM(
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
)^2
)
)
),
TAKE(
FILTER(
n&" "&s,
LEN(
n
)=1
),
1
)
)
)
)
),
" ",
"|"
)
Excel solution 4 for Square Digits Until Single Number, proposed by John V.:
=LET(r,LAMBDA(r,n,i,LET(s,SUM((0&MID(n,ROW(1:9),1))^2),IF(s<10,HSTACK(s,i),r(r,s,1+i)))),REDUCE(B2:C2,A3:A11,LAMBDA(a,v,VSTACK(a,r(r,v,1)))))
Or, with Bo Rydobon 🇹🇭 idea...
✅=LET(r,LAMBDA(r,n,i,LET(s,SUM((0&MID(n,ROW(1:9),1))^2),IF(s<10,s&i,r(r,s,1+i)))),--MID(MAP(A3:A11,LAMBDA(x,r(r,x,1))),{1,2},{1,4}))
Excel solution 5 for Square Digits Until Single Number, proposed by محمد حلمي:
=LET(
r,
LAMBDA(
r,
a,
[v],
IF(
a<6,
HSTACK(
a,
v
),
r(
r,
SUM(
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
)^2
),
v+1
)
)
),
REDUCE(
B2:C2,
A3:A11,
LAMBDA(
a,
d,
VSTACK(
a,
r(
r,
d
)
)
)
)
)
Excel solution 6 for Square Digits Until Single Number, proposed by محمد حلمي:
=LET(
r,
LAMBDA(
r,
a,
[v],
IF(
a<6,
HSTACK(
a,
v
),
r(
r,
SUM(
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
)^2
),
v+1
)
)
),
r(
r,
A3
)
)
Excel solution 7 for Square Digits Until Single Number, proposed by Kris Jaganah:
=REDUCE(
{"Final Single Digit",
"Number of Iterations"},
A3:A11,
LAMBDA(
v,
w,
VSTACK(
v,
LET(
a,
SEQUENCE(
20
),
b,
SCAN(
w,
a,
LAMBDA(
x,
y,
SUM(
MID(
x,
SEQUENCE(
,
LEN(
x
)
),
1
)^2
)
)
),
TAKE(
FILTER(
HSTACK(
b,
a
),
LEN(
b
& )=1
),
1
)
)
)
)
)
Excel solution 8 for Square Digits Until Single Number, proposed by Julian Poeltl:
=LET(F,
(SCAN(
A3,
SEQUENCE(
100
),
LAMBDA(
N,
S,
LET(
SS,
SUM(
MID(
N,
SEQUENCE(
1,
LEN(
N
)
),
1
)^2
),
IF(
AND(
N<10,
S>1
),
,
SS
)
)
)
)),
Z,
FILTER(
F,
F>0
),
HSTACK(
TAKE(
Z,
-1
),
COUNT(
Z
)
))
Excel solution 9 for Square Digits Until Single Number, proposed by Julian Poeltl:
=HSTACK(MAP(A3:A11,
LAMBDA(A,
LET(F,
(SCAN(
A,
SEQUENCE(
100
),
LAMBDA(
N,
S,
LET(
SS,
SUM(
MID(
N,
SEQUENCE(
1,
LEN(
N
)
),
1
)^2
),
IF(
AND(
N<10,
S>1
),
,
SS
)
)
)
)),
Z,
FILTER(
F,
F>0
),
TAKE(
Z,
-1
)))),
MAP(A3:A11,
LAMBDA(A,
LET(F,
(SCAN(
A,
SEQUENCE(
100
),
LAMBDA(
N,
S,
LET(
SS,
SUM(
MID(
N,
SEQUENCE(
1,
LEN(
N
)
),
1
)^2
),
IF(
AND(
N<10,
S>1
),
,
SS
)
)
)
)),
Z,
FILTER(
F,
F>0
),
COUNT(
Z
)))))
Excel solution 10 for Square Digits Until Single Number, proposed by Timothée BLIOT:
=REDUCE(
{"Final Single Digit",
"Number of Iterations"},
A3:A11,
LAMBDA(
y,
x,
LET(
A,
SCAN(
x,
ROW(
1:99
),
LAMBDA(
w,
v,
SUM(
MID(
w,
SEQUENCE(
LEN(
w
)
),
1
)^2
)
)
),
B,
XMATCH(
1,
LEN(
A
)
),
VSTACK(
y,
HSTACK(
INDEX(
A,
B
),
B
)
)
)
)
)
Excel solution 11 for Square Digits Until Single Number, proposed by Hussein SATOUR:
=LET(
f,
LAMBDA(
z,
SCAN(
z,
SEQUENCE(
20
)^0,
LAMBDA(
x,
y,
SUMSQ(
--MID(
x*y,
SEQUENCE(
LEN(
x*y
)
),
)
)
)
)
),
HSTACK(
MAP(
A3:A11,
LAMBDA(
w,
INDEX(
f(
w
),
XMATCH(
1,
LEN(
f(
w
)
)
)
)
)
),
MAP(
A3:A11,
LAMBDA(
w,
XMATCH(
1,
LEN(
f(
w
)
)
)
)
)
)
)
Excel solution 12 for Square Digits Until Single Number, proposed by Sunny Baggu:
=DROP(
REDUCE(
"",
A3:A11,
LAMBDA(
x,
y,
VSTACK(
x,
LET(
_s,
SEQUENCE(
20
),
_v,
MAP(
_s,
LAMBDA(
x,
REDUCE(
y,
SEQUENCE(
x
),
LAMBDA(
a,
v,
SUM(
POWER(
--MID(
a,
SEQUENCE(
LEN(
a
)
),
1
),
2
)
)
)
)
)
),
TAKE(
FILTER(
HSTACK(
_v,
_s
),
LEN(
_v
) = 1
),
1
)
)
)
)
),
1
)
Excel solution 13 for Square Digits Until Single Number, proposed by LEONARD OCHEA 🇷🇴:
=LET(
F,
LAMBDA(
F,
x,
y,
LET(
s,
SUM(
MID(
x,
SEQUENCE(
LEN(
x
)
),
1
)^2
),
IF(
s<10,
HSTACK(
s,
y
),
F(
F,
s,
y+1
)
)
)
),
REDUCE(
B2:C2,
A3:A11,
LAMBDA(
a,
b,
VSTACK(
a,
F(
F,
b,
1
)
)
)
)
)
Excel solution 14 for Square Digits Until Single Number, proposed by Abdallah Ally:
=LET(a,
A3:A11,
f,
LAMBDA(f,
v,
n,
IF((LEN(
v
)=1)*(n>1),
HSTACK(
v,
n-1
),
f(
f,
SUM(
MID(
v,
SEQUENCE(
LEN(
v
)
),
1
)^2
),
n+1
))),
DROP(
REDUCE(
"",
a,
LAMBDA(
x,
y,
VSTACK(
x,
f(
f,
y,
1
)
)
)
),
1
))
Excel solution 15 for Square Digits Until Single Number, proposed by Charles Roldan:
=LET(
M,
LAMBDA(
g,
g(
g
)
),
SSQ,
M(LAMBDA(g,
LAMBDA(x,
IF(LEN(
x
),
LEFT(
x
) ^ 2 + g(
g
)(REPLACE(
x,
1,
1,
)),
)))),
Main,
M(LAMBDA(g,
LAMBDA(x,
[y],
IF((x < 10) * y,
HSTACK(
x,
y
),
g(
g
)(SSQ(
x
),
y + 1))))),
VLoop,
LAMBDA(f,
M(LAMBDA(g,
LAMBDA(x,
IF(COUNTA(
x
) = 1,
f(
x
),
VSTACK(f(
TAKE(
x,
1
)
),
g(
g
)(DROP(
x,
1
)))))))),
VLoop(
Main
)
)(A3:A10)
Excel solution 16 for Square Digits Until Single Number, proposed by JvdV -:
=DROP(
REDUCE(
0,
A2:A11,
LAMBDA(
y,
z,
VSTACK(
y,
LET(
x,
LAMBDA(
f,
s,
n,
LET(
c,
SUM(
MID(
s,
SEQUENCE(
LEN(
s
)
),
1
)^2
),
IF(
c<10,
HSTACK(
c,
n+1
),
f(
f,
c,
n+1
)
)
)
),
x(
x,
z,
)
)
)
)
),
1
)
Excel solution 17 for Square Digits Until Single Number, proposed by Ernesto Vega Castillo:
=DROP(
REDUCE(
0,
A3:A11,
LAMBDA(
a,
v,
LET(
r,
LAMBDA(
r,
n,
i,
LET(
b,
SUMPRODUCT(
POWER(
MID(
n,
ROW(
INDIRECT(
"1:" & LEN(
n
)
)
),
1
),
2
)
),
IF(
b < 10,
HSTACK(
b,
i
),
r(
r,
b,
i + 1
)
)
)
),
VSTACK(
a,
r(
r,
v,
1
)
)
)
)
),
1
)
Solving the challenge of Square Digits Until Single Number with Python
Python solution 1 for Square Digits Until Single Number, proposed by Cristobal Salcedo Beltran:
https://github.com/cristobalsalcedo90/BI_Challenges
code
import pandas as pd
excel_file_path = "/lakehouse/default/Files/Challenge/Excel_Challenge_412 - Square Sum Iterate till a Single Digit .xlsx"
pandas_df = pd.read_excel(excel_file_path, usecols=[0], header=1)
def calculate_final_digit_and_iterations(number):
iterations = 0
number = sum(int(digit) ** 2 for digit in str(number))
if number < 10:
return pd.Series([number, 1])
while number >= 10:
number = sum(int(digit) ** 2 for digit in str(number))
iterations += 1
return pd.Series([number, iterations + 1])
pandas_df[['Final Single Digit', 'Number of Iterations']] = pandas_df.apply(
lambda row: calculate_final_digit_and_iterations(row.iloc[0]), axis=1)
print(pandas_df)
Solving the challenge of Square Digits Until Single Number with Python in Excel
Python in Excel solution 1 for Square Digits Until Single Number, proposed by Abdallah Ally:
import pandas as pd
file_path = 'Excel_Challenge_412 - Square Sum Iterate till a Single Digit .xlsx'
df = pd.read_excel(file_path, usecols='A', skiprows=1)
df_test = pd.read_excel(file_path, usecols='A:C', skiprows=1)
def single_digit(number):
value, n = sum([int(x) ** 2 for x in str(number)]), 1
while len(str(value)) != 1:
value = sum([int(x) ** 2 for x in str(value)])
n += 1
return value, n
df[['Final Single Digit', 'Number of Iterations']] = df['Number'].apply(single_digit).tolist()
print(f'Original results:n{df_test}nnMy Results:n{df}')
Python in Excel solution 2 for Square Digits Until Single Number, proposed by Giorgi& Goderdzishvili:
lst = xl("A2:A11", headers=True).Number.to_list()
fin = [["Final Single Digit","Number of Iterations"]]
for el in lst:
counter = 0
while True:
counter+=1
el = sum([int(i)**2 for i in str(el)])
if len(str(el))==1:
fin.append([el,counter])
break
fin
Solving the challenge of Square Digits Until Single Number with R
R solution 1 for Square Digits Until Single Number, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Excel/412 Square Sum Iterate till a Single Digit .xlsx", range = "A2:A11")
test = read_excel("Excel/412 Square Sum Iterate till a Single Digit .xlsx", range = "B2:C11")
sum_square <- function(x) {
iter <- 0
if (nchar(x) == 1) {
y <- x^2
iter <- iter + 1
} else {
y <- x
}
while (nchar(y) > 1) {
digits <- as.numeric(strsplit(as.character(y), "")[[1]])
y <- sum(digits^2)
iter <- iter + 1
}
return(c(iter, y))
}
result = input %>%
mutate( r = map(Number, sum_square),
FSD = map_dbl(r, 2),
Iterations = map_dbl(r, 1)) %>%
select(-c(r, Number))
&
