2023美赛C题:Wordle筛选算法

news2024/11/15 2:14:07

Wordle 规则介绍

Wordle 每天会更新一个5个字母的单词,在6次尝试中猜出单词就算成功。每个猜测必须是一个有效的单词(不能是不能组成单词的字母排列)。

每次猜测后,字母块的颜色会改变,颜色含义如下: 

程序编写

单词数据

Wordle的单词数据直接写在网页源代码里,进入Wordle,按F12查看源代码。 

我们将这些数据提取出来就能的到Wordle单词列表,网上已经有人整理成json文件(点击传送门获取),同时还提出了SOARE是最好的起始词,有兴趣的可查看《The Best Starting Word in WORDLE》

代码编写

获取单词列表之后,就可以开始代码的编写了。 代码的基本思路就是,按照灰色、黄色和绿色三种情况分别处理,排除不符合的单词。

代码编写思路:

  • 包含灰色色块字母的单词排除
  • 不包含黄色色块字母的单词排除
  • 包含黄色色块字母但是还在错误的位置的单词排除
  • 与绿色色块字母位置不符合的单词排除

代码开源在Github:eMUQI/wordle-helper

import json

with open("words.json", 'r') as f:
    data = json.load(f)

words = data['words']

# 初始化
fault = ""  # 灰色色块
pos_wrong = ["", "", "", "", ""]    # 黄色色块
right = ["", "", "", "", ""]    # 绿色色块
# 提示
print(40*"-")
print("The Best Starting Word in WORDLE may is 'SOARE'")
print("for result, gray:0 yellow:1 green:2")
print(40*"-")


for i in range(5):

    # 处理输入,记录字母
    guess = input("{0}:".format(i+1))
    results = input("result:")
    for n in range(len(results)):
        if results[n] == "0":
            fault = fault + guess[n]
        elif results[n] == "1":
            pos_wrong[n] = pos_wrong[n] + guess[n]
        elif results[n] == "2":
            right[n] = guess[n]
        else:
            print("bad input")

    # 生成建议
    temp_list = []
    for word in words:
        # 检查灰色色块,也就是错误的字母
        flag = True
        for f in fault:
            if f in word:
                flag = False
                break

        if not flag:
            continue

        for n in range(5):

            # 检查绿色色块,也就是正确的字母,字母和位置是否符合
            if right[n] != "" and right[n] != word[n]:
                flag = False
                break

            # 检查黄色色块,也就位置不对的字母
            if pos_wrong[n] != "":
                for ps in pos_wrong[n]:
                    # 检查是否有黄色色块字母
                    if ps not in word:
                        flag = False
                        break
                    else:
                        #检查是否还在错误的位置
                        if word.index(ps) == n:
                            flag = False
                            break

        if not flag:
            continue
        temp_list.append(word)

    print("suggest:", temp_list)
    word = temp_list.copy()
    print(40*"-")

小结

本身写个程序是为了练练手,满足一下写代码的快乐。 经过实际测试,发现基本上到第三轮或者到第四轮猜测,可以选择的单词就非常少了,辅助效果不错。

另外,百万粉数学科普大神3Blue1Brown不光写出了求解算法,还用数学知识一步步优化至逼近理论极限,最终成绩平均3.138次猜测就能获胜,感兴趣的同学可以去找找他的视频,很有启发。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity导出WebGL工程,并部署本地web服务器

WebGL打包 设置修改 在Build Settings->PlayerSettings->Other Settings->Rendering 将Color Space 设置为Gamma 将Lightmap Encoding 设置为NormalQuality 在Build Settings->PlayerSettings->Publishing Settings 勾选Decompression Fallback 打包 完成配…

有这几个表现可能是认知障碍前兆

我国目前对于认知障碍的认知率、就诊率、诊断率很低,然而认知障碍如果能在早期发现,并及时治疗,生活质量会有效提高,缓解家属的精神和经济负担。所以,认知障碍的前兆一定要了解。1.记忆力减退,一周内的重要…

【Spring】@Value注入配置文件 application.yml 中的值失败怎么办

本期目录一、 问题背景二、 问题原因三、 解决方法一、 问题背景 今天碰到的问题是用 Value 注解无法注入配置文件 application.yml 中的配置值。 检查过该类已经交给 Spring 容器管理了,即已经在类上加了 Configuration 和 ConfigurationProperties(prefix &quo…

UnityEditor编辑器扩展自己实现了一遍SceneView的镜头移动

基本实现由于最近一个星期都比较魔怔《天际线》,突然开始要工作了,用Editor好像突然没了按键反而不习惯就是要实现一个点击AWSD,能方便编辑地图的功能其实大可不必自己写代码本身Unity自带的,飞跃模式已经包含(按鼠标右…

抽象工厂模式(Abstract Factory Pattern)

1.抽象工厂模式定义: 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类 2.抽象工厂模式适用场景: 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量…

ONLYOFFICE中的chatGPT是怎样提升工作效率的

几乎一夜之间chatGPT火遍国内外网络,作为一个总是努力提高工作效率并在一天内完成更多工作的人,我很高兴发现 ONLYOFFICE添加了ChatGPT — 一个人工智能驱动的聊天机器人,可以帮助您管理时间、设定目标并改善您的个人和职业生活。 ONLOYOFFIC…

Allegro172版本无法低亮颜色的原因和解决办法

Allegro172版本无法低亮颜色的原因和解决办法 用Allegro版本做PCB设计的时候,高亮是使用非常频繁的功能,低亮已经高亮的对象也是使用较为频繁的。 在用172版本时会出现无法低亮的情况,如下图 使用Dehilight命令无法低亮器件,如何解决,具体操作步骤如下 点击Display选择De…

Python:每日一题之剪邮票(BFS全排列)

如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下 5 张来,要求必须是连着的。 (仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。 请你计算&…

redis的安装步骤及前台,后台redis服务启动

redis的安装步骤1. 官网下载安装包2. 使用Xftp将安装包传输到Linux的opt目录下3. 使用Xshell连接Linux主机进行redis的安装安装目录说明4. redis 服务启动的两种方式4.1 前台启动4.2 后台启动1. 官网下载安装包 首先,我们进入到redis的官网: https://redis.io/down…

代码随想录算法训练营第三十一天 | 贪心专题-理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和

一、参考资料理论基础https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 分发饼干https://programmercarl.com/0455.%E5%88%86%E5%8F%91%E9%A5%BC%E5%B9%B2.html 摆动序列https://programmercarl.com/0376.%E6%91%86…

数据库存储

RAID DSL : Domain Spesic Language 专用领域语言 单机存储 一切皆Key-Value 本地文件系统 一切皆文件 Ceph - 分布式存储 关系型数据库通用组件 Query Engine :解析query,生成查询计划Txn Manager :事务并发管理Lock Man…

知识汇总:Python办公自动化应该学习哪些内容

当前python自动化越来越受到欢迎,python一度成为了加班族的福音。还有大部分人想利用python自动化来简化工作,不知道从何处下手,所以,这里整理了一下python自动化过程中的各种办公场景以及需要用到的python知识点。 Excel办公自动…

【C++】类和对象(第二篇)

文章目录1. 类的6个默认成员函数2. 构造函数2.1 构造函数的引出2.2 构造函数的特性3. 析构函数3.1 析构函数的引出3.2 析构函数的特性4. 拷贝构造函数4.1 概念4.2 特性5.赋值运算符重载5.1 运算符重载概念注意练习5.2 赋值重载实现赋值重载的特性6. const成员函数7. 取地址及co…

传统图机器学习的特征工程

视频资料同济子豪兄中文精讲视频:节点特征工程:https://www.bilibili.com/video/BV1HK411175s连接特征工程:https://www.bilibili.com/video/BV1r3411m7sD全图特征工程:https://www.bilibili.com/video/BV14W4y1V7gg斯坦福原版视频…

spring的事物控制

1.调用这个方法的对象是否是spring的代理对象($CGLIB结尾的) 2.这个方法是否是加了Transactional注释 都符合才可以被事物控制 如果调用方法的对象没有被事物控制,那么被调用的方法即便是加了Transactional也是没用的 一个非事务方法调同类…

13.hadoop系列之MapReduce排序实践

本文我们学习MapReduce的全排序、二次排序以及区内排序 1.MapReduce概述 MapTask和ReduceTask均会对数据按照key进行排序。该操作属于hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要默认排序是按照字典顺序排序,通过快速排序…

【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式国赛程序设计试题以及详细题解

文章目录原题展示原题分析详细题解LED模块按键模块串口LCD模块模拟电压读取(ADC)脉冲输入输出文章福利原题展示 原题分析 本届国赛试题主要包含LCD、LED、按键、EEPROM、串口、模拟电压输入、脉冲输入输出七大部分,其中前面三个部分是蓝桥杯嵌入式的“亲儿子”(必考…

SpringBoot 集成 Kafka

SpringBoot 集成 Kafka1 安装 Kafka2 创建 Topic3 Java 创建 Topic4 SpringBoot 项目4.1 pom.xml4.2 application.yml4.3 KafkaApplication.java4.4 CustomizePartitioner.java4.5 KafkaInitialConfig.java4.6 SendMessageController.java5 测试1 安装 Kafka Docker 安装 Kafk…

数据库原理及应用期末复习汇总(附某高校期末真题试卷)

文章目录《数据库原理及应用》试题1一、选择题(共35分)二、填空(每空1分,共20分)三、T-SQL综合题(共35分)四、综合应用题(共10分)《数据库原理及应用》试题2一、选择题(共35分)二、填空&#xf…

handler解析(5)常见面试题

目录 1.请大致讲下handler的工作原理 2.handler.postDelay原理 3.一个线程有几个Looper?几个Handler? 4. Handler内存泄漏原因?以及解决方案 5.为何主线程可以new Handler如果想要在子线程中new Handler要做些什么准备? 6.消息退出是调…