Home » Tap Code Cipher Generator

Tap Code Cipher Generator

Since long, I didn’t post a cipher challenge. So, I was etching to post one. Tap Code Cipher – English alphabets are laid out in a 5×5 grid as shown where C and K are interchangeable. Corresponding to a letter, find its row, column coordinates and generate those many dots separated by space. Alphabets will also be separated by space. Ex. war => Coordinates are (5, 2), (1,1), (4, 2) Hence, encryption will be these many dots, all separated by space. 5   2 1 1 4  2 ….. .. . . …. .. Note (Edited 1.5 hours later to give more layer of difficulty) – The problem grid on left side should also be programmatically generated. Range B2:F6 should not be used for the reference.

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

Solving the challenge of Tap Code Cipher Generator with Power Query

Power Query solution 1 for Tap Code Cipher Generator, proposed by Kris Jaganah:
let
  A = (z) => Excel.CurrentWorkbook(){[Name = z]}[Content], 
  B = Table.UnpivotOtherColumns(A("Table1"), {"Column1"}, "A", "V"), 
  C = Table.AddColumn(B, "Mer", each Text.From([Column1]) & [A])[[V], [Mer]], 
  D = Table.AddColumn(
    A("Table2"), 
    "Answer Expected", 
    each [
      a = Text.ToList(Text.Upper([Words])), 
      b = Text.Combine(
        List.Transform(a, each Table.SelectRows(C, (x) => x[V] = _)[Mer]{0}? ?? "13")
      ), 
      c = Text.Combine(List.Transform(Text.ToList(b), each Text.Repeat(".", Number.From(_))), " ")
    ][c]
  )
in
  D
Power Query solution 2 for Tap Code Cipher Generator, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  T1 = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Unpivot = Table.UnpivotOtherColumns(T1, {"Column1"}, "At", "Val"), 
  Tbl = Table.TransformColumns(Unpivot, {"At", Number.From}), 
  Sol = Table.AddColumn(
    Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
    "A", 
    each 
      let
        a = Text.ToList(Text.Upper([Words])), 
        b = Table.Combine(
          List.Transform(a, (x) => Table.SelectRows(Tbl, each Text.Contains([Val], x)))
        ), 
        c = Table.AddColumn(
          Table.RemoveColumns(b, "Val"), 
          "B", 
          each List.Transform(Record.ToList(_), (y) => Text.Repeat("*", y))
        )[B], 
        d = Text.Combine(List.Combine(c), " ")
      in
        d
  )
in
  Sol
Power Query solution 3 for Tap Code Cipher Generator, proposed by Abdallah Ally:
let
  Source = each Excel.CurrentWorkbook(){[Name = _]}[Content], 
  Transform1 = Table.TransformColumns(Source("Table1"), {"3", each Text.Split(_, "/")}), 
  Expand = Table.ExpandListColumn(Transform1, "3"), 
  Transform2 = Table.TransformRows(
    Expand, 
    each [
      a = [Column1], 
      b = List.Transform(List.Skip(Record.FieldNames(_)), Number.From), 
      c = List.Transform(List.Skip(Record.FieldValues(_)), Text.Lower), 
      d = List.Zip({c, List.Transform(b, each a), b})
    ][d]
  ), 
  FromRows = Table.FromRows(List.Combine(Transform2), {"Character", "Row", "Column"}), 
  Sort = Table.Sort(Table.Distinct(FromRows), "Character"), 
  AddColumn = Table.AddColumn(
    Source("Table2"), 
    "My Answer", 
    each [
      a = Text.ToList(Text.Lower([Words])), 
      b = List.Transform(
        a, 
        each [
          p = List.PositionOf(Sort[Character], _), 
          q = Text.Repeat(".", Sort[Row]{p}) & " " & Text.Repeat(".", Sort[Column]{p})
        ][q]
      ), 
      c = Text.Combine(b, " ")
    ][c]
  ), 
  Result = Table.AddColumn(AddColumn, "Check", each [Answer Expected] = [My Answer])
in
  Result
Power Query solution 4 for Tap Code Cipher Generator, proposed by Tyler N.:
let
  a = YourCipher, 
  b = YourWords, 
  c = Table.AddColumn(
    b, 
    "Answer", 
    each 
      let
        d = Table.UnpivotOtherColumns(a, {"Column1"}, "Attribute", "Value"), 
        e = List.Transform(
          Text.ToList([Words]), 
          each 
            let
              f = Text.Upper(_), 
              g = Table.SelectRows(d, each Text.Contains([Value], f)), 
              h = Text.Combine(
                {Text.Repeat(".", g[Column1]{0}), Text.Repeat(".", Number.From(g[Attribute]{0}))}, 
                " "
              )
            in
              h
        ), 
        i = Text.Combine(e, " ")
      in
        i
  )
in
  c
Power Query solution 5 for Tap Code Cipher Generator, proposed by Felipe Perez Arevalo:
let
  Source = Table, 
  searchCharacter = (char as text) =>
    let
      source = {{"a" .. "e"}, {"f" .. "j"}, {"l" .. "p"}, {"q" .. "u"}, {"v" .. "z"}}, 
      character_transformed = Text.Replace(Text.Lower(char), "k", "c"), 
      x0 = List.Transform(source, each List.PositionOf(_, character_transformed) + 1), 
      x = List.Select(x0, each _ <> 0){0}, 
      y = List.PositionOf(List.Transform(x0, each _ <> 0), true) + 1, 
      out = {Text.Repeat("*", y), Text.Repeat("*", x)}
    in
      out, 
  addColumn = Table.AddColumn(
    Source, 
    "Result", 
    each Text.Combine(
      List.Combine(List.Transform(Text.ToList([Words]), each searchCharacter(_))), 
      " "
    ), 
    type text
  )
in
  addColumn

Solving the challenge of Tap Code Cipher Generator with Excel

Excel solution 1 for Tap Code Cipher Generator, proposed by Bo Rydobon 🇹🇭:
=MAP(
    H2:H10,
    LAMBDA(
        a,
        TEXTJOIN(
            " ",
            ,
            XLOOKUP(
                UPPER(
                    REGEXEXTRACT(
                        a,
                        ".",
                        1
                    )
                ),
                TOCOL(
                    B2:F6
                ),
                TOCOL(
                    REPT(
                        ".",
                        A2:A6
                    )&" "&REPT(
                        ".",
                        B1:F1
                    )
                ),
                ,
                3
            )
        )
    )
)
Excel solution 2 for Tap Code Cipher Generator, proposed by Rick Rothstein:
=LET(b,B2:F6,rw,BYROW(b,LAMBDA(r,CONCAT(r))),cl,BYCOL(b,LAMBDA(c,CONCAT(c))),f,LAMBDA(v,d,REPT(".",MATCH("*"&MID(v,SEQUENCE(LEN(v)),1)&"*",d,0))&" "),MAP(H2:H10,LAMBDA(h,TRIM(CONCAT(f(h,rw)&f(h,cl))))))
Excel solution 3 for Tap Code Cipher Generator, proposed by John V.:
=TRIM(BYROW(XLOOKUP(SUBSTITUTE(MID(H2:H10,COLUMN(A:K),1),"k","c"),TOCOL(LEFT(B2:F6)),TOCOL(" "&REPT(".",A2:A6)&" "&REPT(".",B1:F1)),""),CONCAT))

or with Bo Rydobon 🇹🇭 idea:
✅=MAP(H2:H10,LAMBDA(x,TEXTJOIN(" ",,XLOOKUP(REGEXEXTRACT(x,".",1),TOCOL(B2:F6),TOCOL(REPT(".",A2:A6)&" "&REPT(".",B1:F1)),". ..."))))
Excel solution 4 for Tap Code Cipher Generator, proposed by Kris Jaganah:
=MAP(H2:H10,
    LAMBDA(z,
    TEXTJOIN(" ",
    ,
    MAP(MID(
        z,
        SEQUENCE(
            LEN(
                z
            )
        ),
        1
    ),
    LAMBDA(x,
    LET(a,
    SUM((B2:F6=x)*A2:A6),
    b,
    REPT(
        ".",
        IF(
            a,
            a,
            1
        )
    ),
    c,
    SUM((B2:F6=x)*B1:F1),
    d,
    REPT(
        ".",
        IF(
            c,
            c,
            3
        )
    ),
    TEXTJOIN(
        " ",
        ,
        HSTACK(
            b,
            d
        )
    )))))))
Excel solution 5 for Tap Code Cipher Generator, proposed by Julian Poeltl:
=MAP(
    H2:H10,
    LAMBDA(
        W,
        LET(
            S,
            MID(
                W,
                SEQUENCE(
                    LEN(
                        W
                    )
                ),
                1
            ),
            C,
            CODE(
                S
            )-96,
            CC,
            IF(
                C>11,
                C-1,
                C
            ),
            TEXTJOIN(
                " ",
                ,
                REPT(
                    ".",
                    TOROW(
                        HSTACK(
                            IF(
                                C=11,
                                1,
                                ROUNDUP(
                                    CC/5,
                                    0
                                )
                            ),
                            IF(
                                C=11,
                                3,
                                MOD(
                                    CC-1,
                                    5
                                )+1
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 6 for Tap Code Cipher Generator, proposed by Timothée BLIOT:
=MAP(
    H2:H10,
    LAMBDA(
        z,
        LET(
            A,
            MID(
                z,
                SEQUENCE(
                    LEN(
                        z
                    )
                ),
                1
            ),
            F,
            LAMBDA(
                n,
                m,
                TOCOL(
                    IF(
                        SEARCH(
                            n,
                            B2:F6
                        ),
                        m
                    ),
                    3
                )
            ),
            G,
            LAMBDA(
                k,
                REPT(
                    ".",
                    k
                )
            ),
            TEXTJOIN(
                " ",
                ,
                MAP(
                    A,
                    LAMBDA(
                        x,
                        G(
                            F(
                                x,
                                SEQUENCE(
                                    5
                                )
                            )
                        )&" "&G(
                            F(
                                x,
                                SEQUENCE(
                                    ,
                                    5
                                )
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 7 for Tap Code Cipher Generator, proposed by Hussein SATOUR:
=MAP(
    H2:H10,
    LAMBDA(
        x,
        LET(
            w,
            REGEXEXTRACT(
                x,
                ".",
                1
            ),
            a,
            CHAR(
                SEQUENCE(
                    26
                )+64
            ),
            n,
            SEQUENCE(
                5
            ),
            s,
            XLOOKUP(
                w,
                FILTER(
                    a,
                    a<>"k"
                ),
                TOCOL(
                    n&TOROW(
                        n
                    )
                ),
                13
            ),
            TEXTJOIN(
                " ",
                ,
                REPT(
                    ".",
                    REGEXEXTRACT(
                        CONCAT(
                            s
                        ),
                        ".",
                        1
                    )
                )
            )
        )
    )
)
Excel solution 8 for Tap Code Cipher Generator, proposed by Sunny Baggu:
=MAP(
    
     H2:H10,
    
     LAMBDA(
         w,
         
          TEXTJOIN(
              
               " ",
              
               ,
              
               MAP(
                   
                    SUBSTITUTE(
                        MID(
                            w,
                             SEQUENCE(
                                 LEN(
                                     w
                                 )
                             ),
                             1
                        ),
                         "k",
                         "c"
                    ),
                   
                    LAMBDA(
                        a,
                        
                         TOCOL(
                             
                              IF(
                                  
                                   SUBSTITUTE(
                                       B2:F6,
                                        "/K",
                                        ""
                                   ) = a,
                                  
                                   REPT(
                                       ".",
                                        A2:A6
                                   ) & " " & REPT(
                                       ".",
                                        B1:F1
                                   ),
                                  
                                   x
                                   
                              ),
                             
                              3
                              
                         )
                         
                    )
                    
               )
               
          )
          
     )
    
)
Excel solution 9 for Tap Code Cipher Generator, proposed by LEONARD OCHEA 🇷🇴:
=LET(
    F,
    LAMBDA(
        x,
        y,
        REPT(
            ".",
            TOROW(
                IF(
                    FIND(
                        x,
                        B2:F6
                    ),
                    y,
                    
                ),
                3
            )
        )
    ),
    MAP(
        H2:H10,
        LAMBDA(
            b,
            TEXTJOIN(
                " ",
                ,
                MAP(
                    UPPER(
                        REGEXEXTRACT(
                            b,
                            ".",
                            1
                        )
                    ),
                    LAMBDA(
                        a,
                        F(
                            a,
                            A2:A6
                        )&" "&F(
                            a,
                            B1:F1
                        )
                    )
                )
            )
        )
    )
)
Excel solution 10 for Tap Code Cipher Generator, proposed by Hamidi Hamid:
=LET(
    s,
    REDUCE(
        0,
        H2:H10,
        LAMBDA(
            a,
            b,
            VSTACK(
                a,
                MID(
                    b,
                    SEQUENCE(
                        ,
                        LEN(
                            b
                        )
                    ),
                    1
                )
            )
        )
    ),
    x,
    HSTACK(
        TOCOL(
            IFNA(
                RIGHT(
                    B2:F6,
                    1
                ),
                A2:A6
            )
        ),
        TOCOL(
            IFNA(
                A2:A6,
                B2:F6
            )
        ),
        TOCOL(
            IFNA(
                B1:F1,
                B2:F6
            )
        )
    ),
    z,
    VSTACK(
        x,
        {"c"13}
    ),
    r,
    VLOOKUP(
        s,
        z,
        3,
        0
    ),
    q,
    VLOOKUP(
        s,
        z,
        2,
        0
    ),
    e,
    BYROW(
        IFERROR(
            DROP(
                MAP(
                    REPT(
                        ".",
                        q
                    )&" "&REPT(
                        ".",
                        r
                    ),
                  &  LAMBDA(
                        a,
                        TEXTJOIN(
                            " ",
                            1,
                            a
                        )
                    )
                ),
                1
            ),
            ""
        ),
        LAMBDA(
            a,
            TEXTJOIN(
                " ",
                1,
                a
            )
        )
    ),
    e
)
Excel solution 11 for Tap Code Cipher Generator, proposed by Asheesh Pahwa:
=LET(
    w,
    H2:H10,
    t,
    TOCOL(
        B2:F6&"-"&A2:A6&"-"&B1:F1
    ),
    
    d,
    LOWER(
        DROP(
            REDUCE(
                "",
                t,
                LAMBDA(
                    x,
                    y,
                    VSTACK(
                        x,
                        TEXTSPLIT(
                            y,
                            "-"
                        )
                    )
                )
            ),
            1
        )
    ),
    
    MAP(
        w,
        LAMBDA(
            a,
            LET(
                md,
                MID(
                    a,
                    SEQUENCE(
                        LEN(
                            a
                        )
                    ),
                    1
                ),
                m,
                DROP(
                    REDUCE(
                        "",
                        md,
                        LAMBDA(
                            y,
                            x,
                            VSTACK(
                                y,
                                LET(
                                    f,
                                    FIND(
                                        x,
                                        TAKE(
                                            d,
                                            ,
                                            1
                                        )
                                    ),
                                    I,
                                    ISNUMBER(
                                        f
                                    ),
                                    fl,
                                    FILTER(
                                        DROP(
                                            d,
                                            ,
                                            1
                                        ),
                                        I
                                    ),
                                    REPT(
                                        ".",
                                        fl
                                    )
                                )
                            )
                        )
                    ),
                    1
                ),
                TEXTJOIN(
                    " ",
                    1,
                    m
                )
            )
        )
    )
)
Excel solution 12 for Tap Code Cipher Generator, proposed by ferhat CK:
=LET(
    a,
    SUBSTITUTE(
        TOCOL(
            LOWER(
                B2:F6
            )
        ),
        "ı",
        "i"
    ),
    x,
    QUOTIENT(
        XMATCH(
            a,
            a,
            3
        )-1,
        5
    )+1,
    c,
    MOD(
        XMATCH(
            a,
            a,
            3
        ),
        5
    ),
    y,
    IF(
        c=0,
        5,
        c
    ),
    MAP(
        H2:H10,
        LAMBDA(
            i,
            
            LET(
                k,
                MID(
                    i,
                    SEQUENCE(
                        LEN(
                            i
                        )
                    ),
                    1
                ),
                TEXTJOIN(
                    " ",
                    ,
                    REPT(
                        ".",
                        XLOOKUP(
                            k,
                            a,
                            x,
                            ,
                            3
                        )
                    )&" "&REPT(
                        ".",
                        XLOOKUP(
                            k,
                            a,
                            y,
                            ,
                            3
                        )
                    )
                )
            )
        )
    )
)
Excel solution 13 for Tap Code Cipher Generator, proposed by Jaroslaw Kujawa:
=MAP(H2:H10;
LAMBDA(x ; 
LET(
a ; CHAR(SEQUENCE(90-65+1 ; ; 65));
b ; FILTER(a ; a<>"k");
col ; VSTACK(TAKE(b ; 2) ; "C/K" ; TAKE(b;-ROWS(b)+3)); 
y ; MID(x ; SEQUENCE( ; LEN(x)) ; 1); 
pos ; IFNA(XMATCH(y ; col)/5 ; XMATCH("c/k" ; col)/5);
TEXTJOIN(" " ; ; REPT("." ; TEXTSPLIT(TEXTJOIN(";" ; ; ROUNDUP(pos ; ) &";"&5*(IF(pos<>INT(pos) ; pos-INT(pos) ; 1))) ; ";")))
)
)
)
Excel solution 14 for Tap Code Cipher Generator, proposed by Andy Heybruch:
=MAP(H2:H10,LAMBDA(_word,LET(
_cipher,TEXTSPLIT(TEXTJOIN(";",,VSTACK(TOCOL(LEFT(B2:F6)&"|"&A2:A6&"|"&B1:F1),"K|1|3")),"|",";"),
_x,MID(_word,SEQUENCE(LEN(_word)),1),
TEXTJOIN(" ",,TOROW(REPT(".",INDEX(_cipher,XMATCH(_x,TAKE(_cipher,,1)),{2,3})))))))
Excel solution 15 for Tap Code Cipher Generator, proposed by Meganathan Elumalai:
=MAP(
    H2:H10,
    LAMBDA(
        x,
        REDUCE(
            "",
            UPPER(
                MID(
                    x,
                    SEQUENCE(
                        LEN(
                            x
                        )
                    ),
                    1
                )
            ),
            LAMBDA(
                a,
                v,
                TEXTJOIN(
                    " ",
                    ,
                    VSTACK(
                        a,
                        LET(
                            R,
                            B2:F6,
                            Arr,
                            ISNUMBER(
                                FIND(
                                    v,
                                    R
                                )
                            ),
                            REPT(
                                ".",
                                SUM(
                                    Arr*SEQUENCE(
                                        ROWS(
                                            R
                                        )
                                    )
                                )
                            )&" "&REPT(
                                ".",
                                SUM(
                                    Arr*SEQUENCE(
                                        ,
                                        ROWS(
                                            R
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 16 for Tap Code Cipher Generator, proposed by Bilal Mahmoud kh.:
=LET(get_rc,
    LAMBDA(
        n,
        TEXTJOIN(
            " ",
            TRUE,
            REPT(
                ".",
                BYROW(
                    VSTACK(
                        TRANSPOSE(
                            B2:F6
                        ),
                        B2:F6
                    ),
                    LAMBDA(
                        x,
                        IFERROR(
                            MATCH(
                                n,
                                x,
                                0
                            ),
                            0
                        )
                    )
                )
            )
        )
    ),
    cypher,
    LAMBDA(m,
    TEXTJOIN(" ",
    ,
    MAP(MID(
        m,
        SEQUENCE(
            LEN(
                m
            )
        ),
        1
    ),
    LAMBDA(s,
    IF((s="k")+(s="c"),
    REPT(
        ".",
        1
    )&" "&REPT(
        ".",
        3
    ),
    get_rc(
        s
    )))))),
    MAP(
        H2:H10,
        LAMBDA(
            r,
            cypher(
                r
            )
        )
    ))
Excel solution 17 for Tap Code Cipher Generator, proposed by JvdV –:
=TRIM(REGEXREPLACE(H2:H10,CONCAT("(["&B2:F6&"])|"),CONCAT("${"&ROW(1:25)&":+"&TOCOL(REPT(".",A2:A6)&" "&REPT(".",B1:F1)&" }")),,1))
Excel solution 18 for Tap Code Cipher Generator, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=MAP(
    H2:H10,
    LAMBDA(
        z,
        TEXTJOIN(
            " ",
            ,
            REPT(
                ".",
                TEXTSPLIT(
                    TEXTJOIN(
                        ",",
                        ,
                        MAP(
                            MID(
                                z,
                                SEQUENCE(
                                    LEN(
                                        z
                                    )
                                ),
                                1
                            ),
                            LAMBDA(
                                y,
                                LET(
                                    x,
                                    TOCOL(
                                        IFERROR(
                                            IF(
                                                ISNUMBER(
                                                    SEARCH(
                                                        y,
                                                        B2:F6
                                                    )
                                                ),
                                                ROW(
                                                    A1:A6
                                                )&","&COLUMN(
                                                    A1:F1
                                                ),
                                                ""
                                            ),
                                            ""
                                        )
                                    ),
                                    FILTER(
                                        x,
                                        x<>""
                                    )
                                )
                            )
                        )
                    ),
                    ","
                )
            )
        )
    )
)
Excel solution 19 for Tap Code Cipher Generator, proposed by Imam Hambali:
=LET(
a, TEXTSPLIT(TEXTJOIN(",",1,A2:A6&";"&B1:F1),";",","),
b, TOCOL(B2:F6),
c, H2:H10,
d, DROP(REDUCE("",c,LAMBDA(x,y, VSTACK(x, MID(y,SEQUENCE(,LEN(y)),1)))),1),
func, LAMBDA(x,y, REPT(".", XLOOKUP("*"&x&"*",b,y,,2))),
g, IFNA(MAP(d, LAMBDA(z, TEXTJOIN(" ",1, func(z, TAKE(a,,1))&" "& func(z, TAKE(a,,-1))))),""),
HSTACK(c, BYROW(g, LAMBDA(x, TEXTJOIN(" ",1,x))))
)
Excel solution 20 for Tap Code Cipher Generator, proposed by Nicolas Micot:
=LET(
    _chars;
    DANSCOL(
        $B$2:$F$6
    );
    
    _cypher;
    DANSCOL(
        $A$2:$A$6&","&$B$1:$F$1
    );
    
    _split;
    STXT(
        H2;
        SEQUENCE(
            NBCAR(
                H2
            )
        );
        1
    );
    
    _len;
    JOINDRE.TEXTE(
        ",";
        VRAI;
        RECHERCHEX(
            _split;
            _chars;
            _cypher;
            "1,3";
            0
        )
    );
    
    JOINDRE.TEXTE(
        " ";
        VRAI;
        REPT(
            ".";
            FRACTIONNER.TEXTE(
                _len;
                ","
            )
        )
    )
)
Excel solution 21 for Tap Code Cipher Generator, proposed by Abdelrahman Omer, MBA, PMP:
=MAP(H2:H10,LAMBDA(w,LET(a,UPPER(MID(w,SEQUENCE(LEN(w)),1)),b,IFNA(MATCH(a,LEFT(TOCOL(B2:F6)),0),3),c,IF(MOD(b,5),MOD(b,5),5),d,ROUNDUP(b/5,0),TEXTJOIN(" ",,REPT(".",HSTACK(d,c))))))
Excel solution 22 for Tap Code Cipher Generator, proposed by Songglod P.:
=MAP(H2:H10,LAMBDA(r,LET(chars,UNICHAR(SEQUENCE(26,,97)),idx,TOCOL(SEQUENCE(5)&SEQUENCE(1,5)),letter,FILTER(chars,chars<>"k"),en,XLOOKUP(MID(SUBSTITUTE(r,"k","c"),SEQUENCE(LEN(r)),1),letter,idx),TEXTJOIN(" ",,MAP(en,LAMBDA(val,REPT(".",LEFT(val))&" "&REPT(".",RIGHT(val))))))))
Excel solution 23 for Tap Code Cipher Generator, proposed by Nonbow Wu:
=LET(t,SUBSTITUTE(TOCOL(B2:F6),"/K",),n,SEQUENCE(25)-1,
d,REPT(".",n/5+1)&" "&REPT(".",MOD(n,5)+1),
MAP(SUBSTITUTE(H2:H10,"k","c"),LAMBDA(w,TEXTJOIN(" ",,INDEX(d,MATCH(MID(w,SEQUENCE(LEN(w)),1),t,0))))))
Excel solution 24 for Tap Code Cipher Generator, proposed by Nonbow Wu:
=LET(
    t,
    TOCOL(
        B2:F6
    ),
    n,
    SEQUENCE(
        25
    )-1,
    
    d,
    REPT(
        ".",
        n/5+1
    )&" "&REPT(
        ".",
        MOD(
            n,
            5
        )+1
    ),
    
    MAP(
        H2:H10,
        LAMBDA(
            w,
            TEXTJOIN(
                " ",
                ,
                XLOOKUP(
                    "*"&MID(
                        w,
                        SEQUENCE(
                            LEN(
                                w
                            )
                        ),
                        1
                    )&"*",
                    t,
                    d,
                    ,
                    2,
                    
                )
            )
        )
    )
)
Excel solution 25 for Tap Code Cipher Generator, proposed by Elliott Paterson:
=MAP(H2:H10,LAMBDA(word,
 LET(upper,SUBSTITUTE(UPPER(word),"K","C"),
 s,SEQUENCE(LEN(upper)),
 letters,MID(upper,s,1),
 alphabet,TOCOL(IF(B2:F6="C/K","C",B2:F6)),
 dot_array,MAKEARRAY(5,5,LAMBDA(rw,cl,TEXTJOIN(" ",1,REPT(".",rw),REPT(".",cl)))),
 dots,TOCOL(dot_array),
 dots_by_letter,XLOOKUP(letters,alphabet,dots),
 result,TEXTJOIN(" ",1,dots_by_letter),
 result)
))
Excel solution 26 for Tap Code Cipher Generator, proposed by Elliott Paterson:
=MAP(SUBSTITUTE(H2:H10,"k","c"),LAMBDA(w,LET(c,UNICODE(MID(w,SEQUENCE(LEN(w)),1))-96,TEXTJOIN(" ",,INDEX(TOCOL(REPT(".",A2:A6)&" "&REPT(".",B1:F1)),IF(c>11,c-1,c))))))

Solving the challenge of Tap Code Cipher Generator with Python

Python solution 1 for Tap Code Cipher Generator, proposed by Konrad Gryczan, PhD:
import pandas as pd
from itertools import chain
path = "548 Tap Code Cipher.xlsx"
input1 = pd.read_excel(path, sheet_name='Sheet1', usecols="A:F", nrows=6)
input2 = pd.read_excel(path, sheet_name='Sheet1', usecols="H:H", nrows=10)
test = pd.read_excel(path, sheet_name='Sheet1', usecols="I:I", nrows=10)
coding_table = input1.melt(id_vars=input1.columns[0], var_name='letter', value_name='code')
coding_table.columns = ['row', 'col', 'letter']
coding_table = coding_table.assign(letter=coding_table['letter'].str.lower().str.split('/')).explode('letter').dropna().reset_index(drop=True)
coding_table['row'] = coding_table['row'].astype(int)
def encrypt(word):
 return ' '.join(
 ['.' * int(num) for num in ' '.join(
 [f"{coding_table.loc[coding_table['letter'] == char, 'row'].values[0]} {coding_table.loc[coding_table['letter'] == char, 'col'].values[0]}"
 for char in word]
 ).split()]
 )
input2['Answer Expected'] = input2['Words'].apply(encrypt)
print(input2['Answer Expected'].equals(test['Answer Expected'])) # True
                    
      &            

Solving the challenge of Tap Code Cipher Generator with Python in Excel

Python in Excel solution 1 for Tap Code Cipher Generator, proposed by Alejandro Campos:
grid = [list("ABCDE"), list("FGHIJ"), list("LMNOP"), list("QRSTU"), list("VWXYZ")]
tap_code = {ch: (i+1, j+1) for i, row in enumerate(grid) for j, ch in enumerate(row)}
tap_code["K"] = tap_code["C"]
def encrypt(word):
 return ' '.join('.' * tap_code[ch][0] + ' ' + '.' * tap_code[ch][1] for ch in word.upper() if ch in tap_code)
df = pd.DataFrame({"Word": words, "Encrypted": [encrypt(w) for w in words]})
                    
                  
Python in Excel solution 2 for Tap Code Cipher Generator, proposed by Abdallah Ally:
# Create a function to encrypt a text
def encrypt(df, text):
 chars = [char.upper() for char in text]
 values = []
 for char in chars:
 row, col = df[df['Character'] == char].reset_index().iloc[0, 2:]
 values.append('.' * row + ' ' + '.' * col)
 return ' '.join(values)
df1 = xl("A1:F6", headers=True)
df2 = xl("H1:I10", headers=True)
# Perform data manipulation
df1[3] = df1[3].str.split('/')
df1 = df1.explode(column=3, ignore_index=True)
values = df1.apply(lambda x: zip(x[1:], [x.values[0] for y in x], df1.columns[1:]), axis=1)
items = []
for value in values:
 items.extend(value)
df1 = pd.DataFrame(data=items, columns=['Character', 'Row', 'Column'])
df1 = df1.drop_duplicates().sort_values(by='Character', ignore_index=True)
df2['My Answer'] = df2['Words'].map(lambda x: encrypt(df1, x))
df2['Check'] = df2['My Answer'] == df2['Answer Expected']
df2
                    
                  

Solving the challenge of Tap Code Cipher Generator with R

R solution 1 for Tap Code Cipher Generator, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
path = "Excel/548 Tap Code Cipher.xlsx"
input1 = read_excel(path, range = "A1:F6")
input2 = read_excel(path, range = "H1:H10")
test = read_excel(path, range = "I1:I10")
coding_table = input1 %>%
 pivot_longer(-1, names_to = "letter", values_to = "code") %>%
 select(row = 1, col = 2, letter = 3) %>%
 separate_rows(letter, sep = "/") %>%
 mutate(letter = str_to_lower(letter))
encrypt = function(word) {
 characters = str_split(word, "") %>% unlist()
 coord = map_dfr(characters, ~{
 row = coding_table %>% filter(letter == .x) %>% pull(row)
 col = coding_table %>% filter(letter == .x) %>% pull(col)
 tibble(row = row, col = col) 
 }) %>%
 unite("coord", row, col, sep = " ") %>%
 pull(coord) %>%
 paste(collapse = " ")
 
 coord = str_split(coord, " ") %>% unlist() %>%
 map_dfr(~{
 dots = str_c(rep(".", .x), collapse = "")
 tibble(dots = dots)
 }) %>%
 pull(dots) %>%
 paste(collapse = " ")
 
 return(coord)
}
result = input2 %>%
 mutate(`Answer Expected` = map_chr(Words, encrypt))
identical(test$`Answer Expected`, result$`Answer Expected`)
#> [1] TRUE
                    
                  

&

Leave a Reply