这是 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 许可协议。在遵守许可协议的前提下,您可以自由地分享、修改本文档的内容,但不得用于商业目的。
如果您认为文档的部分内容侵犯了您的合法权益,请联系项目维护者,我们会尽快删除相关内容。