这是 2024 年清华大学计算机系学生科协暑期培训 Java 部分的作业。
本部分作业由三个小作业组成,本次作业采用代码填空的形式进行考察。
- 作业文件位于
src/main/java/homework/中。你可以直接在 IntelliJ IDEA 中运行每一个作业,每一个作业都实现了main函数,方便用户交互。 - 测试点文件位于
assets/testcases/中。
你只需要补全 threeSumClosest 函数中 TODO begin 和 TODO end 之间的代码即可。
- 题目:给定一个数组
nums[]和一个整数target。求nums[i] + nums[j] + nums[k],满足:i != j && j != k && i != k,且nums[i] + nums[j] + nums[k]与target的差的绝对值最小。
- 数据范围:
3 <= nums.length <= 500,-1000 <= nums[i] <= 1000,-10000 <= target <= 10000。
你只需要补全 lengthOfLongestSubstring 函数中 TODO begin 和 TODO end 之间的代码即可。
- 题目:给定一个字符串
s,求不含重复字符的最长子串的长度。 - 注意:子串指的是字符串中连续的一段。例如,空串、
abc、bcd和abcdef都是abcdef的子串,但abd、adf和xyz都不是。 - 数据范围:
0 <= s.length <= 50000,s中仅含 ASCII 码中的可见字符。
你只需要补全 guess 函数中 TODO begin 和 TODO end 之间的代码即可。
-
题目:给定 Wordle 游戏的一个状态,求下一个状态。具体的游戏规则不再赘述。
- 输入:一个
State类型的对象input; - 输出:一个
State类型的对象output。
- 输入:一个
-
State类型的定义如下:public class State { Color[] wordState; Color[] alphabetState; int chancesLeft; String answer, word; GameStatus status; }
- 其中
Color是一个枚举类,成员可以为GRAY、RED、YELLOW或GREEN。 -
GameStatus也是一个枚举类,成员可以为RUNNING、LOST或WON,分别代表着游戏未结束、失败、获胜。 -
wordState是当前局面下此轮猜测的单词中每一个字母被猜测的状态。 -
alphabetState是当前局面下每一个字母被猜测的状态。 -
chancesLeft是当前局面还剩多少次机会。若输入满足chancesLeft为$1$ 且此轮猜错,则chancesLeft变为$0$ 并游戏结束。 -
answer是标准答案,word是此轮猜测的答案。 -
status是当前局面的运行状态。
- 其中
-
注意:
-
output的answer和word应与input相同。 -
output的chancesLeft应恰比input少$1$ 。- 在
chancesLeft为$1$ 且此轮猜错的情况下,除了将chancesLeft变为$0$ ,同时将status变为LOST,你仍应更新wordState和alphabetState。 - 当此轮猜对的情况下,除了将
status变为WON,你仍应更新wordState和alphabetState。
- 在
- 当
word中出现多个相同的字母$\sigma$ 时,应:- 首先将位置正确的
$\sigma$ 标为绿色; - 再将位置不正确的
$\sigma$ 从左往右,标为黄色或红色。若此时已标记的$\sigma$ 的个数未超过answer中的个数,则应标为黄色;否则应标为红色。 - 举个例子,假设
answer是aabba而word是abaaa(这两个词都不存在,此例仅做演示),此为第一轮猜测,则word_state应为GYYRG。首先将word中的第一个a和最后一个a均标记为绿色G。然后将第二个a标为黄色Y,此时标记的a的数量已经等于answer中a的数量。因此,第三个a标记为红色R。
- 首先将位置正确的
- 对于
alphabetState而言:如果一个字母曾经已经被猜测为绿色,则它不会变为黄色或红色;如果一个字母已经被猜测为黄色,则它不会变为红色。即优先级:绿色 > 黄色 > 红色 > 灰色。 -
answer和word都将在读入时转为大写。
-
将代码补全完毕后,你可以选择:
- 在本地查看测试结果:
- 在 IntelliJ IDEA 中运行
src/test/java/homework/中对应的测试文件。 - 或是运行脚本,
- 对于 Windows 用户,运行
gradlew.bat; - 对于 Linux 或其他用户,运行
gradlew。
- 对于 Windows 用户,运行
- 在 IntelliJ IDEA 中运行
- 或是将代码提交至 GitHub。由于仓库已经配置好了 CI,故在每一次提交后你都可以通过查看 GitHub Actions 是否成功运行以判断你的代码是否正确。
如果你完成了作业,可以将你的仓库链接发在本仓库的 issue 区。请遵循已提供的 issue 模板进行填写。
除非另有说明,本仓库的内容采用 CC BY-NC-SA 4.0 许可协议。在遵守许可协议的前提下,您可以自由地分享、修改本文档的内容,但不得用于商业目的。
如果您认为文档的部分内容侵犯了您的合法权益,请联系项目维护者,我们会尽快删除相关内容。