Home » Numbers With Larger Successors

Numbers With Larger Successors

List all the numbers where all succeeding numbers are larger than the number. Ex. 3, 7, 6, 9 First is 3 – succeeding numbers are 7, 6, 9 and all are > 3 Second is 7 – succeeding numbers are 6, 9 and 6 is < 7. Hence, excluded. Third is 6 – succeeding number is 9 which is > 6. Fourth is 9 – There is no succeeding number. Hence excluded. Hence, answer is 3, 6.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 379
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Numbers With Larger Successors with Power Query

Power Query solution 1 for Numbers With Larger Successors, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sol = Table.AddColumn(
    Source, 
    "Answer", 
    each 
      let
        a = Text.Split([Numbers], ", "), 
        b = List.Transform(a, Number.From), 
        c = List.Transform(
          {0 .. List.Count(b) - 2}, 
          each 
            let
              a1 = List.RemoveFirstN(b, _), 
              b1 = {a1{0}, List.AllTrue(List.Transform(List.Skip(a1), each a1{0} < _))}
            in
              b1
        ), 
        d = List.Select(c, each _{1}), 
        e = Text.Combine(List.Transform(d, each Text.From(_{0})), ", ")
      in
        e
  )[[Answer]]
in
  Sol
Power Query solution 2 for Numbers With Larger Successors, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  res = Table.AddColumn(
    Fonte, 
    "Personalizar", 
    each 
      let
        a = List.Transform(Text.Split([Numbers], ", "), Number.From), 
        b = List.Reverse(
          List.Transform({1 .. List.Count(a)}, (x) => List.RemoveFirstN(List.LastN(a, x)))
        ), 
        c = List.Transform(List.Zip({a, b}), (x) => {x{0}} & {List.Transform(x{1}, each _ > x{0})}), 
        d = List.Select(c, (x) => List.AllTrue(x{1}) and List.Count(x{1}) <> 0), 
        e = Text.Combine(List.Transform(d, each Text.From(_{0})), ", ")
      in
        e
  )
in
  res
Power Query solution 3 for Numbers With Larger Successors, proposed by Ramiro Ayala Chávez:
let
  Origen = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Fx = (x) =>
    let
      a = Text.Split(x, ", "), 
      b = List.Transform(a, Number.From), 
      c = List.Generate(
        () => [i = 0, j = 1], 
        each [i] < List.Count(b), 
        each [i = [i] + 1, j = [j] + 1], 
        each {b{[i]}} & List.Range(b, [j])
      ), 
      d = List.Transform(c, each if List.First(_) = List.Min(_) then List.First(_) else null), 
      e = List.RemoveNulls(List.RemoveLastN(List.Distinct(d))), 
      f = Text.Combine(List.Transform(e, Text.From), ", ")
    in
      f, 
  Sol = Table.AddColumn(Origen, "Answer Expected", each Fx([Numbers]))
in
  Sol
Power Query solution 4 for Numbers With Larger Successors, proposed by Glyn Willis:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  #"Changed Type" = Table.TransformColumnTypes(
    Source, 
    {{"Numbers", type text}, {"Answer Expected", type any}}
  ), 
  #"Added Custom" = Table.AddColumn(
    #"Changed Type", 
    "Custom", 
    each [
      t = Text.Split([Numbers], ", "), 
      c = List.Count(t), 
      p = List.Positions(t), 
      g = Table.FromRows(List.Transform(p, (x) => {Int64.From(t{x}), x}), {"a", "b"}), 
      r = Table.AddColumn(
        g, 
        "d", 
        (x) =>
          let
            a = List.Generate(
              () => [i = x[b], a = x[a], b = Int64.From(t{i + 1}), e = a < b], 
              each [i] < c - 1, 
              each [i = [i] + 1, a = x[a], b = Int64.From(t{i + 1}), e = a < b], 
              each [e]
            ), 
            b = List.AllTrue(if List.IsEmpty(a) then {false} else a)
          in
            b
      ), 
      f = Text.Combine(
        List.Transform(Table.SelectRows(r, (x) => x[d])[a], (x) => Text.From(x)), 
        ", "
      )
    ][f]
  )
in
  #"Added Custom"

Solving the challenge of Numbers With Larger Successors with Excel

Excel solution 1 for Numbers With Larger Successors, proposed by Bo Rydobon 🇹🇭:
=MAP(
    A2:A10,
    LAMBDA(
        a,
        LET(
            n,
            --TEXTSPLIT(
                a,
                ,
                ","
            ),
            TEXTJOIN(
                ", ",
                ,
                MAP(
                    DROP(
                        n,
                        -1
                    ),
                    SEQUENCE(
                        ROWS(
                            n
                        )-1
                    ),
                    LAMBDA(
                        m,
                        i,
                        REPT(
                            m,
                            AND(
                                m
Excel solution 2 for Numbers With Larger Successors, proposed by Rick Rothstein:
=MAP(
    A2:A10,
    LAMBDA(
        z,
        LET(
            t,
            0+TEXTSPLIT(
                z,
                ", "
            ),
            TEXTJOIN(
                ", ",
                ,
                SCAN(
                    "",
                    SEQUENCE(
                        COUNT(
                            t
                        )-1
                    ),
                    LAMBDA(
                        a,
                        x,
                        IF(
                            AND(
                                INDEX(
                                    t,
                                    x
                                )
Excel solution 3 for Numbers With Larger Successors, proposed by John V.:
=MAP(
    A2:A10,
    LAMBDA(
        x,
        LET(
            n,
            --TEXTSPLIT(
                x,
                ,
                ","
            ),
            TEXTJOIN(
                ", ",
                ,
                MAP(
                    n,
                    SEQUENCE(
                        ROWS(
                            n
                        )
                    ),
                    LAMBDA(
                        x,
                        y,
                        REPT(
                            x,
                            IFERROR(
                                AND(
                                    x
Excel solution 4 for Numbers With Larger Successors, proposed by محمد حلمي:
=MAP(
    A2:A10,
    LAMBDA(
        a,
        LET(
            e,
            --TEXTSPLIT(
                a,
                ,
                ","
            ),
            
            TEXTJOIN(
                ", ",
                ,
                IFERROR(
                    
                    MAP(
                        e,
                        SEQUENCE(
                            20
                        ),
                        LAMBDA(
                            a,
                            d,
                            
                            a/AND(
                                a
Excel solution 5 for Numbers With Larger Successors, proposed by محمد حلمي:
=MAP(A2:A10,LAMBDA(a,LET(r,--TEXTSPLIT(a,","),
e,TOCOL(r),i,ROWS(e),S,SEQUENCE(i),V,TOROW(S),
TEXTJOIN(", ",,IFERROR(r/
DROP(MMULT(V^0,(S>V)*(e>r))=i-V,,-1),"")))))
Excel solution 6 for Numbers With Larger Successors, proposed by Kris Jaganah:
=MAP(A2:A10,LAMBDA(y,LET(a,--TEXTSPLIT(y,,", "),b,ROWS(a),c,SEQUENCE(b,,b,-1),TEXTJOIN(", ",,TOCOL(BYROW(IFNA(IF(a
Excel solution 7 for Numbers With Larger Successors, proposed by Timothée BLIOT:
=MAP(A2:A10,
    LAMBDA(z,
    LET(A,
    --TEXTSPLIT(
        z,
        ,
        ", "
    ),
    IFERROR(ARRAYTOTEXT (TOCOL(MAP(SEQUENCE(
        ROWS(
            A
        )-1
    ),
    LAMBDA(x,
    IF(SUM(--(DROP(
        A,
        x
    )> INDEX(
        A,
        x
    )))=ROWS(
            A
        )-x,
    INDEX(
        A,
        x
    ),
    1/0))),
    3)),
    ""))))
Excel solution 8 for Numbers With Larger Successors, proposed by Hussein SATOUR:
=IFERROR(
    MAP(
        A2:A10,
         LAMBDA(
             z,
              LET(
                  a,
                   --TEXTSPLIT(
                       z,
                       ,
                       ", "
                   ),
                   b,
                  DROP(
                      FILTER(
                          a,
                           MAP(
                               a,
                                SEQUENCE(
                                    COUNT(
                                        a
                                    )
                                ),
                                LAMBDA(
                                    x,
                                    y,
                                     x = MIN(
                                         DROP(
                                             a,
                                              y-1
                                         )
                                     )
                                )
                           )
                      ),
                       -1
                  ),
                   IF(
                       AND(
                           COUNT(
                               b
                           )>1,
                            COUNT(
                                UNIQUE(
                               b
                           )
                            )=1
                       ),
                        "",
                        ARRAYTOTEXT(
                               b
                           )
                   )
              )
         )
    ),
    ""
)
Excel solution 9 for Numbers With Larger Successors, proposed by Sunny Baggu:
=MAP(
    
     A2:A10,
    
     LAMBDA(
         x,
         
          LET(
              
               _c,
               TEXTSPLIT(
                   x,
                    ,
                    ", "
               ) + 0,
              
               ARRAYTOTEXT(
                   
                    FILTER(
                        
                         _c,
                        
                         IFERROR(
                             MAP(
                                 SEQUENCE(
                                     ROWS(
                                         _c
                                     )
                                 ),
                                  LAMBDA(
                                      a,
                                       AND(
                                           DROP(
                                               INDEX(
                                                   TOROW(
                                         _c
                                     ) > _c,
                                                    a,
                                                    
                                               ),
                                                ,
                                                a
                                           )
                                       )
                                  )
                             ),
                              0
                         ),
                        
                         ""
                         
                    )
                    
               )
               
          )
          
     )
    
)
Excel solution 10 for Numbers With Larger Successors, proposed by Sunny Baggu:
=MAP(
    
     A2:A10,
    
     LAMBDA(
         x,
         
          LET(
              
               _a,
               TEXTSPLIT(
                   x,
                    ,
                    ", "
               ) + 0,
              
               ARRAYTOTEXT(
                   
                    FILTER(
                        
                         _a,
                        
                         DROP(
                             
                              REDUCE(
                                  
                                   "",
                                  
                                   SEQUENCE(
                                       ROWS(
                                           _a
                                       )
                                   ),
                                  
                                   LAMBDA(
                                       a,
                                        v,
                                        VSTACK(
                                            a,
                                             IFERROR(
                                                 AND(
                                                     INDEX(
                                                         _a,
                                                          v
                                                     ) < DROP(
                                                         _a,
                                                          v
                                                     )
                                                 ),
                                                  0
                                             )
                                        )
                                   )
                                   
                              ),
                             
                              1
                              
                         ),
                        
                         ""
                         
                    )
                    
               )
               
          )
          
     )
    
)
Excel solution 11 for Numbers With Larger Successors, proposed by LEONARD OCHEA 🇷🇴:
=MAP(
    A2:A10,
    LAMBDA(
        a,
        LET(
            n,
            --TEXTSPLIT(
                a,
                ,
                ", "
            ),
            TEXTJOIN(
                ", ",
                ,
                MAP(
                    SEQUENCE(
                        ROWS(
                            n
                        )-1
                    ),
                    LAMBDA(
                        b,
             &           LET(
                            i,
                            INDEX(
                                n,
                                b
                            ),
                            IF(
                                AND(
                                    i
Excel solution 12 for Numbers With Larger Successors, proposed by Abdallah Ally:
=MAP(
    A2:A10,
    LAMBDA(
        x,
        LET(
            a,
            --TEXTSPLIT(
                x,
                ", "
            ),
            b,
            REDUCE(
                "",
                SEQUENCE(
                    COUNT(
                        a
                    )-1
                ),
                LAMBDA(
                    x,
                    y,
                    IF(
                        AND(
                            CHOOSECOLS(
                                a,
                                y
                            )
Excel solution 13 for Numbers With Larger Successors, proposed by 🇵🇪 Ned Navarrete C.:
=MAP(
    A2:A10,
    LAMBDA(
        f,
        LET(
            a,
            --TEXTSPLIT(
                f,
                ,
                ", "
            ),
            s,
            SEQUENCE(
                ROWS(
                    a
                )-1
            ),
            i,
            INDEX(
                a,
                s
            ),
            mi,
            MAP(
                s,
                LAMBDA(
                    r,
                    MIN(
                        DROP(
                            a,
                            r
                        )
                    )
                )
            ),
            TEXTJOIN(
                ", ",
                1,
                REPT(
                    i,
                    i
Excel solution 14 for Numbers With Larger Successors, proposed by Asheesh Pahwa:
=LET(a,
    X7:X13,
     MAP(a,
     LAMBDA(z,
    LET(t,
    --TEXTSPLIT(
        z,
        ",
"
    ),
    c,
     DROP (REDUCE(
         "",
          SEQUENCE(
              ,
              COLUMNS(
                  t
              )
          ),
          LAMBDA(
              x,
              y,
              HSTACK(
                  x,
                  AND(
                      INDEX(
                          t,
                          ,
                          y
                      )
Excel solution 15 for Numbers With Larger Successors, proposed by JvdV -:
=MAP(
    A2:A10,
    LAMBDA(
        s,
        TEXTJOIN(
            ", ",
            ,
            DROP(
                VSTACK(
                    "",
                    FILTERXML(
                        ""&SUBSTITUTE(
                            s,
                            ",",
                            ""
                        )&"",
                        "//s[not(following::*<=.)]"
                    )
                ),
                -1
            )
        )
    )
)
Excel solution 16 for Numbers With Larger Successors, proposed by Mihai Radu O:
= BYROW(
    c,
     LAMBDA(
         x,
          TAKE(
              x,
               ,
               1
          )
     )
)) *
 (minim <> --TEXTAFTER(
     a,
      ", ",
      nr
 )),
    
 ""
 )
 )
 )
 )
)
Excel solution 17 for Numbers With Larger Successors, proposed by Nicolas Micot:
=LET(_nombres;
    FRACTIONNER.TEXTE(
        A2;
        ;
        ", "
    );
    
_seq;
    SEQUENCE(
        LIGNES(
            _nombres
        )-1
    );
    
JOINDRE.TEXTE(", ";
    VRAI;
    FILTRE(CHOISIRLIGNES(
        _nombres;
        _seq
    );
    MAP(_seq;
    LAMBDA(l_seq;
    
SOMME(--(EXCLURE(
    _nombres;
    l_seq
)-INDEX(
    _nombres;
    l_seq
)<=0))=0));
    "")))
Excel solution 18 for Numbers With Larger Successors, proposed by Giorgi Goderdzishvili:
=MAP(A2:A10,
    LAMBDA(x,
    LET(
_nm,
    --TEXTSPLIT(
        x,
        ", "
    ),
    
_mp,
     MAP(_nm,
    SEQUENCE(
        ,
        COLUMNS(
            _nm
        )
    ),
    LAMBDA(x,
    y,
    
IFERROR(SUM(--(x
Excel solution 19 for Numbers With Larger Successors, proposed by Edwin Tisnado:
=MAP(
    A2:A10,
    LAMBDA(
        t,
        LET(
            a,
            --TEXTSPLIT(
                t,
                ,
                ","
            ),
            s,
            SEQUENCE(
                COUNT(
                    a
                )-1
            ),
            TEXTJOIN(
                ", ",
                ,
                MAP(
                    s,
                    LAMBDA(
                        x,
                        IF(
                            AND(
                                INDEX(
                                    a,
                                    x
                                )
Excel solution 20 for Numbers With Larger Successors, proposed by Anup Kumar:
=MAP(
    A2:A10,
    LAMBDA(
        a,
        LET(
            
            nos,
             --TEXTSPLIT(
                 a,
                 ,
                 ", "
             ),
            
            gr,
            SCAN(
                FALSE,
                SEQUENCE(
                    ROWS(
                        nos
                    )-1
                ),
                LAMBDA(
                    x,
                    y,
                    AND(
                        INDEX(
                            nos,
                            y
                        )

Solving the challenge of Numbers With Larger Successors with Python

Python solution 1 for Numbers With Larger Successors, proposed by Giorgi Goderdzishvili:
for k in lst:
 nw_ls = []
 for i in range(len(k)-1):
 if k[i]
Python solution 2 for Numbers With Larger Successors, proposed by Jan Willem Van Holst:
In Python:
import pandas as pd
import numpy as np 
df= pd.read_csv(r"C:JWLENOVOPYTHONPQ challengesExcel_Challenge_379.csv", sep=',')
df = df.replace(np.nan, '')
Numbers=df[df.columns[0]].to_list()
UnpackNumbers = [[int(st) for st in elem.split(", ")] for elem in Numbers]
def fx(numbers):
 result = []
 for i in range(0,len(numbers)):
 if np.all( np.array(numbers[i+1:])>numbers[i] ):
 result.append(str(numbers[i]))
 string = ', '.join(result[:-1])
 return string
df['answer'] = [(fx(x)) for x in UnpackNumbers]
print(df)
                    
                  

Solving the challenge of Numbers With Larger Successors with R

R solution 1 for Numbers With Larger Successors, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Excel/379 All Elements Larger than Preceding one.xlsx", range = "A1:A10")
test = read_excel("Excel/379 All Elements Larger than Preceding one.xlsx", range = "B1:B10")
check_succeeding <- function(numbers, index) {
 current <- numbers[index]
 succeeding <- numbers[(index + 1):length(numbers)]
 all(succeeding > current)
}
process_string <- function(string) {
 numbers <- str_split(string, ",\s*")[[1]] %>% 
 as.numeric()
 result <- map_lgl(seq_along(numbers), ~check_succeeding(numbers, .)) %>%
 which() %>%
 map_chr(~ as.character(numbers[.])) %>%
 paste(collapse = ", ")
 
 result = ifelse(result == "", NA_character_, result)
 
 return(result)
}
result = input %>%
 mutate(`Answer Expected` = map_chr(Numbers, ~process_string(.x)))
                    
                  

&&

Leave a Reply