绷不住了,先说结论:四个半小时,最后加的是一行 if。
事情是国庆假期最后那两天。我爸妈带我妹去姥姥家住一晚,我不去,说我要写作业。他们走了之后我把作业本在桌上摊开摆好(真的很像那么回事),然后打开电脑。
要调的是给班里那个值日表生成器加的新功能。老版本只能按学号轮,班长说不行,得能跳过请假的人,还得保证一个人两周之内不重复。我九月底就用 AI 把框架搭出来了,逻辑上感觉没问题,结果一跑就炸。
不是那种给你报个错的炸,是浏览器直接卡死,风扇呼呼转,标签页点都点不动,最后弹一个 Maximum call stack size exceeded,红字刷了三十多行。合上屏幕摸了摸键盘那块,烫的。???我这破笔记本什么时候这么拼命过。
一开始我以为是数据的事,因为我们班那个名单我手输的,有四五个人的名字后面带括号备注(谁谁谁周三有社团)。我就把名单砍到十个人测,还是炸。那就是逻辑问题。
递归这东西我之前一直觉得自己懂。竞赛那会儿写过搜索,八皇后我闭着眼都能默出来(夸张了,得看着写)。所以我一开始特别自信,觉得 AI 写的这个回溯有问题,我自己重写一遍就好了。然后我重写了两遍,两遍都炸
第一遍是忘了 pop。这个不冤,手滑。第二遍改好了,还是一样炸。当时已经十二点多了,我坐在那盯着屏幕,脑子里全是"这合理吗"。真的,那种感觉就是你知道自己离对不远,但每改一次都要刷新一次浏览器再看它卡死一次,一次两分钟。
中途我妈还发微信问我睡了没。我回"睡了"。发完心虚了三秒,继续调。
转折很蠢。我为了看清楚到底递归到第几层,在函数开头加了行 print,输出 length。然后我发现它一直在同一个长度上循环——42。我们班 42 个人,一周五天每天六个,正好 30 个位置。它永远排到 42 个人全被用完了还在往下找。
应为我在"跳过请假的人"那一步,直接把请假的人从数组里删了。删完剩 37 个,37 除以……反正排不满,排不满就一直找,找不到就换下一个,换完一圈再换一圈,无限套娃。算法没错,错的是我喂给它的数据不够。
加了一行:可选人数不够就直接返回 false。跑通了。第一次看见表格正常出来的时候我差点喊出来,忍住了,我妹不在家但隔壁有人。
然后我干了件更蠢的事,把生成的表截图发班级群了。凌晨一点四十。第二天班长回我一个"?",说你这是没睡还是刚起。
第二天睡到十一点。作业。一个字没写。我妈回来翻了翻本子,问我这两天到底在干嘛。我说我在学习。
乐。
不过那一晚上值。不是因为修好了 bug,是因为我第一次感觉到不是"AI 帮我写",是我在改 AI 的东西,而且我知道它错在哪。这感觉比跑通还爽。下次在写,我物理还剩三张卷子。