Home » Generate Sequential Tickets

Generate Sequential Tickets

Generate the ticket numbers as given. All first numbers from Sequence column will be appended to corresponding Booklet cell one by one, then second number and so on. If no number in Sequence, no ticket number will be generated.

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

Solving the challenge of Generate Sequential Tickets with Power Query

Power Query solution 1 for Generate Sequential Tickets, proposed by Kris Jaganah:
let]} ,(x,y)=> y & x))[Ans] )))} , {"Answer Expected"})
Power Query solution 2 for Generate Sequential Tickets, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Table.SelectRows(
    Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
    each [Sequence] <> null
  ), 
  Cols = Table.Combine(
    Table.AddColumn(
      Source, 
      "A", 
      each 
        let
          a = _, 
          b = Record.ToList(a), 
          c = Text.Split(b{1}, ", "), 
          d = List.Transform(c, each b{0} & _), 
          e = Table.FromRows({d})
        in
          e
    )[A]
  ), 
  Sol = List.RemoveNulls(List.Combine(Table.ToColumns(Cols)))
in
  Sol
Power Query solution 3 for Generate Sequential Tickets, proposed by Luan Rodrigues:
let
  Fonte = Table.AddColumn(
    Tabela1, 
    "lista", 
    each 
      let
        b = Text.Split([Sequence], ", "), 
        c = try
          List.Transform({0 .. List.Count(b) - 1}, (x) => Text.Combine({[Booklet], b{x}}, ", "))
        otherwise
          {null}
      in
        c
  )[lista], 
  res = List.TransformMany(List.Zip(Fonte), (x) => List.RemoveNulls(x), (a, b) => b)
in
  res
Power Query solution 4 for Generate Sequential Tickets, proposed by Ramiro Ayala Chávez:
let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  LT = List.Transform, 
  a = LT(S[Sequence], each try Text.Split(Text.From(_), ", ") otherwise {_}), 
  b = LT(S[Booklet], each {_}), 
  c = LT(List.Positions(b), each b{_} & a{_}), 
  Fx = (x) =>
    let
      d = x, 
      e = List.Skip(LT(d, each d{0} & _))
    in
      e, 
  f = List.Combine(List.Zip(LT(c, each Fx(_)))), 
  Sol = Table.FromColumns({List.RemoveNulls(f)}, {"Answer Expected"})
in
  Sol
Power Query solution 5 for Generate Sequential Tickets, proposed by Meganathan Elumalai:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Result = [
    cnt = Table.RowCount(Source), 
    fin = Table.FromList(
      List.RemoveNulls(
        List.Combine(
          List.Zip(
            List.Transform(
              {0 .. cnt - 1}, 
              (f) =>
                List.Transform(
                  try Text.Split(Source[Sequence]{f}, ", ") otherwise {}, 
                  (x) => Source[Booklet]{f} & x
                )
            )
          )
        )
      ), 
      null, 
      {"Result"}
    )
  ][fin]
in
  Result
Power Query solution 6 for Generate Sequential Tickets, proposed by Rafael González B.:
let
 Source = Question_Table,
 RemoveNull = Table.SelectRows(Source, each ([Sequence] <> null)),
 Tickets = Table.AddColumn(RemoveNull, "Union", each 
 let
 a = Text.Split([Sequence], ", "),
 b = {[Booklet]},
 c = List.TransformMany(b, each a, (x,_) => x & _)
 in 
 c)[Union],
 Result = Table.FromList(
 List.RemoveNulls(List.Combine(List.Zip(Tickets))), 
 Splitter.SplitByNothing(),
 {"Answer Expected"})
in
 Result
🧙🏻‍♂️🧙🏻‍♂️🧙🏻‍♂️
                    
                  
          
Power Query solution 7 for Generate Sequential Tickets, proposed by Peter Krkos:
let
  FilteredRows = Table.SelectRows(Source, each ([Sequence] <> null)), 
  Ad_L = Table.AddColumn(FilteredRows, "L", each Text.Split([Sequence], ", ")), 
  Rows = List.Buffer(Table.ToRows(Ad_L[[Booklet], [L]])), 
  Gen = List.Accumulate(
    {0 .. List.Max(List.Transform(Ad_L[L], List.Count)) - 1}, 
    {}, 
    (s, c) => s & {List.Transform(Rows, each _{0} & _{1}{c}?)}
  ), 
  ToTbl = Table.FromList(List.RemoveNulls(List.Combine(Gen)), null, type table [Answer = text])
in
  ToTbl
Power Query solution 8 for Generate Sequential Tickets, proposed by CA Raghunath Gundi:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Split = Table.SplitColumn(
    Source, 
    "Sequence", 
    Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), 
    {"1" .. "4"}
  ), 
  Unpivot = Table.UnpivotOtherColumns(Split, {"Booklet"}, "Attribute", "Value"), 
  Sort = Table.Sort(Unpivot, {{"Attribute", Order.Ascending}, {"Booklet", Order.Ascending}}), 
  Merge = Table.CombineColumns(
    Sort, 
    {"Booklet", "Value"}, 
    Combiner.CombineTextByDelimiter("", QuoteStyle.None), 
    "Answer Expected"
  )[[Answer Expected]]
in
  Merge
Power Query solution 9 for Generate Sequential Tickets, proposed by Alexandre Garcia:
let
  H = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  P = List.Transform, 
  L = Table.ToList(
    H, 
    (x) =>
      let
        a = List.RemoveItems(Text.Split(x{1} ?? "", ", "), {""})
      in
        List.Zip({List.Positions(a), P(a, each x{0} & _)})
  ), 
  C = Table.FromColumns({P(List.Sort(List.Combine(L), each _{0}), each _{1})}, {"Answer"})
in
  C
Power Query solution 10 for Generate Sequential Tickets, proposed by Krzysztof Kominiak:
let
  Source = Table.SelectRows(
    Table.FromRows(
      Json.Document(
        Binary.Decompress(
          Binary.FromText(
            "i45WclTSUbLQUTA0UorViVZyAvJMwCxnIMvIUEfByNASzHcB8sEMVyADJK6jYKyjAFHrBhQyBZphoRQbCwA=", 
            BinaryEncoding.Base64
          ), 
          Compression.Deflate
        )
      ), 
      let
        _t = ((type nullable text) meta [Serialized.Text = true])
      in
        type table [Booklet = _t, Sequence = _t]
    ), 
    each [Sequence] <> null and [Sequence] <> ""
  ), 
  TabTr = Table.TransformColumns(Source, {}, each Text.Split(_, ", ")), 
  Ls = Table.AddColumn(
    TabTr, 
    "Ls", 
    each List.TransformMany([Sequence], (x) => [Booklet], (x, y) => y & x)
  )[Ls], 
  Result = Table.FromColumns(
    {
      List.RemoveNulls(
        List.Combine(Table.ToColumns(Table.Combine(List.Transform(Ls, each Table.FromRows({_})))))
      )
    }, 
    {"Answer Exp."}
  )
in
  Result
Power Query solution 11 for Generate Sequential Tickets, proposed by Tyler N.:
let
  a = YourTable, 
  k = List.Transform, 
  o = {0 .. 20}, 
  f = List.RemoveNulls(
    List.Combine(
      k(
        o, 
        each k(
          o, 
          (x) =>
            try
              a[Booklet]{x} & Text.Split(Text.From(Table.ToRows(a[[Sequence]]){x}{0}), ", "){_}
            otherwise
              null
        )
      )
    )
  )
in
  f
Power Query solution 12 for Generate Sequential Tickets, proposed by Oleksandr Mynka:
let
  DELIM = ", ", 
  src = Excel.CurrentWorkbook(){[Name = "SourceTable"]}[Content], 
  cnt = List.Accumulate(
    List.Transform(src[Sequence], Splitter.SplitTextByDelimiter(DELIM)), 
    0, 
    (s, c) => List.Max({s, List.Count(c)})
  ), 
  split = Table.SplitColumn(src, "Sequence", Splitter.SplitTextByDelimiter(DELIM), cnt), 
  unpiv = Table.UnpivotOtherColumns(split, {"Booklet"}, "Order", "Num"), 
  sort = Table.Sort(unpiv, {{"Order", 0}, {"Booklet", 0}}), 
  del = Table.RemoveColumns(sort, {"Order"}), 
  res = Table.CombineColumns(del, {"Booklet", "Num"}, (x) => Text.Combine(x), "Answer Expected")
in
  res

Solving the challenge of Generate Sequential Tickets with Excel

Excel solution 1 for Generate Sequential Tickets, proposed by Bo Rydobon 🇹🇭:
=TOCOL(
    A2:A7&TEXTSPLIT(
        TEXTAFTER(
            " "&B2:B7,
            " ",
            {1,
            2,
            3,
            4}
        ),
        ","
    ),
    3,
    1
)
Excel solution 2 for Generate Sequential Tickets, proposed by Rick Rothstein:
=TOCOL(
    A2:A7&TEXTSPLIT(
        TEXTAFTER(
            ", "&B2:B7,
            ", ",
            SEQUENCE(
                ,
                99
            )
        ),
        ", "
    ),
    3,
    1
)
Excel solution 3 for Generate Sequential Tickets, proposed by John V.:
=TOCOL(A2:A7&TEXTSPLIT(TEXTAFTER(" "&B2:B7," ",COLUMN(A:Z)),","),2,1)
Excel solution 4 for Generate Sequential Tickets, proposed by Kris Jaganah:
=LET(a,A2:A7,b,B2:B7,TOCOL(TEXTSPLIT(CONCAT(IF(b="","",a&SUBSTITUTE(b," ",a))&"-"),",","-",1),3,1))
Excel solution 5 for Generate Sequential Tickets, proposed by Julian Poeltl:
=LET(
    T,
    TOCOL(
        A2:A7&DROP(
            REDUCE(
                1,
                B2:B7,
                LAMBDA(
                    A,
                    B,
                    VSTACK(
                        A,
                        IFERROR(
                            TEXTSPLIT(
                                B,
                                ", "
                            ),
                            ""
                        )
                    )
                )
            ),
            1
        ),
        3,
        1
    ),
    FILTER(
        T,
        LEN(
            T
        )>1
    )
)
Excel solution 6 for Generate Sequential Tickets, proposed by Timothée BLIOT:
=LET(
    A,
    TOCOL(
        REDUCE(
            0,
            ROW(
                1:6
            ),
            LAMBDA(
                w,
                v,
                VSTACK(
                    w,
                    IFERROR(
                        INDEX(
                            A2:A7,
                            v,
                            
                        )&TEXTSPLIT(
                            INDEX(
                                B2:B7,
                                v,
                                
                            ),
                            ", "
                        ),
                        0
                    )
                )
            )
        ),
        3,
        1
    ),
    FILTER(
        A,
        A<>0
    )
)
Excel solution 7 for Generate Sequential Tickets, proposed by Hussein SATOUR:
=LET(A,TEXTJOIN,B,TEXTSPLIT,TOCOL(B(A("",,MAP(A2:A7,B2:B7,LAMBDA(x,y,IFERROR(A("/",,x&B(y,", "))&",","")))),"/",",",1),3,1))
Excel solution 8 for Generate Sequential Tickets, proposed by Oscar Mendez Roca Farell:
=TOCOL(
    A2:A7&--TEXTSPLIT(
        CONCAT(
            B2:B7&"|"
        ),
        ", ",
        "|"
    ),
    2,
    1
)
Excel solution 9 for Generate Sequential Tickets, proposed by Duy Tùng:
=LET(a,TEXTSPLIT(TEXTJOIN("/",,IF(B2:B7>0,B2:B7,", ")),", ","/"),TOCOL(IFS(a>"",A2:A7&a),3,1))
Excel solution 10 for Generate Sequential Tickets, proposed by Sunny Baggu:
=TOCOL(
    
     FILTER(
         A2:A7,
          B2:B7 <> ""
     ) &
     TEXTSPLIT(
         TEXTJOIN(
             "/",
              1,
              B2:B7
         ),
          ", ",
          "/"
     ),
    
     3,
    
     1
    
)
Excel solution 11 for Generate Sequential Tickets, proposed by Sunny Baggu:
=LET(
    
     _a,
     IFNA(
         
          DROP(
              
               REDUCE(
                   
                    "",
                   
                    B2:B7,
                   
                    LAMBDA(
                        a,
                         v,
                         VSTACK(
                             a,
                              IFERROR(
                                  TEXTSPLIT(
                                      v,
                                       ", "
                                  ),
                                   ""
                              )
                         )
                    )
                    
               ),
              
               1
               
          ),
         
          ""
          
     ),
    
     TOCOL(
         IF(
             _a = "",
              1 / x,
              A2:A7 & _a
         ),
          3,
          1
     )
    
)
Excel solution 12 for Generate Sequential Tickets, proposed by Anshu Bantra:
= to_df(REF("A1:B7"))
df['Sequence'] = df['Sequence'].str.split(', ')
df_1 = df.explode('Sequence').reset_index(drop=True)
index_lst =[]
df_index = list(df_1.index)
while not sorted(index_lst) == df_index:
 last_element = '' 
 for idx, element in enumerate(df_1['Booklet']):
 if element != last_element and idx not in index_lst:
 index_lst.append(idx)
 last_element = element
df_1 = df_1.reindex(index_lst).dropna()
df_1['Booklet'].values+df_1['Sequence'].apply(str)
Excel solution 13 for Generate Sequential Tickets, proposed by Md. Zohurul Islam:
=LET(u,A2:A7,v,B2:B7,c,u&"-"&v,
d,DROP(REDUCE("",FILTER(c,v<>""),LAMBDA(x,y,LET(e,TEXTSPLIT(y,{"-",", "}),f,TAKE(e,,1),g,DROP(e,,1),VSTACK(x,f&g)))),1),
h,TOCOL(d,3,1),
h)
Excel solution 14 for Generate Sequential Tickets, proposed by Pieter de B.:
=TOCOL(A2:A7&TEXTSPLIT(TEXTAFTER(", "&B2:B7,", ",SEQUENCE(,85)),", "),2,1)

86 being 255/3 (comma, space, character)
Excel solution 15 for Generate Sequential Tickets&, proposed by Hamidi Hamid:
=LET(x,IFERROR(DROP(TEXTSPLIT(CONCAT("/"&A2:A7&","&B2:B7),",","/"),1),""),w,SUBSTITUTE(TOCOL(TRANSPOSE(IF(DROP(x,,1)<>"",TAKE(x,,1)&"-"&DROP(x,,1),1/0)),3),"-",),w)
Excel solution 16 for Generate Sequential Tickets, proposed by Asheesh Pahwa:
=LET(
    t,
    TEXTAFTER(
        ", "&B2:B7,
        ", ",
        SEQUENCE(
            ,
            MAX(
                MAP(
                    B2:B7,
                    LAMBDA(
                        x,
                        COUNTA(
                            TEXTSPLIT(
                                x,
                                ", "
                            )
                        )
                    )
                )
            )
        )
    ),
    
    TOCOL(
        A2:A7&TEXTSPLIT(
            t,
            ", "
        ),
        2,
        1
    )
)
Excel solution 17 for Generate Sequential Tickets, proposed by Asheesh Pahwa:
=LET(
    d,
    DROP(
        REDUCE(
            "",
            B2:B7,
            LAMBDA(
                x,
                y,
                VSTACK(
                    x,
                    IFERROR(
                        TEXTSPLIT(
                            y,
                            ", "
                        ),
                        ""
                    )
                )
            )
        ),
        1
    ),
    TOCOL(
        A2:A7&IF(
            d="",
            NA(),
            d
        ),
        2,
        1
    )
)
Excel solution 18 for Generate Sequential Tickets, proposed by ferhat CK:
=TOCOL(TRANSPOSE(LET(a,A2:B7,f,FILTER(a,TAKE(a,,-1)>0),REDUCE("Answer Experted",BYROW(f,ARRAYTOTEXT),LAMBDA(x,y,VSTACK(x,REGEXEXTRACT(y,"w")®EXEXTRACT(y,"d+",1)))))),2)
Excel solution 19 for Generate Sequential Tickets, proposed by Jaroslaw Kujawa:
=LET(c;REDUCE("";SEQUENCE(MAX(LEN(B2:B7)-LEN(SUBSTITUTE(B2:B7;",";""))+1));LAMBDA(b;kol;VSTACK(b;REDUCE("";B2:B7;LAMBDA(a;x;LET(f;TEXTSPLIT(x;;", ");nr;IFERROR(CHOOSEROWS(f;kol);"");VSTACK(a;IF(LEN(nr);OFFSET(x;;-1)&nr;""))))))));FILTER(c;LEN(c)))
Excel solution 20 for Generate Sequential Tickets, proposed by Meganathan Elumalai:
=LET(x,TOCOL(REDUCE("",B2:B7,LAMBDA(a,v,VSTACK(a,IFERROR(OFFSET(v,,-1)&TEXTSPLIT(v,", "),"")))),3,1),FILTER(x,x>""))
Excel solution 21 for Generate Sequential Tickets, proposed by Imam Hambali:
=LET(
a, FILTER(A2:B7,B2:B7<>""),
cc, CHOOSECOLS,
TOCOL(cc(a,1)&TEXTSPLIT(TEXTJOIN(";",1, cc(a,2)),", ",";"),3,1)
)
Excel solution 22 for Generate Sequential Tickets, proposed by Ahmed Ariem:
=TEXTSPLIT(
    TEXTJOIN(
        ",",
        1,
        MAP(
            SUBSTITUTE(
                B2:B7,
                " ",
                ""
            ),
            A2:A7,
            LAMBDA(
                a,
                b,
                REGEXREPLACE(
                    a,
                    "b(d{1,3})b",
                    b&"1"
                )
            )
        )
    ),
    ,
    ","
)
Excel solution 23 for Generate Sequential Tickets, proposed by El Badlis Mohd Marzudin:
=LET(
    a,
    TEXTSPLIT(
        TEXTJOIN(
            "|",
            0,
            B2:B7
        ),
        ", ",
        "|",
        ,
        ,
        ""
    ),
    b,
    A2:A7&a,
    TOCOL(
        IF(
            LEN(
                b
            )>1,
            b,
            NA()
        ),
        3,
        1
    )
)
Excel solution 24 for Generate Sequential Tickets, proposed by Erdit Qendro:
=LET(
    rng,
    A2:B7,
    
    rngfiltered,
    FILTER(
        rng,
        TAKE(
            rng,
            ,
            -1
        )<>""
    ),
    
    rowscount,
    SEQUENCE(
        ROWS(
            rngfiltered
        )
    ),
    
    colLetter,
    INDEX(
        rngfiltered,
        rowscount,
        1
    ),
    
    rowsN,
    INDEX(
        rngfiltered,
        rowscount,
        2
    ),
    
    rowsNSplit,
    DROP(
        REDUCE(
            "",
            rowscount,
            LAMBDA(
                a,
                I,
                LET(
                    txToSplit,
                    INDEX(
                        rowsN,
                        I,
                        1
                    ),
                    IF(
                        I>MAX(
                            rowscount
                        ),
                        a,
                        VSTACK(
                            a,
                            TEXTSPLIT(
                                txToSplit,
                                ", "
                            )
                        )
                    )
                )
            )
        ),
        1
    ),
    
    TOCOL(
        colLetter&rowsNSplit,
        3,
        TRUE
    )
)
Excel solution 25 for Generate Sequential Tickets, proposed by Erdit Qendro:
=LET(rng,A2:B7,
rngfiltered,FILTER(rng,TAKE(rng,,-1)<>""),
colLetter,INDEX(rngfiltered,,1),
rowNumb,INDEX(rngfiltered,,2),
rowNumbSplit,TEXTSPLIT(TEXTJOIN("|",,rowNumb),", ","|"),
TOCOL(colLetter&rowNumbSplit,3,TRUE))
Excel solution 26 for Generate Sequential Tickets, proposed by Gabriel Pugliese:
=LET(
    z,
    A2:B7,
    _a,
    FILTER(
        z,
        TAKE(
            z,
            ,
            -1
        )>""
    ),
    
    _b,
    DROP(
        REDUCE(
            "",
            DROP(
                _a,
                ,
                1
            ),
            LAMBDA(
                a,
                v,
                VSTACK(
                    a,
                    TEXTSPLIT(
                        v,
                        ", "
                    )
                )
            )
        ),
        1
    ),
    
    TOCOL(
        TAKE(
                _a,
                ,
                1
            )&_b,
        2,
        1
    )
)

Solving the challenge of Generate Sequential Tickets with Python

Python solution 1 for Generate Sequential Tickets, proposed by Konrad Gryczan, PhD:
import pandas as pd
path = "652 Generate Ticket Numbers.xlsx"
input = pd.read_excel(path, usecols="A:B", nrows=7)
test = pd.read_excel(path, usecols="C", nrows=12)
input["Sequence"] = input["Sequence"].str.split(", ")
result = (
 input.explode("Sequence")
 .dropna()
 .assign(rn=lambda d: d.groupby("Booklet").cumcount() + 1)
 .sort_values(["rn", "Booklet"])
 .drop(columns="rn")
 .assign(**{"Answer Expected": lambda d: d["Booklet"].astype(str) + d["Sequence"].astype(str)})[["Answer Expected"]]
 .reset_index(drop=True)
)
print(result.equals(test)) # True
                    
                  
Python solution 2 for Generate Sequential Tickets, proposed by Luan Rodrigues:
import pandas as pd
from itertools import zip_longest
file = r"Excel_Challenge_652 - Generate Ticket Numbers.xlsx"
df = pd.read_excel(file, usecols='A:B').dropna()
df['Result'] = df.apply(lambda row: [f"{row['Booklet']}{item}" for item in str(row['Sequence']).split(', ')], axis=1)
df = pd.DataFrame([x for grupo in zip_longest(*df['Result']) for x in grupo if x], columns=['Result'])
print(df)
                    
                  

Solving the challenge of Generate Sequential Tickets with Python in Excel

Python in Excel solution 1 for Generate Sequential Tickets, proposed by Alejandro Campos:
data = xl("A1:B7", headers=True)
data["Sequence"] = [list(map(int, seq.split(", "))) if seq else [] for seq in data["Sequence"]]
[f"{b}{seq[i]}" for i in range(max(map(len, data["Sequence"]))) for b, seq in zip("ABCDEF", data["Sequence"]) if i < len(seq)]
                    
                  
Python in Excel solution 2 for Generate Sequential Tickets, proposed by Aditya Kumar Darak 🇮🇳:
df = xl("A1:B7", True)
df["Sequence"] = df["Sequence"].str.split(", ")
df = df.explode("Sequence").dropna()
df["Answer"] = df["Booklet"] + df["Sequence"]
result = df["Answer"].reset_index(drop=True)
result
                    
                  

Solving the challenge of Generate Sequential Tickets with R

R solution 1 for Generate Sequential Tickets, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Excel/652 Generate Ticket Numbers.xlsx"
input = read_excel(path, range = "A1:B7")
test = read_excel(path, range = "C1:C12")
result = input %>%
 separate_rows(Sequence, sep = ", ") %>%
 na.omit() %>%
 mutate(rn = row_number(), .by = Booklet) %>%
 arrange(rn, Booklet) %>%
 select(-rn) %>%
 unite(`Answer Expected`, Booklet, Sequence, sep = "")
all.equal(result, test)
#> [1] TRUE 
                    
                  

&&

Leave a Reply