窗外是深圳湾的暮色,海风带着咸湿的气息从没关严的窗户缝隙里钻进来。电脑屏幕的光映在脸上,我盯着微信群里不断滚动的消息,手指无意识地敲着桌面。又是一年双十一,群里已经炸开了锅。
“这件大衣定金50翻三倍,还能叠加店铺满300减30的券,但跨店满减是每满400减50……到底怎么凑最划算啊?”
“我购物车里有二十几件东西,算得我头都大了,有没有数学好的来救救急?”
“感觉为了省这几十块钱,脑细胞要死光了……”
我,一个32岁的产品经理,此刻却像个旁观者。看着这些平日里精明能干的朋友们,为了几十块的优惠陷入集体性的计算焦虑,一种荒谬感涌上来。这本质上是个什么?这不就是个典型的带约束条件的组合优化问题吗?人脑去穷举所有可能性,效率低得令人发指。而我,一个会写代码的人,为什么要忍受这种低效?
这种念头一旦冒出来,就再也压不下去了。就像心里有只爪子,挠得你坐立不安。我必须做点什么。
关掉群聊,打开PyCharm。新建一个Python文件。首先,得把问题抽象出来。购物车里的商品,每件都有价格(尾款价,要算上定金翻倍后的抵扣),这就是“物品”和它的“重量”。我的目标是,用这些物品,去“填满”那个由各种优惠券和满减规则构成的“背包”,并且让背包里物品的总“价值”(也就是我实际支付的总金额)最低。这不就是背包问题(Knapsack Problem)的变种吗?经典的0/1背包是价值最大化,我这是成本最小化,但内核一样。
但比经典背包复杂。约束条件太多了。有店铺级的满减券(比如满300减30),有平台级的跨店满减(每满400减50,上不封顶),还有定金膨胀这种特殊规则。这些规则不是独立的,它们之间可能有叠加关系,也可能互斥。比如,店铺券和跨店满减通常可以叠加,但定金优惠可能已经折进了价格里。
脑子有点乱。先不管,用最笨的方法。暴力枚举。把购物车里所有商品(假设有n件)的所有可能子集都列出来,计算每个子集在各种优惠规则下的最终支付价,然后找出最小值。理论上可行,但计算量是2的n次方。购物车要是有20件东西,那就是一百多万种组合……跑起来肯定慢,但作为MVP(最小可行产品),先能跑通再说。
手指在键盘上飞舞,写下一个函数,用来计算给定商品列表和优惠规则下的实付金额。规则解析是最麻烦的部分。我不得不停下来,打开几个电商页面,仔细研究那些冗长又充满歧义的优惠说明文本。“每满400减50”,意思是400一个阶梯,不足400的部分不享受,对吧?“定金膨胀”,比如定金50抵150,那尾款价就是标价减去100……一点点把这些逻辑翻译成if-else语句。
写着写着,一种奇特的专注感包裹了我。窗外的车流声、隔壁隐约的电视声都消失了,世界里只剩下代码逻辑的流动。这种用确定性的代码去对抗现实世界混乱规则的感觉,让人上瘾。是一种掌控感。
两个小时后,一个粗糙但能运行的脚本诞生了。我把自己的购物车数据(十几件商品,各种价格和定金规则)输进去,敲下回车。
命令行窗口里,字符快速滚动。几秒钟后,结果出来了。
“最优组合:商品A,商品C,商品F,商品H……”
“原总价:1123.5元。叠加店铺券减30,跨店满减(按400-50阶梯计算)减100,定金膨胀优惠总计80元。”
“最终实付:913.5元。比无脑全选节省87元。”
我靠。真的算出来了。而且它给出的组合,是我自己绝对想不到的——它放弃了一件我原本很想买、但性价比在凑单语境下变低了的商品,换上了两件小额商品来“垫脚”,刚好踩中满减门槛。
一种近乎降维打击的舒适感,从脚底窜到天灵盖。太爽了。看着那几行冰冷的计算结果,感觉自己的智力得到了某种形式的伸张。人脑在复杂规则和多重组合面前,就是一团浆糊。而代码,是照亮这团浆糊的探照灯。
我截了个图,稍微修饰了一下命令行输出,把它丢回了那个焦头烂额的微信群。
“写了个小脚本,自动算最优凑单。把商品价格和优惠规则按格式整理个txt发我,免费帮算。”
群里安静了大概十秒钟。
然后,信息爆炸了。
“卧槽!大神!”
“Flovico你太牛了!等等我马上整理!”
“这……这就是程序员的浪漫吗?”
“求分享脚本!我愿意付费!”
我看着刷屏的惊叹和好友申请,笑了笑,没立刻回。这种时候,沉默比说话更有力量。技术不仅仅是生产力,在这种情境下,它成了最硬的社交货币。你不需要解释你的产品思维、你的管理理念,你只需要拿出一个能解决具体痛点的、实实在在的“工具”,就能瞬间建立信任和影响力。
当然,我知道这个脚本还很粗糙。贪心算法(Greedy Algorithm)在某些极端情况下可能不是全局最优,约束条件编程(Constraint Programming)的框架也没用上,更别提去自动爬取电商页面数据了。但重要吗?对于今晚这群只想省点钱的朋友来说,它已经足够好,好到令人震撼。
夜深了。我给自己倒了杯水,看着窗外深圳稀疏的灯火。心里那点因为技能焦虑而时常泛起的烦躁,似乎被今晚这点小小的、具体的成就抚平了一些。在这个疯狂追逐流量、闭环、增长的时代,能静下心用代码解决一个身边人实实在在的麻烦,这种感觉……
真好。
或许,这就是我这种“独狼”赖以生存的土壤吧。














