Home » Calculate Digital Root

Calculate Digital Root

Calculate Digital root of the given numbers. This is also known as Digital Sum, Seed Number, Numerological Sum. Sum all digits such that final sum reduces to a single digit. 25 = 2+5 = 7 59 = 5+9 = 14 = 1+4 = 5 5638 = 5+6+3+8 = 22 = 2+2 = 4.

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

Solving the challenge of Calculate Digital Root with Power Query

Power Query solution 1 for Calculate Digital Root, proposed by Bo Rydobon 🇹🇭:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Rs = Table.TransformRows(
    Source, 
    each List.Accumulate(
      {1, 1, 1}, 
      [Number], 
      (s, l) => List.Sum(List.Transform(Text.ToList(Text.From(s)), Number.From))
    )
  )
in
  Rs
Power Query solution 2 for Calculate Digital Root, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  Result = Table.AddColumn(
    Fonte, 
    "Personalizar", 
    each [
      a = Text.ToList([Number]), 
      b = List.Transform(a, Number.From), 
      c = List.Sum(b), 
      d = List.Sum(List.Transform(Text.ToList(Text.From(c)), Number.From)), 
      e = if d > 10 then d - 9 else d
    ][e]
  )
in
  Result
Power Query solution 3 for Calculate Digital Root, proposed by Brian Julius:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  AddIdx = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type), 
  AddListGen = Table.AddColumn(
    AddIdx, 
    "Custom", 
    each List.Generate(
      () => [
        x = List.Sum(List.Transform(Text.ToList(Text.From([Number])), Number.From)), 
        y = List.Count(List.Transform(Text.ToList(Text.From([Number])), Number.From))
      ], 
      each [y] > 1, 
      each [
        x = List.Sum(List.Transform(Text.ToList(Text.From([x])), Number.From)), 
        y = List.Count(List.Transform(Text.ToList(Text.From([x])), Number.From))
      ]
    )
  ), 
  Expand1 = Table.ExpandListColumn(AddListGen, "Custom"), 
  Expand2 = Table.ExpandRecordColumn(Expand1, "Custom", {"x"}, {"Custom.x"}), 
  Group = Table.Group(Expand2, {"Number"}, {{"Answer", each List.Min([Custom.x]), type number}})
in
  Group
Power Query solution 4 for Calculate Digital Root, proposed by Brian Julius:
                    
                  
Power Query solution 5 for Calculate Digital Root, proposed by Bhavya Gupta:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Fn = (n as text) =>
    List.Last(
      List.Generate(
        () => [x = n, y = Text.Length(n)], 
        each [y] > 1, 
        each [
          x = Text.From(List.Sum(List.Transform(Text.ToList([x]), Number.From))), 
          y = Text.Length([x])
        ], 
        each Number.From([x])
      )
    ), 
  Final = Table.TransformColumns(Source, {{"Number", Fn}})
in
  Final
Power Query solution 6 for Calculate Digital Root, proposed by Matthias Friedmann:
let
  Source = Excel.CurrentWorkbook(){[Name = "DigitalRoot"]}[Content], 
  #"Added Custom" = Table.AddColumn(
    Source, 
    "Digital Root", 
    each List.Last(
      List.Generate(
        () => [
          n = List.Sum(List.Transform(Text.ToList([Number]), Number.FromText)), 
          i = Text.Length(Text.From(n))
        ], 
        each [i] > 1, 
        each [
          n = List.Sum(List.Transform(Text.ToList(Text.From([n])), Number.FromText)), 
          i = Text.Length(Text.From([n]))
        ], 
        each [n]
      )
    )
  )
in
  #"Added Custom"
Power Query solution 7 for Calculate Digital Root, proposed by Venkata Rajesh:
let
  Source = Data, 
  Result = Table.AddColumn(
    Source, 
    "Answer", 
    each List.Accumulate(
      List.Transform(Text.ToList([Number]), each Number.From(_)), 
      0, 
      (state, current) =>
        let
          _num = state + current
        in
          if _num > 9 then
            List.Sum(List.Transform(Text.ToList(Text.From(_num)), each Number.From(_)))
          else
            _num
    ), 
    Int64.Type
  )
in
  Result
Power Query solution 8 for Calculate Digital Root, proposed by Jan Willem Van Holst:
let
  Source = Table.FromRows(
    Json.Document(
      Binary.Decompress(
        Binary.FromText(
          "PY3BDcAwCAN3ybsPih0Ms0Tdf42SqCofY1vyrTXKOGNcI8ZzrYGCwby9H59VNCKN2RlOdneictEmOkcXOoWKspDNfiAmxYl/qoK3W7J2rS2+tfv6UMGGQb3uBdU+BcKzMR/leQE=", 
          BinaryEncoding.Base64
        ), 
        Compression.Deflate
      )
    ), 
    let
      _t = ((type nullable text) meta [Serialized.Text = true])
    in
      type table [Number = _t, Answer = _t]
  ), 
  dx = (n) =>
    if Text.Length(n) = 1 then
      n
    else
      @dx(Text.From(List.Sum(List.Transform(Text.ToList((n)), Number.From)))), 
  answer = Table.AddColumn(Source, "MyAnswer", each dx([Number]))
in
  answer

Solving the challenge of Calculate Digital Root with Excel

Excel solution 1 for Calculate Digital Root, proposed by Bo Rydobon 🇹🇭:
=MOD(MMULT(--(0&MID(
    A2:A8,
    {1,
    13,
    25},
    12
)),
    {1;1;1})-1,
    9)+1

=MOD(
    MMULT(
        IFERROR(
            --MID(
    A2:A8,
    {1,
    13,
    25},
    12
),
            
        ),
        {1;1;1}
    )-1,
    9
)
Excel solution 2 for Calculate Digital Root, proposed by Rick Rothstein:
=MAP(A2:A8,LAMBDA(x,MOD(SUM(0+MID(x,SEQUENCE(LEN(x)),1))-1,9)+1))

Edit Note: The above formula does not take into account a value of 0 being in one of the cells. If that could be a possibility, then this formula should be used instead...

=MAP(A2:A8,LAMBDA(x,(MOD(SUM(0+MID(x,SEQUENCE(LEN(x)),1))-1,9)+1)*(x>0)))
Excel solution 3 for Calculate Digital Root, proposed by John V.:
=MAP(A2:A8,
    LAMBDA(x,
    1+MOD(SUM(--(0&MID(
        x,
        ROW(
            1:99
        ),
        1
    )))-1,
    9)))
Excel solution 4 for Calculate Digital Root, proposed by محمد حلمي:
=MAP(
    A2:A8,
    LAMBDA(
        a,
        REDUCE(
            a,
            SEQUENCE(
                9
            ),
            LAMBDA(
                a,
                d,
                SUM(
                    MID(
                        a,
                        SEQUENCE(
                            LEN(
                                a
                            )
                        ),
                        1
                    )+0
                )
            )
        )
    )
)
Excel solution 5 for Calculate Digital Root, proposed by Kris Jaganah:
=MAP(
    A2:A8,
    LAMBDA(
        x,
        LET(
            a,
            x,
            b,
            SUM(
                MID(
                    a,
                    SEQUENCE(
                        ,
                        LEN(
                            a
                        )
                    ),
                    1
                )/1
            ),
            c,
            SUM(
                MID(
                    b,
                    SEQUENCE(
                        LEN(
                            b
                        )
                    ),
                    1
                )/1
            ),
            d,
            SUM(
                MID(
                    c,
                    SEQUENCE(
                        LEN(
                            c
                        )
                    ),
                    1
                )/1
            ),
            d
        )
    )
)
Excel solution 6 for Calculate Digital Root, proposed by Julian Poeltl:
=MAP(
    A2:A8,
    LAMBDA(
        N,
        LET(
            S,
            LAMBDA(
                A,
                SUM(
                    --MID(
                        A,
                        SEQUENCE(
                            LEN(
                                A
                            )
                        ),
                        1
                    )
                )
            ),
            REDUCE(
                N,
                SEQUENCE(
                    10
                ),
                LAMBDA(
                    A,
                    B,
                    S(
                                A
                            )
                )
            )
        )
    )
)
Excel solution 7 for Calculate Digital Root, proposed by Aditya Kumar Darak 🇮🇳:
=LET(
    
     _e,
     LAMBDA(
         ME,
          a,
         
          IF(
              a < 10,
               a,
               ME(
                   ME,
                    SUM(
                        --MID(
                            a,
                             SEQUENCE(
                                 LEN(
                                     a
                                 )
                             ),
                             1
                        )
                    )
               )
          )
          
     ),
    
     _r,
     MAP(
         A2:A8,
          LAMBDA(
              x,
               _e(
                   _e,
                    x
               )
          )
     ),
    
     _r
    
)
Excel solution 8 for Calculate Digital Root, proposed by Aditya Kumar Darak 🇮🇳:
=MAP(
    
     A2:A8,
    
     LAMBDA(
         a,
         
          REDUCE(
              
               a,
              
               SEQUENCE(
                   LEN(
                       a
                   )
               ),
              
               LAMBDA(
                   x,
                    y,
                    SUM(
                        --MID(
                            x,
                             SEQUENCE(
                                 LEN(
                                     x
                                 )
                             ),
                             1
                        )
                    )
               )
               
          )
          
     )
    
)
Excel solution 9 for Calculate Digital Root, proposed by Timothée BLIOT:
=LET(
    F,
     LAMBDA(
         Self,
         n,
          IF(
              LEN(
                  n
              )=1,
               n,
               Self(
                   Self,
                    SUM(
                        --MID(
                            n,
                            SEQUENCE(
                                LEN(
                  n
              )
                            ),
                            1
                        )
                    ) 
               ) 
          )
     ),
     MAP(
         A2:A8,
          LAMBDA(
              a,
               F(
                   F,
                   a
               )
          )
     )
)
Excel solution 10 for Calculate Digital Root, proposed by Hussein SATOUR:
=MAP(
    A2:A8,
    
     LAMBDA(
         x,
         
          LET(
              
               a,
               LAMBDA(
                   x,
                    SUM(
                        --MID(
                            x,
                             SEQUENCE(
                                 LEN(
                                     x
                                 )
                             ),
                             1
                        )
                    )
               ),
              
               f,
               LAMBDA(
                   ME,
                    y,
                    IF(
                        LEN(
                            y
                        ) = 1,
                         y,
                         ME(
                             ME,
                              a(
                            y
                        )
                         )
                    )
               ),
              
               f(
                   f,
                    x
               )
          )
     )
)
Excel solution 11 for Calculate Digital Root, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
MOD(
    A2-1,
    9
)+1
Excel solution 12 for Calculate Digital Root, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=LET(
    b;
    ROW(
        $A$1:$A$100
    );
    a;
    SUM(
        IFERROR(
            VALUE(
                MID(
                    SUM(
                        VALUE(
                            MID(
                                A2;
                                ROW(
                                    INDIRECT(
                                        "A1:"&"A"&LEN(
                                            A2
                                        )
                                    )
                                );
                                1
                            )
                        )
                    );
                    b;
                    1
                )
            );
            ""
        )
    );
    IF(
        LEN(
            a
        )>1;
        SUM(
            IFERROR(
                VALUE(
                    MID(
                        a;
                        b;
                        1
                    )
                );
                ""
            )
        );
        a
    )
)
Excel solution 13 for Calculate Digital Root, proposed by Victor Momoh (MVP, MOS, R.Eng):
=MAP(
    A2:A8,
    LAMBDA(
        x,
        LET(
             
            Dg,
            LAMBDA(
                ME,
                x,
                IF(
                    LEN(
                        x
                    )=1,
                    x,
                    ME(
                        ME,
                        SUM(
                            --MID(
                                x,
                                SEQUENCE(
                                    LEN(
                        x
                    )
                                ),
                                1
                            )
                        )
                    )
                )
            ),
             
            Dg(
                Dg,
                x
            )
        )
    )
)
Excel solution 14 for Calculate Digital Root, proposed by Guillermo Arroyo&:
=MAP(
    A2:A8,
    LAMBDA(
        a,
        LET(
            f,
            LAMBDA(
                p,
                s,
                LET(
                    q,
                    SUM(
                        --MID(
                            s,
                            SEQUENCE(
                                LEN(
                                    s
                                )
                            ),
                            1
                        )
                    ),
                    IF(
                        LEN(
                            q
                        )=1,
                        q,
                        p(
                            p,
                            q
                        )
                    )
                )
            ),
            f(
                f,
                a
            )
        )
    )
)

=MAP(A2:A8,
    LAMBDA(a,
    LET(b,
    SUM(--(0&MID(
        a,
        {1,
        11,
        21,
        31},
        10
    ))),
    IF(
        b=0,
        0,
        MOD(
            b-1,
            9
        )+1
    ))))
Excel solution 15 for Calculate Digital Root, proposed by Meni Porat:
=LET(
    x,
     SUM(
         IFERROR(
             --MID(
                 B1,
                 SEQUENCE(
                     LEN(
                         B1
                     )
                 ),
                 1
             ),
             0
         )
     ),
    y,
     SUM(
         --MID(
             x,
              SEQUENCE(
                  LEN(
                      x
                  )
              ),
             1
         )
     ),
    IF(
        LEN(
                      x
                  )=1,
        x,
        IF(
            y>9,
            y-9,
            y
        )
    )
)
Excel solution 16 for Calculate Digital Root, proposed by Tushar Mehta:
=LAMBDA(
    rng,
    LET(
        _name,
        "digital root",
        _ref,
        "https://en.wikipedia.org/wiki/Digital_root",
        
         MAP(
             rng,
             LAMBDA(
                 x,
                 
                  LET(
                      _doc,
                      "sumOnce reduces the number of digits to under 14",
                      
                       _sumOnce,
                      SUM(
                          --MID(
                              x,
                              SEQUENCE(
                                  LEN(
                                      x
                                  )
                              ),
                              1
                          )
                      ),
                      base,
                      10,
                      
                       IF(
                           _sumOnce=0,
                           0,
                           MOD(
                               _sumOnce-1,
                               base-1
                           )+1
                       )
                  )
             )
         )
    )
)(A2:A9)

Solving the challenge of Calculate Digital Root with Python in Excel

Python in Excel solution 1 for Calculate Digital Root, proposed by Alejandro Campos:
def digital_root(n):
 while n >= 10:
 n = sum(int(digit) for digit in str(n))
 return n
numbers = xl("A2:A8")[0]
results = {'Number': numbers, 'Digital Root': [digital_root(int(num)) for num in numbers]}
df = pd.DataFrame(results)
df
                    
                  

Solving the challenge of Calculate Digital Root with SQL

SQL solution 1 for Calculate Digital Root, proposed by Zoran Milokanović:
WITH /* Microsoft SQL Server 2019 */
DATA_PREP
AS
(
 SELECT
 ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS ORDERING
 ,D.NUMBER
 ,CAST(D.NUMBER AS VARCHAR(MAX)) AS TEMP
 ,0 AS ANSWER
 FROM DATA D
),
CALC
AS
(
 SELECT
 DP.ORDERING, DP.NUMBER, DP.TEMP, DP.ANSWER
 FROM DATA_PREP DP
 UNION ALL
 SELECT
 C.ORDERING
 ,C.NUMBER
 ,CASE 
 THEN CAST(C.ANSWER AS VARCHAR(MAX))
 ELSE SUBSTRING(C.TEMP, 1, LEN(C.TEMP) - 1)
 END AS TEMP
 ,CASE 
 THEN 0
 ELSE C.ANSWER + SUBSTRING(C.TEMP, LEN(C.TEMP), 1)
 END AS ANSWER
 FROM CALC C
 NOT(C.TEMP = '' AND C.ANSWER < 10)
)
SELECT
 C.NUMBER, C.ANSWER
FROM CALC C
WHERE
 C.TEMP = ''
AND C.ANSWER < 10
ORDER BY
 C.ORDERING
;
                    
                  

&&

Leave a Reply