Home » Case-Sensitive Baconian Cipher

Case-Sensitive Baconian Cipher

(Baconian Cipher – This problem is case sensitive) A/a is 0, B/b is 1, C/c is 2…..Z/z is 25. Binary representations of these numbers in 5 digits is 00000, 00001, 00010….11001. Replace 0 with a and 1 with b in these binary numbers. Hence, these will become aaaaa, aaaab, aaaba…..bbaab. In case of upper case, prefix these with b and in case of lower case, prefix these with a. Hence, A will become baaaaa and a will be aaaaaa. Now, to encrypt any word, you can replace the letters in the string with these text representations.

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

Solving the challenge of Case-Sensitive Baconian Cipher with Power Query

Power Query solution 1 for Case-Sensitive Baconian Cipher, proposed by Bo Rydobon 🇹🇭:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Ans = Table.TransformRows(
    Source, 
    each Text.Combine(
      List.Transform(
        Text.ToList([Words]), 
        each 
          let
            c = Character.ToNumber(_) - 1
          in
            (if c < 96 then "b" else "a")
              & Text.End(
                List.Accumulate(
                  {0 .. 5}, 
                  {c, ""}, 
                  (s, l) =>
                    let
                      n = Number.Power(2, 5 - l)
                    in
                      {
                        Number.Mod(s{0}, n), 
                        s{1} & Character.FromNumber(Number.IntegerDivide(s{0}, n) + 97)
                      }
                ){1}, 
                5
              )
      )
    )
  )
in
  Ans
Power Query solution 2 for Case-Sensitive Baconian Cipher, proposed by Zoran Milokanović:
let
  Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content], 
  ToBinary = (n) =>
    Text.PadStart(
      Text.Combine(
        List.Transform(
          List.Reverse(
            List.Generate(
              () => [Q = Number.IntegerDivide(n, 2), R = Number.Mod(n, 2)], 
              each [Q] <> 0 or [R] <> 0, 
              each [Q = Number.IntegerDivide([Q], 2), R = Number.Mod([Q], 2)], 
              each [R]
            )
          ), 
          each if _ = 0 then "a" else "b"
        ), 
        ""
      ), 
      5, 
      "a"
    ), 
  Solution = Table.TransformRows(
    Source, 
    each Text.Combine(
      List.Transform(
        Text.ToList([Words]), 
        each 
          let
            a = Character.ToNumber(_), 
            m = if a >= 97 then 97 else 65
          in
            Character.FromNumber(97 + Number.From(m = 65)) & ToBinary(Number.Mod(a, m))
      ), 
      ""
    )
  )
in
  Solution
Power Query solution 3 for Case-Sensitive Baconian Cipher, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Origen = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Bin = List.Transform(
    {0 .. 25}, 
    (x) =>
      try
        List.Transform(
          List.Reverse({0 .. Number.RoundDown(Number.Log(x, 2))}), 
          (y) => Number.RoundDown(Number.Mod(x / Number.Power(2, y), 2))
        )
      otherwise
        {0}
  ), 
  Process = List.Transform(
    Bin, 
    each 
      let
        a = Text.PadStart(Text.Combine(List.Transform(_, Text.From), ""), 5, "0"), 
        b = Text.Combine(
          List.Accumulate(
            Text.ToList(a), 
            {}, 
            (s, c) => s & List.ReplaceMatchingItems({c}, List.Zip({{"0", "1"}, {"a", "b"}}))
          ), 
          ""
        )
      in
        b
  ), 
  ZipAa = List.Zip(
    {
      {"a" .. "z", "A" .. "Z"}, 
      List.Transform(Process, each "a" & _) & List.Transform(Process, each "b" & _)
    }
  ), 
  Sol = Table.AddColumn(
    Origen, 
    "Answer", 
    each 
      let
        a = Text.ToList([Words]), 
        b = List.Transform(
          {0 .. List.Count(a) - 1}, 
          each List.ReplaceMatchingItems({a{_}}, ZipAa){0}
        )
      in
        Text.Combine(b)
  )
in
  Sol

Solving the challenge of Case-Sensitive Baconian Cipher with Excel

Excel solution 1 for Case-Sensitive Baconian Cipher, proposed by Bo Rydobon 🇹🇭:
=MAP(
    A2:A7,
    LAMBDA(
        a,
        LET(
            c,
            CODE(
                MID(
                    a,
                    SEQUENCE(
                        LEN(
                            a
                        )
                    ),
                    1
                )
            )-1,
            CONCAT(
                CHAR(
                    97+MID(
                        N(
                            c<96
                        )&RIGHT(
                            BASE(
                                c,
                                2
                            ),
                            5
                        ),
                        SEQUENCE(
                            ,
                            6
                        ),
                        1
                    )
                )
            )
        )
    )
)
Excel solution 2 for Case-Sensitive Baconian Cipher, proposed by Rick Rothstein:
=MAP(
    A2:A7,
    LAMBDA(
        w,
        CONCAT(
            SUBSTITUTE(
                SUBSTITUTE(
                    DEC2BIN(
                        CODE(
                            MID(
                                LOWER(
                                    w
                                ),
                                SEQUENCE(
                                    LEN(
                                    w
                                )
                                ),
                                1
                            )
                        )-97,
                        5
                    ),
                    0,
                    "a"
                ),
                1,
                "b"
            )
        )
    )
)
Excel solution 3 for Case-Sensitive Baconian Cipher, proposed by John V.:
=MAP(
    A2:A7,
    LAMBDA(
        x,
        LET(
            m,
            MID(
                x,
                SEQUENCE(
                    LEN(
                        x
                    )
                ),
                1
            ),
            u,
            UPPER(
                m
            ),
            SUBSTITUTE(
                SUBSTITUTE(
                    CONCAT(
                        --EXACT(
                            m,
                            u
                        )&BASE(
                            CODE(
                                u
                            )-65,
                            2,
                            5
                        )
                    ),
                    0,
                    "a"
                ),
                1,
                "b"
            )
        )
    )
)
Excel solution 4 for Case-Sensitive Baconian Cipher, proposed by محمد حلمي:
=MAP(
    A2:A7,
    LAMBDA(
        a,
        CONCAT(
            TOCOL(
                IFS(
                    EXACT(
                        CHAR(
                            TOCOL(
                                ROW(
                                    65:90
                                )+{32,
                                0}
                            )
                        ),
                        MID(
                            a,
                            SEQUENCE(
                                ,
                                LEN(
                                    a
                                )
                            ),
                            1
                        )
                    ),
                    
                    SUBSTITUTE(
                        SUBSTITUTE(
                            TOCOL(
                                {0,
                                1}&BASE(
                                    SEQUENCE(
                                        26,
                                        ,
                                        0
                                    ),
                                    2,
                                    5
                                )
                            ),
                            0,
                            "a"
                        ),
                        1,
                        "b"
                    )
                ),
                2,
                1
            )
        )
    )
)
Excel solution 5 for Case-Sensitive Baconian Cipher, proposed by محمد حلمي:
=MAP(
    A2:A7,
    LAMBDA(
        a,
        CONCAT(
            IF(
                -MID(
                    XLOOKUP(
                        CODE(
                            
                            MID(
                                a,
                                SEQUENCE(
                                    LEN(
                                        a
                                    )
                                ),
                                1
                            )
                        ),
                        TOROW(
                            ROW(
                                65:90
                            )+{32,
                            0}
                        ),
                        
                        TOROW(
                            {0,
                            1}&BASE(
                                SEQUENCE(
                                    26,
                                    ,
                                    0
                                ),
                                2,
                                5
                            )
                        )
                    ),
                    SEQUENCE(
                        ,
                        6
                    ),
                    1
                ),
                "b",
                "a"
            )
        )
    )
)
Excel solution 6 for Case-Sensitive Baconian Cipher, proposed by Kris Jaganah:
=MAP(
    A2:A7,
    LAMBDA(
        x,
        LET(
            a,
            SEQUENCE(
                26,
                ,
                97
            ),
            b,
            CHAR(
                a
            ),
            c,
            a-97,
            d,
            TEXT(
                DEC2BIN(
                    c
                ),
                "00000"
            ),
            e,
            SUBSTITUTE(
                SUBSTITUTE(
                    d,
                    "0",
                    "a"
                ),
                "1",
                "b"
            ),
            f,
            MID(
                x,
                SEQUENCE(
                    LEN(
                        x
                    )
                ),
                1
            ),
            CONCAT(
                IF(
                    --EXACT(
                        f,
                        UPPER(
                            f
                        )
                    ),
                    "b",
                    "a"
                )&XLOOKUP(
                    f,
                    b,
                    e
                )
            )
        )
    )
)
Excel solution 7 for Case-Sensitive Baconian Cipher, proposed by Julian Poeltl:
=MAP(
    A2:A7,
    LAMBDA(
        W,
        LET(
            SP,
            MID(
                W,
                SEQUENCE(
                    LEN(
                        W
                    )
                ),
                1
            ),
            P,
            IF(
                EXACT(
                    UPPER(
                        SP
                    ),
                    SP
                ),
                "b",
                "a"
            ),
            CONCAT(
                P&SUBSTITUTE(
                    SUBSTITUTE(
                        BASE(
                            CODE(
                                LOWER(
                        SP
                    )
                            )-97,
                            2,
                            5
                        ),
                        0,
                        "a"
                    ),
                    1,
                    "b"
                )
            )
        )
    )
)
Excel solution 8 for Case-Sensitive Baconian Cipher, proposed by Timothée BLIOT:
=MAP(
    A2:A7,
    LAMBDA(
        z,
        LET(
            A,
            MID(
                z,
                SEQUENCE(
                    LEN(
                        z
                    )
                ),
                1
            ),
            B,
            BASE(
                CODE(
                    LOWER(
                        A
                    )
                )-97,
                2,
                5
            ),
            D,
            --EXACT(
                A,
                UPPER(
                        A
                    )
            ),
            CONCAT(
                SUBSTITUTE(
                    SUBSTITUTE(
                        BYROW(
                            HSTACK(
                                D,
                                B
                            ),
                            LAMBDA(
                                x,
                                CONCAT(
                                    x
                                )
                            )
                        ),
                        "0",
                        "a"
                    ),
                    "1",
                    "b"
                )
            )
        )
    )
)
Excel solution 9 for Case-Sensitive Baconian Cipher, proposed by Hussein SATOUR:
=MAP(
    A2:A7,
     LAMBDA(
         x,
          LET(
              
              a,
              MID(
                  x,
                  SEQUENCE(
                      LEN(
                          x
                      )
                  ),
                  1
              ),
              
              b,
              CHAR(
                  SEQUENCE(
                      26,
                      ,
                      97
                  )
              ),
              
              c,
               DEC2BIN(
                   ROW(
                       1:26
                   )-1,
                   5
               ),
              
              CONCAT(
                  IF(
                      EXACT(
                          a,
                           UPPER(
                               a
                           )
                      ),
                       "b",
                       "a"
                  ) & SUBSTITUTE(
                      SUBSTITUTE(
                          XLOOKUP(
                              a,
                              b,
                              c
                          ),
                           0,
                           "a"
                      ),
                       1,
                       "b"
                  )
              )
          )
     )
)
Excel solution 10 for Case-Sensitive Baconian Cipher, proposed by Oscar Mendez Roca Farell:
=MAP(
    A2:A7,
     LAMBDA(
         a,
          LET(
              _w,
               CODE(
                   MID(
                       a,
                        SEQUENCE(
                            LEN(
                                a
                            )
                        ),
                        1
                   )
               ),
              _c,
               IF(
                   _w>90,
                   97,
                   65
               ),
               CONCAT(
                   SUBSTITUTE(
                       SUBSTITUTE(
                           ABS(
                               SIGN(
                                   _c-97
                               )
                           )&BASE(
                               _w-_c,
                                2,
                                5
                           &),
                            0,
                            "a"
                       ),
                        1,
                        "b"
                   )
               )
          )
     )
)
Excel solution 11 for Case-Sensitive Baconian Cipher, proposed by Sunny Baggu:
=MAP(
    
     A2:A7,
    
     LAMBDA(
         e,
         
          LET(
              
               _t,
               CHAR(
                   SEQUENCE(
                       26,
                        ,
                        97
                   )
               ),
              
               _num,
               SEQUENCE(
                   26,
                    ,
                    0
               ),
              
               _m,
               MID(
                   e,
                    SEQUENCE(
                        LEN(
                            e
                        )
                    ),
                    1
               ),
              
               _mnum,
               XLOOKUP(
                   _m,
                    _t,
                    _num
               ),
              
               _mbin,
               MAP(
                   _mnum,
                    LAMBDA(
                        a,
                         TEXT(
                             DEC2BIN(
                                 a
                             ),
                              "00000"
                         )
                    )
               ),
              
               _UL,
               IF(
                   CODE(
                       _m
                   ) < 97,
                    "b",
                    "a"
               ),
              
               _let,
               MAP(
                   _mbin,
                    LAMBDA(
                        x,
                         SUBSTITUTE(
                             SUBSTITUTE(
                                 x,
                                  0,
                                  "a"
                             ),
                              1,
                              "b"
                         )
                    )
               ),
              
               _flet,
               MAP(
                   _UL,
                    _let,
                    LAMBDA(
                        a,
                         b,
                         TEXTJOIN(
                             ,
                              ,
                              a,
                              b
                         )
                    )
               ),
              
               CONCAT(
                   _flet
               )
               
          )
          
     )
    
)
Excel solution 12 for Case-Sensitive Baconian Cipher, proposed by Pieter de Bruijn:
=MAP(
    A2:A7,
    LAMBDA(
        x,
        SUBSTITUTE(
            SUBSTITUTE(
                CONCAT(
                    DEC2BIN(
                        CODE(
                            MID(
                                UPPER(
                                    x
                                ),
                                SEQUENCE(
                                    LEN(
                                    x
                                )
                                ),
                                1
                            )
                        )-65,
                        5
                    )
                ),
                0,
                "a"
            ),
            1,
            "b"
        )
    )
)
Excel solution 13 for Case-Sensitive Baconian Cipher, proposed by Guillermo Arroyo:
=MAP(
    A2:A7,
    LAMBDA(
        a,
        LET(
            u,
            MID(
                a,
                SEQUENCE(
                    LEN(
                        a
                    )
                ),
                1
            ),
            CONCAT(
                IF(
                    CODE(
                        u
                    )<97,
                    "b",
                    "a"
                )&SUBSTITUTE(
                    SUBSTITUTE(
                        BASE(
                            CODE(
                                LOWER(
                        u
                    )
                            )-97,
                            2,
                            5
                        ),
                        "1",
                        "b"
                    ),
                    "0",
                    "a"
                )
            )
        )
    )
)
Excel solution 14 for Case-Sensitive Baconian Cipher, proposed by Daniel Garzia:
=MAP(
    A2:A7,
    LAMBDA(
        x,
        LET(
            m,
            CODE(
                MID(
                    x,
                    SEQUENCE(
                        LEN(
                            x
                        )
                    ),
                    1
                )
            ),
            CONCAT(
                IF(
                    m<91,
                    "b",
                    "a"
                )&SUBSTITUTE(
                    SUBSTITUTE(
                        
                        MAP(
                            m-IF(
                                m<91,
                                65,
                                97
                            ),
                            LAMBDA(
                                r,
                                DEC2BIN(
                                    r,
                                    5
                                )
                            )
                        ),
                        0,
                        "a"
                    ),
                    1,
                    "b"
                )
            )
        )
    )
)
Excel solution 15 for Case-Sensitive Baconian Cipher, proposed by Quadri Olayinka Atharu:
=MAP(A2:A7,
    LAMBDA(x,
    
LET(_char,
    CHAR(
        SEQUENCE(
            26,
            ,
            65
        )
    ),
    
_spl,
    MID(
        x,
        SEQUENCE(
            LEN(
                x
            )
        ),
        1
    ),
    
_lookup,
    BASE((XMATCH(
        _spl,
        _char
    ))-1,
    2,
    5),
    
_codes,
    SUBSTITUTE(
        SUBSTITUTE(
            _lookup,
            0,
            "a"
        ),
        1,
        "b"
    ),
    
_prefix,
    MAP(
        _spl,
        LAMBDA(
            x,
            IF(
                ISNUMBER(
                    TOCOL(
                        FIND(
                            x,
                            _char
                        ),
                        2
                    )
                ),
                "b",
                "a"
            )
        )
    ),
    
_r,
    CONCAT(
        _prefix&_codes
    ),
    
_r)))
Excel solution 16 for Case-Sensitive Baconian Cipher, proposed by Quadri Olayinka Atharu:
=DROP(REDUCE("",
    A2:A7,
    LAMBDA(a,
    x,
    
LET(_char,
    CHAR(
        SEQUENCE(
            26,
            ,
            65
        )
    ),
    
_spl,
    MID(
        x,
        SEQUENCE(
            LEN(
                x
            )
        ),
        1
    ),
    
_lookup,
    DEC2BIN((XMATCH(
        _spl,
        _char
    ))-1,
    5),
    
_codes,
    SUBSTITUTE(
        SUBSTITUTE(
            _lookup,
            0,
            "a"
        ),
        1,
        "b"
    ),
    
_prefix,
    MAP(
        _spl,
        LAMBDA(
            x,
            IF(
                ISNUMBER(
                    TOCOL(
                        FIND(
                            x,
                            _char
                        ),
                        2
                    )
                ),
                "b",
                "a"
            )
        )
    ),
    
_r,
    CONCAT(
        _prefix&_codes
    ),
    
VSTACK(
    a,
    _r
)))),
    1)
Excel solution 17 for Case-Sensitive Baconian Cipher, proposed by Hussain Ali Nasser:
=BYROW(
    A2:A7,
    LAMBDA(
        _string,
        LET(
            
            _split,
            MID(
                _string,
                SEQUENCE(
                    LEN(
                        _string
                    )
                ),
                1
            ),
            
            _codes,
            CODE(
                _split
            ),
            
            _case,
            IF(
                _codes>=97,
                {97,
                "a"},
                {65,
                "b"}
            ),
            
            _adj,
            _codes-TAKE(
                _case,
                ,
                1
            ),
            
            _binary,
            DEC2BIN(
                _adj,
                5
            ),
            
            _prefix,
            TAKE(
                _case,
                ,
                -1
            )&_binary,
            
            SUBSTITUTE(
                SUBSTITUTE(
                    CONCAT(
                        _prefix
                    ),
                    0,
                    "a"
                ),
                1,
                "b"
            )
        )
    )
)

&&

Leave a Reply