Swift 趣味开发:查找拼音首字母全部相同的 4 字成语(上)

在这里插入图片描述

概述

Swift 语言是一门现代化、安全、强大且还算性感的语言。在去年 WWDC 24 中苹果正式推出了秃头码农们期待许久的 Swift 6.0,它进一步完善了 Swift 语言的语法和语义,并再接再厉——强化了现代化并发模型的安全性和灵活性。

在这里插入图片描述

这里我们不妨用 Swift 来验证一个实际世界中有趣的小疑问:汉语中到底有没有拼音首字母全部相同的 4 字成语呢?

在本篇博文中,您将学到如下内容:

  • 概述
  • 1. 一个“悬悬而望”的问题
  • 2. 自力更生
  • 3. 如何获取汉字的拼音
  • 总结

到底问题的谜底将会如何?结果绝对会让大家“始料不及”!
那还等什么呢?Let’s go!!!😉


1. 一个“悬悬而望”的问题

我一直对中国博大精深的成语世界兴趣盎然,有个藏在心底很久的问题一直想知道答案:四字成语里有没有 4 个字的拼音首字母都相同的成语呢?

比如 左道旁门(zuǒ dào páng mén) 这个成语中每个字拼音的第一个字母分别为 z、d、p 和 m,不符合要求。而成语 樽俎折冲(zūn zǔ zhé chōng) 前 3 个字的拼音首字母都为 z,可惜最后一个字拼音的首字母却为 c ,从而也无奈的丧失了候选资格。


樽俎折冲

释义:指不以武力而在宴席交谈中制胜敌人,泛指外交谈判活动。折冲,使敌人战车后撤,指击退敌军。
出处:语出汉·刘向《新序·杂事一》
示例:今吾国以存亡关系而不签字,各国当能见谅,必可留作悬案,为他日~之馀地。
★《五四”爱国运动资料·学界风潮记下编》


俗话说得好:“最好的代码是还没有写的代码”,所以在实际撸码解决这个问题之前,我想试试有没有其它方法能够找到这个问题的答案,现在很火的“当红炸子鸡” AI 无疑值得一试。

首先尝试的是豆包 AI 引擎。可以看到她似乎没搞懂我的问题,给出了完全错误的答案:

在这里插入图片描述

接下来再试试 Kimi 引擎。这次 AI 扳回一局,Kimi 不但正确读懂了我的意图,而且给出了不止一个正确答案:
在这里插入图片描述

最后我们再试试 ChatGPT 和其衍生 AI 引擎:
在这里插入图片描述

在这里插入图片描述

可以看到它开始举了一些错误的例子(“心心相印”、“自作自受”等),但随后又给出了几个正确的答案,真不知道它是到底是啥子脑回路。

但好奇心作祟的我们不禁要问:除了上面这些成语,还有其它符合条件的成语吗?


更多其它 Swift 趣味开发的小“栗子”,请小伙伴们移步如下链接观赏有趣且精彩的内容:

  • 国内顶级 AI 的回答令人“贻笑大方”:看来苹果秃头码农们暂时还不会失业吧?
  • 有趣的小实验:五种语言搞定“超超超难”剑桥面试数学题
  • 搞定“超超超难”剑桥面试数学题番外篇:ARM64汇编
  • 搞定剑桥面试数学题番外篇2:使用多线程并发“加强版”

2. 自力更生

接下来我们就来看看如何撸码来完成这项貌似“艰巨”的任务。

大致的思路其实很简单:先获取尽可能多的成语文本,然后计算它们的拼音,最后判断这些拼音的首字母是否相同。

需要说明的是,如今网上有很多公开的 API 接口可以帮助我们查询某个成语的释义、出处等信息,有的甚至可以模糊查找,比如查询“左”字开头和“门”字结尾的成语。但这些 API 都没有提供遍历所有成语的方法,所以对于我们这个需要蛮力来攻克的问题可能都有些力不从心。

不过不要紧,我们幸运的从网上找到一个包含超过 3w 个成语的文本文件,我想这是一个很好的开端。

3. 如何获取汉字的拼音

在掌控海量成语文本之后,接下来的问题是如何获取它们的拼音。

Swift 对于汉字拼音的支持比小伙伴们想象的要好很多,我们不用借助任何第三方库,只需使用 Swift 系统框架中的 API 即可完美实现。

let idiomString = "樽前月下"
print(idiomString)
let cfString = CFStringCreateMutableCopy(nil, 0, idiomString as CFString)
CFStringTransform(cfString, nil, kCFStringTransformToLatin, false)
print("带声调的拼音:\(cfString! as String)")
CFStringTransform(cfString, nil, kCFStringTransformStripCombiningMarks, false)
print("不带声调的拼音: \(cfString! as String)")

运行结果如下所示,我们可以选择输出带声调或不带声调的拼音:

在这里插入图片描述

不过本例中我们无需多此一举,因为对应的成语文本文件中已经包含了拼音信息,实际上除了拼音以外该文件还包含了与每个成语相关的其它丰富信息:

樽酒论文 拼音:zūn jiǔ lùn wén释义:一边喝酒,一边议论文章。出处:唐·杜甫《春日忆李白》诗何时一樽酒,重与细论文。”示例:连年客里度初度,~第一遭。★陈世宜《上巳社集是日值余初度》诗

其中甚至包括了许多超过 4 字的成语:

来是是非人,去是是非者 拼音:lái shì shì fēi rén,qù shì shì fēi zhě释义:犹言解铃还是系铃人。指谁惹起的是非,还得由谁来了结。出处:无示例:无

其实这些附加内容对我们这个例子来说基本没啥用,而且带来了解析上的额外麻烦。不过不要紧,因为我们本来就是在“自找麻烦”。

在下一篇博文中,看我们如何继续扮演“麻烦制造者”的角色,不见不散!


想要进一步系统地学习 Swift 开发的小伙伴们,可以来我的《Swift 语言开发精讲》专栏逛一逛哦:

在这里插入图片描述

  • 《Swift 语言开发精讲》

总结

在本篇博文中,我们讨论了用 Swift 语言解决一个成语小问题预先所需要的准备工作。

感谢观赏,我们下一篇见!😎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ STL之容器介绍(vector、list、set、map)

1 STL基本概念 C有两大思想,面向对象和泛型编程。泛型编程指编写代码时不必指定具体的数据类型,而是使用模板来代替实际类型,这样编写的函数或类可以在之后应用于各种数据类型。而STL就是C泛型编程的一个杰出例子。STL(Standard …

VUE3 + Ant Design Vue4 开发笔记

异常记录 [Vue warn]: Extraneous non-props attributes (options) were passed to component but could not be automatically inherited because component renders fragment or text root nodes 定位原因解决方法 错误的中文释义:[Vue 警告]:传递给…

QT跨平台应用程序开发框架(2)—— 初识QT

目录 一,创建helloworld 1.1 通过图形化 1.2 通过代码 1.3 通过编辑框 1.4 使用按钮 二,对象树 2.1 关于对象树 2.2 演示释放流程 三,乱码问题 3.1 为什么会有乱码问题 3.2 解决乱码问题 四,认识Qt坐标系 五&#xf…

【搭建JavaEE】(3)前后端交互,请求响应机制,JDBC数据库连接

前后端交互 Apache Tomat B/S目前主流。 tomat包含2部分: apache容器 再认识servlet 抽象出的开发模式 项目创建配置 maven javaeetomcat 忽略一些不用的文件 webapp文件夹 HiServlet 这里面出现了webinfo,这个别删因为这个呢,是这这个这…

美摄科技PC端视频编辑解决方案,为企业打造专属的高效创作平台

在当今这个信息爆炸的时代,视频已成为不可或缺的重要内容形式,美摄科技推出了PC端视频编辑解决方案的私有化部署服务,旨在为企业提供一款量身定制的高效创作平台。 一、全面功能,满足企业多样化需求 美摄科技的PC端视频编辑解决…

探索图像编辑的无限可能——Adobe Photoshop全解析

文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里,视觉内容无处不在,而创建和编辑这些内容的能力已经成为许多行业的核心技能…

STM32-笔记41-RTC(实时时钟)

一、什么是RTC? 实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。 实时时钟是一个独立的定时器。 RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设…

51c自动驾驶~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/13050104 #世界模型会是L3自动驾驶的唯一解吗 三维空间占有率(3D Occupancy)预测的目的是预测三维空间中的每个体素是否被占有,如果被占有,则对应的体素将被标记。3D Semant…

mybatis-spring @MapperScan走读分析

接上一篇文章:https://blog.csdn.net/qq_26437925/article/details/145100531, 本文注解分析mybatis-spring中的MapperScan注解,则将容易许多。 目录 MapperScan注解定义ConfigurationClassPostProcessor扫描注册beanDefinitionorg.mybatis.s…

Apache PAIMON 学习

参考:Apache PAIMON:实时数据湖技术框架及其实践 数据湖不仅仅是一个存储不同类数据的技术手段,更是提高数据分析效率、支持数据驱动决策、加速AI发展的基础设施。 新一代实时数据湖技术,Apache PAIMON兼容Apache Flink、Spark等…

SQL面试题1:连续登陆问题

引言 场景介绍: 许多互联网平台为了提高用户的参与度和忠诚度,会推出各种连续登录奖励机制。例如,游戏平台会给连续登录的玩家发放游戏道具、金币等奖励;学习类 APP 会为连续登录学习的用户提供积分,积分可兑换课程或…

电商系统,核心通用架构案例设计方案浅析

文章目录 一、用户系统案例设计1、用户信息的存储方案2、用户注册确保唯一3、用户数据合并方案4、用户敏感信息加密存储5、数据传输安全性6、多用户数据隔离性7、防止恶意注册8、用户好友关系存储方案9、用户登录token方案10、会员优先处理设计 二、网关系统设计1、网关的功能2…

【EI 会议征稿】第四届材料工程与应用力学国际学术会议(ICMEAAE 2025)

2025 4th International Conference on Materials Engineering and Applied Mechanics 重要信息 大会官网:www.icmeaae.com 大会时间:2025年3月7-9日 大会地点:中国西安 截稿时间:2025年1月24日23:59 接受/拒稿通知&#xf…

SQL面试题2:留存率问题

引言 场景介绍: 在互联网产品运营中,用户注册量和留存率是衡量产品吸引力和用户粘性的关键指标,直接影响产品的可持续发展和商业价值。通过分析这些数据,企业可以了解用户行为,优化产品策略,提升用户体验…

【Rust自学】11.7. 按测试的名称运行测试

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.7.1. 按名称运行测试的子集 如果想要选择运行的测试,就将测试的名称(一个或多个)作为cargo test的…

深入浅出 Android AES 加密解密:从理论到实战

深入浅出 Android AES 加密解密:从理论到实战 在现代移动应用中,数据安全是不可忽视的一环。无论是用户隐私保护,还是敏感信息的存储与传输,加密技术都扮演着重要角色。本文将以 AES(Advanced Encryption Standard&am…

jupyter notebook练手项目:线性回归——学习时间与成绩的关系

线性回归——学习时间与学习成绩的关系 第1步:导入工具库 pandas——数据分析库,提供了数据结构(如DataFrame和Series)和数据操作方法,方便对数据集进行读取、清洗、转换等操作。 matplotlib——绘图库,p…

JVM虚拟机的组成 笼统理解 六大部分 类加载子系统 运行时数据区 执行引擎 本地接口 垃圾回收器 线程工具

目录 JVM虚拟机的组成:概述 JVM虚拟机的组成:详细解析 1. 类加载子系统 2. 运行时数据区 3. 执行引擎 4. 本地接口 5. 垃圾回收器 6. 线程管理与调试工具 概述 JVM(Java Virtual Machine)是一个虚拟计算机,执行…

单细胞组学大模型(8)--- scGenePT,scGPT和GenePT的结合,实验数据和文本数据的交融模型

–https://doi.org/10.1101/2024.10.23.619972 研究团队和单位 Theofanis Karaletsos–Head Of AI - Science at Chan Zuckerberg Initiative (Chan Zuckerberg Initiative是扎克伯格和他妻子Chan成立的科研&教育机构) 研究简介 研究背景&…

kafka原理和实践

Kafka是当前分布式系统中最流行的消息中间件之一,凭借着其高吞吐量的设计,在日志收集系统和消息系统的应用场景中深得开发者喜爱。本篇就聊聊Kafka相关的一些知识点。主要包括以下内容: Kafka简介 Kafka特点Kafka基本概念Kafka架构Kafka的几…