Home » Generate Integers From Ranges

Generate Integers From Ranges

Generate the integers corresponding to intervals. If range is x-y, then all integers between x & y (both included) need to be generated. if a single number appears, it will appear as it is. The answer should have unique numbers and sorted in ascending order. Ex. 5-8, 12 = 5, 6, 7, 8, 12

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

Solving the challenge of Generate Integers From Ranges with Power Query

Power Query solution 1 for Generate Integers From Ranges, proposed by Aditya Kumar Darak 🇮🇳:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  Return = Table.AddColumn(
    Source, 
    "Answer", 
    each [
      R = Text.Replace([Problem], "-", ".."), 
      E = Expression.Evaluate("{" & R & "}"), 
      L = List.Sort(List.Distinct(E)), 
      T = List.Transform(L, Text.From), 
      C = Text.Combine(T, ", ")
    ][C]
  )
in
  Return
Power Query solution 2 for Generate Integers From Ranges, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sol = Table.AddColumn(
    Source, 
    "Answer", 
    each 
      let
        a = Text.Split([Problem], ", "), 
        b = List.Transform(
          a, 
          each 
            if Text.Contains(_, "-") then
              {
                Number.From(Text.BeforeDelimiter(_, "-")) .. Number.From(
                  Text.AfterDelimiter(_, "-")
                )
              }
            else
              {Number.From(_)}
        ), 
        c = List.Distinct(List.Sort(List.Combine(b)))
      in
        Text.Combine(List.Transform(c, each Text.From(_)), ", ")
  )[[Answer]]
in
  Sol
Power Query solution 3 for Generate Integers From Ranges, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  res = List.Transform(
    Fonte[Problem], 
    each Text.Combine(
      List.Transform(
        List.Sort(
          List.Distinct(
            List.TransformMany(
              Text.Split(Text.Replace(_, "-", ".."), ", "), 
              (x) => Expression.Evaluate("{" & x & "}"), 
              (a, b) => b
            )
          ), 
          0
        ), 
        Text.From
      ), 
      ","
    )
  )
in
  res
Power Query solution 4 for Generate Integers From Ranges, proposed by Alexis Olson:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Result = Table.AddColumn(
    Source, 
    "Answer", 
    each [
      CommaSplit = Text.Split([Problem], ", "), 
      HypenSplit = List.Transform(CommaSplit, each Text.Split(_, "-")), 
      ToRanges = List.Transform(
        HypenSplit, 
        each {Number.From(List.First(_)) .. Number.From(List.Last(_))}
      ), 
      Combine = Text.Combine(List.Transform(List.Sort(List.Union(ToRanges)), Number.ToText), ", ")
    ][Combine]
  )
in
  Result
Power Query solution 5 for Generate Integers From Ranges, proposed by Ramiro Ayala Chávez:
let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Fx = (x) =>
    let
      L = List.Transform, 
      a = Text.Split(x, ", "), 
      b = L(a, each if Text.Contains(_, "-") then Text.Split(_, "-") else _), 
      c = List.Select(List.Combine(L(b, each {_})), each _ is text), 
      d = List.Difference(b, c), 
      e = L(L(d, each _{0}), Number.From), 
      f = L(L(d, each _{1}), Number.From), 
      g = List.RemoveNulls(List.Combine(L({0, 1}, each try {e{_} .. f{_}} otherwise {null}))), 
      h = Text.Combine(L(List.Sort(List.Distinct(L(c & g, Number.From))), Text.From), ", ")
    in
      h, 
  Sol = Table.AddColumn(S, "Answer Expected", each Fx([Problem]))
in
  Sol
Power Query solution 6 for Generate Integers From Ranges, proposed by Rafael González B.:
let
 Source = Excel.CurrentWorkbook(){0}[Content],

 TTC = Table.TransformColumns(Source, {"Problem", each 
 let
 Tx = Text.Split(_, ", "),
 NF = Number.From,
 LT = List.Transform(Tx, each if Text.Contains(_, "-") 
 then {NF(Text.BeforeDelimiter(_,"-"))..NF(Text.AfterDelimiter(_,"-"))} 
 else {NF(_)}),
 F = List.Sort(List.Distinct(List.Combine(LT))),
 TF = Text.Combine(List.Transform(F, each Text.From(_)), ", ")

 in
 TF})
in
 TTC

🧙🏻‍♂️🧙🏻‍♂️🧙🏻‍♂️


                    
                  
          
Power Query solution 7 for Generate Integers From Ranges, proposed by Glyn Willis:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  #"Added Custom" = Table.AddColumn(
    Source, 
    "Custom", 
    each Text.Combine(
      List.Transform(
        List.Sort(
          List.Union(
            List.Transform(
              Text.Split([Problem], ", "), 
              (ol) =>
                let
                  li = Text.Split(ol, "-")
                in
                  {Number.From(li{0}) .. Number.From(li{1}? ?? li{0})}
            )
          )
        ), 
        (ol2) => Text.From(ol2)
      ), 
      ", "
    )
  )
in
  #"Added Custom"

Solving the challenge of Generate Integers From Ranges with Excel

Excel solution 1 for Generate Integers From Ranges, proposed by Bo Rydobon 🇹🇭:
=MAP(A2:A7,
    LAMBDA(a,
    LET(l,
    TRANSPOSE(
        --TEXTSPLIT(
            a,
            "-",
            ","
        )
    ),
    f,
    TAKE(
        l,
        1
    ),
    
s,
    SEQUENCE(
        5^5
    ),
    ARRAYTOTEXT(UNIQUE(TOCOL(s/(s>=f)/(s<=IFNA(
        DROP(
        l,
        1
    ),
        f
    )),
    3))))))
=MAP(A2:A7,
    LAMBDA(a,
    LET(l,
    --TEXTSPLIT(
        a,
        "-",
        ","
    ),
    f,
    TAKE(
        l,
        ,
        1
    ),
    
s,
    SEQUENCE(
        ,
        5^5
    ),
    ARRAYTOTEXT(FILTER(s,
    BYCOL((s>=f)*(s<=IFNA(
        DROP(
        l,
        ,
        1
    ),
        f
    )),
    OR))))))
Excel solution 2 for Generate Integers From Ranges, proposed by Rick Rothstein:
=MAP(
    A2:A7,
    LAMBDA(
        a,
        TEXTJOIN(
            ", ",
            ,
            SORT(
                DROP(
                    UNIQUE(
                        REDUCE(
                            "",
                            TEXTSPLIT(
                                a,
                                ", "
                            ),
                            LAMBDA(
                                a,
                                x,
                                LET(
                                    t,
                                    TEXTBEFORE(
                                        x&"-",
                                        "-"
                                    ),
                                    VSTACK(
                                        a,
                                        SEQUENCE(
                                            TEXTAFTER(
                                                "-"&x,
                                                "-",
                                                -1
                                            )-t+1,
                                            ,
                                            t
                                        )
                                    )
                                )
                            )
                        )
                    ),
                    1
                )
            )
        )
    )
)
Excel solution 3 for Generate Integers From Ranges, proposed by John V.:
=MAP(
    A2:A7,
    LAMBDA(
        x,
        TEXTJOIN(
            ", ",
            ,
            SORT(
                UNIQUE(
                    REDUCE(
                        "",
                        TEXTSPLIT(
                            x,
                            ","
                        ),
                        LAMBDA(
                            a,
                            v,
                            LET(
                                i,
                                --TEXTSPLIT(
                                    v,
                                    "-"
                                ),
                                VSTACK(
                                    a,
                                    SEQUENCE(
                                        1+MAX(
                                            i
                                        )-@i,
                                        ,
                                        @i
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 4 for Generate Integers From Ranges, proposed by محمد حلمي:
=MAP(
    A2:A7,
    LAMBDA(
        a,
        TEXTJOIN(
            ", ",
            ,
            SORT(
                UNIQUE(
                    
                    REDUCE(
                        "",
                        TEXTSPLIT(
                            a,
                            ","
                        ),
                        LAMBDA(
                            A,
                            v,
                            LET(
                                d,
                                --TEXTSPLIT(
                                    v,
                                    "-"
                                ),
                                
                                VSTACK(
                                    A,
                                    SEQUENCE(
                                        MAX(
                                            d
                                        )-@d+1,
                                        ,
                                        @d
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 5 for Generate Integers From Ranges, proposed by محمد حلمي:
=MAP(A2:A7,
    LAMBDA(a,
    LET(l,
    --TEXTSPLIT(
        a,
        "-",
        ","
    ),
    
f,
    TAKE(
        l,
        ,
        1
    ),
    s,
    SEQUENCE(
        ,
        5^5
    ),
    
ARRAYTOTEXT(UNIQUE(TOCOL(s/(s>=f)/(s<=IFNA(
    DROP(
        l,
        ,
        1
    ),
    f
)),
    3,
    1))))))
Excel solution 6 for Generate Integers From Ranges, proposed by 🇰🇷 Taeyong Shin:
=MAP(
    SUBSTITUTE(
        A2:A7,
        "-",
        ":"
    ),
    LAMBDA(
        x,
        LET(
            s,
            TEXTSPLIT(
                x,
                ", "
            ),
            TEXTJOIN(
                ", ",
                ,
                SORT(
                    UNIQUE(
                        REDUCE(
                            "",
                            TEXTBEFORE(
                                s&":"&s,
                                ":",
                                2,
                                ,
                                1
                            ),
                            LAMBDA(
                                a,
                                v,
                                VSTACK(
                                    a,
                                    ROW(
                                        INDIRECT(
                                            v
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 7 for Generate Integers From Ranges, proposed by Kris Jaganah:
=MAP(
    A2:A7,
    LAMBDA(
        x,
        LET(
            a,
            TEXTSPLIT(
                x,
                ,
                ", "
            ),
            ARRAYTOTEXT(
                SORT(
                    UNIQUE(
                        TOCOL(
                            --REDUCE(
                                FILTER(
                                    a,
                                    ISERR(
                                        FIND(
                                            "-",
                                            a
                                        )
                                    ),
                                    ""
                                ),
                                FILTER(
                                    a,
                                    IFERROR(
                                        FIND(
                                            "-",
                                            a
                                        ),
                                        0
                                    )
                                ),
                                LAMBDA(
                                    x,
                                    y,
                                    VSTACK(
                                        x,
                                        SEQUENCE(
                                            TEXTAFTER(
                                                y,
                                                "-"
                                            )-TEXTBEFORE(
                                                y,
                                                "-"
                                            )+1,
                                            ,
                                            TEXTBEFORE(
                                                y,
                                                "-"
                                            )
                                        )
                                    )
                                )
                            ),
                            3
                        )
                    )
                )
            )
        )
    )
)
Excel solution 8 for Generate Integers From Ranges, proposed by Julian Poeltl:
=MAP(
    A2:A7,
    LAMBDA(
        T,
        LET(
            SP,
            TEXTSPLIT(
                T,
                ", "
            ),
            CA,
            IF(
                ISNUMBER(
                    SEARCH(
                        "-",
                        SP
                    )
                ),
                MAP(
                    SP,
                    LAMBDA(
                        A,
                        TEXTJOIN(
                            ",",
                            ,
                            SEQUENCE(
                                TEXTAFTER(
                                    A,
                                    "-"
                                )-TEXTBEFORE(
                                    A,
                                    "-"
                                )+1,
                                ,
                                TEXTBEFORE(
                                    A,
                                    "-"
                                )
                            )
                        )
                    )
                ),
                SP
            ),
            TEXTJOIN(
                ", ",
                ,
                SORT(
                    UNIQUE(
                        TEXTSPLIT(
                            TEXTJOIN(
                                ",",
                                ,
                                CA
                            ),
                            ","
                        ),
                        TRUE
                    )*1,
                    ,
                    ,
      &              TRUE
                )
            )
        )
    )
)
Excel solution 9 for Generate Integers From Ranges, proposed by Timothée BLIOT:
=LET(
    A,
    TEXTSPLIT(
        A2,
        ","
    ),
    ARRAYTOTEXT(
        SORT(
            UNIQUE(
                --TRIM(
                    TEXTSPLIT(
                         CONCAT(
                             MAP(
                                 A,
                                 LAMBDA(
                                     x,
                                     ARRAYTOTEXT(
                                         IF(
                                             ISNUMBER(
                                                 FIND(
                                                     "-",
                                                     x
                                                 )
                                             ),
                                              LET(
                                                  B,
                                                  --TEXTBEFORE(
                                                      x,
                                                      "-"
                                                  ),
                                                  C,
                                                  --TEXTAFTER(
                                                      x,
                                                      "-"
                                                  ),
                                                  SEQUENCE(
                                                      C-B+1,
                                                      ,
                                                      B
                                                  )
                                              ),
                                             x
                                         )
                                     )
                                 )
                             )&","
                         ),
                        ,
                        ",",
                        1
                    )
                )
            )
        )
    )
)
Excel solution 10 for Generate Integers From Ranges, proposed by Hussein SATOUR:
=MAP(
    A2:A7,
    LAMBDA(
        z,
        ARRAYTOTEXT(
            UNIQUE(
                TOCOL(
                    SORT(
                        --REDUCE(
                            "",
                            TEXTSPLIT(
                                z,
                                ","
                            ),
                            LAMBDA(
                                x,
                                y,
                                LET(
                                    a,
                                    TEXTBEFORE(
                                        y,
                                        "-"
                                    ),
                                    VSTACK(
                                        x,
                                        IFNA(
                                            SEQUENCE(
                                                TEXTAFTER(
                                                    y,
                                                    "-"
                                                )-a+1,
                                                ,
                                                a
                                            ),
                                            y
                                        )
                                    )
                                )
                            )
                        )
                    ),
                    2
                )
            )
        )
    )
)
Excel solution 11 for Generate Integers From Ranges, proposed by Oscar Mendez Roca Farell:
=MAP(A2:A7,
     LAMBDA(a,
     LET(t,
    --TEXTSPLIT(
        a,
         "-",
        ","
    ),
     F,
     LAMBDA(
         i,
          j,
          DROP(
              i,
              ,
              -j
          )
     ),
     m,
     IFNA(
         t,
          F(
              t,
              1
          )
     ),
     s,
     SEQUENCE(
         ,
         9^4
     ),
     ARRAYTOTEXT(SORT(UNIQUE(TOCOL(s/(s<=F(
         m,
         -1
     )/(s>=F(
         m,
         1
     ))),
    2)))))))
Excel solution 12 for Generate Integers From Ranges, proposed by Duy Tùng:
=MAP(
    A2:A7,
    LAMBDA(
        v,
        LET(
            a,
            TEXTSPLIT(
                v,
                ,
                ", "
            ),
            ARRAYTOTEXT(
                SORT(
                    UNIQUE(
                        DROP(
                            REDUCE(
                                0,
                                SUBSTITUTE(
                                    a,
                                    "-",
                                    ":"
                                ),
                                LAMBDA(
                                    x,
                                    y,
                                    VSTACK(
                                        x,
                                        IFERROR(
                                            ROW(
                                                INDIRECT(
                                                    y
                                                )
                                            ),
                                            --y
                                        )
                                    )
                                )
                            ),
                            1
                        )
                    )
                )
            )
        )
    )
)
Excel solution 13 for Generate Integers From Ranges, proposed by Sunny Baggu:
=MAP(
    
     A2:A7,
    
     LAMBDA(
         x,
         
          LET(
              
               _ts,
               TEXTSPLIT(
                   x,
                    ,
                    ", "
               ),
              
               _ta,
               IFNA(
                   TEXTAFTER(
                       _ts,
                        "-"
                   ),
                    0
               ),
              
               _tb,
               IFNA(
                   TEXTBEFORE(
                       _ts,
                        "-"
                   ),
                    _ts
               ),
              
               ARRAYTOTEXT(
                   
                    SORT(
                        
                         UNIQUE(
                             
                              --TOCOL(
                                  
                                   DROP(
                                       
                                        REDUCE(
                                            
                                             "",
                                            
                                             SEQUENCE(
                                                 ROWS(
                                                     _ts
                                                 )
                                             ),
                                            
                                             LAMBDA(
                                                 a,
                                                  v,
                                                 
                                                  VSTACK(
                                                      
                                                       a,
                                                      
                                                       IFERROR(
                                                           
                                                            INDEX(
                                                                _tb,
                                                                 v,
                                                                 1
                                                            ) + SEQUENCE(
                                                                ,
                                                                 1 + INDEX(
                                                                     _ta,
                                                                      v,
                                                                      1
                                                                 ) - INDEX(
                                                                _tb,
                                                                 v,
                                                                 1
                                                            ),
                                                                 
                                                            ) - 1,
                                                           
                                                            INDEX(
                                                                _tb,
                                                                 v,
                                                                 1
                                                            )
                                                            
                                                       )
                                                       
                                                  )
                                                  
                                             )
                                             
                                        ),
                                       
                                        1
                                        
                                   ),
                                  
                                   3
                                   
                              )
                              
                         )
                         
                    )
                    
               )
               
          )
          
     )
    
)
Excel solution 14 for Generate Integers From Ranges, proposed by Sunny Baggu:
=MAP(
    
     A2:A7,
    
     LAMBDA(
         x,
         
          LET(
              
               _ts,
               TEXTSPLIT(
                   x,
                    "-",
                    ", ",
                    ,
                    ,
                    0
               ),
              
               s,
               BYROW(
                   _ts,
                    LAMBDA(
                        x,
                         MAX(
                             0,
                              SUM(
                                  x * {-1,
                                   1}
                              ) + 1
                         )
                    )
               ),
              
               ARRAYTOTEXT(
                   
                    SORT(
                        
                         UNIQUE(
                             
                              --TOCOL(
                                  
                                   MAKEARRAY(
                                       
                                        ROWS(
                                            _ts
                                        ),
                                       
                                        MAX(
                                            s
                                        ),
                                       
                                        LAMBDA(
                                            r,
                                             c,
                                            
                                             INDEX(
                                                 
                                                  IFERROR(
                                                      INDEX(
                                                          _ts,
                                                           r,
                                                           1
                                                      ) + SEQUENCE(
                                                          ,
                                                           INDEX(
                                                               s,
                                                                r,
                                                                1
                                                           ),
                                                           0
                                                      ),
                                                       INDEX(
                                                          _ts,
                                                           r,
                                                           1
                                                      )
                                                  ),
                                                 
                                                  ,
                                                 
                                                  c
                                                  
                                             )
                                             
                                        )
                                        
                                   ),
                                  
                                   3
                                   
                              )
                              
                         )
                         
                    )
                    
               )
               
          )
          
     )
    
)
Excel solution 15 for Generate Integers From Ranges, proposed by Abdallah Ally:
=MAP(
    A2:A7,
    LAMBDA(
        s,
        LET(
            a,
            TEXTSPLIT(
                s,
                ", "
            ),
            b,
            DROP(
                REDUCE(
                    "",
                    a,
                    LAMBDA(
                        x,
                        y,
                        VSTACK(
                            x,
                            LET(
                                c,
                                --TEXTSPLIT(
                                    y,
                                    "-"
                                ),
                                SEQUENCE(
                                    SUM(
                                        TAKE(
                                            c,
                                            1,
                                            -1
                                        )-TAKE(
                                            c,
                                            ,
                                            1
                                        )+1
                                    ),
                                    ,
                                    SUM(
                                        TAKE(
                                            c,
                                            ,
                                            1
                                        )
                                    )
                                )
                            )
                        )
                    )
                ),
                1
            ),
            TEXTJOIN(
                ", ",
                ,
                UNIQUE(
                    SORT(
                        b
                    )
                )
            )
        )
    )
)
Excel solution 16 for Generate Integers From Ranges, proposed by 🇵🇪 Ned Navarrete C.:
=MAP(
    A2:A7,
    LAMBDA(
        r,
        TEXTJOIN(
            ", ",
            1,
            SORT(
                UNIQUE(
                    REDUCE(
                        "",
                        TEXTSPLIT(
                            r,
                            ,
                            ", "
                        ),
                        LAMBDA(
                            c,
                            v,
                             LET(
                                 n,
                                 TEXTSPLIT(
                                     v,
                                     "-"
                                 ),
                                  VSTACK(
                                      c,
                                      @n+SEQUENCE(
                                          SUM(
                                              n*{-1,
                                              1}
                                          )+1
                                      )-1
                                  )
                             )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 17 for Generate Integers From Ranges, proposed by Andy Heybruch:
=MAP(
    A2:A7,
    LAMBDA(
        _p,
        TEXTJOIN(
            ", ",
            ,
            UNIQUE(
                SORT(
                    --TEXTSPLIT(
                 &       
                        REDUCE(
                            "",
                            TEXTSPLIT(
                                _p,
                                ,
                                ","
                            ),
                            
                            LAMBDA(
                                a,
                                v,
                                
                                TEXTJOIN(
                                    ",",
                                    ,
                                    a,
                                    
                                    TEXTJOIN(
                                        ",",
                                        ,
                                        LET(
                                            
                                            _a,
                                            --TEXTBEFORE(
                                                v,
                                                "-",
                                                ,
                                                ,
                                                ,
                                                --v
                                            ),
                                            
                                            _b,
                                            --TEXTAFTER(
                                                v,
                                                "-",
                                                ,
                                                ,
                                                ,
                                                --v
                                            ),
                                            
                                            SEQUENCE(
                                                _b-_a+1,
                                                ,
                                                _a
                                            )
                                        )
                                    )
                                )
                            )
                        ),
                        ,
                        ","
                    )
                )
            )
        )
    )
)
Excel solution 18 for Generate Integers From Ranges, proposed by Anup Kumar:
=BYROW(
    A2:A7,
     LAMBDA(
         p,
         LET(
             
             txt,
              p,
             
             ds,
              "-",
             
             spt,
              TEXTSPLIT(
                  txt,
                  ,
                  ", "
              ),
             
             rng,
              FILTER(
                  spt,
                  ISNUMBER(
                      SEARCH(
                          ds,
                          spt
                      )
                  )
              ),
             
             nos,
              FILTER(
                  spt,
                  NOT(
                      ISNUMBER(
                      SEARCH(
                          ds,
                          spt
                      )
                  )
                  )
              ),
             
             exp,
              DROP(
                  REDUCE(
                      "",
                      rng,
                      LAMBDA(
                          x,
                          y,
                          VSTACK(
                              x,
                              SEQUENCE(
                                  1*TEXTAFTER(
                                      y,
                                      ds
                                  )-1*TEXTBEFORE(
                                      y,
                                      ds
                                  )+1,
                                  ,
                                  TEXTBEFORE(
                                      y,
                                      ds
                                  )
                              )
                          )
                      )
                  ),
                  1
              ),
             
             
             ARRAYTOTEXT(
                 SORT(
                     UNIQUE(
                         VSTACK(
                             IFERROR(
                                 --nos,
                                 exp
                             ),
                             IFERROR(
                                 exp,
                                 --nos
                             )
                         )
                     )
                 )
             )
             
         )
     )
)
Excel solution 19 for Generate Integers From Ranges, proposed by LUIS FLORENTINO COUTO CORTEGOSO:
=MAP(
    A2:A7,
    LAMBDA(
        c,
        LET(
            x,
            SUBSTITUTE(
                "A"&TEXTSPLIT(
                    c,
                    ", "
                ),
                "-",
                ":A"
            ),
            TEXTJOIN(
                ", ",
                ,
                SORT(
                    UNIQUE(
                        REDUCE(
                            "",
                            x,
                            LAMBDA(
                                a,
                                y,
                                VSTACK(
                                     a,
                                    ROW(
                                        INDIRECT(
                                            y
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 20 for Generate Integers From Ranges, proposed by Anil Kumar Goyal:
= Problem) %>% 
 separate_rows(
     Answer,
      sep = ", "
 ) %>% 
 reframe(
     Answer = unlist(
         map(
             Answer,
              ~{
              if(
                  str_detect(
                      .x,
                       "-"
                  )
              ){
              unlist(
                  str_split(
                      .x,
                       "-"
                  )
              ) %>% 
              as.integer() %>% 
              {.[1]:.[2]}
              } else {
              as.integer(
                  .x
              )
              }
              }
         )
     ),
      .by = Problem
 ) %>% 
 distinct() %>% 
 summarise(
     Answer = str_c(
         sort(
             Answer
         ),
          collapse = ", "
     ),
      .by = Problem
 )
Excel solution 21 for Generate Integers From Ranges, proposed by Tyler Cameron:
=MAP(
    A2:A7,
    LAMBDA(
        t,
        ARRAYTOTEXT(
            SORT(
                UNIQUE(
                    TOCOL(
                        DROP(
                            REDUCE(
                                "",
                                TEXTSPLIT(
                                    t,
                                    ,
                                    ", "
                                ),
                                LAMBDA(
                                    x,
                                    y,
                                    LET(
                                        a,
                                        --TEXTSPLIT(
                                            y,
                                            "-"
                                        ),
                                        b,
                                        MAX(
                                            a
                                        ),
                                        c,
                                        MIN(
                                            a
                                        ),
                                        VSTACK(
                                            x,
                                            IF(
                                                COUNTA(
                                            a
                                        )>1,
                                                TOROW(
                                                    SEQUENCE(
                                                        b-c+1,
                                                        ,
                                                        c
                                                    )
                                                ),
                                                a
                                            )
                                        )
                                    )
                                )
                            ),
                            1
                        ),
                        3
                    )
                )
            )
        )
    )
)
Excel solution 22 for Generate Integers From Ranges, proposed by Olasunkanmi Babatope:
=MAP(
     A2:A7,
     LAMBDA(
         dText,
          LET(
              
              commaSplit,
              IFERROR(
                  SUBSTITUTE(
                      SUBSTITUTE(
                          dText,
                          ",",
                          "-"
                      ),
                      " ",
                      ""
                  ),
                  ""
              ),
              
              spaceSplit,
              IFERROR(
                  TEXTSPLIT(
                      commaSplit,
                      "-"
                  ),
                  ""
              ),
              
              list,
              BYCOL(
                  spaceSplit,
                   LAMBDA(
                       ss,
                         VALUE(
                             ss
                         )
                   )
              ),
              
              myRange,
               MAX(
                   list
               )-MIN(
                   list
               ),
              
              numSeries,
               SEQUENCE(
                   1,
                   myRange+1,
                   MIN(
                   list
               ),
                   1
               ),
              
              Textjoin(
                  ",",
                  numSeries,
                  True
              )
          )
     )
)

Solving the challenge of Generate Integers From Ranges with Python

Python solution 1 for Generate Integers From Ranges, proposed by Konrad Gryczan, PhD:
import pandas as pd
import re
input = pd.read_excel("441 Integer Intervals.xlsx", usecols="A", nrows=7)
test = pd.read_excel("441 Integer Intervals.xlsx", usecols="B", nrows=7)
result = input.copy()
result['Problem'] = result['Problem'].str.split(", ")
result['row_number'] = result.index
result = result.explode('Problem')
result['Problem'] = result['Problem'].apply(lambda x: list(range(int(x.split('-')[0]), int(x.split('-')[1])+1)) if '-' in x else [int(x)])
result = result.explode('Problem')
result = result.groupby(result.index).agg({'Problem': lambda x: ', '.join(map(str, sorted(set(x))))}).reset_index(drop=True)
print(result['Problem'].equals(test['Answer Expected'])) # True
                    
                  
Python solution 2 for Generate Integers From Ranges, proposed by Luan Rodrigues:
import pandas as pd
df = pd.read_excel('PY/Excel_Challenge_441 - Integer Intervals/Excel_Challenge_441 - Integer Intervals.xlsx',usecols='A')
df['tab'] = df['Problem'].apply(lambda x: x.split(', ')).copy()
df = df[['Problem','tab']].explode(['tab'])
df['split'] = df['tab'].apply(lambda x: x.split('-') )
def ajuste(lista):
 if len(lista) == 2:
 return list(range(int(lista[0]), int(lista[1]) + 1))
 else:
 return lista
df['split'] = df['split'].apply(lambda x: ajuste(x) )
df['indice'] = df.index
df_agrupado = df.groupby(['Problem','indice'])['split'].sum(set([])).reset_index()
df_result = df_agrupado.sort_values(by=['indice'])
print(df_result[['split']])
                    
                  

Solving the challenge of Generate Integers From Ranges with Python in Excel

Python in Excel solution 1 for Generate Integers From Ranges, proposed by Abdallah Ally:
# I have recently been working on regular expressions
import pandas as pd
import re
file_path = 'Excel_Challenge_441 - Integer Intervals.xlsx'
df = pd.read_excel(file_path)
# Perform data transformation and cleansing
def integer_interval(col):
 regex = r'(d+-d+)'
 replacement = lambda x: ', '.join([str(y) for y in range(int(x[1].split('-')[0]), int(x[1].split('-')[1]) + 1)])
 text = re.sub(regex, replacement, col)
 numbers = [str(x) for x in sorted({int(y) for y in text.split(', ')})]
 return ', '.join(numbers)
df['My Answer'] = df['Problem'].apply(integer_interval)
# Display final results
df
                    
                  
Python in Excel solution 2 for Generate Integers From Ranges, proposed by Abdallah Ally:
import pandas as pd
file_path = 'Excel_Challenge_441 - Integer Intervals.xlsx'
df = pd.read_excel(file_path)
# Perform data transformation and cleansing
def integer_interval(col):
 chars = col.split(', ')
 numbers = set()
 for char in chars:
 if char.find('-') > -1:
 nums = [int(x) for x in char.split('-')]
 numbers.update([x for x in range(nums[0], nums[1] + 1)]) 
 else:
 numbers.add(int(char))
 return ', '.join([str(x) for x in sorted(numbers)])
df['My Answer'] = df['Problem'].apply(integer_interval)
# Display final results
df
                    
                  
Python in Excel solution 3 for Generate Integers From Ranges, proposed by ferhat CK:
all=xl("A1:A7", headers=True)
ans = []
for j in all.Problem:
 cikis=[]
 cc=j.strip("").split(",")
 for i in cc:
 if "-" in i:
 q = i.split("-")
 mn = int(q[0])
 mx = int(q[1]) 
 for n in range(mn, mx + 1):
 if int(n) not in cikis:
 cikis.append(int(n))
 else:
 if int(i) not in cikis:
 cikis.append(int(i))
 cikis.sort()
 c2=[str(i) for i in cikis]
 ans.append(','.join(c2))
pd.DataFrame({'Answer Expected':ans})
                    
                  

Solving the challenge of Generate Integers From Ranges with R

R solution 1 for Generate Integers From Ranges, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Excel/441 Integer Intervals.xlsx", range = "A1:A7")
test = read_excel("Excel/441 Integer Intervals.xlsx", range = "B1:B7")
result = input %>%
 mutate(rn = row_number()) %>%
 separate_rows(Problem, sep = ", ") %>%
 mutate(Problem = map(Problem, ~{
 if(str_detect(., "-")){
 range = str_split(., "-")[[1]]
 seq(as.numeric(range[1]), as.numeric(range[2]))
 } else {
 as.numeric(.)
 }
 })) %>%
 unnest(Problem) %>%
 summarise(`Answer Expected` = str_c(sort(unique(Problem)), collapse = ", "), .by = rn) %>%
 select(-rn)
                    
                  

&

Leave a Reply