The grid shown is used in Porta Cipher for Cryptography. The challenge is to generate this grid through a formula.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 166
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Porta Cipher Grid Formula with Power Query
_x000D_Power Query solution 1 for Porta Cipher Grid Formula, proposed by Bo Rydobon 🇹🇭:
let
Source = Table.FromRows(
List.Transform({0 .. 12}, each List.Range({"N" .. "Z", "N" .. "Z"}, 13 - _, 13))
)
in
Source
Power Query solution 2 for Porta Cipher Grid Formula, proposed by Zoran Milokanović:
let
Source = List.Reverse({"N" .. "Z"}),
Solution = Table.PromoteHeaders(
Table.FromColumns(
List.Accumulate(
List.Positions(Source),
{},
(s, d) => {List.Range(Source & Source, d, List.Count(Source))} & s
)
)
)
in
Solution
Power Query solution 3 for Porta Cipher Grid Formula, proposed by Aditya Kumar Darak 🇮🇳:
let the column names as default in Power Query.
let
Chr = { "N" .. "Z" },
Repeat = List.Repeat ( Chr, 2 ),
Count = List.Count ( Chr ),
Generate = List.Transform ( { 0 .. Count - 1 }, each List.Range ( Repeat, Count - _, Count ) ),
Return = Table.FromRows ( Generate )
in
Return
Power Query solution 4 for Porta Cipher Grid Formula, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Origen = {"N".."Z"},
Tabla = Table.Repeat(Table.FromRows({List.Positions(Origen)}), List.Count(Origen)),
IDX = Table.AddIndexColumn(Tabla, "Idx", List.Count(Origen)-1, -1, Int64.Type),
Calculo = Table.FromRows(Table.AddColumn(IDX, "Col", (x)=>
let
a = List.RemoveLastN(Record.ToList(x),1),
b = List.Transform({0..List.Count(Origen)-1}, each Number.Mod(a{_} + List.Count(a) - IDX[Idx]{x[Idx]}, List.Count(a))),
c = List.ReplaceMatchingItems(b, List.Zip({{0..List.Count(Origen)-1},Origen} ))
in c)[Col])
in
Calculo
Show translation
Show translation of this comment
Power Query solution 5 for Porta Cipher Grid Formula, proposed by Luan Rodrigues:
let
Fonte = {"N" .. "Z", "N" .. "Z"},
count = List.Count(Fonte) / 2,
res = Table.FromRows(List.Transform({0 .. count - 1}, (x) => List.Range(Fonte, count - x, count)))
in
res
Power Query solution 6 for Porta Cipher Grid Formula, proposed by Guillermo Arroyo:
let
a = {"N" .. "Z"},
b = List.Transform(
{0 .. 12},
each List.Union({List.Range(a, 13 - _, _), List.Range(a, 0, 13 - _)})
),
c = Table.FromRows(b)
in
c
Solving the challenge of Porta Cipher Grid Formula with Excel
_x000D_Excel solution 1 for Porta Cipher Grid Formula, proposed by Bo Rydobon 🇹🇭:
=CHAR(MOD(SEQUENCE(,13)-SEQUENCE(13),13)+78)
Excel solution 2 for Porta Cipher Grid Formula, proposed by Rick Rothstein:
=LET(c,CHAR(SEQUENCE(,13,78)),REDUCE(c,SEQUENCE(12),LAMBDA(a,x,VSTACK(a,DROP(HSTACK(TAKE(c,,-x),c),,-x)))))
Excel solution 3 for Porta Cipher Grid Formula, proposed by John V.:
=CHAR(78+MOD(SEQUENCE(,13)-ROW(1:13),13))
Excel solution 4 for Porta Cipher Grid Formula, proposed by محمد حلمي:
=LET(
v,VSTACK(78,SEQUENCE(12,,90,-1)),
CHAR(REDUCE(v,SEQUENCE(12),LAMBDA(a,d,
HSTACK(v, VSTACK(TAKE(a,-1),DROP(a,-1)))))))
Excel solution 5 for Porta Cipher Grid Formula, proposed by Kris Jaganah:
=LET(a,CHAR(SEQUENCE(CODE("Z")-CODE("N")+1,,CODE("N"))),b,VSTACK(a,TAKE(a,-1)),c,VSTACK("",DROP(b,-1)),d,ROWS(a),e,MOD(SEQUENCE(d+1,,d,-1),d),f,IF(e=0,d,e),g,IF(d-f<0,0,d-f),h,TOCOL(DROP(REDUCE("",REPT(b&"-",f)&REPT(c&"-",g),LAMBDA(x,y,VSTACK(x,TEXTSPLIT(y,"-")))),1,-1),,1),WRAPROWS(FILTER(h,SEQUENCE(ROWS(h))<=d^2),d))
Excel solution 6 for Porta Cipher Grid Formula, proposed by Julian Poeltl:
=CHAR(TEXTSPLIT(TEXTJOIN("|",,BYROW(MAKEARRAY(13,13,LAMBDA(A,B,IF(A=B,78,IF(A>1,92-A)))),LAMBDA(A,TEXTJOIN(",",,SCAN(,A,LAMBDA(A,B,IF(B=78,B,A+1))))))),",","|"))
Excel solution 7 for Porta Cipher Grid Formula, proposed by Aditya Kumar Darak 🇮🇳:
=LET(
_n, 13,
_st, "N",
_chr, CHAR(SEQUENCE(13, , CODE(_st))),
_r, MAKEARRAY(_n, _n, LAMBDA(r, c, INDEX(_chr, MOD(c - r, _n) + 1, 1))),
_r
)
Excel solution 8 for Porta Cipher Grid Formula, proposed by Timothée BLIOT:
=MAKEARRAY(13,13, LAMBDA(x,y, CHAR(MOD(y-x,13)+78) ))
It could be further automated for any letter by taking it, applying CODE, retrieving 65 (for UPPER letters)
Excel solution 9 for Porta Cipher Grid Formula, proposed by Hussein SATOUR:
=TEXTSPLIT(CONCAT(LET(a,CHAR(SEQUENCE(13,,78)), b,SEQUENCE(13,,0), MAP(b, LAMBDA(x, TEXTJOIN(",",,IFERROR(TAKE(a,-x),""), IFERROR(TAKE(a,13-x),""))&"/")))),",","/",1)
Excel solution 10 for Porta Cipher Grid Formula, proposed by Oscar Mendez Roca Farell:
=CHAR(78+ARCHIVOMAKEARRAY(13,13,LAMBDA(f, c, MOD(13+c-f,13))))
Excel solution 11 for Porta Cipher Grid Formula, proposed by Md. Zohurul Islam:
=LET(u,CHAR(SEQUENCE(,13,78)),sq,SEQUENCE(12),
v,REDUCE(u,sq,LAMBDA(x,y,LET(
a,TAKE(u,,-y),b,HSTACK(a,u),d,DROP(b,,-y),e,VSTACK(x,d),e))),
v)
Excel solution 12 for Porta Cipher Grid Formula, proposed by Charles Roldan:
=LAMBDA(n,MAKEARRAY(n,n,LAMBDA(a,b,CHAR(90-MOD(a-b-1,n)))))(13)
Excel solution 13 for Porta Cipher Grid Formula, proposed by Stefan Olsson:
=ArrayFormula(REGEXEXTRACT(SCAN("OPQRSTUVWXYZN", SEQUENCE(13), LAMBDA(str, rr, REGEXREPLACE(str, "(.+)(.)$", "$2$1"))), REPT("(.)", 13)))
=BYROW(SEQUENCE(13),
LAMBDA(br,
REGEXEXTRACT(REGEXREPLACE("OPQRSTUVWXYZN", "(.*)("&REPT(".", br)&")$", "$2$1"), REPT("(.)",13))
))
Excel solution 14 for Porta Cipher Grid Formula, proposed by Guillermo Arroyo:
=REDUCE(CHAR(SEQUENCE(,13,78)),SEQUENCE(12),LAMBDA(i,j,VSTACK(i,HSTACK(TAKE(i,-1,-1),TAKE(i,-1,12)))))
Excel solution 15 for Porta Cipher Grid Formula, proposed by Henriette Hamer:
=CHAR(78+LET(a;SEQUENCE(1;13;0;1);b;SEQUENCE(13;1;13;-1);LAMBDA(a;b;IF(+a+b<13;+a+b;+a+b-13))(a;b)))
Excel solution 16 for Porta Cipher Grid Formula, proposed by roberto mensa:
=CHAR(MOD(COLUMN(A:M)-ROW(1:13),13)+78)
Excel solution 17 for Porta Cipher Grid Formula, proposed by Narayanan J 🇮🇳:
=LET(seq,SEQUENCE(13,13,0),mns,MOD(seq,13)-TRUNC(seq/13),SUBSTITUTE(ADDRESS(1,IFS(mns=0,14,mns>0,14+mns,TRUE,27+mns),4),1,""))
Excel solution 18 for Porta Cipher Grid Formula, proposed by Mazin Jalal:
INDEX($A1:$M1,IF(COLUMN()<1,COUNTA($A$1:$M$1),COLUMN()-1))
Put in A2
Solving the challenge of Porta Cipher Grid Formula with Python in Excel
_x000D_Python in Excel solution 1 for Porta Cipher Grid Formula, proposed by Alejandro Campos:
n = 13
start_char = 'N'
char_seq = [chr(ord(start_char) + i) for i in range(n)]
matrix = [[char_seq[(c - r) % n] for c in range(n)] for r in range(n)]
df = pd.DataFrame(matrix)
df
