Home » Generate Tabula Recta Grid

Generate Tabula Recta Grid

Generate the given grid. This grid is called Tabula Recta. In Cryptology, this is also known as Vigenere Cipher. Yellow and bold has been done just to emphasize, you need not apply any conditional formatting for this. Note – First row and first column need to be part of the answer.

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

Solving the challenge of Generate Tabula Recta Grid with Power Query

Power Query solution 1 for Generate Tabula Recta Grid, proposed by Bo Rydobon 🇹🇭:
let
  tab = Table.FromColumns(
    List.Transform({0, 0 .. 25}, each List.FirstN(List.Skip({"A" .. "Z", "A" .. "Z"}, _), 26)), 
    {"", "A" .. "Z"}
  )
in
  tab
Power Query solution 2 for Generate Tabula Recta Grid, proposed by Bhavya Gupta:
let
  Source = {1 .. 26}, 
  CharacterList = List.Transform(
    Source, 
    each List.Transform(List.Numbers(_, 26), each Character.FromNumber(Number.Mod(_ - 1, 26) + 65))
  ), 
  ExpectedOutput = Table.FromColumns({{"A" .. "Z"}} & CharacterList, {""} & {"A" .. "Z"})
in
  ExpectedOutput
Power Query solution 3 for Generate Tabula Recta Grid, proposed by Matthias Friedmann:
letters.
Shorter with a list repetition like Victor Wang => this is a déjà vu!
Very compact with List.Range plus duplicated list.✔
let
 Source = Table.FromColumns(
 {{"A" .. "Z"}} & List.Transform({0 .. 25}, each [
 a = _, 
 b = List.Transform(
 {"A" .. "Z"}, 
 each {"A" .. "Z"}{Number.Mod(List.PositionOf({"A" .. "Z"}, _) + a, 26)}
 )][b]
 ), 
 {" ", "A" .. "Z"}
 )
in
 Source

b. with List.Range and duplicated list:
let
 Source = Table.FromColumns(
 {{"A".."Z"}} & List.Transform({0..25}, each List.Range({"A".."Z", "A".."Z"}, _, 26)),
 {" ", "A".."Z"}
 )
in
 Source


                    
                  
          
Power Query solution 4 for Generate Tabula Recta Grid, proposed by Victor Wang:
let
  Source = Table.FromColumns(
    {{"A" .. "Z"}}
      & List.Transform({0 .. 25}, each List.FirstN(List.Skip(List.Repeat({"A" .. "Z"}, 2), _), 26)), 
    {" "} & {"A" .. "Z"}
  )
in
  Source
Power Query solution 5 for Generate Tabula Recta Grid, proposed by Krzysztof Kominiak:
let
  Source = {"A" .. "Z"}, 
  Result = Table.FromColumns(
    {Source}
      & List.Split(
        List.Accumulate(
          {1 .. 25}, 
          {"A" .. "Z"}, 
          (S, C) =>
            S
              & List.Transform(
                List.Transform(List.Positions(Source), each Number.Mod(_ + C, 26)), 
                each Source{_}
              )
        ), 
        26
      ), 
    List.Combine({{"*"}, Source})
  )
in
  Result

Solving the challenge of Generate Tabula Recta Grid with Excel

Excel solution 1 for Generate Tabula Recta Grid, proposed by Bo Rydobon 🇹🇭:
=MAKEARRAY(27,
    27,
    LAMBDA(r,
    c,
    IF(r+c=2,
    "",
    CHAR(MOD(r+c-4+(r=1)+(c=1),
    26)+65))))

=LET(s,
    SEQUENCE(
        27
    ),
    t,
    TOROW(
        s
    ),
    IF(s+t=2,
    "",
    CHAR(MOD(s+t-4+(s=1)+(t=1),
    26)+65)))
Excel solution 2 for Generate Tabula Recta Grid, proposed by Bo Rydobon 🇹🇭:
=CHAR(
    MAKEARRAY(
        26,
        26,
        LAMBDA(
            r,
            c,
            MOD(
                r+c-2,
                26
            )+65
        )
    )
)

=LET(
    s,
    SEQUENCE(
        26
    ),
    CHAR(
        MOD(
            s+TOROW(
                s
            )-2,
            26
        )+65
    )
)

=LET(
    s,
    ROW(
        1:26
    ),
    CHAR(
        MOD(
            s+TOROW(
                s
            )-2,
            26
        )+65
    )
)

=CHAR(
    MOD(
        ROW(
        1:26
    )+COLUMN(
        A:Z
    )-2,
        26
    )+65
)
Excel solution 3 for Generate Tabula Recta Grid, proposed by Rick Rothstein:
=HSTACK(INDEX(CHAR(65+MOD(ROW(1:52)-1,26)),COLUMN(A:Z)+ROW(1:26)-1))
Excel solution 4 for Generate Tabula Recta Grid, proposed by Rick Rothstein:
=CHAR(65+MOD(INDEX(SEQUENCE(26,26),ROW(1:26),COLUMN(A:Z))+ROW(1:26)-2,26))
Excel solution 5 for Generate Tabula Recta Grid, proposed by John V.:
=LET(r,ROW(1:27),c,TOROW(r),IF(r+c=2,"",CHAR(65+MOD(IF(r<3,2,r)+IF(c<3,2,c)-4,26))))
✅ With Bo's idea, avoiding internal IF's:
=LET(r,ROW(1:27),c,TOROW(r),IF(r+c=2,"",CHAR(65+MOD(r+c+(r=1)+(c=1)-4,26))))
✅ Change IF to REPT:
=LET(r,ROW(1:27),c,TOROW(r),REPT(CHAR(65+MOD(r+c+(r=1)+(c=1)-4,26)),r+c>2))
Excel solution 6 for Generate Tabula Recta Grid, proposed by محمد حلمي:
=CHAR(MOD(ROW(65:90)+
SEQUENCE(,26,0)-65,26)+65)
Excel solution 7 for Generate Tabula Recta Grid, proposed by محمد حلمي:
=LET(
r,ROW(65:90),
HSTACK(VSTACK("",CHAR(r)),
VSTACK(CHAR(SEQUENCE(,26,65)),
CHAR(MOD(r+SEQUENCE(,26,0)-65,26)+65))))



without Headers 

=CHAR(MOD(ROW(65:90)+
SEQUENCE(,26,0)-65,26)+65)
Excel solution 8 for Generate Tabula Recta Grid, proposed by 🇰🇷 Taeyong Shin:
=LET(
 code, MAKEARRAY(26, 26, LAMBDA(r,c, MOD(r + c - 2, 26))) + 65,

 CHAR(HSTACK(VSTACK(32, TAKE(code, , 1)), VSTACK(TAKE(code, 1), code)))
)
Excel solution 9 for Generate Tabula Recta Grid, proposed by Julian Poeltl:
=LET(
    A,
    CHAR(
        SEQUENCE(
            26
        )+64
    ),
    M,
    MAKEARRAY(
        26,
        26,
        LAMBDA(
            A,
            B,
            CHAR(
                MOD(
                    SUM(
                        A,
                        B
                    )-2,
                    26
                )+65
            )
        )
    ),
    VSTACK(
        HSTACK(
            "",
            TOROW(
                A
            )
        ),
        HSTACK(
            A,
            M
        )
    )
)
Excel solution 10 for Generate Tabula Recta Grid, proposed by Aditya Kumar Darak 🇮🇳:
=LET(
    
     _a,
     MAKEARRAY(
         
          26,
         
          26,
         
          LAMBDA(
              r,
               c,
               CHAR(
                   MOD(
                       r + c - 2,
                        26
                   ) + 65
               )
          )
          
     ),
    
     VSTACK(
         HSTACK(
             "",
              TAKE(
                  _a,
                   1
              )
         ),
          HSTACK(
              TAKE(
                  _a,
                   ,
                   1
              ),
               _a
          )
     )
    
)

Way 2:
=LET(
    
     _s1,
     SEQUENCE(
         26
     ),
    
     _s2,
     TOROW(
         _s1
     ),
    
     _a,
     CHAR(
         MOD(
             _s1 + _s2 - 2,
              26
         ) + 65
     ),
    
     _r,
     VSTACK(
         HSTACK(
             "",
              TAKE(
                  _a,
                   1
              )
         ),
          HSTACK(
              TAKE(
                  _a,
                   ,
                   1
              ),
               _a
          )
     ),
    
     _r
    
)
Excel solution 11 for Generate Tabula Recta Grid, proposed by Timothée BLIOT:
=CHAR(65+MOD(SEQUENCE(
    26,
    26,
    0
)+(SEQUENCE(
    26,
    ,
    0
)),
    26))
Excel solution 12 for Generate Tabula Recta Grid, proposed by Charles Roldan:
=IFERROR(CHAR(64+1/(1/MAKEARRAY(27,27,
LAMBDA(a,b,-3+a+b+(MIN(a,b)=1))))),"")
Excel solution 13 for Generate Tabula Recta Grid, proposed by Charles Roldan:
=LET(
    x,
    SEQUENCE(
        26
    )-1,
    y,
    TOROW(
        x
    ),
    
    z,
    HSTACK(
        VSTACK(
            "",
            x
        ),
        VSTACK(
            y,
            MOD(
                x+y,
                26
            )
        )
    ),
    
    IFERROR(
        CHAR(
            z+65
        ),
        ""
    )
)
Excel solution 14 for Generate Tabula Recta Grid, proposed by Stefan Olsson:
=SCAN(1,
 SCAN("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 
 SEQUENCE(27), 
 LAMBDA(a, rr, 
 IFS(rr<3,a,TRUE, REGEXREPLACE(a,"(.)(.*)","$2$1"))
 )
 ), 
LAMBDA(i,z, 
 SPLIT(
 REGEXREPLACE(
 REGEXREPLACE(z, "(.)(.*)", IF(i=1," $1$2","$1$1$2"))
 , "(.)", "$1,")
 ,",",TRUE,TRUE)
 )
)
Excel solution 15 for Generate Tabula Recta Grid, proposed by Victor Momoh (MVP, MOS, R.Eng):
=MAKEARRAY(26,26,LAMBDA(r,c,CHAR(65+MOD(24+r+c,26))))

With headers
=LET(a,MAKEARRAY(26,26,LAMBDA(r,c,CHAR(65+MOD(24+r+c,26)))),
HSTACK(VSTACK("",TAKE(a,,1)),VSTACK(TAKE(a,1),a)))
Excel solution 16 for Generate Tabula Recta Grid, proposed by Viswanathan M B:
=LET(
    Main,
     CHAR(
         65+MOD(
             SEQUENCE(
                 26,
                 1,
                 0
             )+SEQUENCE(
                 1,
                 26,
                 0
             ),
              26
         )
     ),
    
     TpRw,
     CHAR(
         SEQUENCE(
             1,
             26,
             65
         )
     ),
    
     FirstCol,
     VSTACK(
         " ",
          CHAR(
              SEQUENCE(
                  26,
                  1,
                  65
              )
          )
     ),
    
     HSTACK(
         FirstCol,
          VSTACK(
              TpRw,
               Main
          )
     )
)
Excel solution 17 for Generate Tabula Recta Grid, proposed by Morteza Rahmani:
=CONCAT(
    "t",
    BASE(
        ROW(
            10:35
        ),
        36
    ) & "t",
    "n"&BASE(
        ROW(
            10:35
        ),
        36
    )
)

Or

=CONCAT(
    "t",
    CHAR(
        ROW(
            65:90
        )
    ) & "t",
    "n"&CHAR(
        ROW(
            65:90
        )
    )
)


And for the Tabula Recta :
=LEFT(
    CONCAT(
        CHAR(
            ROW(
                INDIRECT(
                    CODE(
                        A2
                    )&":"&90
                )
            )
        )&"g",
         CHAR(
             ROW(
                 INDIRECT(
                     65& ":" & CODE(
                        A2
                    )
                 )
             )
         )&"g"
    ),
    76
)
Excel solution 18 for Generate Tabula Recta Grid, proposed by Murat Hasanoglu:
=LEFT(
    ADDRESS(
        1;
        MOD(
            COLUMN()+ROW()-4;
            26
        )+1;
        4;
        1
    )
)

Solving the challenge of Generate Tabula Recta Grid with Python

Python solution 1 for Generate Tabula Recta Grid, proposed by Igor Perković:
import pandas as pd
l = [chr(c) for c in range(65, 91)]
acc = []
for r in range(0,len(l)):
 res = [l[(i + r) % len(l)] for i, x in enumerate(l)]
 acc.append(res)
df = pd.DataFrame(acc)
df.columns = df.index = l
df.to_excel('Result.xlsx')
                    
                  

Solving the challenge of Generate Tabula Recta Grid with SQL

SQL solution 1 for Generate Tabula Recta Grid, proposed by Zoran Milokanović:
WITH -- Microsoft SQL Server 2019
ALPHABET
AS
(
 SELECT CHAR(65) AS LETTER
 UNION ALL
 SELECT CHAR(ASCII(A.LETTER) + 1)
 FROM ALPHABET A
 WHERE
 A.LETTER <> 'Z'
),
HELPER
AS
(
 SELECT
 ' ' + STRING_AGG(A.LETTER, '') AS HEADER
 ,LEN(STRING_AGG(A.LETTER, '')) AS LENGTHX
 ,STRING_AGG(A.LETTER, '') + STRING_AGG(A.LETTER, '') AS CONVERTER
 FROM ALPHABET A
),
TABLEX
AS
(
 SELECT
 1 AS ORDINAL_NUMBER, A.CONVERTER, A.LENGTHX
 FROM HELPER A
 UNION ALL
 SELECT
 T.ORDINAL_NUMBER + 1 AS ORDINAL_NUMBER, T.CONVERTER, T.LENGTHX
 FROM TABLEX T
 WHERE
 T.ORDINAL_NUMBER < 26
)
SELECT
 H.HEADER AS ANSWER_EXPECTED
FROM HELPER H
UNION ALL
SELECT
 SUBSTRING(T.CONVERTER, T.ORDINAL_NUMBER, 1) +
 SUBSTRING(T.CONVERTER, T.ORDINAL_NUMBER, T.LENGTHX) AS ANSWER_EXPECTED
FROM TABLEX T
;
                    
                  

Leave a Reply