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))
&&
