Home » Alphabet Prime Mapping

Alphabet Prime Mapping

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
                    
                  

&&&

Leave a Reply