Home » Generate Clark’s Triangle Pattern

Generate Clark’s Triangle Pattern

Generate the Clark’s Triangle. This is a kind of Pascal Triangle. The first element at top will be 0. Leftmost elements will be all 1. Rightmost elements will be multiplication table of 6. Any other element is sum of upper left and upper right number.

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

Solving the challenge of Generate Clark’s Triangle Pattern with Power Query

Power Query solution 1 for Generate Clark’s Triangle Pattern, proposed by Abdallah Ally:
let
  Rows = 11, 
  Result = Table.FromRows(
    List.Generate(
      () => [r = 0, l = 1, v = {0}, n = Number.IntegerDivide(2 * Rows - 1 - l, 2)], 
      each [r] < Rows, 
      each [
        r = [r] + 1, 
        l = 2 * r + 1, 
        v = List.Transform(
          {0 .. l - 1}, 
          (x) =>
            if x = 0 then
              1
            else if x = l - 1 then
              6 * r
            else if Number.Mod(x, 2) = 0 then
              [v]{x - 2} + [v]{x}
            else
              null
        ), 
        n = Number.IntegerDivide(2 * Rows - 1 - l, 2)
      ], 
      each List.Repeat({null}, [n]) & [v] & List.Repeat({null}, [n])
    )
  )
in
  Result

Solving the challenge of Generate Clark’s Triangle Pattern with Excel

Excel solution 1 for Generate Clark’s Triangle Pattern, proposed by Bo Rydobon 🇹🇭:
=REDUCE(,SEQUENCE(11)-1,LAMBDA(a,i,LET(H,HSTACK,b,TAKE(a,-1),
IFNA(VSTACK(H("",a),H(1,IFERROR(H("",DROP(b,,-2)+DROP(b,,2),""),""),6*i)),""))))
Excel solution 2 for Generate Clark’s Triangle Pattern, proposed by Bo Rydobon 🇹🇭:
=IFERROR(
    REDUCE(
        0,
        SEQUENCE(
            10
        ),
        LAMBDA(
            a,
            i,
            VSTACK(
                HSTACK(
                    "",
                    a
                ),
                HSTACK(
                    1,
                    BYCOL(
                        INDEX(
                            a,
                            i,
                            SEQUENCE(
                                ,
                                i*2-1
                            )-{1;-1}
                        ),
                        SUM
                    ),
                    i*6
                )
            )
        )
    ),
    ""
)
Excel solution 3 for Generate Clark’s Triangle Pattern, proposed by John V.:
=LET(n,
    11,
    w,
    2*n-1,
    s,
    SEQUENCE,
    REDUCE(SWITCH(
        s(
            2,
            w
        ),
        n,
        ,
        3*n-2,
        1,
        3*n,
        6,
        ""
    ),
    s(
        n-2
    ),
    LAMBDA(z,
    v,
    VSTACK(z,
    MAP(s(
        ,
        w
    ),
    LAMBDA(x,
    LET(y,
    TAKE(
        z,
        -1
    ),
    a,
    INDEX(
        y,
        MAX(
            1,
            x-1
        )
    ),
    b,
    INDEX(
        y,
        MIN(
            w,
            x+1
        )
    ),
    IFS(b=1,
    b,
    (a<"")*(b<""),
    a+b,
    a=6*v,
    6+6*v,
    1,
    ""))))))))
Excel solution 4 for Generate Clark’s Triangle Pattern, proposed by Timothée BLIOT:
=LET(N,11,A,REDUCE(0,SEQUENCE(N-1),LAMBDA(w,v,VSTACK(w,IF(v>1, HSTACK(1,DROP(TAKE(w,-1,),,1)+DROP(TAKE(w,-1,),,-1),v*6),HSTACK(1,6))))),C,TOCOL(A,3),MAKEARRAY(N,N*2-1,LAMBDA(x,y,IF(AND(y-x<=N-1,x+y>=N+1,ISODD(x+y+N)),XLOOKUP((x-1)*x/2+(y-N+x-1)/2+1,SEQUENCE(ROWS(C)),C),""))))
Excel solution 5 for Generate Clark’s Triangle Pattern, proposed by LEONARD OCHEA 🇷🇴:
=LET(n,
    11,
    S,
    SEQUENCE,
    H,
    HSTACK,
    V,
    VSTACK,
    C,
    TAKE,
    D,
    DROP,
    y,
    S(
        ,
        2*n-1
    ),
    x,
    S(
        n
    ),
    m,
    D(REDUCE(0,
    x,
    LAMBDA(a,
    b,
    V(a,
    IFS(y=n+1-b,
    1,
    y=n-1+b,
    6*(b-1),
    1,
    D(
        H(
            0,
            C(
                a,
                -1
            )
        ),
        ,
        -1
    )+D(
        H(
            C(
                a,
                -1
            ),
            0
        ),
        ,
        1
    ))))),
    1),
    V(
        IFERROR(
            IF(
                C(
                    m,
                    1
                ),
                z,
                ""
            ),
            0
        ),
        D(
            IF(
                m,
                m,
                ""
            ),
            1
        )
    ))
Excel solution 6 for Generate Clark’s Triangle Pattern, proposed by Jaroslaw Kujawa:
=LET(v;REDUCE(MAKEARRAY(1;21;LAMBDA(r;c;IF(c=11;0;"")));SEQUENCE(10;;2);LAMBDA(a;x;VSTACK(a;MAKEARRAY(1;21;LAMBDA(r;c;IF(c=11-x+1;1;IF(c=11+x-1;(x-1)*6;IF(x>2;IFERROR(INDEX(TAKE(a;-1);1;c+1);0)+IF(c>1;IFERROR(INDEX(TAKE(a;-1);1;c-1);0))))))))));VSTACK(TAKE(v;1);IF(DROP(v;1);DROP(v;1);"")))

Solving the challenge of Generate Clark’s Triangle Pattern with Python

Python solution 1 for Generate Clark’s Triangle Pattern, proposed by Konrad Gryczan, PhD:
import pandas as pd
import numpy as np
path = "602 Clarks Triangle.xlsx"
test = pd.read_excel(path,header=None, usecols="A:U", skiprows=1, nrows=11).fillna(0).to_numpy()
def create_clarks_matrix(n):
 mat = np.zeros((n, n * 2 - 1), dtype=int)
 mid = n - 1
 for i in range(n):
 for j in range(n * 2 - 1):
 if j == mid - i:
 mat[i, j] = 0 if i == 0 else 1
 elif j == mid + i:
 mat[i, j] = 6 * i
 elif i > 0 and j > 0 and j < n * 2 - 2 and mat[i - 1, j - 1] != 0 and mat[i - 1, j + 1] != 0:
 mat[i, j] = mat[i - 1, j - 1] + mat[i - 1, j + 1]
 return mat
n = 11
clark = create_clarks_matrix(n)
print(np.array_equal(clark, test))
# True
                    
                  
Python solution 2 for Generate Clark’s Triangle Pattern, proposed by Abdallah Ally:
import pandas as pd
def generate_clarks_triangle(rows):
 values = [[0]]
 for r in range(1, rows):
 length = 2 * r + 1
 value = []
 for x in range(length):
 if x == 0:
 value.append(1)
 elif x == length - 1:
 value.append(6 * r)
 elif x % 2 == 0:
 value.append(values[-1][x - 2] + values[-1][x])
 else:
 value.append('')
 values.append(value)
 
 items = [
 [''] * n + values[i] + [''] * n for i in range(len(values)) 
 if (n := (2 * rows - 1 - len(values[i])) // 2) >= 0
 ] 
 return items
# Generate Clark's Triangle for 11 rows
df = pd.DataFrame(data=generate_clarks_triangle(11))
df
                    
                  

Solving the challenge of Generate Clark’s Triangle Pattern with Python in Excel

Python in Excel solution 1 for Generate Clark’s Triangle Pattern, proposed by Alejandro Campos:
def generate_clarks_triangle(rows):
 triangle = [[0]]
 for i in range(1, rows):
 row = []
 for j in range(i + 1):
 if j == 0:
 row.append(1)
 elif j == i:
 row.append(6 * i)
 else:
 row.append(triangle[i - 1][j - 1] + triangle[i - 1][j])
 triangle.append(row)
 
 return triangle
def center_triangle(triangle):
 max_length = len(triangle[-1]) * 2 - 1
 centered_triangle = []
 
 for row in triangle:
 centered_row = [np.nan] * max_length
 start_idx = (max_length - len(row) * 2 + 1) // 2
 for i, val in enumerate(row):
 centered_row[start_idx + i * 2] = val
 centered_triangle.append(centered_row)
 
 return centered_triangle
rows = xl("V2")
clarks_triangle = generate_clarks_triangle(rows)
centered_clarks_triangle = center_triangle(clarks_triangle)
df_centered = pd.DataFrame(centered_clarks_triangle).fillna(' ')
df_centered
                    
                  

Solving the challenge of Generate Clark’s Triangle Pattern with R

R solution 1 for Generate Clark’s Triangle Pattern, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Excel/602 Clarks Triangle.xlsx"
test = read_excel(path, range = "A2:U12", col_names = F) %>% as.matrix() %>% replace(is.na(.), 0)
create_clarks_matrix = function(n) {
 mat = matrix(0, nrow = n, ncol = n * 2 - 1)
 mid = n
 for (i in 1:n) {
 for (j in 1:(n * 2 - 1)) {
 if (j == mid - (i - 1)) {
 mat[i, j] = ifelse(i == 1, 0, 1)
 } else if (j == mid + (i - 1)) {
 mat[i, j] = 6 * (i - 1)
 } else if (i > 1 && j > 1 && j < n * 2 - 1 && mat[i - 1, j - 1] != 0 && mat[i - 1, j + 1] != 0) {
 mat[i, j] = mat[i - 1, j - 1] + mat[i - 1, j + 1]
 }
 }
 }
 return(mat)
}
n = 11
clark = create_clarks_matrix(n)
all.equal(clark, test, check.attributes = F)
# [1] TRUE
                    
                  

Solving the challenge of Generate Clark’s Triangle Pattern with Excel VBA

Excel VBA solution 1 for Generate Clark’s Triangle Pattern, proposed by Md. Zohurul Islam:
Sub ExcelBI_ExcelChallenge602()
 Dim start As Range
 Dim rng As Range
 Dim n As Long, x As Long, i As Long
 Dim a As Range, b As Range, c As Range
 Dim v1, v2, v
 Dim col As Long
 
 n = 10
 Set start = Range("K2")
 start = 0
 
 For x = 1 To n
 Set a = start.Offset(x, -x)
 Set b = start.Offset(x, x)
 Set rng = Range(a, b)
 col = rng.Columns.Count
 For i = 1 To col
 Set c = rng.Cells(i)
 On Error Resume Next
 v1 = c.Offset(-1, -1).Value
 v2 = c.Offset(-1, 1).Value
 v = v1 + v2
 If v = 0 Then
 c = ""
 Else
 c = v
 End If
 Next i
 a = 1
 b = 6 * x
 Next x
Range("A:U").EntireColumn.AutoFit
End Sub
                    
                  

&&&

Leave a Reply