Generate first 26 prime numbers starting with 2 till 101 (101 is 26th prime number). Assign them to English alphabets sequentially. Hence A=2, B=3…….Y=97, Z=101. Sum the numbers for English alphabets given in Words. Example – Car = C(5) + A(2) + R(61) = 68
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 160
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Alphabet Prime Mapping with Power Query
Power Query solution 1 for Alphabet Prime Mapping, proposed by Bo Rydobon 🇹🇭:
let
Prime = List.Accumulate(
List.Numbers(3, 50, 2),
{2},
(s, l) => if List.AllTrue(List.Transform(s, each Number.Mod(l, _) > 0)) then s & {l} else s
),
Word = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Ans = Table.TransformRows(
Word,
each List.Sum(
List.Transform(Text.ToList(Text.Upper([Words])), each Prime{Character.ToNumber(_) - 65})
)
)
in
Ans
Power Query solution 2 for Alphabet Prime Mapping, proposed by Aditya Kumar Darak 🇮🇳:
let
Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content],
IsPrime = (Number) =>
let
Sqrt = Number.Sqrt(Number),
Divide = Number.IntegerDivide(Sqrt, 1),
List = {2 .. Divide},
TF = List.Transform(List, each Number.Mod(Number, _) = 0),
R = not List.AnyTrue(TF)
in
R,
Generate = List.Generate(
() => [x = 2, y = IsPrime(x), z = Number.From(y)],
each [z] <= 26,
each [x = [x] + 1, y = IsPrime(x), z = [z] + Number.From(y)]
),
Prime = List.Transform(List.Select(Generate, each [y]), each [x]),
Replace = List.Zip({{"A" .. "Z"}, Prime}),
Return = Table.AddColumn(
Source,
"Result",
each [
Upper = Text.Upper([Words]),
ToList = Text.ToList(Upper),
Replaced = List.ReplaceMatchingItems(ToList, Replace),
Total = List.Sum(Replaced)
][Total]
)
in
Return
Power Query solution 3 for Alphabet Prime Mapping, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
ToTable = Table.FromColumns({{2 .. 101}}),
NoPrimos = Table.AddColumn(
ToTable,
"Custom",
(x) =>
List.Count(
List.Select(
List.Transform(
List.Reverse({1 .. x[Column1]}),
each x[Column1] / _ - Number.RoundDown(x[Column1] / _)
),
each _ = 0
)
)
),
Zip = List.Zip({{"A" .. "Z"}, Table.SelectRows(NoPrimos, each [Custom] <= 2)[Column1]}),
Data = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.AddColumn(
Data,
"Answer Expected",
each List.Sum(List.ReplaceMatchingItems(Text.ToList(Text.Upper([Words])), Zip))
)[[Answer Expected]]
in
Sol
Power Query solution 4 for Alphabet Prime Mapping, proposed by Bhavya Gupta:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
IsPrime = (Num as number) =>
if Number.IsEven(Num) then
false
else
List.AllTrue(
List.Transform(
List.Alternate({2 .. Number.RoundUp(Number.Sqrt(Num), 0)}, 1, 1),
each Number.Mod(Num, _) <> 0
)
),
firstN_Primes = List.Transform(
List.Distinct(
List.Generate(
() => [a = 2, b = 1],
each [b] <= 26,
each [a = [a] + 1, b = if IsPrime(a) then [b] + 1 else [b]]
),
each [b]
),
each [a]
),
Final = Table.AddColumn(
Source,
"Answer_Expected",
each List.Accumulate(
Text.ToList(Text.Upper([Words])),
0,
(s, c) => s + firstN_Primes{List.PositionOf({"A" .. "Z"}, c)}
)
)
in
Final
Solving the challenge of Alphabet Prime Mapping with Excel
Excel solution 1 for Alphabet Prime Mapping, proposed by Bo Rydobon 🇹🇭:
=LET(n,REDUCE(2,SEQUENCE(99)+2,LAMBDA(a,v,IF(AND(MOD(v,a)),VSTACK(a,v),a))),
MAP(UPPER(A2:A9),LAMBDA(a,SUM(INDEX(n,CODE(MID(a,SEQUENCE(LEN(a)),1))-64)))))
Excel solution 2 for Alphabet Prime Mapping, proposed by Rick Rothstein:
=MAP(A2:A9,LAMBDA(a,LET(s,SEQUENCE(500,,2),SUM(MAP(MID(UPPER(a),SEQUENCE(LEN(a)),1),LAMBDA(x,INDEX(TAKE(FILTER(s,MAP(s,LAMBDA(x,IF(x=2,2,AND(MOD(x,SEQUENCE(ROUNDUP(SQRT(x),0)-1,,2))))))),26),CODE(x)-64)))))))
Excel solution 3 for Alphabet Prime Mapping, proposed by محمد حلمي:
=LET(b,SEQUENCE(101), MAP(A2:A9,LAMBDA(d,
SUM(XLOOKUP(MID(d,SEQUENCE(LEN(d)),1),
CHAR(ROW(65:90)),FILTER(b,MAP(b,LAMBDA(a,LET(
v,a/SEQUENCE(a),COUNT(IF(v=INT(v),v,""))=2)))))))))
Excel solution 4 for Alphabet Prime Mapping, proposed by Julian Poeltl:
=MAP(A2:A9,LAMBDA(W,LET(S,SEQUENCE(100,,2),B,BYROW(MOD(S/TRANSPOSE(S),1),LAMBDA(A,COUNT(FILTER(A,A=0)))),F,FILTER(S,B=1),SP,MID(LOWER(W),SEQUENCE(LEN(W)),1),SUM(INDEX(F,CODE(SP)-96)))))
Excel solution 5 for Alphabet Prime Mapping, proposed by Alejandro Campos:
=MAP(
A2:A9,
LAMBDA(x,
LET(
chars, CHAR(SEQUENCE(26, , 65, 1)),
sq, SEQUENCE(100) + 1,
prims, FILTER(sq, MAP(sq, LAMBDA(x, SUM(N(MOD(x, SEQUENCE(x)) = 0)) = 2))),
myus, UPPER(x),
char, MID(myus, SEQUENCE(LEN(myus)), 1),
SUM(XLOOKUP(char, chars, prims)))))
Excel solution 6 for Alphabet Prime Mapping, proposed by Timothée BLIOT:
=MAP(A2:A9, LAMBDA(t, LET(D, LAMBDA(n, IF(n<5,2,VSTACK(2,SEQUENCE(ROUNDDOWN(((n^0.5)-3),0)/2+1,,3,2)))),
P, LAMBDA(x, LET(A, D(x), SWITCH(x,1,0,2,1,--(SUM(MAP(A, LAMBDA(a, --(MOD(x,a)=0) )))=0) ) )),
S, LAMBDA(me,v,w,z, IF(v=0, z, me(me, v-P(w), w+1, IF(P(w)=1,VSTACK(z,w),z))) ),
A, DROP(S(S,26,2,0),1), B, LOWER(MID(t,SEQUENCE(LEN(t)),1)), SUM(MAP(B, LAMBDA(b, XLOOKUP(b,CHAR(SEQUENCE(26,,97)),A) ))) ) ))
Excel solution 7 for Alphabet Prime Mapping, proposed by Oscar Mendez Roca Farell:
=LET(_s, SEQUENCE(101),_p, FILTER(_s, MAP(_s, LAMBDA(i, SUM(--(MOD(i, SEQUENCE(i))=0))))=2),MAP(A2:A9,LAMBDA(i, SUM(INDEX(_p, CODE(UPPER(MID(i, SEQUENCE(, LEN(i)),1)))-64)))))
Excel solution 8 for Alphabet Prime Mapping, proposed by Sunny Baggu:
=LET(_num,SEQUENCE(500),
_sqrt,INT(SQRT(_num)),
_dr,DROP(REDUCE("",_sqrt,LAMBDA(a,v,VSTACK(a,SEQUENCE(,v,)))),1,1),
_cri,BYROW(IFNA(MAP(MOD(_num,_dr),LAMBDA(a,OR(a=0))),FALSE)+0,LAMBDA(x,SUM(x))),
_prno,DROP(TAKE(FILTER(_num,_cri=0),27),1),
MAP(A2:A9,LAMBDA(a,SUM(XLOOKUP(MID(a,SEQUENCE(LEN(a)),1),CHAR(SEQUENCE(26,,97)),_prno)))))
Excel solution 9 for Alphabet Prime Mapping, proposed by Bhavya Gupta:
=LET(p,{2;3;5;7;11},IsPrime,LAMBDA(num,IF(AND(MOD(num,p)),LET(h,SEQUENCE(SQRT(num),,2),AND(MOD(num,FILTER(h,BYROW(MOD(h,TOROW(p)),LAMBDA(r,AND(r))),num-1)))))),fnp,LAMBDA(n,a,arr,x,IF(ROWS(arr)=n,arr,x(n,a+1,IF(IsPrime(a),VSTACK(arr,a),arr),x))),FirstN_Primes,LAMBDA(n,fnp(n,TAKE(p,-1),p,fnp)),MAP(A2:A9,LAMBDA(w,SUM(XLOOKUP(MID(w,SEQUENCE(LEN(w)),1),CHAR(SEQUENCE(26,,65)),FirstN_Primes(26))))))
Excel solution 10 for Alphabet Prime Mapping, proposed by Md. Zohurul Islam:
=LET(z,A2:A9,
n,SEQUENCE(100,,2),
s,MAP(n,LAMBDA(x,LET(
sq,DROP(SEQUENCE(,x),,1),
a,MOD(x,sq),
b,SUM(ABS(a=0)),b))),
prm,FILTER(n,s=1),
letter,CHAR(SEQUENCE(26,,65)),
p,MAP(z,LAMBDA(y,LET(
j,MID(y,SEQUENCE(LEN(y)),1),
k,SUM(XLOOKUP(UPPER(j),letter,prm)),
k))),
p)
Excel solution 11 for Alphabet Prime Mapping, proposed by Charles Roldan:
=LET(_Fix, LAMBDA(f, f(f)),
_Count, LAMBDA(a,x, LEN(a)-LEN(SUBSTITUTE(a, x, ""))),
_Next, LAMBDA(f,LAMBDA(a,n, IF(AND(MOD(n, a)), n, f(f)(a, n+1)))),
_Build, LAMBDA(a,_, VSTACK(a, _Fix(_Next)(a, TAKE(a, -1)+1))),
MMULT(
_Count(UPPER(A2:A9), CHAR(SEQUENCE(, 26, CODE("A")))),
REDUCE(, SEQUENCE(, 26, 2), _Build)))
Excel solution 12 for Alphabet Prime Mapping, proposed by Guillermo Arroyo:
=LET(q;SEQUENCE(150;;2);p;FILTER(q;MAP(q;LAMBDA(n;REDUCE(1;SEQUENCE(SQRT(n);;2);LAMBDA(i;j;IF(n=2;1;AND(i;MOD(n;j))))))));MAP(A2:A9;LAMBDA(a;LET(b;CODE(UPPER(MID(a;SEQUENCE(;LEN(a));1)))-64;SUM(INDEX(p;b;1))))))
Excel solution 13 for Alphabet Prime Mapping, proposed by Gabriel Raigosa:
=LET(n,SECUENCIA(1000,,2),r,ENTERO(RAIZ(n)),FILTRAR(n,MAP(n,r,LAMBDA(x,y,SI.ERROR(MIN(RESIDUO(x/SECUENCIA(1,y-1,2,1),1)),1)))>0))
=FILTRAR(SECUENCIA(999)+1,MAP(SECUENCIA(999)+1,LAMBDA(x,SUMA(N(RESIDUO(x,SECUENCIA(x))=0))=2)))
▶️ Sequence prime numbers (EN):
=LET(n,SEQUENCE(1000,,2),r,INT(SQRT(n)),FILTER(n,MAP(n,r,LAMBDA(x,y,IFERROR(MIN(MOD(x/SEQUENCE(1,y-1,2,1),1)),1)))>0))
=FILTER(SEQUENCE(999)+1,MAP(SEQUENCE(999)+1,LAMBDA(x,SUM(N(MOD(x,SEQUENCE(x))=0))=2)))
Excel solution 14 for Alphabet Prime Mapping, proposed by Gabriel Raigosa:
=BYROW(A2:A9,LAMBDA(w,SUMA(INDICE(LET(n,SECUENCIA(100,,2),r,ENTERO(RAIZ(n)),FILTRAR(n,MAP(n,r,LAMBDA(x,y,SI.ERROR(MIN(RESIDUO(x/SECUENCIA(1,y-1,2,1),1)),1)))>0)),COINCIDIRX(EXTRAE(w,SECUENCIA(LARGO(w)),1),CARACTER(SECUENCIA(26)+64))))))
▶️EN:
=BYROW(A2:A9,LAMBDA(w,SUM(INDEX(LET(n,SEQUENCE(100,,2),r,INT(SQRT(n)),FILTER(n,MAP(n,r,LAMBDA(x,y,IFERROR(MIN(MOD(x/SEQUENCE(1,y-1,2,1),1)),1)))>0)),XMATCH(MID(w,SEQUENCE(LEN(w)),1),CHAR(SEQUENCE(26)+64))))))
Excel solution 15 for Alphabet Prime Mapping, proposed by roberto mensa:
=MMULT(IFERROR(INDEX(LET(n,200,seq,SEQUENCE(n),seq_t,SEQUENCE(,n),SMALL(IF(MMULT(IF(seq>seq_t,--((MOD(seq,seq_t))=0),0),seq^0)=1,seq),SEQUENCE(26))),
CODE(MID(UPPER(A2:A9),SEQUENCE(,99),1))-64),0),SEQUENCE(99,,1,0))
Excel solution 16 for Alphabet Prime Mapping, proposed by David Whitney:
BYROW(IF
(ANSIOfStringAsArray *
IF(IND_DED_SWITCH < 0, CharKeepTrueFalse, --(NOT(CharKeepTrueFalse))) <> 0,
CharsOfStringAsArray, ""),
LAMBDA(r, CONCAT(r)))
Solving the challenge of Alphabet Prime Mapping with Python in Excel
Python in Excel solution 1 for Alphabet Prime Mapping, proposed by Alejandro Campos:
from sympy import primerange
def generate_primes(n):
return list(primerange(2, 101))[:n]
def create_prime_mapping(primes):
return {chr(65 + i): primes[i] for i in range(len(primes))}
def calculate_word_sum(word, prime_mapping):
return sum(prime_mapping[letter] for letter in word.upper() if letter in prime_mapping)
primes = generate_primes(26)
prime_mapping = create_prime_mapping(primes)
results = {
"Word": words,
}
df = pd.DataFrame(results)
df
Solving the challenge of Alphabet Prime Mapping with Excel VBA
Excel VBA solution 1 for Alphabet Prime Mapping, proposed by Rick Rothstein:
Sub ListPrimes()
Dim X As Long, NthPrime As Long, Test As Long
Dim Sum As Long, Results As Variant
Const MaxPrime As Long = 15485863
Static Initialized As Boolean, PrimesFlag() As Byte
NthPrime = InputBox("How many primes (1 to 1000000)?")
If NthPrime < 1 Or NthPrime > 1000000 Then
MsgBox CVErr(xlErrValue)
Exit Sub
End If
If Not Initialized Then
Initialized = True
PrimesFlag = ChrW(1) & ChrW(257) & String(7742931, ChrW(256))
Test = 3
Do While Test <= MaxPrime
For X = 2 * Test To MaxPrime Step Test
PrimesFlag(X) = 0
Next
Test = Test + 1 - (Test > 2)
Loop
End If
ReDim Results(1 To NthPrime, 1 To 1)
X = 0
Do
X = X + 1
If PrimesFlag(X) = 1 Then
Sum = Sum + 1
Results(Sum, 1) = X
End If
Loop While Sum < NthPrime
Columns("A").Clear
Range("A1:A" & UBound(Results)) = Results
End Sub
&&&
