Generate the first 10 Tech Numbers. A Tech Number is that number which 1. has even number of digits 2. dividing number into two equal halves, adding those two halves and squaring the result gives back the same number. Ex. 2025 – Has even number of digits (4), two equal halves are 20 & 25, sum of these is 45 and square of 45 is 2025.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 494
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of List First 10 Tech Numbers with Power Query
Power Query solution 1 for List First 10 Tech Numbers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
leto y demora un siglo, trataré de completarlo....
let
Source = Table.FromRows(List.Combine(List.Transform({0..3}, each List.Transform({Number.Power(10,_)..Number.Power(10,_+1)-1}, (x)=> {x}&{{Number.Power(10,_)..Number.Power(10,_+1)-1}} ))),{"A","B"}),
Expand = Table.ExpandListColumn(Source, "B"),
Sol = Table.SelectRows(Table.AddColumn(Expand, "Answer", each Number.Power([A]+[B],2)), each [Answer]=Number.From(Text.From([A])&Text.From([B])))[[Answer]]
in
Sol
Power Query solution 2 for List First 10 Tech Numbers, proposed by Abdallah Ally:
let
Squares = List.Transform({4 .. 10000}, each Number.Power(_, 2)),
size = 10,
is_tech_number = (x) =>
let
a = Text.From(x),
b = Text.Length(a),
c =
if Number.IsOdd(b) then
false
else
Number.Power(Number.From(Text.Start(a, b / 2)) + Number.From(Text.End(a, b / 2)), 2) = x
in
c,
Result = List.FirstN(List.Select(Squares, each is_tech_number(_)), size)
in
Result
Solving the challenge of List First 10 Tech Numbers with Excel
Excel solution 1 for List First 10 Tech Numbers, proposed by Bo Rydobon 🇹🇭:
=TOCOL(LET(n,
SEQUENCE(
20^3
),
s,
n^2,
l,
LEN(
s
),
s/ISEVEN(
l
)/(n=LEFT(
s,
l/2
)+RIGHT(
s,
l/2
))),
3)
Excel solution 2 for List First 10 Tech Numbers, proposed by John V.:
=LET(s,ROW(4:7777)^2,i,LEN(s)/2,FILTER(s,((LEFT(s,i)+RIGHT(s,i))^2=s)*(i=INT(i))))
Excel solution 3 for List First 10 Tech Numbers, proposed by محمد حلمي:
=LET(i,
SEQUENCE(
10000
)^2,
j,
LEN(
i
),
TOCOL(i/(i=ISEVEN(
j
)*(LEFT(
i,
j/2
)+RIGHT(
i,
j/2
))^2),
2))
Excel solution 4 for List First 10 Tech Numbers, proposed by محمد حلمي:
=LET(i,
SEQUENCE(
8000
)^2,
j,
LEN(
i
),
TOCOL(i/(i=ISEVEN(
j
)*(LEFT(
i,
j/2
)+RIGHT(
i,
j/2
))^2),
2))
Excel solution 5 for List First 10 Tech Numbers, proposed by Kris Jaganah:
=TAKE(TOCOL(LET(a,SEQUENCE(10000),b,a^2,c,LEN(b),d,c/2,e,INT(d)=d,f,IF(e,LEFT(b,d)),g,IF(e,RIGHT(b,d)),IFS(f+g=a,b)),3),10)
Excel solution 6 for List First 10 Tech Numbers, proposed by Julian Poeltl:
=LET(
S,
SEQUENCE(
8000
)^2,
E,
ISEVEN(
LEN(
S
)
),
D,
SQRT(
S
)=RIGHT(
S,
LEN(
S
)/2
)+LEFT(
S,
LEN(
S
)/2
),
TAKE(
FILTER(
S,
IFERROR(
E*D,
0
)
),
10
)
)
Excel solution 7 for List First 10 Tech Numbers, proposed by Timothée BLIOT:
=LET(
A,
SEQUENCE(
10^4
)^2,
B,
FILTER(
A,
ISEVEN(
LEN(
A
)
)
),
C,
MAP(
B,
LAMBDA(
x,
--LEFT(
x,
LEN(
x
)/2
)+--RIGHT(
x,
LEN(
x
)/2
)
)
)^2,
TAKE(
FILTER(
C,
C=B
),
10
)
)
Excel solution 8 for List First 10 Tech Numbers, proposed by Sunny Baggu:
=LET(
_s,
SEQUENCE(
7777
),
_c,
ISEVEN(
LEN(
_s ^ 2
)
),
_a,
FILTER(
_s,
_c
),
_b,
_a ^ 2,
_l,
LEN(
_b
),
FILTER(_b,
MAP(_b,
_l,
LAMBDA(x,
y,
(LEFT(
x,
y / 2
) + RIGHT(
x,
y / 2
)) ^ 2 = x)))
)
Excel solution 9 for List First 10 Tech Numbers, proposed by Abdallah Ally:
=LET(s,SEQUENCE(10^4,,4)^2,TAKE(FILTER(s,MAP(s,LAMBDA(x,LET(a, LEN(x)/2,IF(INT(a)<>a,0,(LEFT(x,a)+RIGHT(x,a))^2=x))))),10))
Excel solution 10 for List First 10 Tech Numbers, proposed by Bilal Mahmoud kh.:
=DROP(
REDUCE(
0,
SEQUENCE(
9999
)^2,
LAMBDA(
x,
y,
IF(
ISEVEN(
LEN(
y
)
),
IF(
POWER(
1*LEFT(
y,
LEN(
y
)/2
)+1*RIGHT(
y,
LEN(
y
)/2
),
2
) = y,
VSTACK(
x,
y
),
VSTACK(
x
)
),
VSTACK(
x
)
)
)
),
1
)
Excel solution 11 for List First 10 Tech Numbers, proposed by Bevon Clarke:
=LET(s,
SEQUENCE(
8000
),
even,
ISEVEN(
LEN(
s^2
)
),
f,
FILTER(
s,
even
),
g,
f^2,
l,
LEN(
g
),
FILTER(g,
MAP(g,
l,
LAMBDA(x,
y,
(LEFT(
x,
y/2
)+RIGHT(
x,
y/2
))^2=x))))
Excel solution 12 for List First 10 Tech Numbers, proposed by Ogunronbi Taiwo Fisayo:
=C2:C10),
CHOOSECOLS(HSTACK(C2:C10,
(a+b)^2=C2:C10),
2)=TRUE),
,
1))
Solving the challenge of List First 10 Tech Numbers with Python
Python solution 1 for List First 10 Tech Numbers, proposed by Konrad Gryczan, PhD:
import pandas as pd
import math
path = "494 Tech Numbers.xlsx"
test = pd.read_excel(path).values.flatten().tolist()
def generate_sequence(n):
sequence = []
i = 1
while len(sequence) < n:
if math.sqrt(i) == int(math.sqrt(i)):
if len(str(i)) % 2 == 0:
half = len(str(i)) // 2
first_half = str(i)[:half]
second_half = str(i)[half:]
if int(first_half) + int(second_half) == math.sqrt(i):
sequence.append(i)
i += 1
return sequence
result = generate_sequence(10)
print(result == test) # True
Solving the challenge of List First 10 Tech Numbers with Python in Excel
Python in Excel solution 1 for List First 10 Tech Numbers, proposed by Owen Price:
https://www.linkedin.com/posts/owenhprice_pythoninexcel-data-analytics-activity-7216153533417472000-hFyT
Solving the challenge of List First 10 Tech Numbers with R
R solution 1 for List First 10 Tech Numbers, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Excel/494 Tech Numbers.xlsx"
test = read_excel(path)
is_perfect_square = function(x) {
sqrt_x = sqrt(x)
return(sqrt_x == floor(sqrt_x))
}
has_even_number_of_digits = function(x) {
return(nchar(x) %% 2 == 0)
}
table = tibble(x = 1:1e8) %>%
mutate(x = as.numeric(x)) %>%
filter(is_perfect_square(x)) %>%
filter(has_even_number_of_digits(x)) %>%
mutate(first_half = substr(x, 1, nchar(x) / 2),
second_half = substr(x, nchar(x) / 2 + 1, nchar(x))) %>%
filter((as.numeric(second_half) + as.numeric(first_half))**2 == x) %>%
head(10) %>%
select(x)
identical(table$x, test$`Answer Expected`)
# [1] TRUE
Solving the challenge of List First 10 Tech Numbers with SQL
SQL solution 1 for List First 10 Tech Numbers, proposed by Imam Hambali:
with numbers AS
(
select POW(generate_series(1, 10000),2) as num
)
select num
from numbers
and num = POW(LEFT(num::TEXT, LENGTH(num::text)/2::INT)::INT +
RIGHT(num::TEXT, LENGTH(num::text)/2::INT)::INT,2)
limit 10;
&&&
