Tech Number – A number is a tech number if it has even number of digits and square of sum of first half and last half is equal to number itself. Ex. 2025 => It has 4 digits, first half = 20 and last half = 25, 20+25 = 45 and square of 45 is 2025 which is number itself. List the first 10 Tech Numbers.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 669
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of First Ten Tech Numbers with Power Query
_x000D_Power Query solution 1 for First Ten Tech Numbers, proposed by Kris Jaganah:
List.FirstN(
List.RemoveNulls(
List.Transform(
{4 .. 10000},
each [
a = Number.Power(_, 2),
b = Text.From(a),
c = Text.Length(b),
d = Number.IntegerDivide(c / 2, 1),
e = (x) => Number.From(x(b, d)),
f = if Number.IsEven(c) and e(Text.Start) + e(Text.End) = _ then a else null
][f]
)
),
10
)
Power Query solution 2 for First Ten Tech Numbers, proposed by Abdallah Ally:
let
IsTechNumber = (num) =>
[
a = Text.From(num),
b = Text.Length(a),
c = Number.IntegerDivide(b, 2),
d = Number.From,
e = Number.IsEven(b) and Number.Power(d(Text.Start(a, c)) + d(Text.End(a, c)), 2) = num
][e],
Generate = List.RemoveNulls(
List.Generate(
() => [num = 10, cond = IsTechNumber(num), counter = Byte.From(cond)],
each [counter] <= 10,
each [num = [num] + 1, cond = IsTechNumber(num), counter = [counter] + Byte.From(cond)],
each if [cond] then [num] else null
)
),
Result = Table.FromColumns({Generate}, {"Answer Expected"})
in
Result
Power Query solution 3 for First Ten Tech Numbers, proposed by Antriksh Sharma:
let
Source = List.Select(
List.Transform({1 .. 8000}, each Number.Power(_, 2)),
each Number.IsEven(Text.Length(Text.From(_)))
),
Nums = List.Select(
Source,
(n) =>
let
a = Text.From(n),
b = Number.RoundUp(Text.Length(a) / 2),
c = Text.Start(a, b),
d = Text.End(a, b),
e = Number.Power(Expression.Evaluate(c & "+" & d), 2)
in
n = e
),
Ans = Table.FromColumns({Nums}, type table [Answer = Int64.Type])
in
Ans
Power Query solution 4 for First Ten Tech Numbers, proposed by Peter Krkos:
let
F = each [
val = _,
digits = Number.RoundDown(Number.Log10(val)) + 1,
firstHalf = Number.IntegerDivide(val, Number.Power(10, digits / 2)),
secondHalf = Number.Mod(val, Number.Power(10, digits / 2)),
result = Number.Power(firstHalf + secondHalf, 2) = val
][result],
GenNumbers = List.Last(
List.Generate(
() => [x = 3, y = {}],
each List.Count([y]) <= 10,
each [x = [x] + 1, z = Number.Power(x, 2), y = if F(z) then [y] & {z} else [y]],
each [y]
)
)
in
GenNumbers
Solving the challenge of First Ten Tech Numbers with Excel
_x000D_Excel solution 1 for First Ten Tech Numbers, proposed by Bo Rydobon 🇹🇭:
=LET(
n,
SEQUENCE(
7777
)+3,
q,
n^2,
l,
LEN(
q
)/2,
FILTER(
q,
n+MOD(
l,
1
)=LEFT(
q,
l
)+RIGHT(
q,
l
)
)
)
=LET(
n,
SEQUENCE(
7777
),
q,
n^2,
l,
LEN(
q
)/2,
p,
10^l,
FILTER(
q,
n+MOD(
l,
1
)=BYROW(
INT(
MOD(
q/p^{0,
1},
p
)
),
SUM
)
)
)
Excel solution 2 for First Ten Tech Numbers, proposed by Rick Rothstein:
=LET(s,SEQUENCE(7777)^2,n,FILTER(s,1-MOD(LEN(s),2)),h,len(n)/2,x,LEFT(n,h)+RIGHT(n,h),FILTER(n,n=x*x))
Excel solution 3 for First Ten Tech Numbers, proposed by John V.:
=LET(n,ROW(4:7777)^2,i,LEN(n)/2,FILTER(n,(i=INT(i))*((LEFT(n,i)+RIGHT(n,i))^2=n)))
Excel solution 4 for First Ten Tech Numbers, proposed by Kris Jaganah:
=LET(a,SEQUENCE(10000,,4),b,a^2,c,LEN(b),d,c/2,e,LEFT(b,d)+RIGHT(b,d),TAKE(FILTER(b,(a=e)*ISEVEN(c)),10))
Excel solution 5 for First Ten Tech Numbers, proposed by Timothée BLIOT:
=LET(A,SEQUENCE(8000,,4)^2,B,LEN(A),FILTER(A,IF(ISEVEN(B),(--LEFT(A,B/2)+--RIGHT(A,B/2))^2=A,0)))
Excel solution 6 for First Ten Tech Numbers, proposed by Hussein SATOUR:
=LET(a,
SEQUENCE(
10000
),
b,
a^2,
c,
LEN(
b
),
FILTER(b,
(ISEVEN(
c
))*(IFERROR(
LEFT(
b,
c/2
)+RIGHT(
b,
c/2
)=a,
0
))))
Excel solution 7 for First Ten Tech Numbers, proposed by Sunny Baggu:
=LET(
_n, SEQUENCE(7777, , 4) ^ 2,
_c, MAP(
_n,
LAMBDA(a,
ISEVEN(LEN(a)) *
POWER(
LEFT(a, LEN(a) / 2) + RIGHT(a, LEN(a) / 2),
2
) = a
)
),
FILTER(_n, _c)
)
Excel solution 8 for First Ten Tech Numbers, proposed by Anshu Bantra:
= 1, 0
while count < rng:
s_num = str(num)
l_num = len(s_num)
if l_num % 2 == 0:
half = int(l_num/2)
if (int(s_num[:half]) + int(s_num[half:]))**2 == num:
count += 1
yield num
num += 1
lst = [*tech_number(10)
Excel solution 9 for First Ten Tech Numbers, proposed by Md. Zohurul Islam:
=LET(sq,SEQUENCE(9999),
a,POWER(sq,2),
b,MOD(LEN(a),2),
c,FILTER(a,b=0),
d,MAP(c,LAMBDA(x,LET(p,LEN(x)/2,q,LEFT(x,p),r,RIGHT(x,p),s,q+r,IF(s^2=x,1,0)))),
e,FILTER(c,d>0),
e)
Excel solution 10 for First Ten Tech Numbers, proposed by Hamidi Hamid:
=LET(x,SEQUENCE(10000)^2,s,IFERROR(MAP(x,LAMBDA(a,(LEFT(a,LEN(a)/2)
+RIGHT(a,LEN(a)/2))^2=a)),0)*1,t,FILTER(x,s=1),TAKE(FILTER(t,ISEVEN(LEN(t))),10))
Excel solution 11 for First Ten Tech Numbers, proposed by ferhat CK:
=TOCOL(
MAP(
SEQUENCE(
10^4
)^2,
LAMBDA(
x,
LET(
u,
LEN(
x
),
b,
MID(
x,
SEQUENCE(
2,
,
1,
u/2
),
u/2
),
IF(
SUM(
--b
)^2/x=1,
x,
1/0
)
)
)
),
3
)
Excel solution 12 for First Ten Tech Numbers, proposed by Erdit Qendro:
=LET(
n,
SEQUENCE(
99990,
,
1
),
pw,
POWER(
n,
2
),
ft,
FILTER(
HSTACK(
n,
pw
),
MOD(
LEN(
pw
),
2
)=0
),
v,
TAKE(
ft,
,
-1
),
r,
REGEXEXTRACT,
rpat,
"d{"&LEN(
v
)/2&"}",
sm,
r(
v,
"^"&rpat
)+r(
v,
rpat&"$"
),
TAKE(
FILTER(
TAKE(
ft,
,
-1
),
sm=TAKE(
ft,
,
1
)
),
10
)
)
Excel solution 13 for First Ten Tech Numbers, proposed by Ernesto Vega Castillo:
=LET(a,
POWER(
SEQUENCE(
7777
),
2
),
b,
IF(INT(
LEN(
a
)/2
)=LEN(
a
)/2,
SWITCH((LEFT(
a,
LEN(
a
)/2
)+RIGHT(
a,
LEN(
a
)/2
))^2,
a,
1,
0),
0),
FILTER(
a,
b<>0
))
Excel solution 14 for First Ten Tech Numbers, proposed by Josh Brodrick:
=LET(
a,
FILTER(
SEQUENCE(
9000
)^2,
ISEVEN(
LEN(
SEQUENCE(
9000
)^2
)
)
),
b,
MID(
a,
1,
LEN(
a
)/2
)+MID(
a,
LEN(
a
)/2+1,
LEN(
a
)/2
),
FILTER(
a,
SQRT(
a
)=b
)
)
Solving the challenge of First Ten Tech Numbers with Python
_x000D_Python solution 1 for First Ten Tech Numbers, proposed by Alejandro Campos:
In D2
import time
s = time.time()
def is_tech_number(n):
h = len(str(n)) // 2
return (int(str(n)[:h]) + int(str(n)[h:])) ** 2 == n if len(str(n)) % 2 == 0 else False
t, num = [], 1
while len(t) < 10:
if is_tech_number(num): t.append(num)
num += 1
t
In F2
total_time = time.time() - s
Python solution 2 for First Ten Tech Numbers, proposed by Abdallah Ally:
import pandas as pd
from itertools import count, islice
# Create a function to find if a number is tech number
def is_tech_number(number):
str_num = str(number)
str_len = len(str_num)
half_len = str_len // 2
if str_len % 2:
return False
num = int(str_num[ : half_len]) + int(str_num[half_len : ])
return num ** 2 == number
# Perform data manipulation
values = islice(filter(is_tech_number, count(10)), 10)
df = pd.DataFrame({'Answer Expected': values})
df
Solving the challenge of First Ten Tech Numbers with R
_x000D_R solution 1 for First Ten Tech Numbers, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path <- "Excel/669 Tech Numbers.xlsx"
test <- read_excel(path, range = "A1:A11") %>% pull()
is_tech_number <- function(n) {
num_str <- as.character(n)
len <- str_length(num_str)
if (len %% 2 != 0) return(FALSE)
half_len <- len / 2
h1 <- as.integer(substr(num_str, 1, half_len))
h2 <- as.integer(substr(num_str, half_len + 1, len))
(h1 + h2)^2 == n
}
find_tech_numbers <- function(count = 10) {
tech_numbers <- (1:10^4)^2 %>%
keep(~ str_length(.) %% 2 == 0 && is_tech_number(.))
head(tech_numbers, count)
}
result = find_tech_numbers(10)
all.equal(result, test, check.attributes = FALSE)
#> [1] TRUE
