leetcode3838 绝对防御!手动Hash与模运算的土豆级零信任协议

🎮绝对防御!手动Hash与模运算的土豆级零信任协议

今天一大早,村长神神秘秘地塞给我一本皱巴巴的手册,封面上歪歪扭扭写着《v2.6.13版字母权重表》,旁边还盖了个萝卜章。手册里夹着一张纸条,上面是几串密文单词,每个单词旁边画着鬼画符一样的标记。

“小白,”村长压低声音,眼神里透着三分警惕七分得意,“我最近搞了套加密算法,能把所有任务指令都编码成奇怪的字符串。你看这张表,a对应几斤几两,b对应几斤几两……全是我亲手标的。纸条上那几串密文,你给我实时翻译下看看。”

我接过那张手绘的权重表,嘴角抽搐:“村长,这都2026年了,您还在用手动哈希?连个JWT都不用?咱村不是刚通了5G吗,隔壁勇者团都用上OAuth2.0了。”

村长捋了捋胡子,一脸高深莫测:“年轻人,这叫复古硬核加密。万一哪天基站被炸了,云计算挂了,咱村的秘密指令还得靠这张纸传。再说了,我这算法密钥只有咱俩知道——绝无第三方持有,零信任架构懂不懂?少废话,赶紧算!”

我翻开手册,开头就写了三条让人血压飙升的规则:

第一条,每个单词的“密码值”= 单词里每个字母在权重表中对应值的总和。

我心中暗想,说得跟什么上古魔法似的,小学二年级的加法运算也敢叫加密。瞥了眼村长,他正自顾自地捋着胡子,仿佛这真的是什么惊天动地的黑科技。

第二条,把总和对 26 取模,得到一个 0~25 的数字。

我叹了口气,经典 % 26,取模压缩。村长您是不是觉得26个字母刚好能塞进一个byte的低5位?内存优化强迫症是吧?

第三条,倒序映射: 0 → ‘z’, 1 → ‘y’, …, 25 → ‘a’。

我盯着这行规则看了足足五秒钟,终于绷不住了:“等等!正常人不都是 0→‘a’ 吗?为什么这里是反的?村长你是不是把ASCII表贴反了?还是说这是为了防止我们用 char + 'a' 一行搞定而故意加的debuff?!”

村长在旁边嘿嘿一笑:“哦,那个啊……因为我觉得从z开始数比较有仪式感。你想啊,z是字母表的终点,从终点往起点映射,有一种‘落叶归根’的哲学意味。怎么,有意见?”

我深吸一口气,把到嘴边的吐槽硬生生咽了回去:“没意见,您说了算。我写还不行吗。”

既然规则已经明确到这种程度,那还有什么好犹豫的?直接模拟就完事了!

class Solution:
    def mapWordWeight(self, words: List[str], weights: List[int]) -> str:
        ans = []
        ord_a = ord('a')
        ord_z = ord('z')
        for word in words:
            weight = sum(weights[ord(c) - ord_a] for c in word) % 26
            ans.append(chr(ord_z - weight))
        return ''.join(ans)

提交,AC,一气呵成。我把翻译出来的指令条递给村长——上面赫然写着:“下午三点村口开会讨论秋季土豆种植计划。”

村长接过指令条,满意地点点头:“好!解密成功!这套算法果然只有你能驾驭!” 说完,他背着手,迈着那种“绝世高手下山”的六亲不认步伐,慢悠悠地踱出了院子,甚至还哼起了不知名的小曲儿。

我呆立在原地,瞅着村长那逐渐远去的背影,感觉自己的CPU温度正在飙升。这老头……搞了权重累加、取模压缩、倒序映射三层加密,连‘落叶归根’的哲学都用上了,就为了保护土豆种植计划?!他到底在防谁啊?防隔壁村的猪吗?!再说了,谁家好人会把最高机密写在一本皱巴巴的手册上啊?要是来场暴雨,或者被哪只不长眼的乌鸦当成筑巢材料叼走,咱村的零信任架构直接物理层面崩了好吗!

知识共享许可协议
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。