Home » List all Katadrome numbers

List all Katadrome numbers

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) 
                    
                  

&&

Leave a Reply