使用 uv 的依赖解析器解决 Wordle

这是一篇关于用uv依赖解析器解决 Wordle 游戏的博客文章,主要内容如下:

  • 引言:作者曾写过依赖 Poetry 解析器的数独求解器并出售,如今 Python 打包技术发展,uv兴起,作者决定用uv解决 Wordle 游戏,可从 GitHub 获取求解器。
  • 背景:Python 项目不能使用同一包的多个版本,可将数独网格表示为 81 个包,每个包有 9 个版本,通过版本约束表示单元格间的关系,Poetry 生成锁文件求解。
  • 什么是 Wordle:是一款 6 次尝试猜 5 字母单词的游戏,每次猜测会得到反馈,如YGG..表示第一个字母黄色,第二、三个字母绿色,第四、五个字母空白。
  • 分析

    • 基本构建块:将 Wordle 解决方案表示为单个包的多个版本,每个版本代表一个单词,还需 5 个“位置”包,每个包有 26 个版本,通过依赖关系连接。
    • 绿色和黄色:需要编码 Wordle 中更复杂的事实,如猜测CHILD得到..YG.的反馈,要区分不同情况,且反馈会根据其他字母而变化。
    • Python 依赖规则:将上述内容编码为 Python 依赖规则较困难,如不能简单表示“N 在位置 3 是空白”,也不支持包依赖多个其他包。
    • 可能的位置包:作者提出添加一组新包,每个字母一个,版本表示该字母可能出现的位置,用二进制编码。
    • 反馈包:引入“反馈包”,每个代表一个关于字母位置的陈述,有 0 和 1 两个版本,根据猜测和反馈添加依赖关系。
  • 整合:将各种包通过依赖规则连接起来,包括输入层的反馈包、隐藏层的可能位置包、精确位置包和word包等。
  • 实现:编写 Python 程序生成 5000 个包版本,展示了各种包的示例,如反馈包、可能位置包、精确位置包和word包等,还介绍了--find-links和 wheels 用于输出轮子和执行依赖解析。
  • 额外内容:利用 Wordle 策略使求解器更聪明,如按单词的不同字符和字符频率排序单词列表,首次猜测为“LATER”。
  • 错误调试:意外遗漏u字母导致依赖解析错误,通过固定word依赖找到错误。
  • GitHub:代码在 GitHub 上,只需uv即可执行求解器,可通过参数观看求解过程。
阅读 11
0 条评论