List all Katadrome numbers. Katadrome numbers are those in which digits are in decreasing order. Hence, 431 is a Katadrome number whereas 341, 442 are not.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 344
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of List all Katadrome numbers with Power Query
Power Query solution 1 for List all Katadrome numbers, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
Check = each
if Text.Length(_) = 1 then
true
else
(Text.At(_, 0) > Text.At(_, 1)) and @Check(Text.RemoveRange(_, 0)),
S = Table.SelectRows(Source, each Check(Text.From([Numbers])))
in
S
Power Query solution 2 for List all Katadrome numbers, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content][Numbers],
S = List.Select(
Source,
each
let
t = Text.From(_)
in
List.Accumulate(
{1 .. Text.Length(t) - 1},
true,
(s, c) => s and (Text.At(t, c - 1) > Text.At(t, c))
)
)
in
S
Power Query solution 3 for List all Katadrome numbers, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
S = Table.SelectRows(
Source,
each
let
t = Text.ToList(Text.From([Numbers]))
in
List.Distinct(List.Sort(t, 1)) = t
)
in
S
Power Query solution 4 for List all Katadrome numbers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.SelectRows(
Source,
each
let
a = Text.From([Numbers]),
b = List.Transform({0 .. Text.Length(a) - 1}, each Text.At(a, _) > Text.At(a, _ + 1)),
c = List.AllTrue(List.RemoveLastN(b))
in
c
)
in
Sol
Power Query solution 5 for List all Katadrome numbers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.SelectRows(
Source,
each
let
a = List.Transform(Text.ToList(Text.From([Numbers])), Number.From),
b = List.Accumulate({0 .. List.Count(a) - 1}, {}, (s, c) => s & {a{c} > a{c + 1}?}),
c = List.AllTrue(b)
in
c
)
in
Sol
Power Query solution 6 for List all Katadrome numbers, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.SelectRows(
Source,
each
let
a = Text.From([Numbers]),
b = List.Transform(Text.ToList(a), Number.From),
c = List.Transform({0 .. List.Count(b) - 1}, each b{_} > b{_ + 1}?),
d = List.AllTrue(c)
in
d
)
in
Sol
Power Query solution 7 for List all Katadrome numbers, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
res = Table.SelectRows(
Fonte,
each [a = Text.ToList(Text.From([Numbers])), b = List.Sort(a, 1) = a and List.IsDistinct(a)][b]
)
in
res
Power Query solution 8 for List all Katadrome numbers, proposed by Ramiro Ayala Chávez:
let
Origen = Excel.CurrentWorkbook(){[Name = "Tabla1"]}[Content],
a = Table.AddColumn(Origen, "Answer Expected", each Text.ToList(Text.From([Numbers]))),
b = Table.TransformColumns(
a,
{"Answer Expected", each Number.From(Text.Combine(List.Distinct(List.Sort(_, 1)), ""))}
),
Sol = Table.SelectRows(b, each [Answer Expected] = [Numbers])[[Answer Expected]]
in
Sol
Solving the challenge of List all Katadrome numbers with Excel
Excel solution 1 for List all Katadrome numbers, proposed by Bo Rydobon 🇹🇭:
=TOCOL(
MAP(
A2:A10,
LAMBDA(
n,
LET(
s,
SEQUENCE(
LEN(
n
)-1
),
n/AND(
MID(
n,
s,
1
)>MID(
n,
s+1,
1
)
)
)
)
),
3
)
Excel solution 2 for List all Katadrome numbers, proposed by Rick Rothstein:
=FILTER(A2:A10,MAP(A2:A10,LAMBDA(x,LET(m,MID(x,SEQUENCE(99),1),s,SORT(m,,-1),c,CONCAT(s),(-c=-x)*(c=CONCAT(UNIQUE(s)))))))
Excel solution 3 for List all Katadrome numbers, proposed by John V.:
=TOCOL(MAP(A2:A10,
LAMBDA(x,
x/(x=--CONCAT(
SORT(
UNIQUE(
MID(
x,
ROW(
1:16
),
1
)
),
,
-1
)
)))),
2)
Excel solution 4 for List all Katadrome numbers, proposed by محمد حلمي:
=TOCOL(MAP(A2:A10,
LAMBDA(a,
a/(a=--CONCAT(
SORT(
UNIQUE(
MID(
a,
SEQUENCE(
20
),
1
)
),
,
-1
)
)))),
2)
Excel solution 5 for List all Katadrome numbers, proposed by 🇰🇷 Taeyong Shin:
=FILTER(
A2:A10,
MAP(
A2:A10,
LAMBDA(
m,
LET(
t,
MID(
m,
SEQUENCE(
LEN(
m
)
),
1
),
AND(
DROP(
t,
-1
)>DROP(
t,
1
)
)
)
)
)
)
Excel solution 6 for List all Katadrome numbers, proposed by Kris Jaganah:
=TOCOL(MAP(A2:A10,
LAMBDA(x,
LET(a,
MID(
x,
SEQUENCE(
LEN(
x
)
),
1
),
x/(MAX(
DROP(
a,
1
)-DROP(
a,
-1
)
)<0)))),
3)
Excel solution 7 for List all Katadrome numbers, proposed by Julian Poeltl:
=LET(
A,
A2:A10,
F,
MAP(
A,
LAMBDA(
N,
LET(
SP,
MID(
N,
SEQUENCE(
1,
LEN(
N
)
),
1
),
S,
SUM(
IFERROR(
N(
DROP(
SP,
,
1
)=COUNTA(
SP
)-1
)
)
),
FILTER(
A,
F=TRUE
)
)
Excel solution 8 for List all Katadrome numbers, proposed by Timothée BLIOT:
=FILTER(
A2:A10,
MAP(
A2:A10,
LAMBDA(
z,
LET(
A,
LEN(
z
)-1,
B,
LAMBDA(
n,
--MID(
z,
n,
1
)
),
SUM(
--MAP(
SEQUENCE(
A
),
LAMBDA(
x,
B(
x+1
)
Excel solution 9 for List all Katadrome numbers, proposed by Nikola Z Grujicic - Nikola Ž Grujičić:
=LET(
l,
MAP(
A2:A10,
LAMBDA(
x,
LET(
e,
MID(
x,
SEQUENCE(
LEN(
x
)
),
1
),
f,
SORT(
e,
,
-1
),
a,
TEXTJOIN(
"",
TRUE,
e
),
b,
TEXTJOIN(
"",
TRUE,
f
),
IF(
AND(
COUNTA(
UNIQUE(
f
)
)=COUNTA(
f
),
a=b
),
--a,
""
)
)
)
),
FILTER(
l,
l<>""
)
)
Excel solution 10 for List all Katadrome numbers, proposed by Hussein SATOUR:
=LET(
a,
A2:A10,
FILTER(
a,
a = MAP(
a,
LAMBDA(
x,
--CONCAT(
UNIQUE(
SORT(
--MID(
x,
SEQUENCE(
LEN(
x
)
),
1
),
,
-1
)
)
)
)
)
)
)
Excel solution 11 for List all Katadrome numbers, proposed by Oscar Mendez Roca Farell:
=TOCOL(MAP(A2:A10,
LAMBDA(a,
LET(_m,
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
),
a/AND((DROP(
_m,
-1
)-DROP(
_m,
1
))>0)))),
2)
Excel solution 12 for List all Katadrome numbers, proposed by Sunny Baggu:
=TOCOL(
A2:A10 * 1 /
MAP(
A2:A10,
LAMBDA(
x,
LET(
_m,
MID(
x,
SEQUENCE(
LEN(
x
)
),
1
),
AND(
DROP(
_m,
-1
) > DROP(
_m,
1
)
)
)
)
),
3
)
Excel solution 13 for List all Katadrome numbers, proposed by Sunny Baggu:
=FILTER(
A2:A10,
MAP(
A2:A10,
LAMBDA(
x,
AND(
MID(
x,
SEQUENCE(
LEN(
x
) - 1,
,
1
),
1
) >
MID(
x,
SEQUENCE(
LEN(
x
) - 1,
,
2
),
1
)
)
)
)
)
Excel solution 14 for List all Katadrome numbers, proposed by LEONARD OCHEA 🇷🇴:
=TOCOL(
MAP(
A2:A10,
LAMBDA(
a,
LET(
F,
LAMBDA(
F,
x,
y,
IF(
MID(
x,
y,
1
)>MID(
x,
y+1,
1
),
IF(
y=LEN(
x
)-1,
x,
F(
F,
x,
y+1
)
),
z
)
),
F(
F,
a,
1
)
)
)
),
2
)
Excel solution 15 for& List all Katadrome numbers, proposed by Abdallah Ally:
=FILTER(
A2:A10,
MAP(
A2:A10,
LAMBDA(
x,
LET(
a,
x,
b,
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
),
c,
DROP(
b,
-1
),
d,
DROP(
b,
1
),
AND(
c>d
)
)
)
)
)
Excel solution 16 for List all Katadrome numbers, proposed by Abdallah Ally:
=FILTER(A2:A10,
MAP(A2:A10,
LAMBDA(x,
LET(a,
x,
b,
LEN(
a
),
c,
MID(
a,
SEQUENCE(
b
),
1
),
REDUCE(1,
SEQUENCE(
b-1
),
LAMBDA(x,
y,
x*((CHOOSEROWS(
c,
y
)>CHOOSEROWS(
c,
y+1
)))))))))
Excel solution 17 for List all Katadrome numbers, proposed by 🇵🇪 Ned Navarrete C.:
=TOCOL(MAP(A2:A10,LAMBDA(x,LET(n,MID(x,SEQUENCE(10),1),IF(x=--CONCAT(UNIQUE(SORT(n,,-1))),x,1/0)))),3)
Excel solution 18 for List all Katadrome numbers, proposed by Thang Van:
=LET(
_r,
MAP(
$A$2:$A$10,
LAMBDA(
_each,
LET(
_a,
_each,
_seq,
SEQUENCE(
LEN(
_a
)
),
_array,
MID(
_a,
_seq,
1
),
_array1,
VSTACK(
DROP(
_array,
1
),
0
),
IF(
SUM(
N(
_array>_array1
)
)=LEN(
_a
),
_a,
""
)
)
)
),
FILTER(
_r,
_r<>""
)
)
Excel solution 19 for List all Katadrome numbers, proposed by JvdV -:
=LET(
x,
A2:A10,
TOCOL(
x/SEARCH(
TEXT(
x,
REPT(
"*0",
LEN(
x
)
)
),
9876543210
),
3
)
)
Google Spreadsheets:
=QUERY(
A2:A,
"where A matches '^9?8?7?6?5?4?3?2?1?0?$'"
)
Excel solution 20 for List all Katadrome numbers, proposed by Pieter de Bruijn:
=LET(x,
A2:A10,
b,
MID(
x,
COLUMN(
B:Z
),
1
),
TOCOL(x/(MMULT((MID(
x,
COLUMN(
A:Y
),
1
)>b)+ISERROR(
--b
),
SEQUENCE(
25
)^0)=26),
2))
Excel solution 21 for List all Katadrome numbers, proposed by Mihai Radu O:
=TOCOL(MAP(A2:A10,
LAMBDA(a,
LET(b,
--MID(
a,
SEQUENCE(
LEN(
a
)
),
1
),
FILTER(a,
AND((DROP(
b,
-1
) - DROP(
b,
1
)) > 0))))),
3)
Excel solution 22 for List all Katadrome numbers, proposed by Ziad A.:
=LET(n,A2:A,R,LAMBDA(R,i,IF(MID(n,i+1,1)
Excel solution 23 for List all Katadrome numbers, proposed by Giorgi Goderdzishvili:
=TOCOL(MAP(A2:A10,
LAMBDA(x,
LET(
_nm,
x,
_sq,
1*MID(
_nm,
SEQUENCE(
,
LEN(
_nm
)
),
1
),
_sc,
DROP(
_sq,
,
-1
)>DROP(
_sq,
,
1
),
_nm/((SUM(
--_sc
)+1)=LEN(
_nm
))))),
3)
Excel solution 24 for List all Katadrome numbers, proposed by Edwin Tisnado:
=TOCOL(
MAP(
A2:A10,
LAMBDA(
x,
LET(
a,
MID(
x,
SEQUENCE(
LEN(
x
)
),
1
),
IF(
AND(
a=UNIQUE(
SORT(
a,
,
-1
)
)
),
x,
NA()
)
)
)
),
2
)
Excel solution 25 for List all Katadrome numbers, proposed by Abdelrahman Omer, MBA, PMP:
=FILTER(
A2:A10,
MAP(
A2:A10,
LAMBDA(
a,
a=0+CONCAT(
SORT(
UNIQUE(
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
)
),
,
-1
)
)
)
)
)
✅ =TOCOL(MAP(A2:A10,
LAMBDA(a,
a/(a=0+CONCAT(
SORT(
UNIQUE(
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
)
),
,
-1
)
)))),
3)
Excel solution 26 for List all Katadrome numbers, proposed by LUIS FLORENTINO COUTO CORTEGOSO:
=FILTER(A2:A10,MAP(A2:A10,LAMBDA(x,LET(c,MID(x,SEQUENCE(LEN(x)),1),AND(DROP(c,-1)>DROP(c,1))))))
Excel solution 27 for List all Katadrome numbers, proposed by Hazem Hassan:
=TOCOL(MAP(A2:A10,
LAMBDA(x,
LET(a,
LEN(
x
),
b,
MID(
x,
SEQUENCE(
a
),
1
),
IF(a-1=SUM(1*(TOCOL(
DROP(
b,
1
)-b,
3
)<0)),
x,
1/0)))),
3)
Excel solution 28 for List all Katadrome numbers, proposed by Hazem Hassan:
=LET(
a,
A2:A10,
FILTER(
a,
BYROW(
MID(
a,
SEQUENCE(
,
MAX(
LEN(
a
)
)
),
1
),
LAMBDA(
x,
1*CONCAT(
SORT(
UNIQUE(
x,
1
),
,
-1
)
)
)
)=a
)
)
Excel solution 29 for List all Katadrome numbers, proposed by Pierre FAUCONNIER:
=LET(_c,
MAP(D3:D8,
LAMBDA(_a,
(TEXTJOIN(
"",
,
SORT(
UNIQUE(
MAP(
SEQUENCE(
LEN(
_a
)
),
LAMBDA(
_b,
MID(
_a,
_b,
1
)
)
)
),
,
-1
)
)*1=_a)*_a)),
FILTER(
_c,
_c<>0
))
Excel solution 30 for List all Katadrome numbers, proposed by Michael Hengst:
=FILTER(
A2:A10;
MAP(
A2:A10;
LAMBDA(
vNumLst;
LET(
vNumLen;
LÄNGE(
vNumLst
);
vChkDesc;
MAP(
SEQUENZ(
vNumLen
);
LAMBDA(
vNumSeq;
WENN(
TEIL(
vNumLst;
vNumSeq;
1
)>TEIL(
vNumLst;
vNumSeq+1;
1
);
0;
1
)
)
);
SUMME(
vChkDesc
)
)
)
)=0
)
English version (untested):
=FILTER(
A2:A10;
MAP(
A2:A10;
LAMBDA(
vNumLst;
LET(
vNumLen;
LEN(
vNumLst
);
vChkDesc;
MAP(
SEQUENCE(
vNumLen
);
LAMBDA(
vNumSeq;
IF(
MID(
vNumLst;
vNumSeq;
1
)>MID(
vNumLst;
vNumSeq+1;
1
);
0;
1
)
)
);
SUM(
vChkDesc
)
)
)
)=0
)
Solving the challenge of List all Katadrome numbers with Python in Excel
Python in Excel solution 1 for List all Katadrome numbers, proposed by Alejandro Campos:
def es_katadrome(numero):
digitos = [int(d) for d in str(numero)]
for i in range(len(digitos) - 1):
if digitos[i] <= digitos[i + 1]:
return False
return True
def verificar_numeros_katadrome(numeros):
resultados = []
for numero in numeros:
if es_katadrome(numero):
resultados.append(numero)
return resultados
dataKat = xl("A1:A10", headers=True)
numeros = dataKat['Numbers'].tolist()
numeros_katadrome = verificar_numeros_katadrome(numeros)
df344=pd.DataFrame({'Solución en PY': numeros_katadrome})
df344def es_katadrome(numero):
digitos = [int(d) for d in str(numero)]
for i in range(len(digitos) - 1):
if digitos[i] <= digitos[i + 1]:
return False
return True
def verificar_numeros_katadrome(numeros):
resultados = []
for numero in numeros:
if es_katadrome(numero):
resultados.append(numero)
return resultados
dataKat = xl("A1:A10", headers=True)
numeros = dataKat['Numbers'].tolist()
numeros_katadrome = verificar_numeros_katadrome(numeros)
df344=pd.DataFrame({'Solución en PY': numeros_katadrome})
df344
Solving the challenge of List all Katadrome numbers with R
R solution 1 for List all Katadrome numbers, proposed by Konrad Gryczan, PhD:
R code - Done
library(tidyverse)
library(readxl)
input = read_excel("Katadrome Numbers.xlsx", range = "A1:A10")
test = read_excel("Katadrome Numbers.xlsx", range = "B1:B5")
is_katadrome = function(x) {
digits = x %>% as.character(n) %>%
str_split("") %>%
.[[1]] %>%
map_dbl(as.numeric)
digits %>% diff() %>% all(. < 0)
}
result = input %>%
mutate(`Answer Expected` = map_dbl(Numbers, is_katadrome)) %>%
filter(`Answer Expected` == 1)
&&
