Home » Character-Based Triangular

Character-Based Triangular

Solving Character-Based Triangular challenge by Power Query, Power BI, Excel, Python and R

Create a formula to receive a number n as input and generate a Triangular with a height equal to n using “*” characters. Example for n=15

📌 Challenge Details and Links
Challenge Number: 68
Challenge Difficulty: ⭐⭐⭐
Designed by: Thang Van
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Character-Based Triangular with Power Query

Power Query solution 1 for Character-Based Triangular, proposed by Omid Motamedisedeh:
let
  n   = 15, 
  Pat = List.Transform({0 .. (n - 1) / 2}, each Text.Repeat("*", _ + 1)), 
  Re  = Table.FromList(Pat & List.Skip(List.Reverse(Pat)), Text.ToList, (n - 1) / 2 + 1)
in
  Re
Power Query solution 2 for Character-Based Triangular, proposed by Zoran Milokanović:
let
  Source = 15, 
  S = Table.FromColumns(
    List.Zip(List.Transform({1 .. Source}, each List.Repeat({"*"}, List.Min({_, Source + 1 - _}))))
  )
in
  S
Power Query solution 3 for Character-Based Triangular, proposed by Luan Rodrigues:
let
  n = 15, 
  lista = Table.Transpose(
    Table.FromColumns(
      List.Transform({1 .. Number.RoundUp(n / 2)}, each List.Repeat({"*"}, _))
        & List.RemoveFirstN(
          List.Reverse(List.Transform({1 .. Number.RoundUp(n / 2)}, each List.Repeat({"*"}, _))), 
          1
        )
    )
  )
in
  lista
Power Query solution 4 for Character-Based Triangular, proposed by Ramiro Ayala Chávez:
let
N = 15,
R = List.Repeat,
a = {"*"},
b = List.Generate(()=>[i=N], each [i]>=1, each [i=[i]-2], each if [i]
Power Query solution 5 for Character-Based Triangular, proposed by Aditya Kumar Darak 🇮🇳:
let
  N = 15, 
  Generate = List.Transform(
    {1 .. Int64.From(N / 2)}, 
    each Table.FromColumns(List.Repeat({{"*"}}, _))
  ), 
  Reverse = List.Skip(List.Reverse(Generate)), 
  Return = Table.Combine(Generate & Reverse)
in
  Return
Power Query solution 6 for Character-Based Triangular, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  n = 15, 
  Lista = List.Transform(
    {1 .. Number.RoundUp(n / 2)}, 
    each List.Repeat({"*"}, _) & List.Repeat({null}, Number.RoundUp(n / 2) - _)
  ), 
  Sol = Table.FromRows(Lista & List.Skip(List.Reverse(Lista)))
in
  Sol
Power Query solution 7 for Character-Based Triangular, proposed by Alexis Olson:
let
 n = 15, // Must be odd
 Result = Table.FromColumns(
 List.Transform(
 {0 .. (n - 1) / 2},
 (i) => List.Repeat({null}, i) & List.Repeat({"*"}, n - 2 * i )
 )
 )
in
 Result
Power Query solution 8 for Character-Based Triangular, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
let
  Source = {"*"}, 
  AskAboutN = 15, 
  ListIndex = {1 .. AskAboutN}, 
  #"Converted to Table" = Table.FromList(
    ListIndex, 
    Splitter.SplitByNothing(), 
    null, 
    null, 
    ExtraValues.Error
  ), 
  #"Renamed Columns" = Table.RenameColumns(#"Converted to Table", {{"Column1", "I"}}), 
  #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns", {{"I", Int64.Type}}), 
  #"Added Custom" = Table.AddColumn(
    #"Changed Type", 
    "L", 
    each List.Split(
      if [I] <= Number.RoundDown(AskAboutN / 2) + 1 then
        List.Repeat(Source, [I])
      else
        List.Repeat(Source, AskAboutN - [I] + 1), 
      1
    )
  ), 
  #"Added Custom1" = Table.AddColumn(
    #"Added Custom", 
    "L2", 
    each Table.FromColumns([L], List.Transform({1 .. List.Count([L])}, each "C" & Text.From(_)))
  ), 
  #"Removed Other Columns" = Table.SelectColumns(#"Added Custom1", {"L2"}), 
  #"Expanded L2" = Table.ExpandTableColumn(
    #"Removed Other Columns", 
    "L2", 
    {"C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8"}, 
    {"C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8"}
  )
in
  #"Expanded L2"

Solving the challenge of Character-Based Triangular with Excel

Excel solution 1 for Character-Based Triangular, proposed by Bo Rydobon 🇹🇭:
=LET(n,
    15,
    m,
    (n+1)/2,
    MID(
        REPT(
            "*",
            m-ABS(
                m-SEQUENCE(
                    n
                )
            )
        ),
        SEQUENCE(
            ,
            m
        ),
        1
    ))
Excel solution 2 for Character-Based Triangular, proposed by محمد حلمي:
=LET(n,15,
MAKEARRAY(n,EVEN(n)/2,LAMBDA(r,c,REPT("*",(r>=c)*(n+1>=c+r)))))
Excel solution 3 for Character-Based Triangular, proposed by Oscar Mendez Roca Farell:
=LET(n,
     15,
     m,
     (n+1)/2,
     MAKEARRAY(n,
     m,
     LAMBDA(r,
     c,
     IF((r>=c)+(c<=n-r+1)-1,
     "*",
     ""))))
Excel solution 4 for Character-Based Triangular, proposed by Julian Poeltl:
=LET(
    N,
    15,
    NH,
    ROUNDUP(
        N/2,
        0
    ),
    MAKEARRAY(
        N,
        NH,
        LAMBDA(
            A,
            B,
            IFS(
                AND(
                    A<=NH,
                    B<=A
                ),
                "*",
                AND(
                    A>NH,
                    B<=N-A+1
                ),
                "*",
                1,
                ""
            )
        )
    )
)
Excel solution 5 for Character-Based Triangular, proposed by Kris Jaganah:
=LET(
    a,
    15,
    b,
    IF(
        ISEVEN(
            a
        ),
        a+1,
        a
    ),
    c,
    ROUNDUP(
        b/2,
        0
    ),
    MAKEARRAY(
        b,
        c,
        LAMBDA(
            x,
            y,
            IF(
                y-IF(
                    x>c,
                    b+1-x,
                    x
                )<1,
                "*",
                ""
            )
        )
    )
)
Excel solution 6 for Character-Based Triangular, proposed by Abdallah Ally:
=LET(
    n,
    15,
    b,
    SEQUENCE(
        n/2
    ),
    f,
    LAMBDA(
        a,
        b,
        EXPAND(
            a,
            b,
            ,
            a
        )
    ),
     REDUCE(
         f(
             "*",
             n
         ),
         b,
         LAMBDA(
             x,
             y,
             IF(
                 n-2*y=0,
                 x,
                 HSTACK(
                     x,
                     VSTACK(
                         f(
                             "",
                             y
                         ),
                          f(
                              "*",
                              n-2*y
                          ),
                         f(
                             "",
                             y
                         )
                     )
                 )
             )
         )
     )
)
Excel solution 7 for Character-Based Triangular, proposed by Sunny Baggu:
=LET(
 n,
     15, r,
     SEQUENCE(
         n
     ), c,
     SEQUENCE(,
     (n + 1) / 2), a,
     r >= c, b,
     (r + c) < (n + 2), IF(
     a * b,
      "*",
      ""
 )
)
Excel solution 8 for Character-Based Triangular, proposed by Andy Heybruch:
=LET(    _n,
    15,    _seq,
    VSTACK(
        SEQUENCE(
            IF(
                ISEVEN(
                    _n
                ),
                _n/2,
                INT(
                    _n/2
                )+1
            )
        ),
        SEQUENCE(
            INT(
                    _n/2
                ),
            ,
            INT(
                    _n/2
                ),
            -1
        )
    ),    TEXTSPLIT(
        TEXTJOIN(
            ";",
            ,
            REPT(
                "*|",
                _seq
            )&REPT(
                " |",
                MAX(
                    _seq
                )-_seq
            )
        ),
        "|",
        ";"
    )
)
Excel solution 9 for Character-Based Triangular, proposed by Burhan Cesur:
=DROP(
    IFNA(
        LET(
            n,
            15,
            u,
            ROUNDUP(
                n/2,
                0
            ),
            d,
            u-1,
            REDUCE(
                "",
                VSTACK(
                    SEQUENCE(
                        d
                    ),
                    SEQUENCE(
                        u,
                        ,
                        u,
                        -1
                    )
                ),
                LAMBDA(
                    s,
                    v,
                    VSTACK(
                        s,
                        IF(
                            ISNUMBER(
                                SEQUENCE(
                                    ,
                                    v
                                )
                            ),
                            "*",
                            ""
                        )
                    )
                )
            )
        ),
        ""
    ),
    1
)
Excel solution 10 for Character-Based Triangular, proposed by Hussein SATOUR:
=TRANSPOSE(LET(n,
    15,
    m,
    ROUNDUP(
        n/2,
        0
    ),
    a,
    SEQUENCE(
        m,
        n
    ),
    b,
    CHOOSECOLS(
        SEQUENCE(
            m
        ),
        SEQUENCE(
            n
        )^0
    ),
    MAP(a,
    b,
    LAMBDA(x,
    y,
    IF(AND(x>(n+1)*(y-1),
    x<=(n-1)*y+1),
    "*",
    "")))))
Excel solution 11 for Character-Based Triangular, proposed by Luis Enrique Charca Ponce:
=LET(n,15,half,ROUNDUP(n/2,0),i,SEQUENCE(n),k,IF(i>half,n+1-i,i),MID(REPT("*",k),SEQUENCE(1,half),1))
Excel solution 12 for Character-Based Triangular, proposed by Rick Rothstein:
=LET(
    c,
    8,
    DROP(
        IFNA(
            REDUCE(
                "",
                c-ABS(
                    c-SEQUENCE(
                        2*c-1
                    )
                ),
                LAMBDA(
                    a,
                    x,
                    VSTACK(
                        a,
                        SUBSTITUTE(
                            SEQUENCE(
                                ,
                                x,
                                ,
                                0
                            ),
                            1,
                            "*"
                        )
                    )
                )
            ),
            ""
        ),
        1
    )
)
Excel solution 13 for Character-Based Triangular, proposed by Rick Rothstein:
=LET(
    c,
    8,
    IFNA(
        TEXTSPLIT(
            TEXTJOIN(
                "/",
                ,
                MAP(
                    c-ABS(
                        c-SEQUENCE(
                            2*c-1
                        )
                    ),
                    LAMBDA(
                        x,
                        REPT(
                            "* ",
                            x
                        )
                    )
                )
            ),
            " ",
            "/"
        ),
        ""
    )
)

Solving the challenge of Character-Based Triangular with Python

Python solution 1 for Character-Based Triangular, proposed by Konrad Gryczan, PhD:
import numpy as np

def draw_triangle(n):
 if n % 2 == 0:
 print("Not Possible")
 else:
 x = (n + 1) // 2
 seq = list(range(1, x + 1)) 
 mat = np.full((n, x), "", dtype=object)
 for i in range(x):
 mat[i, :seq[i]] = "*"
 for i in range(1, x):
 mat[n - i, :] = mat[i - 1, :]
 print(mat)

draw_triangle(7)
Python solution 2 for Character-Based Triangular, proposed by Abdallah Ally:
import pandas as pd

# Create a function to generate the required results
def triangular(n):
 items = range(n, 0, -2)
 values = {i: [''] * i + ['*'] * items[i] + [''] * i 
 for i in range(len(items))}
 return values

# Perform data wrangling
df = pd.DataFrame(triangular(11))

# Display the final output
df

Solving the challenge of Character-Based Triangular with R

R solution 1 for Character-Based Triangular, proposed by Konrad Gryczan, PhD:
library(tidyverse)

draw_triangle = function(n) {
 if (n %% 2 == 0) {
 return("Not Possible")
 } else {
 x = ceiling(n / 2)
 seq = seq(1, x)
 mat = matrix("", n, x)
 for (i in 1:x) {
 mat[i, 1:seq[i]] = "*"
 }
 for (i in 1:(x - 1)) {
 mat[n - i + 1, ] = mat[i, ]
 }
 print(mat)
 }
}

draw_triangle(7)

Leave a Reply