Home » First and Last Number Sum

First and Last Number Sum

Extract the first and last set of numbers appearing in A2:A10 and sum them.

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

Solving the challenge of First and Last Number Sum with Power Query

Power Query solution 1 for First and Last Number Sum, proposed by Kris Jaganah:
let
  A = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  B = Table.AddColumn(
    A, 
    "Ans", 
    each 
      let
        a = Text.Combine(List.Transform({1 .. 47, 58 .. 255}, Character.FromNumber)), 
        b = Text.SplitAny([Strings], a), 
        c = List.RemoveNulls(List.Transform(b, Number.From)), 
        d = List.First(c), 
        e = if List.Count(c) < 2 then {d} else {d, List.Last(c)}
      in
        e
  ), 
  C = List.Sum(List.Combine(B[Ans]))
in
  C
Power Query solution 2 for First and Last Number Sum, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sol = List.Sum(
    List.Combine(
      Table.AddColumn(
        Source, 
        "A", 
        each 
          let
            a = Text.Remove([Strings], List.Transform({0 .. 9}, Text.From)), 
            b = List.Accumulate(Text.ToList(a), [Strings], (s, c) => Text.Replace(s, c, " ")), 
            c = List.Select(Text.Split(b, " "), each _ <> ""), 
            d = List.Transform(
              {c{0}? ?? null, if List.Count(c) > 1 then List.Last(c) else null}, 
              Number.From
            )
          in
            d
      )[A]
    )
  )
in
  Sol
Power Query solution 3 for First and Last Number Sum, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  add = Table.AddColumn(
    Fonte, 
    "sum", 
    each 
      let
        a = Splitter.SplitTextByCharacterTransition(
          {":" .. "z", "!" .. "-", " ", "0" .. "9"}, 
          {":" .. "z", " "}
        )([Strings]), 
        b = List.TransformMany(a, each {Text.Select(_, {"0" .. "9"})}, (a, b) => Number.From(b)), 
        c = List.RemoveNulls(b), 
        d = if List.Count(c) = 1 then List.First(c) else List.Sum({List.First(c), List.Last(c)})
      in
        d
  )[sum], 
  res = List.Sum(add)
in
  res
Power Query solution 4 for First and Last Number Sum, proposed by Abdallah Ally:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Transform = Table.AddColumn(
    Source, 
    "Result", 
    each [
      a = Text.ToList([Strings]), 
      b = List.Transform(a, each if List.Contains({"0" .. "9"}, _) then _ else " "), 
      c = List.Transform(Text.Split(Text.Combine(b), " "), each try Number.From(_) otherwise null), 
      d = List.RemoveNulls(c), 
      e = if List.Count(d) > 1 then d{0} + List.Last(d) else d{0}? ?? 0
    ][e]
  ), 
  Result = List.Sum(Transform[Result])
in
  Result
Power Query solution 5 for First and Last Number Sum, proposed by Ramiro Ayala Chávez:
let
  S = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Fx = (x) =>
    let
      LT = List.Transform, 
      a  = Text.ToList(x), 
      b  = LT(a, each try Number.From(_) otherwise "X"), 
      c  = LT(b, each if _ = null then "X" else _), 
      d  = Text.Combine(LT(c, Text.From)), 
      e  = Splitter.SplitTextByCharacterTransition({"A" .. "z"}, {"0" .. "9"})(d), 
      f  = List.Combine(LT(e, Splitter.SplitTextByCharacterTransition({"0" .. "9"}, {"A" .. "z"}))), 
      g  = LT(f, each try Number.From(_) otherwise null), 
      h  = List.Select(g, each _ is number), 
      i  = if List.Count(h) > 1 then List.First(h) + List.Last(h) else List.Last(h), 
      j  = if i = null then 0 else i
    in
      j, 
  k = List.Sum(Table.AddColumn(S, "A", each Fx([Strings]))[A]), 
  Sol = Table.FromValue(k, [DefaultColumnName = "Answer Expected"])
in
  Sol
Power Query solution 6 for First and Last Number Sum, proposed by Ahmed Ariem:
let
  f = (x) =>
    [
      lst = List.Transform({33 .. 47} & {58 .. 126} & {32}, Character.FromNumber), 
      a = List.Transform(
        List.RemoveMatchingItems(Splitter.SplitTextByAnyDelimiter(lst)(x), {""}), 
        Number.From
      ), 
      b = a{0}? + (if List.Count(a) > 1 then List.LastN(a, 1){0} else 0)
    ][b], 
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  to = Table.FromValue(
    List.Sum(Table.TransformColumns(Source, {"Strings", f})[Strings]), 
    [DefaultColumnName = "Answer Expected"]
  )
in
  to
Power Query solution 7 for First and Last Number Sum, proposed by Ahmed Ariem:
let
  f = (x) =>
    [
      lst = Splitter.SplitTextByAnyDelimiter(Text.ToList(Text.Remove(x, {"0" .. "9"})))(x), 
      a   = List.Transform(List.RemoveMatchingItems(lst, {""}), Number.From), 
      b   = a{0}? + (if List.Count(a) > 1 then List.LastN(a, 1){0} else 0)
    ][b], 
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  to = Table.FromValue(
    List.Sum(Table.TransformColumns(Source, {"Strings", f})[Strings]), 
    [DefaultColumnName = "Answer Expected"]
  )
in
  to

Solving the challenge of First and Last Number Sum with Excel

Excel solution 1 for First and Last Number Sum, proposed by Bo Rydobon 🇹🇭:
=SUM(IFNA(--REGEXEXTRACT(A2:A10,"d+(?=D"&{"+d)","*$)"}),))
Excel solution 2 for First and Last Number Sum, proposed by Bo Rydobon 🇹🇭:
=SUM(
    MAP(
        A2:A10,
        LAMBDA(
            v,
            LET(
                n,
                IFERROR(
                    --TEXTSPLIT(
                        v,
                        ,
                        TEXTSPLIT(
                            v,
                            SEQUENCE(
                                10
                            )-1,
                            ,
                            1
                        ),
                        1
                    ),
                    0
                ),
                @n+IF(
                    ROWS(
                        n
                    )>1,
                    TAKE(
                        n,
                        -1
                    )
                )
            )
        )
    )
)
Excel solution 3 for First and Last Number Sum, proposed by John V.:
=SUM(MAP(A2:A10,LAMBDA(x,LET(n,IFNA(--REGEXEXTRACT(x,"d+",1),),IF(COUNT(n)=1,n,SUM(TAKE(n,,{1;-1})))))))

or

✅=SUM(IFNA(--REGEXEXTRACT(A2:A10,{"d+","d.*D(d+)"},{1,2}),))
Excel solution 4 for First and Last Number Sum, proposed by Kris Jaganah:
=SUM(MAP(A2:A10,LAMBDA(x,LET(a,IFNA(--REGEXEXTRACT(x,"[0-9]+",1),0),b,TAKE(a,,1),IF(COUNT(a)>1,b+TAKE(a,,-1),b)))))
Excel solution 5 for First and Last Number Sum, proposed by Timothée BLIOT:
=SUM(
    IFNA(
        MAP(
            A2:A10,
            LAMBDA(
                z,
                SUM(
                    --REGEXEXTRACT(
                        z,
                        "(?<=^D{,9})d+ |d+(?=D*$)",
                        1
                    )
                )
            )
        ),
        0
    )
)
v2: =SUM(
    IFNA(
        --REGEXEXTRACT(
            A2:A10,
            {"d+(?=D+d)",
            "d+(?=D*$)"},
            1
        ),
        0
    )
)
Excel solution 6 for First and Last Number Sum, proposed by Nikola Z Grujicic - Nikola Ž Grujičić:
=SUM(MAP(A2:A10, LAMBDA(a, LET(d, MID(a, SEQUENCE(LEN(a),,,1),1), e, REDUCE("",d, LAMBDA(x, y, IF(ISNUMBER(--y), x&y, x&" "))), f, TEXTSPLIT(e,, " "), g, FILTER(f, f<>""), IFERROR(IFS(ROWS(g)>1, TAKE(g,1)+TAKE(g,-1), ROWS(g)=1, 0+TAKE(g,1)),0)))))
Excel solution 7 for First and Last Number Sum, proposed by Hussein SATOUR:
=SUM(MAP(A2:A10,LAMBDA(x,LET(a,--REGEXEXTRACT(x,"d+",1),IFERROR(IF(COUNT(a)=1,a,@a+TAKE(a,,-1)),0)))))
Excel solution 8 for First and Last Number Sum, proposed by Oscar Mendez Roca Farell:
=SUM(N(MAP(A2:A10,
     LAMBDA(a,
     LET(t,
     --TEXTSPLIT(
         a,
          ,
          TEXTSPLIT(
              a,
               ROW(
                   1:10
               )-1,
               ,
              1
          ),
          1
     ),
     IFERROR(@t+(ROWS(
         t
     )>1)*TAKE(
         t,
          -1
     ),
     ))))))
Excel solution 9 for First and Last Number Sum, proposed by Sunny Baggu:
=SUM(
    
     TOCOL(
         
          MAP(
              
               A2:A10,
              
               LAMBDA(
                   x,
                   
                    LET(
                        
                         _a,
                         TEXTSPLIT(
                             x,
                              TEXTSPLIT(
                                  x,
                                   SEQUENCE(
                                       10,
                                        ,
                                        0
                                   ),
                                   ,
                                   1
                              ),
                              ,
                              1
                         ) + 0,
                        
                         IF(
                             COLUMNS(
                                 _a
                             ) = 1,
                              _a,
                              SUM(
                                  TAKE(
                                      _a,
                                       ,
                                       {1,
                                       -1}
                                  )
                              )
                         )
                         
                    )
                    
               )
               
          ),
         
          3
          
     )
    
)
Excel solution 10 for First and Last Number Sum, proposed by Abdallah Ally:
=SUM(MAP(A2:A10,LAMBDA(x,LET(a,--IFNA(REGEXEXTRACT(x, "d+",1),0),IF(COUNT(a)>1,SUM(CHOOSECOLS(a,{1,-1})),a)))))
Excel solution 11 for First and Last Number Sum, proposed by Hamidi Hamid:
=LET(w,TOCOL(REDUCE(,A2:A10,LAMBDA(a,b,VSTACK(a,TEXTSPLIT(b," ",,)))),3),r,CONCAT(w),z,TOCOL(MID(r,SEQUENCE(LEN(r)),1)),e,TOCOL(IF(ISERROR(z*1),z,1/0),3),m,MAP(w,LAMBDA(b,TEXTJOIN("-",1,TEXTSPLIT(b,e,,1)))),mu,IFERROR(TEXTSPLIT(m,"-",,1)*1,0),md,IFERROR(TEXTAFTER(m,"-",-1,1,)*1,0),SUM(md,mu))
Excel solution 12 for First and Last Number Sum, proposed by Asheesh Pahwa:
=SUM(
    TOCOL(
        MAP(
            A2:A10,
            LAMBDA(
                x,
                
                LET(
                    _t,
                    TEXTSPLIT(
                        x,
                        TEXTSPLIT(
                            x,
                            SEQUENCE(
                                10,
                                ,
                                1
                            ),
                            ,
                            1
                        )
                    )+0,
                    
                    tc,
                    TOCOL(
                        _t,
                        2
                    ),
                    IF(
                        COUNTA(
                            tc
                        )=1,
                        tc,
                        SUM(
                            TAKE(
                                tc,
                                {1,
                                -1}
                            )
                        )
                    )
                )
            )
        ),
        2
    )
)
Excel solution 13 for First and Last Number Sum, proposed by ferhat CK:
=SUM(
    BYROW(
        A2:A10,
        LAMBDA(
            x,
            LET(
                a,
                REGEXEXTRACT(
                    x,
                    "[0-9]+",
                    1
                ),
                n,
                COUNTA(
                    a
                ),
                IFNA(
                    IFS(
                        n>1,
                        SUM(
                            --TAKE(
                                a,
                                ,
                                1
                            ),
                            --TAKE(
                                a,
                                ,
                                -1
                            )
                        ),
                        n=1,
                        --TAKE(
                                a,
                                ,
                                1
                            )
                    ),
                    0
                )
            )
        )
    )
)
Excel solution 14 for First and Last Number Sum, proposed by Jaroslaw Kujawa:
=SUM(
    
    BYROW(
        A2:A10;
        
        LAMBDA(
             x ;
             
            LET(
                 y ;
                 --MID(
                      x ;
                      SEQUENCE(
                          ;
                          LEN(
                              x
                          )
                      );
                     1
                 );
                
                nums;
                 TEXTSPLIT(
                     TEXTJOIN(
                         "";
                         ;
                         IFERROR(
                             XMATCH(
                                 y;
                                 SEQUENCE(
                                     10;
                                     ;
                                     0
                                 );
                                 0
                             )-1;
                             ";"
                         )
                     );
                     ";"
                 );
                nums_f ;
                 FILTER(
                     nums;
                     nums<>""
                 );
                
                SUM(
                    --IFERROR(
                        TAKE(
                            nums_f ;
                             ;
                             IF(
                                 COUNT(
                                     --nums_f
                                 )>1 ;
                                  {1;
                                 -1} ;
                             &     1
                             )
                        );
                        
                    )
                )
            )
        )
    )
)
Excel solution 15 for First and Last Number Sum, proposed by JvdV -:
=SUM(IFNA(--REGEXEXTRACT(A2:A10,{"d+","d.*DKd+"}),))
Excel solution 16 for First and Last Number Sum, proposed by Gerson Pineda:
=SUM(MAP(A2:A10,LAMBDA(x,LET(n,--REGEXEXTRACT(x,"d+",1),IFNA(SUM((COUNT(n)>1)*@n,TAKE(n,,-1)),)))))
Excel solution 17 for First and Last Number Sum, proposed by Ziad A.:
=SUMPRODUCT(IFNA(REGEXEXTRACT(A:A,"(d+)(?:.*D(d+))?")))
Excel solution 18 for First and Last Number Sum, proposed by El Badlis Mohd Marzudin:
=SUM(MAP(A2:A10,LAMBDA(x,LET(a,REGEXEXTRACT(x,"d+",1)+0,IF(COUNT(a)>1,TAKE(a,,1)+TAKE(a,,-1),IFNA(a,))))))

Solving the challenge of First and Last Number Sum with Python

Python solution 1 for First and Last Number Sum, proposed by Konrad Gryczan, PhD:
import pandas as pd
input = pd.read_excel(path, usecols = "A")
test  = pd.read_excel(path, usecols = "B", nrows = 1).values[0][0]
result = input.copy()
result["Numbers"] = result["Strings"].str.findall(r"[-+]?d*.d+|d+").apply(lambda x: [int(i) for i in x])
result["Sum"] = result["Numbers"].apply(lambda x: x[0] + x[-1] if len(x) > 1 else x[0] if len(x) == 1 else 0)
result = result["Sum"].sum()
print(result == test) # True
                    
                  

Solving the challenge of First and Last Number Sum with Python in Excel

Python in Excel solution 1 for First and Last Number Sum, proposed by Alejandro Campos:
import re
data = xl("A2:A10")[0]
def process_string(s):
 numbers = list(map(int, re.findall(r'd+', s)))
 if len(numbers) == 0:
 return 0
 elif len(numbers) == 1:
 return numbers[0]
 else:
 return numbers[0] + numbers[-1]
result = sum(map(process_string, data))
                    
                  
Python in Excel solution 2 for First and Last Number Sum, proposed by Abdallah Ally:
import re
# Create a function to extract numbers
def get_numbers(text):
 nums = [int(x) for x in re.findall('d+', text)]
 result = nums[0] + nums[-1] if len(nums) > 1 else sum(nums)
 return result
df = xl("A1:A10", headers=True)
# Perform data manipulation
total = df['Strings'].map(get_numbers).sum()
total
                    
                  

Solving the challenge of First and Last Number Sum with R

R solution 1 for First and Last Number Sum, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel(path, range = "A1:A10")
test = read_excel(path, range = "B1:B2")
result = input %>%
 mutate(numbers = map(Strings, str_extract_all, "\d+")) %>%
 unnest(numbers) %>%
 unnest(numbers) %>%
 mutate(rn = row_number(), 
 min = min(rn),
 max = max(rn),
 .by = Strings) %>%
 filter(rn == min | rn == max) %>%
 summarise(sum = sum(as.numeric(numbers)))
identical(result$sum, test$`Answer Expected`)
# [1] TRUE
                    
                  

&&

Leave a Reply