Home » Render ASCII US Flag

Render ASCII US Flag

Generate US ASCII flag. Note that there are 50 stars in total.

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

Solving the challenge of Render ASCII US Flag with Power Query

Power Query solution 1 for Render ASCII US Flag, proposed by Zoran Milokanović:
let
  Source = Table.FromRows(
    List.Transform(
      {0 .. 14}, 
      (y) =>
        List.Transform(
          {0 .. 37}, 
          (x) =>
            let
              M = Number.Mod
            in
              {"-", "|", {null, "*"}{Number.From(M(x, 2) = M(y, 2))}, 1, 0}{
                List.PositionOf(
                  {M(y, 14) = 0, M(x, 37) = 0, x < 12 and y < 10, M(y, 2) = 0, true}, 
                  true
                )
              }
        )
    )
  )
in
  Source

Solving the challenge of Render ASCII US Flag with Excel

Excel solution 1 for Render ASCII US Flag, proposed by Bo Rydobon 🇹🇭:
=MAKEARRAY(15,
    38,
    LAMBDA(r,
    c,
    IFS(OR(
        r={1,
        15}
    ),
    "-",
    OR(
        c={1,
        38}
    ),
    "|",
    (r<11)*(c<13),
    REPT(
        "*",
        MOD(
            r+c+1,
            2
        )
    ),
    1,
    MOD(
        r,
        2
    ))))
Excel solution 2 for Render ASCII US Flag, proposed by Rick Rothstein:
=MAKEARRAY(15,
    38,
    LAMBDA(r,
    c,
    IF(OR(
        r={1,
        15}
    ),
    "-",
    IF(OR(
        c={1,
        38}
    ),
    "|",
    IF((r>10)+(c>12),
    0+(MOD(
        r,
        2
    )=1),
    IF(
        XOR(
            MOD(
        r,
        2
    ),
            MOD(
                c,
                2
            )
        ),
        "",
        "*"
    ))))))
Excel solution 3 for Render ASCII US Flag, proposed by John V.:
=MAKEARRAY(15,
    38,
    LAMBDA(r,
    c,
    IFS(OR(
        r={1;15}
    ),
    "-",
    OR(
        c={1;38}
    ),
    "|",
    (r<11)*(c<13),
    REPT(
        "*",
        ISEVEN(
            r+c
        )
    ),
    1,
    MOD(
        r,
        2
    ))))
Excel solution 4 for Render ASCII US Flag, proposed by محمد حلمي:
=MAKEARRAY(15,
    38,
    LAMBDA(r,
    c,
    LET(
e,
    (c<13)*(r<11),
    IFS(
        OR(
            r=15,
            r=1
        ),
        "-",
        OR(
            c=1,
            c=38
        ),
        
        "|",
        e*ISEVEN(
            r+c
        ),
        "*",
        e,
        "",
        ISEVEN(
            r
        ),
        0,
        1,
        1
    ))))
Excel solution 5 for Render ASCII US Flag, proposed by Kris Jaganah:
=MAKEARRAY(15,
    38,
    LAMBDA(x,
    y,
    IFS((x=15)+(x=1),
    "-",
    (y=1)+(y=38),
    "|",
    (y<13)*(x<11)*MOD(
        x+y,
        2
    ),
    "",
    (y<13)*(x<11),
    "*",
    1,
    MOD(
        x,
        2
    ))))
Excel solution 6 for Render ASCII US Flag, proposed by Julian Poeltl:
=MAKEARRAY(
    15,
    38,
    LAMBDA(
        A,
        B,
        IFS(
            OR(
                A=1,
                A=15
            ),
            "-",
            OR(
                B=1,
                B=38
            ),
            "|",
            AND(
                B>1,
                B<13,
                A>1,
                A<11,
                ISEVEN(
                    A
                )=TRUE,
                ISEVEN(
                    B
                )=TRUE
            ),
            "*",
            AND(
                B>1,
                B<13,
                A>1,
                A<11,
                ISEVEN(
                    A
                )=TRUE,
                ISEVEN(
                    B
                )=FALSE
            ),
            "",
            AND(
                B>1,
                B<13,
                A>1,
                A<11,
                ISEVEN(
                    A
                )=FALSE,
                ISEVEN(
                    B
                )=TRUE
            ),
            "",
            AND(
                B>1,
                B<13,
                A>1,
                A<11,
                ISEVEN(
                    A
                )=FALSE,
                ISEVEN(
                    B
                )=FALSE
            ),
            "*",
            ISEVEN(
                    A
                ),
            1,
            1,
            0
        )
    )
)
Excel solution 7 for Render ASCII US Flag, proposed by Timothée BLIOT:
=LET(
    I,
    IF,
    O,
    OR,
    A,
    AND,
     MAKEARRAY(
         15,
         38,
         LAMBDA(
             x,
             y,
              I(
                  O(
                      x=1,
                      x=15
                  ),
                  "-",
                  I(
                      O(
                          y=1,
                          y=38
                      ),
                      "|",
                      I(
                          A(
                              A(
                                  x>1,
                                  x<11
                              ),
                              A(
                                  y>1,
                                  y<13
                              )
                          ),
                          I(
                              O(
                                  A(
                                      ISEVEN(
                                          x
                                      ),
                                      ISEVEN(
                                          y
                                      )
                                  ),
                                  A(
                                      ISODD(
                                          x
                                      ),
                                      ISODD(
                                          y
                                      )
                                  )
                              ),
                              "*",
                              ""
                          ),
                          I(
                              ISEVEN(
                                          x
                                      ),
                              0,
                              1
                          )
                      )
                  )
              )
         )
     )
)
Excel solution 8 for Render ASCII US Flag, proposed by Sunny Baggu:
=MAKEARRAY(
    
     15,
    
     38,
    
     LAMBDA(
         r,
          c,
         
          IF(
              
               OR(
                   r = 1,
                    r = 15
               ),
              
               "-",
              
               IF(
                   
                    OR(
                        c = 1,
                         c = 38
                    ),
                   
                    "|",
                   
                    IF(
                        
                         AND(
                             r <= 10,
                              c <= 12,
                              ISEVEN(
                                  r + c
                              )
                         ),
                        
                         "*",
                        
                         IF(
                             AND(
                                 r <= 10,
                                  c <= 12,
                                  ISODD(
                                  r + c
                              )
                             ),
                              "",
                              IF(
                                  ISEVEN(
                                      r
                                  ),
                                   0,
                                   1
                              )
                         )
                         
                    )
                    
               )
               
          )
          
     )
    
)
Excel solution 9 for Render ASCII US Flag, proposed by Charles Roldan:
=LET(
    f,
     LAMBDA(
         x,
         y,
          IF(
              SEQUENCE(
                  ,
                   x
              ),
               y
          )
     ),
     
    g,
     LAMBDA(
         x,
         [y],
          MOD(
              SEQUENCE(
                  x,
                   y
              ),
               2
          )
     ),
     
    h,
     LAMBDA(
         x,
         y,
          VSTACK(
              x,
               TRANSPOSE(
                   y
               ),
               x
          )
     ),
     
    h(
        f(
            38,
             "-"
        ),
         h(
             f(
                 13,
                  "|"
             ),
              HSTACK(
                  VSTACK(
                      
                      REPT(
                          "*",
                           g(
                               9,
                                11
                           )
                      ),
                       f(
                           11,
                            g(
                                4
                            )
                       )
                  ),
                   DROP(
                       f(
                           25,
                            g(
                                14
                            )
                       ),
                        1
                   )
              )
         )
    )
)
Excel solution 10 for Render ASCII US Flag, proposed by Andy Heybruch:
=MAKEARRAY(15,
    38,
    
LAMBDA(r,
    c,
    
IFS(OR(
    r={1,
    15}
),
    "-",
    
OR(
    c={1,
    38}
),
    "|",
    
(r<11)*(c<13)*ISEVEN(
    r+c
),
    "*",
    
(r<11)*(c<13)*ISODD(
    r+c
),
    " ",
    
ISEVEN(
    r
),
    0,
    
ISODD(
    r
),
    1)
))
Excel solution 11 for Render ASCII US Flag, proposed by Tyler Cameron:
=MAKEARRAY(
    15,
    38,
    LAMBDA(
        r,
        c,
        IF(
            OR(
                r=1,
                r=15
            ),
            "-",
            IF(
                OR(
                    c=1,
                    c=38
                ),
                "|",
                IF(
                    AND(
                        r<11,
                        c<13
                    ),
                    IF(
                        ISEVEN(
                            r
                        ),
                        SWITCH(
                            ISEVEN(
                                c
                            ),
                            TRUE,
                            "*",
                            FALSE,
                            ""
                        ),
                        SWITCH(
                            ISODD(
                                c
                            ),
                            TRUE,
                            "*",
                            FALSE,
                            ""
                        )
                    ),
                    IF(
                        ISEVEN(
                            r
                        ),
                        0,
                        1
                    )
                )
            )
        )
    )
)
Excel solution 12 for Render ASCII US Flag, proposed by Tyler Cameron:
=MAKEARRAY(
    15,
    38,
    LAMBDA(
        r,
        c,
        IF(
            OR(
                r={1;15}
            ),
            "-",
            IF(
                OR(
                    c={1;38}
                ),
                "|",
                IF(
                    AND(
                        r<11,
                        c<13
                    ),
                    IF(
                        MOD(
                            r+c,
                            2
                        )=0,
                        "*",
                        ""
                    ),
                    IF(
                        ISEVEN(
                            r
                        ),
                        0,
                        1
                    )
                )
            )
        )
    )
)

Solving the challenge of Render ASCII US Flag with Python

Python solution 1 for Render ASCII US Flag, proposed by Giorgi Goderdzishvili:
# NumPy solution
arr = np.ones((15,38),dtype=str)
arr[:,[0,-1]],arr[[0,-1]]="|","-"
arr[1::2,12:-1],arr[11::2,1:-1]="0","0"
arr[1:10:2,1:12:2],arr[2:10:2,2:12:2]="*","*"
arr[1:10:2,2:12:2],arr[2:10:2,1:12:2]="",""
arr
                    
                  

Solving the challenge of Render ASCII US Flag with R

R solution 1 for Render ASCII US Flag, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
test = read_excel("Excel/404 Generate US ASCII Flag.xlsx", range = "A1:AL15",
 col_names = FALSE, .name_repair = "unique") %>% as.matrix() 
# remove attribute "names" from matrix
attr(test, "dimnames") = NULL
result = matrix(NA, nrow = 15, ncol = 38)
result[1,] = "-"
result[15,] = "-"
result[2:14,1] = "|"
result[2:14,38] = "|"
for (i in 2:14){
 for (j in 2:37){
 if (i %% 2 == 0){
 result[i,j] = 0
 } else {
 result[i,j] = "1"
 }
 }
}
for (i in 2:10){
 for (j in 2:12){
 if (i %% 2 == 0){
 if (j %% 2 == 0){
 result[i,j] = "*"
 } else {
 result[i,j] = NA
 }
 } else {
 if (j %% 2 == 0){
 result[i,j] = NA
 } else {
 result[i,j] = "*"
 }
 }
 }
}
                    
                  

&&&

Leave a Reply