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)
