Home » Stack Matrix Diagonals Horizontally

Stack Matrix Diagonals Horizontally

Stack both the diagonals of n x n metrices horizontally.

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

Solving the challenge of Stack Matrix Diagonals Horizontally with Power Query

Power Query solution 1 for Stack Matrix Diagonals Horizontally, proposed by John V.:
let
 S = Excel.CurrentWorkbook(){[Name="data"]}[Content],
 T = Table.ToRows(S), n = Table.RowCount(S)
in
 Table.FromRows(List.Transform({0..n - 1}, each {T{_}{_}, T{_}{n - _ - 1}}))

Blessings!


                    
                  
          
Power Query solution 2 for Stack Matrix Diagonals Horizontally, proposed by Aditya Kumar Darak 🇮🇳:
let
  // table = A2:C4, header = false 
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  ToRow = Table.ToRows(Source), 
  Rows = List.Count(ToRow), 
  Record = List.Transform(
    {1 .. Rows}, 
    each [N1 = _ - 1, N2 = Rows - _, D1 = ToRow{N1}{N1}, D2 = ToRow{N1}{N2}][[D1], [D2]]
  ), 
  Return = Table.FromRecords(Record)
in
  Return
Power Query solution 3 for Stack Matrix Diagonals Horizontally, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Fx = (f) =>
    let
      D1 = List.Transform({0 .. Table.ColumnCount(f) - 1}, each Table.ToRows(f){_}{_}), 
      D2 = List.Transform({0 .. Table.ColumnCount(f) - 1}, each List.Reverse(Table.ToRows(f){_}){_}), 
      a  = Table.FromColumns({D1, D2}, {"D1", "D2"})
    in
      a, 
  Sol = Table.Combine(List.Transform({0}, each Fx(Excel.CurrentWorkbook(){_}[Content])))
in
  Sol
Power Query solution 4 for Stack Matrix Diagonals Horizontally, proposed by Ramiro Ayala Chávez:
let
  Origen = Excel.CurrentWorkbook(){[Name = "Tabla3"]}[Content], 
  a      = List.Combine(Table.ToRows(Origen)), 
  b      = List.Alternate(a, Table.RowCount(Origen), 1, 1), 
  c      = Table.FromColumns(List.Transform(Table.ToRows(Origen), each List.Reverse(_))), 
  d      = List.Combine(Table.ToRows(c)), 
  e      = List.Alternate(d, Table.RowCount(Origen), 1, 1), 
  Sol    = Table.FromColumns({b, e}, {"D1", "D2"})
in
  Sol
Power Query solution 5 for Stack Matrix Diagonals Horizontally, proposed by Glyn Willis:
let
  Source = Excel.CurrentWorkbook(){[Name = "Data"]}[Content], 
  #"Kept First Rows" = Table.FirstN(
    Source, 
    List.Last(
      List.Generate(
        () => [I = 0, F = 0], 
        each [F] = 0, 
        each [
          I = [I] + 1, 
          F = Number.From(Source[Column1]{[I]} = null and Source[Column1]{[I] + 1} = null)
        ], 
        each [I]
      )
    )
  ), 
  #"Grouped Rows" = Table.Group(
    #"Kept First Rows", 
    {"Column1"}, 
    {
      {
        "StackedDiag", 
        each [
          TableData = Table.SelectColumns(
            Table.RemoveFirstN(_, 1), 
            List.Transform({0 .. Table.RowCount(_) - 2}, each Table.ColumnNames(Source){_})
          ), 
          TableColumns = Table.ToColumns(TableData), 
          RowCount = Table.RowCount(TableData), 
          RowList = {0 .. RowCount - 1}, 
          CreateStack = Table.FromColumns(
            {
              List.Transform(RowList, (r) => TableColumns{r}{r}), 
              List.Transform(RowList, (r) => List.Reverse(TableColumns){r}{r})
            }
          )
        ][CreateStack], 
        type table
      }
    }, 
    GroupKind.Local, 
    (x, y) => Number.From(y[Column1] is null)
  ), 
  #"Added Index" = Table.AddIndexColumn(#"Grouped Rows", "Index", 1, 1, Int64.Type)[
    [StackedDiag], 
    [Index]
  ], 
  #"Expanded StackedDiag" = Table.ExpandTableColumn(
    #"Added Index", 
    "StackedDiag", 
    {"Column1", "Column2"}, 
    {"StackedDiag.Column1", "StackedDiag.Column2"}
  )
in
  #"Expanded StackedDiag"

Solving the challenge of Stack Matrix Diagonals Horizontally with Excel

Excel solution 1 for Stack Matrix Diagonals Horizontally, proposed by Bo Rydobon 🇹🇭:
=LET(
    z,
    A2:C4,
    r,
    ROW(
        z
    ),
    s,
    r-@r+1,
    INDEX(
        z,
        s,
        HSTACK(
            s,
            -SORT(
                -s
            )
        )
    )
)
Excel solution 2 for Stack Matrix Diagonals Horizontally, proposed by Rick Rothstein:
=LET(
    n,
    A11:E15,
    a,
    {0,
    1},
    r,
    ROWS(
        n
    ),
    s,
    SEQUENCE(
        r
    ),
    INDEX(
        n,
        s,
        a*r-{-1,
        1}*s+a
    )
)
Excel solution 3 for Stack Matrix Diagonals Horizontally, proposed by John V.:
=LET(
    r,
    A2:C4,
    n,
    ROWS(
        r
    ),
    d,
    SEQUENCE(
        n
    ),
    INDEX(
        r,
        d,
        HSTACK(
            d,
            1+n-d
        )
    )
)
Excel solution 4 for Stack Matrix Diagonals Horizontally, proposed by محمد حلمي:
=LET(
    d,
    A11:E15,
    i,
    ROWS(
        d
    ),
    s,
    SEQUENCE(
        i
    ),
    
    INDEX(
        d,
        s,
        HSTACK(
            s,
            i+1-s
        )
    )
)

///

=LET(
    v,
    A1:F15,
    
    j,
    SCAN(
        0,
        TAKE(
            v,
            ,
            1
        )="",
        LAMBDA(
            a,
            d,
            a+d
        )
    ),
    
    DROP(
        REDUCE(
            0,
            UNIQUE(
                j
            ),
            LAMBDA(
                a,
                c,
                
                LET(
                    e,
                    DROP(
                        FILTER(
                            v,
                            j=c
                        ),
                        1
                    ),
                    
                    d,
                    FILTER(
                        e,
                        TAKE(
                            e,
                            1
                        )
                    ),
                    i,
                    ROWS(
        d
    ),
                    s,
                    SEQUENCE(
        i
    ),
                    
                    VSTACK(
                        a,
                        
                        VSTACK(
                            {"",
                            ""},
                            INDEX(
        d,
        s,
        HSTACK(
            s,
            i+1-s
        )
    )
                        )
                    )
                )
            )
        ),
        2
    )
)
Excel solution 5 for Stack Matrix Diagonals Horizontally, proposed by Kris Jaganah:
=LET(a,
    A1:E15,
    b,
    BYROW(a,
    LAMBDA(x,
    SUM(--(x>0)))),
    c,
    MAP(SEQUENCE(
        ROWS(
            b
        )
    ),
    LAMBDA(x,
    SUM(--(CHOOSEROWS(
        b,
        x
    )=TAKE(
        b,
        x
    ))))),
    d,
    b-c+1,
    e,
    MAX(
            b
        ),
    f,
    SEQUENCE(
        ,
        e
    ),
    g,
    HSTACK(TOCOL(
        IFS(
            c=f,
            a
        ),
        3
    ),
    MMULT(IF((d=f),
    a,
    0),
    SEQUENCE(
        e,
        ,
        ,
        0
    ))),
    IF(
        g=0,
        "",
        g
    ))
Excel solution 6 for Stack Matrix Diagonals Horizontally, proposed by Julian Poeltl:
=LET(
    A,
    A2:C4,
    S,
    SQRT(
        COUNTA(
            A
        )
    ),
    O,
    INDEX(
        A,
        SEQUENCE(
            S
        ),
        SEQUENCE(
            S
        )
    ),
    T,
    INDEX(
        A,
        SEQUENCE(
            S
        ),
        SEQUENCE(
            S,
            ,
            S,
            -1
        )
    ),
    HSTACK(
        O,
        T
    )
)
Excel solution 7 for Stack Matrix Diagonals Horizontally, proposed by Timothée BLIOT:
=LET(
    A,
    A2:C4,
    B,
    MUNIT(
        ROWS(
            A
        )
    ),
    F,
    LAMBDA(
        n,
        m,
        TOCOL(
            IF(
                n*m=0,
                1/0,
                n*m
            ),
            3
        )
    ),
    HSTACK(
        F(
            A,
            B
        ),
        F(
            A,
            SORT(
                B,
                SEQUENCE(
                    SUM(
                        B
                    )
                )
            )
        )
    )
)
Excel solution 8 for Stack Matrix Diagonals Horizontally, proposed by Oscar Mendez Roca Farell:
=LET(
    _d,
     A2:C4,
    _n,
     ROWS(
         _d
     ),
    _u,
     MUNIT(
         _n
     ),
    _f,
     LAMBDA(
         i,
          TOCOL(
              _d/i,
               2
          )
     ),
     HSTACK(
         _f(
             _u
         ),
         _f(
             CHOOSECOLS(
                 _u,
                 _n+1-SEQUENCE(
         _n
     )
             )
         )
     )
)
Excel solution 9 for Stack Matrix Diagonals Horizontally, proposed by Sunny Baggu:
=LET(
    
     rng,
     A11:E15,
    
     _a,
     SEQUENCE(
         ROWS(
             rng
         )
     ),
    
     _b,
     SORT(
         _a,
          ,
          -1
     ),
    
     HSTACK(
         INDEX(
             rng,
              _a,
              _a
         ),
          INDEX(
              rng,
               _a,
               _b
          )
     )
    
)
Excel solution 10 for Stack Matrix Diagonals Horizontally, proposed by Sunny Baggu:
=LET(
 rng,
     A11:E15,
    
 _r1,
     SEQUENCE(
         ROWS(
             rng
         )
     ),
    
 _r2,
     SORT(
         _r1,
          ,
          -1
     ),
    
 _e1,
     LAMBDA(
         cond,
          TOCOL(
              IF(
                  cond,
                   rng,
                   1 / x
              ),
               3
          )
     ),
    
 HSTACK(_e1(_r1 = TOROW(
     _r1
 )),
     _e1(_r1 = TOROW(
         _r2
     )))
)
Excel solution 11 for Stack Matrix Diagonals Horizontally, proposed by LEONARD OCHEA 🇷🇴:
=LET(m,
    A2:C4,
    n,
    ROWS(
        m
    ),
    f,
    SEQUENCE(
        n
    ),
    c,
    TOROW(
        f
    ),
    HSTACK(TOCOL(m/(f=c),
    3),
    TOCOL(m/(f+c=n+1),
    3)))

=LET(m,
    A2:C4,
    n,
    ROWS(
        m
    ),
    s,
    SEQUENCE(
        n
    ),
    INDEX(TOCOL(
        m
    ),
    HSTACK(s*(n+1)-n,
    s*(n-1)+1)))
Excel solution 12 for Stack Matrix Diagonals Horizontally, proposed by Abdallah Ally:
=LET(
    a,
    A2:C4,
    b,
    ROWS(
        a
    ),
    c,
    SEQUENCE(
        b
    ),
    HSTACK(
        INDEX(
            a,
            c,
            c
        ),
        INDEX(
            a,
            c,
            SORT(
                c,
                ,
                -1
            )
        )
    )
)
Excel solution 13 for Stack Matrix Diagonals Horizontally, proposed by 🇵🇪 Ned Navarrete C.:
LET(
    a,
    A2:C4,
    r,
    ROWS(
        a
    ),
    s,
    SEQUENCE(
        ,
        r
    ),
    u,
    MUNIT(
        r
    ),
    b,
    SORTBY(
        a,
        s,
        -1
    ),
    HSTACK(
        TOCOL(
            a/u,
            3
        ),
        TOCOL(
            b/u,
            3
        )
    )
)
Excel solution 14 for Stack Matrix Diagonals Horizontally, proposed by 🇵🇪 Ned Navarrete C.:
=LET(
    a,
    A2:C4,
    b,
    A6:D9,
    c,
    A11:E15,
    f,
    LAMBDA(
        r,
        LET(
            i,
            ROWS(
                r
            ),
            s,
            SEQUENCE(
                i
            ),
             EXPAND(
                 INDEX(
                     r,
                     s,
                     HSTACK(
                         s,
                         i+1-s
                     )
                 ),
                 i+1,
                 2,
                 ""
             )
        )
    ),
    DROP(
        VSTACK(
            f(
                a
            ),
            f(
                b
            ),
            f(
                c
            )
        ),
        -1
    )
)
Excel solution 15 for Stack Matrix Diagonals Horizontally, proposed by Thang Van:
=LET(_r,
    IFERROR(LET(
 _a,
    A2:E15,
    
 b,
    BYROW(_a,
    LAMBDA(x,
    SUM(--(x>0)))),
    
 c,
    HSTACK(
        b,
        _a
    ),
    
 d,
    FILTER(
        UNIQUE(
            b
        ),
        UNIQUE(
            b
        )>0
    ),
    
 REDUCE(
     "",
     FILTER(
         d,
         d<>0
     ),
     LAMBDA(
         _init,
         _each,
         VSTACK(
              _init,
             
              LET(
                  _a,
                  DROP(
                      TAKE(
                          FILTER(
                              c,
                              CHOOSECOLS(
                                  c,
                                  1
                              )=_each
                          ),
                          _each,
                          _each+1
                      ),
                      ,
                      1
                  ),
                  
                   _len,
                  SEQUENCE(
                      COUNT(
                          CHOOSECOLS(
                              _a,
                              1
                          )
                      ),
                      ,
                      1
                  ),
                  _decen_len,
                  SORT(
                      _len,
                      1,
                      -1
                  ),
                  
                   _r1,
                  REDUCE(
                      "",
                      _len,
                      LAMBDA(
                          _init,
                          _each,
                          VSTACK(
                              _init,
                              CHOOSECOLS(
                                  CHOOSEROWS(
                                      _a,
                                      _each
                                  ),
                                  _each
                              )
                          )
                      )
                  ),
                  
                   _r2,
                  REDUCE(
                      "",
                      _len,
                      LAMBDA(
                          _init,
                          _each,
                          VSTACK(
                              _init,
                              CHOOSECOLS(
                                  CHOOSEROWS(
                                      _a,
                                      _each
                                  ),
       &                           1+MAX(
                                      _decen_len
                                  )-_each
                              )
                          )
                      )
                  ),
                  
                   HSTACK(
                       _r1,
                       _r2
                   )
              ),
             1
         )
         
     )
 )
),
    "none"),
    DROP(
        FILTER(
            _r,
            CHOOSECOLS(
                _r,
                2
            )<>"none"
        ),
        1
    ))
Excel solution 16 for Stack Matrix Diagonals Horizontally, proposed by Charles Roldan:
=LAMBDA(
    Mat,
     LET(
         n,
          SEQUENCE(
              ROWS(
                  Mat
              )
          ),
         
         INDEX(
             Mat,
              n,
              HSTACK(
                  n,
                   SORT(
                       n,
                        ,
                        -1
                   )
              )
         )
     )
)(A11:E15)
Excel solution 17 for Stack Matrix Diagonals Horizontally, proposed by Ziad A.:
=LET(r,A1:C3,n,ROWS(r),m,MUNIT(n),INDEX({TOCOL(1/(m*r)^-1,2),TOCOL(1/(SORT(m,SEQUENCE(n),)*r)^-1,2)}))
Excel solution 18 for Stack Matrix Diagonals Horizontally, proposed by Iván Cortinas Rodríguez:
=LET(
    m,
    A6:D9,
    nr,
    SEQUENCE(
        ROWS(
            m
        )
    ),
    HSTACK(
        INDEX(
            m,
            nr,
            nr
        ),
        SORT(
            MAP(
                SEQUENCE(
                    ROWS(
            m
        ),
                    1,
                    ROWS(
            m
        ),
                    -1
                ),
                nr,
                LAMBDA(
                    f,
                    c,
                    INDEX(
                        m,
                        f,
                        c
                    )
                )
            ),
            ,
            1
        )
    )
)
Excel solution 19 for Stack Matrix Diagonals Horizontally, proposed by Edwin Tisnado:
=LET(a,
    A2:C4,
    b,
    MUNIT(
        ROWS(
            a
        )
    ),
    c,
    1/(1/a*b),
    d,
    1/(1/SORTBY(
        b,
        -SEQUENCE(
            ,
            COLUMNS(
                b
            )
        )
    ))*a,
    HSTACK(
        TOCOL(
            c,
            2
        ),
        TOCOL(
            d,
            2
        )
    ))
Excel solution 20 for Stack Matrix Diagonals Horizontally, proposed by Abdelrahman Omer, MBA, PMP:
=LET(a,
    A2:C4,
    HSTACK(TOCOL(
        a/MUNIT(
            ROWS(
                a
            )
        ),
        2
    ),
    TOCOL(a/MAKEARRAY(ROWS(
                a
            ),
    ROWS(
                a
            ),
    LAMBDA(r,
    c,
    --(r+c-1=ROWS(
                a
            )))),
    2)))
Excel solution 21 for Stack Matrix Diagonals Horizontally, proposed by Anup Kumar:
=LET(
    m,
    A11:E15,
    
    n,
    ROWS(
        m
    ),
    
    a,
    SCAN(
        1,
        SEQUENCE(
            n
        ),
        LAMBDA(
            x,
            y,
            INDEX(
                m,
                y,
                y
            )
        )
    ),
    
    b,
    SCAN(
        1,
        SEQUENCE(
            n
        ),
        LAMBDA(
            x,
            y,
            INDEX(
                CHOOSECOLS(
                    m,
                    SEQUENCE(
                        n,
                        ,
                        n,
                        -1
                    )
                ),
                y,
                y
            )
        )
    ),
    
    HSTACK(
        a,
        b
    )
    
)

Using XLOOKUP
=LET(
    
    m,
    A6:D9,
    
    c,
    ROWS(
        m
    ),
    
    r,
    SEQUENCE(
        c*c
    ),
    
    d,
    TOCOL(
        m
    ),
    
    HSTACK(
        XLOOKUP(
            SEQUENCE(
                c,
                ,
                1,
                c+1
            ),
            r,
            d
        ),
        XLOOKUP(
            SEQUENCE(
                c,
                ,
                c,
                c-1
            ),
            r,
            d
        )
    )
    
)
Excel solution 22 for Stack Matrix Diagonals Horizontally, proposed by Rayan S.:
=LET(
    arr,
    A11:E15,
    c,
    COUNT(
        A11:A15
    ),
    x,
    SEQUENCE(
        c
    ),
    y,
    SEQUENCE(
        c,
        ,
        c,
        -1
    ),
    HSTACK(
        INDEX(
            arr,
            x,
            x
        ),
        INDEX(
            arr,
            x,
            y
        )
    )
)
Excel solution 23 for Stack Matrix Diagonals Horizontally, proposed by Hazem Hassan:
=LET(
    
     a,
     A6:D9,
    
     b,
     SEQUENCE(
         ROWS(
             a
         )
     ),
    
     c,
     TOROW(
         b
     ),
    
     HSTACK(
         
          TOCOL(
              IF(
                  b = c,
                   a,
                   1 / 0
              ),
               3
          ),
         
          TOCOL(
              IF(
                  SORT(
                      b,
                       ,
                       -1
                  ) = c,
                   a,
                   1 / 0
              ),
               3
          )
          
     )
    
)
Excel solution 24 for Stack Matrix Diagonals Horizontally, proposed by Hazem Hassan:
=LET(
    
     a,
     A2:C4,
    
     b,
     ROWS(
         a
     ),
    
     c,
     MUNIT(
         b
     ),
    
     HSTACK(
         
          TOCOL(
              IF(
                  c,
                   a,
                   1 / 0
              ),
               3
          ),
         
          TOCOL(
              
               IF(
                   CHOOSECOLS(
                       c,
                        SORT(
                            SEQUENCE(
         b
     ),
                             ,
                             -1
                        )
                   ),
                    a,
                    1 / 0
               ),
              
               3
               
          )
          
     )
    
)
Excel solution 25 for Stack Matrix Diagonals Horizontally, proposed by Gabriel Raigosa:
=LET(
    d,
    A2:C4,
    s,
    SEQUENCE(
        ROWS(
            d
        )
    ),
    INDEX(
        d,
        s,
        HSTACK(
            s,
            -SORT(
                -s
            )
        )
    )
) 

▶️ES:
=LET(
    d,
    A2:C4,
    s,
    SECUENCIA(
        FILAS(
            d
        )
    ),
    INDICE(
        d,
        s,
        APILARH(
            s,
            -ORDENAR(
                -s
            )
        )
    )
)
Excel solution 26 for Stack Matrix Diagonals Horizontally, proposed by Luis Couto:
=LET(
    d;
    A11:E15;
    f;
    FILAS(
        d
    );
    u;
    M.UNIDAD(
        f
    );
    i;
    --ARCHIVOMAKEARRAY(
        f;
        f;
        LAMBDA(
            x;
            y;
            x+y=f+1
        )
    );
    APILARH(
        ENCOL(
            d/u;
            3
        );
        ENCOL(
            d/i;
            3
        )
    )
)

Solving the challenge of Stack Matrix Diagonals Horizontally with Python in Excel

Python in Excel solution 1 for Stack Matrix Diagonals Horizontally, proposed by John V.:
Hi everyone!
One [Python] option could be:
d = xl("A2:C4")
f = np.diag
np.array([f(d), f(np.fliplr(d))]).T
Blessings!
                    
                  

Solving the challenge of Stack Matrix Diagonals Horizontally with R

R solution 1 for Stack Matrix Diagonals Horizontally, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input_1 = read_excel("Excel/358 Stack Diagonal Values.xlsx", 
 range = "A2:C4", col_names = F) %>% as.matrix()
input_2 = read_excel("Excel/358 Stack Diagonal Values.xlsx", 
 range = "A6:D9", col_names = F) %>% as.matrix()
input_3 = read_excel("Excel/358 Stack Diagonal Values.xlsx", 
 range = "A11:E15", col_names = F) %>% as.matrix()
test_1 = read_excel("Excel/358 Stack Diagonal Values.xlsx", 
 range = "G2:H4", col_names = c("A", "B"))
test_2 = read_excel("Excel/358 Stack Diagonal Values.xlsx", 
 range = "G6:H9", col_names = c("A", "B"))
test_3 = read_excel("Excel/358 Stack Diagonal Values.xlsx", 
 range = "G11:H15", col_names = c("A", "B"))
get_diagonals = function(M) {
 result = tibble(
 A = diag(M),
 B = diag(M[, ncol(M):1])
 )
 return(result)
}
identical(test_1, get_diagonals(input_1))
#> [1] TRUE
identical(test_2, get_diagonals(input_2))
#> [1] TRUE
identical(test_3, get_diagonals(input_3))
#> [1] TRUE
                    
                  
R solution 2 for Stack Matrix Diagonals Horizontally, proposed by Krzysztof Nowak:
Data1 <- c(95, 38, 17,87, 54, 10,57, 99, 18)
Data2 <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
Data3 <- c(3, 59, 32, 96, 63,33, 77, 21, 84, 47,55, 24, 13, 31, 9,14, 79, 47, 27, 22,91, 17, 23, 84, 24)
Matrix1 <- matrix(Data1, nrow = 3, byrow = TRUE)
Matrix2 <- matrix(Data2, nrow = 4, byrow = TRUE)
Matrix3 <- matrix(Data3, nrow = 5, byrow = TRUE)
Diagonals <- function(mat) {
 n <- nrow(mat) 
 row_indices <- 1:n
 col_indices <- n:1
 Reversed <- diag(mat[row_indices, col_indices])
 FirstDiagon <- diag(mat)
 bind_cols(FirstDiagon,Reversed)
}
                    
                  

&&

Leave a Reply