Draw ASCII star for given N which is an odd number for the purpose of symmetry. Each branch of the stars will consists of N asterisks.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 533
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Draw Symmetric Star in ASCII with Power Query
Power Query solution 1 for Draw Symmetric Star in ASCII, proposed by John V.:
let
n = 5, i = {1..n},
R = List.TransformMany(i, each i, (r, c) =>
if r = c or List.Contains({r + c, 2 * c, 2 * r}, 1 + n) then "*" else null
)
in
Table.FromRows(List.Split(R, n))
Blessings!
Power Query solution 2 for Draw Symmetric Star in ASCII, proposed by Zoran Milokanović:
let
Source = 11,
M = Int64.From(Source / 2),
F = {1 .. Source},
S = Table.FromColumns(
List.TransformMany(
F,
each {F},
(i, _) =>
List.Transform(
_,
each {null, "*"}{
Byte.From(List.AnyTrue({Number.Abs((_ - M) / (i - M)) = 1, i = M, _ = M}))
}
)
)
)
in
S
Power Query solution 3 for Draw Symmetric Star in ASCII, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
n = 11,
Rep = List.Repeat,
Central = Rep({"*"}, n),
Inf = List.Transform(
{0 .. (n - 1) / 2 - 1},
each Rep({null}, (n - 3) / 2 - _)
& {"*"}
& Rep({null}, _)
& {"*"}
& Rep({null}, _)
& {"*"}
& Rep({null}, (n - 3) / 2 - _)
),
Sol = Table.FromRows(List.Reverse(Inf) & {Central} & Inf)
in
Sol
Power Query solution 4 for Draw Symmetric Star in ASCII, proposed by Ramiro Ayala Chávez:
let
N = 11,
R = List.Repeat,
a = R({"*"}, N),
b = {"*", "*", "*"},
c = List.Generate(
() => [i = 0, j = (N - 3) / 2],
each [i] < (N - 3) / 2 + 1,
each [i = [i] + 1, j = [j] - 1],
each R({null}, [j])
& {b{0}}
& R({null}, [i])
& {b{1}}
& R({null}, [i])
& {b{2}}
& R({null}, [j])
),
Sol = Table.FromRows(List.Reverse(c) & {a} & c)
in
Sol
Solving the challenge of Draw Symmetric Star in ASCII with Excel
Excel solution 1 for Draw Symmetric Star in ASCII, proposed by Bo Rydobon 🇹🇭:
=LET(n,A3,r,SEQUENCE(n,,1-n,2)^2,c,TOROW(r),IF((r=c)+(r*c=0),"*",""))
😓
=LET(r,SEQUENCE(A3,,1-A3,2)^2,c,TOROW(r),IF((r=c)+(r*c=0),"*",""))
Excel solution 2 for Draw Symmetric Star in ASCII, proposed by Rick Rothstein:
=LET(j,
A3,
m,
(j+1)/2,
MAKEARRAY(
j,
j,
LAMBDA(
r,
c,
IF(
OR(
r=m,
c=m,
r=c,
r=j+1-c
),
"*",
""
)
)
))
Excel solution 3 for Draw Symmetric Star in ASCII, proposed by John V.:
=MAKEARRAY(
A3,
A3,
LAMBDA(
r,
c,
REPT(
"*",
OR(
r=c,
HSTACK(
r+c,
2*c,
2*r
)=1+A3
)
)
)
)
Excel solution 4 for Draw Symmetric Star in ASCII, proposed by محمد حلمي:
=LET(n,
A3,
w,
n/2+0.5,
s,
SEQUENCE(
n
),
i,
TOROW(
s
),
IF((s=w)*i+(i=w)*s+(s=i)+SORTBY(
s=i,
-s
),
"*",
""))
Excel solution 5 for Draw Symmetric Star in ASCII, proposed by محمد حلمي:
=LET(n,A9,i,n/2+0.5,MAKEARRAY(n,n,LAMBDA(r,c,
REPT("*",OR(r=i,c=i,c=r,c+r=n+1)))))
Excel solution 6 for Draw Symmetric Star in ASCII, proposed by Julian Poeltl:
=LET(N,
A17,
NH,
ROUND(
N/2,
0
),
MAKEARRAY(N,
N,
LAMBDA(A,
B,
IF(OR(A=B,
B=NH,
A=NH,
(A+B)=N+1),
"*",
""))))
Excel solution 7 for Draw Symmetric Star in ASCII, proposed by Timothée BLIOT:
=LET(
A,
A3,
B,
A/2+0.5,
MAKEARRAY(
A,
A,
LAMBDA(
x,
y,
REPT(
"*",
OR(
y=B,
x=B,
x=y,
A3+1-x=y
)
)
)
)
)
Excel solution 8 for Draw Symmetric Star in ASCII, proposed by Oscar Mendez Roca Farell:
=LET(s,
ABS(
SEQUENCE(
A3,
,
2,
-1
)
),
t,
TOROW(
s
),
IF((s=t)+(s*t=0),
"*",
""))
Excel solution 9 for Draw Symmetric Star in ASCII, proposed by Sunny Baggu:
=LET(
n, A27,
v, 1 + INT(n / 2),
_a, SEQUENCE(n),
_b, SORT(_a, , -1),
_c, TOROW(_a),
IF(
(_a = _c) + (_b = _c) + (_a = v) + (_c = v),
"*",
""
)
)
Excel solution 10 for Draw Symmetric Star in ASCII, proposed by Pieter de B.:
=MAKEARRAY(A3,
A3,
LAMBDA(a,
b,
IF((a*2-1=A3)+(b*2-1=A3)+(a-b=0)+(a+b-1=A3),
"*",
"")))
Excel solution 11 for Draw Symmetric Star in ASCII, proposed by Bilal Mahmoud kh.:
=LET(n,7,MAKEARRAY(n,n,LAMBDA(r,c,IF((r=c)+(r=n-c+1)+(r=ROUNDUP(n/2,0))+(c=ROUNDUP(n/2,0)),"*",""))))
Excel solution 12 for Draw Symmetric Star in ASCII, proposed by Mey Tithveasna:
=LET(n,
ABS(SEQUENCE(
A3
)-(A3+1)/2),
m,
TOROW(
n
),
IF(((n*m)=0)+(n=m),
"*",
""))
Excel solution 13 for Draw Symmetric Star in ASCII, proposed by Edwin Tisnado:
=LET(s,ABS(SEQUENCE(A9,,0.5-A9/2)),r,TOROW(s),IF((s=r)+(s=0)+(r=0),"*",""))
Solving the challenge of Draw Symmetric Star in ASCII with Python
Python solution 1 for Draw Symmetric Star in ASCII, proposed by Konrad Gryczan, PhD:
import pandas as pd
def draw_ascii_star(number):
matrix = [[""] * number for _ in range(number)]
for i in range(number):
matrix[i][number // 2] = "*"
matrix[number // 2][i] = "*"
matrix[i][i] = "*"
matrix[i][number - i - 1] = "*"
result = pd.DataFrame(matrix)
return result
print(draw_ascii_star(5))
print(draw_ascii_star(7))
print(draw_ascii_star(9))
print(draw_ascii_star(11))
Solving the challenge of Draw Symmetric Star in ASCII with Python in Excel
Python in Excel solution 1 for Draw Symmetric Star in ASCII, proposed by Alejandro Campos:
def generate_pattern(N):
r = np.square(np.arange(1 - N, N, 2))
c = r
output = np.where((r[:, None] == c) | (r[:, None] * c == 0), "*", "")
df = pd.DataFrame(output)
return df
N_values = [5, 7, 9, 11]
dfs = []
for N in N_values:
df = generate_pattern(N)
df['N'] = N
dfs.append(df)
concatenated_df = pd.concat(dfs, ignore_index=True).fillna("").drop(columns='N')
concatenated_df
Python in Excel solution 2 for Draw Symmetric Star in ASCII, proposed by Alejandro Campos:
def generate_pattern(N):
r = np.square(np.arange(1 - N, N, 2))
c = r
output = np.where((r[:, None] == c) | (r[:, None] * c == 0), "*", "")
return output
N = 5
result = generate_pattern(N)
result
Solving the challenge of Draw Symmetric Star in ASCII with R
R solution 1 for Draw Symmetric Star in ASCII, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Excel/533 ASCII Star.xlsx"
test5 = read_excel(path, range = "F3:J7", col_names = FALSE)
test7 = read_excel(path, range = "E9:K15", col_names = FALSE)
test9 = read_excel(path, range = "D17:L25", col_names = FALSE)
test11 = read_excel(path, range = "C27:M37", col_names = FALSE)
draw_ascii_star = function(number) {
matrix = matrix(NA, nrow = number, ncol = number)
for (i in 1:number) {
matrix[i, number %/% 2 + 1] = "*"
matrix[number %/% 2 + 1, i] = "*"
matrix[i, i] = "*"
matrix[i, number - i + 1] = "*"
}
result = as.data.frame(matrix)
colnames(result) = NULL
rownames(result) = NULL
return(result)
}
a5 = draw_ascii_star(5)
all.equal(a5, test5, check.attributes = FALSE) # TRUE
a7 = draw_ascii_star(7)
all.equal(a7, test7, check.attributes = FALSE) # TRUE
a9 = draw_ascii_star(9)
all.equal(a9, test9, check.attributes = FALSE) # TRUE
a11 = draw_ascii_star(11)
all.equal(a11, test11, check.attributes = FALSE) # TRUE
&&&
