news 2026/6/23 15:48:24

利用DeepSeek辅助PuLP求解Advent of Code 2025第10题 电子工厂 第2部分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
利用DeepSeek辅助PuLP求解Advent of Code 2025第10题 电子工厂 第2部分

原题地址 。

前面,DeepSeek用numpy的线性规划没有解答完成。听张泽鹏先生说他用PuLP这个库整数规划解决了。今天也让DeepSeek编一个。

请用PuLP这个库整数规划解决电压按钮问题,不做别的

他给出了如下程序

importreimportpulpdefparse_line_part2(line):"""解析一行数据,返回电压要求和按钮列表(第二部分)"""# 匹配大括号部分match_brace=re.search(r'\{([^}]+)\}',line)ifnotmatch_brace:returnNone,None# 解析电压要求joltage_str=match_brace.group(1)target=[int(x.strip())forxinjoltage_str.split(',')]# 匹配所有圆括号部分buttons=[]pattern=r'\(([^)]+)\)'matches=re.findall(pattern,line)formatchinmatches:# 解析圆括号内的数字nums=[int(x.strip())forxinmatch.split(',')]buttons.append(nums)returntarget,buttonsdefsolve_machine_pulp(target,buttons):"""使用PuLP整数规划求解单个机器的电压配置问题"""n_counters=len(target)n_buttons=len(buttons)# 创建整数规划问题prob=pulp.LpProblem("ButtonPresses",pulp.LpMinimize)# 创建决策变量(每个按钮的按压次数,非负整数)x=pulp.LpVariable.dicts('x',range(n_buttons),lowBound=0,cat='Integer')# 目标函数:最小化总按压次数prob+=pulp.lpSum([x[i]foriinrange(n_buttons)])# 约束条件:每个计数器的总增加量必须等于目标值forcounterinrange(n_counters):# 计算影响该计数器的所有按钮的总贡献total_effect=pulp.lpSum([x[btn_idx]forbtn_idxinrange(n_buttons)ifcounterinbuttons[btn_idx]])prob+=total_effect==target[counter],f"Counter_{counter}_Constraint"# 求解问题prob.solve(pulp.PULP_CBC_CMD(msg=False))# 检查求解状态ifpulp.LpStatus[prob.status]=='Optimal':# 提取解presses_list=[int(pulp.value(x[i]))foriinrange(n_buttons)]total_presses=sum(presses_list)returntotal_presses,presses_list,"求解成功"elifpulp.LpStatus[prob.status]=='Infeasible':return-1,None,"无可行解"else:return-1,None,f"求解失败:{pulp.LpStatus[prob.status]}"defvalidate_solution(target,buttons,presses_list):"""验证解是否正确"""ifpresses_listisNone:returnFalse,Nonem=len(target)current=[0]*mforj,press_countinenumerate(presses_list):ifpress_count>0:foridxinbuttons[j]:current[idx]+=press_countreturncurrent==target,currentdefmain():total_presses=0success_count=0fail_count=0# 读取输入文件withopen('2510-input.txt','r')asf:lines=f.read().strip().splitlines()fori,lineinenumerate(lines):target,buttons=parse_line_part2(line)iftargetisNoneornotbuttons:continuemin_presses,presses_list,message=solve_machine_pulp(target,buttons)ifmin_presses>=0:# 验证解is_valid,calculated=validate_solution(target,buttons,presses_list)ifis_valid:print(f"机器{i+1}:{min_presses}次按压 ({message})")print(f" 按钮按压次数:{presses_list}")print(f" 验证通过:{calculated}=={target}")total_presses+=min_presses success_count+=1else:print(f"机器{i+1}: 验证失败! ({message})")print(f" 尝试解:{presses_list}")print(f" 计算值:{calculated}!= 目标值:{target}")fail_count+=1else:print(f"机器{i+1}: 求解失败 ({message})")fail_count+=1print(f"\n总结:")print(f"成功求解:{success_count}台机器")print(f"失败:{fail_count}台机器")print(f"总最少按压次数:{total_presses}")returntotal_pressesif__name__=="__main__":main()

安装pulp

python3 pip.pyz install pulp --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple

执行

time python3 2510pulp.txt >2510pulp-res.txt real 0m0.783s user 0m0.224s sys 0m0.056s cat 2510pulp-res.txt ... 机器 194: 69 次按压 (求解成功) 按钮按压次数: [0, 16, 25, 25, 1, 2] 验证通过: [41, 51, 41, 43] == [41, 51, 41, 43] 机器 195: 37 次按压 (求解成功) 按钮按压次数: [20, 8, 9] 验证通过: [29, 8, 37, 28, 37] == [29, 8, 37, 28, 37] 总结: 成功求解: 195 台机器 失败: 0 台机器

看来问DeepSeek问题不但要说清楚需求,还要说对工具。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 21:13:11

43、优化邮件体验:Ximian Evolution定制与SpamAssassin反垃圾设置

优化邮件体验:Ximian Evolution定制与SpamAssassin反垃圾设置 1. Ximian Evolution摘要页面定制 当打开Ximian Evolution时,会看到一个整洁的摘要页面,展示着丰富的信息,而且这个摘要页面可以快速定制。定制摘要页面,包含信息、新闻和约会安排时,还能从邮件客户端创建到…

作者头像 李华
网站建设 2026/6/23 12:36:08

GLM语言模型:为什么它能成为你的AI文本处理首选?

你是否曾经为复杂的AI语言模型部署而头疼?面对各种技术术语和复杂的配置步骤,是否感到无从下手?今天,让我们抛开那些繁琐的教程,用一种全新的视角来认识GLM语言模型——这个可能彻底改变你处理文本方式的强大工具。 【…

作者头像 李华
网站建设 2026/6/23 6:14:50

BlenderMCP像素艺术转换:从3D模型到复古游戏资产的终极指南

BlenderMCP像素艺术转换:从3D模型到复古游戏资产的终极指南 【免费下载链接】blender-mcp 项目地址: https://gitcode.com/GitHub_Trending/bl/blender-mcp 你是否渴望将精美的3D模型转化为充满复古魅力的像素风格资产?BlenderMCP(Bl…

作者头像 李华
网站建设 2026/6/23 5:50:48

Live Charts:5大核心功能打造专业级数据可视化解决方案

Live Charts:5大核心功能打造专业级数据可视化解决方案 【免费下载链接】Live-Charts 项目地址: https://gitcode.com/gh_mirrors/liv/Live-Charts 在数据驱动的时代,如何将枯燥的数字转化为直观的视觉呈现成为每个开发者必须面对的挑战。Live C…

作者头像 李华
网站建设 2026/6/23 10:43:26

Wan2.2-T2V-A14B如何理解‘风吹树叶’这类物理动词?

Wan2.2-T2V-A14B如何理解“风吹树叶”这类物理动词? 在短视频日均播放量突破千亿的今天,内容生产早已从“有没有”进入“快不快、真不真”的竞争阶段。一条广告片制作周期动辄数周,而AI生成视频只需输入一句话——比如“微风吹过树林&#xf…

作者头像 李华
网站建设 2026/6/22 7:42:31

快速上手Kickstarter Android开源项目的3个核心技巧

快速上手Kickstarter Android开源项目的3个核心技巧 【免费下载链接】android-oss Kickstarter for Android. Bring new ideas to life, anywhere. 项目地址: https://gitcode.com/gh_mirrors/an/android-oss Kickstarter Android开源项目是一个功能完整的众筹平台应用&…

作者头像 李华