WeChall - Training - Bacon Returns

Challenge

Mr. Bacon is back with an advanced Bacon cipher. The encoder uses a non-standard mapping where the case pattern depends on the letter's position in the alphabet (a-m vs n-z), not just uppercase/lowercase.

Solution

从 GitHub 源码 (gizmore/gwf3) 分析编码器逻辑:

1
2
// bit=0: letter a-m → UPPERCASE (match), n-z → lowercase (skip)
// bit=1: letter n-z → UPPERCASE (match), a-m → lowercase (skip)

解码方法: 1. 遍历 carrier 文本,只看 UPPERCASE 字母 2. 每个大写字母提取 1 bit:a-m→0, n-z→1 3. 小写字母是噪声(编码器跳过的位置),忽略 4. 拼接 bit stream,每 5 bit 一组查 26 字母表(A=00000..Z=11001) 5. X=space

1
2
3
letters = [c for c in encoded_text if c.isalpha()]
bits = ''.join('0' if c.lower() < 'n' else '1' for c in letters if c.isupper())
answer = ''.join(chr(int(bits[i:i+5], 2) + 65) for i in range(0, len(bits), 5))
OCGMBBNGDAAM