Home » Draw Symmetric Star in ASCII

Draw Symmetric Star in ASCII

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
                    
                  

&&&

Leave a Reply