Home » Generate Kamasutra Cipher Encryption

Generate Kamasutra Cipher Encryption

Kamasutra Cipher – Generate 13 random pairs from English alphabets and use that to encrypt the plain text. Since. this is random pairing, hence answers of all us will be different. Ex. I generated following pairs (pairs in two rows for sake of illustration) izqurplxwtvej ancgfoybksdhm Hence, i will be replaced with a and vice versa, z will be replaced with n and vice versa and so on. Plain Text – barbarians marching Encrypted Text – xifxifaizt jifqeazu

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

Solving the challenge of Generate Kamasutra Cipher Encryption with Power Query

Power Query solution 1 for Generate Kamasutra Cipher Encryption, proposed by John V.:
let
 S = Excel.CurrentWorkbook(){0}[Content],
 T = List.Buffer(List.Sort({"a".."z"}, each Number.Random())),
 R = Table.AddColumn(S, "R", each Text.Combine(List.Transform(Text.ToList([Plain Text]), each try T{25 - List.PositionOf(T, _)} otherwise " ")))[[R]]
in
 R

Blessings!


                    
                  
          
Power Query solution 2 for Generate Kamasutra Cipher Encryption, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Zip = let
 a = {"a".."m"},
 b = List.Sort({"n".."z"}, each Number.RandomBetween(1,13))
 in List.Zip({a,b}),
 Sol = Table.AddColumn(Source, "Answer", each let
 a = [Plain Text],
 b = List.Transform(Zip, List.Reverse),
 c = Zip&b,
 d = Text.Split(a, " "),
 e = List.Transform(d, each Text.Combine(List.ReplaceMatchingItems(Text.ToList(_), c))),
 f = Text.Combine(e, " ")
in f)[[Answer]]
in
 Sol


Código inicial 
let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Sol = Table.AddColumn(Source, "Answer", each let
 a = [Plain Text],
 b = List.Zip({{"a".."m"}, {"n".."z"}}),
 c = List.Transform(b, List.Reverse),
 d = b&c,
 e = Text.Split(a, " "),
 f = List.Transform(e, each Text.Combine(List.ReplaceMatchingItems(Text.ToList(_), d))),
 g = Text.Combine(f, " ")
in g)
in
 Sol


                    
                  
          
Power Query solution 3 for Generate Kamasutra Cipher Encryption, proposed by Luke Jarych:
let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 MaxRandom = 13,
 AlphabetRandom = let
 a = {"a".."z"},
 b = List.Buffer(List.Sort(a, each Number.Random())),
 b1 = List.FirstN(b, MaxRandom),
 b2 = List.Skip(b, MaxRandom),
 cZip = List.Zip({b1, b2}) & List.Zip({b2, b1})
 in cZip,
 Answer = Table.AddColumn(Source, "Expected Answer", each
 let 
 a = Text.ToList([Plain Text]),
 b = List.ReplaceMatchingItems(a, AlphabetRandom),
 c = Text.Combine(b)
 in c)[[Expected Answer]]
in
 Answer

I am not sure if i can use this statements :

 b1 = List.FirstN(b, MaxRandom),
 b2 = List.Skip(b, MaxRandom),
but seems to be working :) 


                    
                  
          
Power Query solution 4 for Generate Kamasutra Cipher Encryption, proposed by Thomas DUCROQUETZ:
Alphabet = List.Sort(List.Transform({"a".."z"},each {_,Number.Random()}),(x,y)=> Int64.From(x{1} < y{1})),
 Pairs = List.Transform(List.Zip({List.FirstN(Alphabet,13),List.LastN(Alphabet,13)}),each {_{0}{0},_{1}{0}}),
 Encrypt =
 List.Accumulate(
 Pairs,
 Source,
 (s,c) =>
 Table.ReplaceValue(s,c{0},c{1},Replacer.ReplaceText,{"Plain Text"})
 )
in
 Encrypt
                    
                  

Solving the challenge of Generate Kamasutra Cipher Encryption with Excel

Excel solution 1 for Generate Kamasutra Cipher Encryption, proposed by Bo Rydobon 🇹🇭:
=MAP(
    A2:A10,
    LAMBDA(
        a,
        LET(
            r,
            WRAPCOLS(
                MID(
                    "izqurplxwtvejancgfoybksdhm",
                    SEQUENCE(
                        26
                    ),
                    1
                ),
                13
            ),
            m,
            MID(
                a,
                SEQUENCE(
                    LEN(
                        a
                    )
                ),
                1
            ),
            
            CONCAT(
                IF(
                    m>"9",
                    VLOOKUP(
                        m,
                        VSTACK(
                            r,
                            SORTBY(
                                r,
                                {1,
                                0}
                            )
                        ),
                        2,
                        
                    ),
                    m
                )
            )
        )
    )
)
Excel solution 2 for Generate Kamasutra Cipher Encryption, proposed by Bo Rydobon 🇹🇭:
=MAP(
    A2:A10,
    LAMBDA(
        a,
        LET(
            c,
            SORTBY(
                CHAR(
                    SEQUENCE(
                        26
                    )+96
                ),
                RANDARRAY(
                        26
                    )
            ),
            CONCAT(
                IFNA(
                    INDEX(
                        c,
                        27-XMATCH(
                            MID(
                                a,
                                SEQUENCE(
                                    LEN(
                                        a
                                    )
                                ),
                                1
                            ),
                            c
                        )
                    ),
                    " "
                )
            )
        )
    )
)
Excel solution 3 for Generate Kamasutra Cipher Encryption, proposed by John V.:
=MAP(
    A2:A10,
    LAMBDA(
        x,
        LET(
            s,
            ROW(
                1:26
            ),
            c,
            SORTBY(
                CHAR(
                    96+s
                ),
                RANDARRAY(
                    26
                )
            ),
            CONCAT(
                XLOOKUP(
                    MID(
                        x,
                        SEQUENCE(
                            LEN(
                                x
                            )
                        ),
                        1
                    ),
                    c,
                    SORTBY(
                        c,
                        -s
                    ),
                    " "
                )
            )
        )
    )
)
Excel solution 4 for Generate Kamasutra Cipher Encryption, proposed by محمد حلمي:
=MAP(A2:A10,LAMBDA(a,LET(s,SEQUENCE(26)+96,v,
CHAR(SORTBY(s,RANDARRAY(26))),CONCAT(XLOOKUP(
MID(a,SEQUENCE(LEN(a)),1),v,SORTBY(v,-s)," ")))))
Excel solution 5 for Generate Kamasutra Cipher Encryption, proposed by Julian Poeltl:
=LET(
    L,
    CHAR(
        SEQUENCE(
            26,
            ,
            97
        )
    ),
    LL,
    CHAR(
        INDEX(
            UNIQUE(
                RANDARRAY(
                    26^2,
                    1,
                    1,
                    26,
                    1
                )
            ),
            SEQUENCE(
                26
            )
        )+96
    ),
    MAP(
        A2:A10,
        LAMBDA(
            A,
            TAKE(
                SCAN(
                    A,
                    SEQUENCE(
                26
            ),
                    LAMBDA(
                        A,
                        B,
                        SUBSTITUTE(
                            A,
                            INDEX(
                                L,
                                B
                            ),
                            INDEX(
                                LL,
                                B
                            )
                        )
                    )
                ),
                -1
            )
        )
    )
)
Excel solution 6 for Generate Kamasutra Cipher Encryption, proposed by Timothée BLIOT:
=LET(
    A,
    SEQUENCE(
        26
    ),
    B,
    CHAR(
        SORTBY(
            A,
            RANDARRAY(
        26
    )
        )+96
    ),
    C,
    SORTBY(
        B,
        A,
        -1
    ),
    MAP(
        A2:A10,
        LAMBDA(
            z,
            CONCAT(
                MAP(
                    MID(
                        z,
                        SEQUENCE(
                            LEN(
                                z
                            )
                        ),
                        1
                    ),
                    LAMBDA(
                        x,
                        IFNA(
                            XLOOKUP(
                                x,
                                B,
                                C
                            ),
                            " "
                        )
                    )
                )
            )
        )
    )
)
Excel solution 7 for Generate Kamasutra Cipher Encryption, proposed by Hussein SATOUR:
=MAP(
    A2:A10,
     LAMBDA(
         x,
          LET(
              a,
               WRAPROWS(
                   SORTBY(
                       CHAR(
                           SEQUENCE(
                               26
                           )+96
                       ),
                        RANDARRAY(
                            26,
                            1
                        )
                   ),
                    2
               ),
               b,
               MID(
                   x,
                    SEQUENCE(
                        LEN(
                            x
                        )
                    ),
                    1
               ),
              
              CONCAT(
                  IFERROR(
                      XLOOKUP(
                          b,
                           INDEX(
                               a,
                               ,
                               1
                           ),
                           INDEX(
                               a,
                               ,
                               2
                           )
                      ),
                       XLOOKUP(
                           b,
                            INDEX(
                               a,
                               ,
                               2
                           ),
                            INDEX(
                               a,
                               ,
                               1
                           ),
                           " "
                       )
                  )
              )
          )
     )
)
Excel solution 8 for Generate Kamasutra Cipher Encryption, proposed by Sunny Baggu:
=MAP(
    
     A2:A10,
    
     LAMBDA(
         x,
         
          LET(
              
               _a,
               WRAPROWS(
                   CHAR(
                       SEQUENCE(
                           26,
                            ,
                            CODE(
                                "a"
                            )
                       )
                   ),
                    2
               ),
              
               _b,
               TAKE(
                   _a,
                    ,
                    1
               ),
              
               _c,
               TAKE(
                   _a,
                    ,
                    -1
               ),
              
               _m,
               MID(
                   x,
                    SEQUENCE(
                        LEN(
                            x
                        )
                    ),
                    1
               ),
              
               CONCAT(
                   IFNA(
                       IFNA(
                           XLOOKUP(
                               _m,
                                _b,
                                _c
                           ),
                            XLOOKUP(
                                _m,
                                 _c,
                                 _b
                            )
                       ),
                        " "
                   )
               )
               
          )
          
     )
    
)
Excel solution 9 for Generate Kamasutra Cipher Encryption, proposed by LEONARD OCHEA 🇷🇴:
=LET(
    l,
    MID(
        A2:A10,
        SEQUENCE(
            ,
            40
        ),
        1
    ),
    s,
    RANDARRAY(
        26
    ),
    m,
    CHAR(
        96+WRAPROWS(
            XMATCH(
                s,
                SORT(
                    s
                )
            ),
            2
        )
    ),
    i,
    TAKE(
        m,
        ,
        1
    ),
    j,
    TAKE(
        m,
        ,
        -1
    ),
    TRIM(
        BYROW(
            MAP(
                l,
                LAMBDA(
                    a,
                    XLOOKUP(
                        a,
                        i,
                        j,
                        XLOOKUP(
                            a,
                            j,
                            i,
                            " "
                        )
                    )
                )
            ),
            CONCAT
        )
    )
)
Excel solution 10 for Generate Kamasutra Cipher Encryption, proposed by Andy Heybruch:
=LET(
    Ltrs,
    SEQUENCE(
        26,
        ,
        65
    ),
    
     RndOrder,
    RANDARRAY(
        26
    ),
    
     Rndltrs,
    SORTBY(
        Ltrs,
        RndOrder
    ),
    
     Pairs,
    HSTACK(
        TAKE(
            Rndltrs,
            13
        ),
        TAKE(
            Rndltrs,
            -13
        )
    ),
    
     RevPairs,
    HSTACK(
        TAKE(
            Rndltrs,
            -13
        ),
        TAKE(
            Rndltrs,
            13
        )
    ),
    
     UNICHAR(
         VSTACK(
             Pairs,
             RevPairs
         )
     )
)
Excel solution 11 for Generate Kamasutra Cipher Encryption, proposed by Bilal Mahmoud kh.:
=MAP(
    A1:A10,
    LAMBDA(
        x,
        LET(
            _a,
            WRAPROWS(
                LET(
                    a,
                    CHAR(
                        SEQUENCE(
                            26,
                            ,
                            CODE(
                                "a"
                            )
                        )
                    ),
                    b,
                    MAP(
                        SEQUENCE(
                            26
                        ),
                        LAMBDA(
                            x,
                            RAND()
                        )
                    ),
                    n,
                    SORT(
                        b
                    ),
                    c,
                    XLOOKUP(
                        n,
                        b,
                        a
                    ),
                    c
                ),
                2
            ),
            _b,
             TAKE(
                 _a,
                  ,
                 1
             ),
            _c,
             TAKE(
                 _a,
                  ,
                  -1
             ),
            _m,
             MID(
                 x,
                  SEQUENCE(
                      LEN(
                          x
                      )
                  ),
          &        1
             ),
            CONCAT(
                IFNA(
                    IFNA(
                        XLOOKUP(
                            _m,
                             _b,
                             _c
                        ),
                         XLOOKUP(
                             _m,
                              _c,
                              _b
                         )
                    ),
                     " "
                )
            )
        )
    )
)
Excel solution 12 for Generate Kamasutra Cipher Encryption, proposed by JvdV –:
=LET(
    x,
    CHAR(
        WRAPROWS(
            SORTBY(
                ROW(
                    1:26
                ),
                RANDARRAY(
                    26
                )
            ),
            2
        )+96
    ),
    REDUCE(
        A2:A10,
        BYROW(
            x,
            CONCAT
        ),
        LAMBDA(
            y,
            z,
            SUBSTITUTE(
                SUBSTITUTE(
                    SUBSTITUTE(
                        y,
                        LEFT(
                            z
                        ),
                        0
                    ),
                    RIGHT(
                            z
                        ),
                    LEFT(
                            z
                        )
                ),
                0,
                RIGHT(
                            z
                        )
            )
        )
    )
)
Excel solution 13 for Generate Kamasutra Cipher Encryption, proposed by Pieter de Bruijn:
=LET(s,SORTBY(CHAR(ROW(97:122)),RANDARRAY(26)),LET(m,MID(A2:A10,COLUMN(A:AD),1),BYROW(IF(m=" "," ",IFNA(INDEX(s,27-XMATCH(m,s)),"")),CONCAT)))
Excel solution 14 for Generate Kamasutra Cipher Encryption, proposed by Giorgi Goderdzishvili:
=MAP(
    A2:A10,
    LAMBDA(
        x,
        LET(
            
            rd,
            SORTBY(
                SEQUENCE(
                    26,
                    ,
                    97
                ),
                RANDARRAY(
                    26
                )
            ),
            
            vs,
             CHAR(
                 HSTACK(
                     rd,
                     VSTACK(
                         TAKE(
                             rd,
                             -13
                         ),
                         TAKE(
                             rd,
                             13
                         )
                     )
                 )
             ),
            sl,
             CONCAT(
                 IFERROR(
                     VLOOKUP(
                         MID(
                             x,
                             SEQUENCE(
                                 ,
                                 LEN(
                                     x
                                 )
                             ),
                             1
                         ),
                         vs,
                         2,
                         FALSE
                     ),
                     " "
                 )
             ),
            sl
        )
    )
)
Excel solution 15 for Generate Kamasutra Cipher Encryption, proposed by Tyler Cameron:
=LET(b,
    
LET(a,
    ROUND(
        RAND()*10+1,
        0
    ),
    HSTACK(MAKEARRAY(26,
    1,
    LAMBDA(r,
    c,
    (96+r))),
    VSTACK(
        SEQUENCE(
            26-a,
            ,
            a+97
        ),
        SEQUENCE(
            a,
            ,
            97
        )
    )))
,
    CONCAT(
        CHAR(
            XLOOKUP(
                CODE(
                    MID(
                        A2,
                        SEQUENCE(
                            LEN(
                                A2
                            )
                        ),
                        1
                    )
                ),
                CHOOSECOLS(
                    b,
                    1
                ),
                CHOOSECOLS(
                    b,
                    2
                ),
                32
            )
        )
    ))
Excel solution 16 for Generate Kamasutra Cipher Encryption, proposed by Surendra Reddy:
=LET(a,CHAR(SEQUENCE(26,,97)),b,TAKE(SORTBY(CHAR(SEQUENCE(26,,97)),RANDARRAY(26)),13),d,VSTACK(b,b),MAP(A2:A10,LAMBDA(x,CONCAT(XLOOKUP(MID(x,SEQUENCE(LEN(x)),1),a,d," ")))))

Solving the challenge of Generate Kamasutra Cipher Encryption with Python

Python solution 1 for Generate Kamasutra Cipher Encryption, proposed by Luke Jarych:
import xlwings as xw
import pandas as pd
import string as str
import random
from itertools import chain
wb = xw.Book(r'C:UsersLukeDownloadsExcel_Challenge_382 - Kamasutra Cipher.xlsx')
sh = wb.sheets[0]
table = sh.tables['Table1']
rng = sh.range(table.range.address)
df = rng.options(pd.DataFrame, header = True, index=False, numbers=int).value
alphabet_list = list(str.ascii_lowercase)
random.shuffle(alphabet_list)
max_random = 13
list1 = alphabet_list[:max_random]
list2 = alphabet_list[max_random:]
alphabet_zip = dict(list(chain(zip(list1, list2), zip(list2, list1)))) | {' ': ' '}
def make_list_with_cypher(keyword):
 characters_list = list(keyword)
 return alphabet_ex_keyword
df['Expected Answer'] = df['Plain Text'].apply(make_list_with_cypher)
                    
                  

Solving the challenge of Generate Kamasutra Cipher Encryption with R

R solution 1 for Generate Kamasutra Cipher Encryption, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Excel/382 Kamasutra Cipher.xlsx", range = "A1:A10")
generate_code = function() {
shuffled_alph = sample(letters)
sh_p1 = shuffled_alph[1:(length(shuffled_alph)/2)] 
sh_p2 = shuffled_alph[(length(shuffled_alph)/2 + 1):length(shuffled_alph)]
sh_p1 = setNames(sh_p1, sh_p2)
sh_p2 = setNames(sh_p2, sh_p1)
code = c(sh_p1, sh_p2)
return(code)
}
code = function(string){
 code = generate_code()
 string = tolower(string)
 chars = map(words, str_split, "") %>%
 map(unlist)
 coded_chars = map(chars, function(x) code[x])
 coded_string = paste(coded_words, collapse = " ")
 return(coded_string)
}
result = input %>%
 mutate(coded = map_chr(`Plain Text`, code))
                    
                  

&&

Leave a Reply