Skip to content

9vvert/sast2024-java

 
 

Repository files navigation

sast2024-java

这是 2024 年清华大学计算机系学生科协暑期培训 Java 部分的作业。

本部分作业由三个小作业组成,本次作业采用代码填空的形式进行考察。

  • 作业文件位于 src/main/java/homework/ 中。你可以直接在 IntelliJ IDEA 中运行每一个作业,每一个作业都实现了 main 函数,方便用户交互。
  • 测试点文件位于 assets/testcases/ 中。

作业内容

作业 1:ThreeSumClosest

你只需要补全 threeSumClosest 函数中 TODO beginTODO 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

作业 2:LongestSubstringWithoutRepeatingCharacters

你只需要补全 lengthOfLongestSubstring 函数中 TODO beginTODO end 之间的代码即可。

  • 题目:给定一个字符串 s,求不含重复字符的最长子串的长度。
  • 注意:子串指的是字符串中连续的一段。例如,空串、abcbcdabcdef 都是 abcdef 的子串,但 abdadfxyz 都不是。
  • 数据范围:0 <= s.length <= 50000s 中仅含 ASCII 码中的可见字符。

作业 3:Wordle

你只需要补全 guess 函数中 TODO beginTODO end 之间的代码即可。

  • 题目:给定 Wordle 游戏的一个状态,求下一个状态。具体的游戏规则不再赘述。

    • 输入:一个 State 类型的对象 input
    • 输出:一个 State 类型的对象 output
  • State 类型的定义如下:

    public class State {
        Color[] wordState;
        Color[] alphabetState;
        int chancesLeft;
        String answer, word;
        GameStatus status;
    }
    • 其中 Color 是一个枚举类,成员可以为 GRAYREDYELLOWGREEN
    • GameStatus 也是一个枚举类,成员可以为 RUNNINGLOSTWON,分别代表着游戏未结束、失败、获胜。
    • wordState 是当前局面下此轮猜测的单词中每一个字母被猜测的状态。
    • alphabetState 是当前局面下每一个字母被猜测的状态。
    • chancesLeft 是当前局面还剩多少次机会。若输入满足 chancesLeft$1$ 且此轮猜错,则 chancesLeft 变为 $0$ 并游戏结束。
    • answer 是标准答案,word 是此轮猜测的答案。
    • status 是当前局面的运行状态。
  • 注意:

    • outputanswerword 应与 input 相同。
    • outputchancesLeft 应恰比 input$1$
      • chancesLeft$1$ 且此轮猜错的情况下,除了将 chancesLeft 变为 $0$​,同时将 status 变为 LOST,你仍应更新 wordStatealphabetState
      • 当此轮猜对的情况下,除了将 status 变为 WON,你仍应更新 wordStatealphabetState
    • word 中出现多个相同的字母 $\sigma$ 时,应:
      • 首先将位置正确的 $\sigma$ 标为绿色;
      • 再将位置不正确的 $\sigma$ 从左往右,标为黄色或红色。若此时已标记的 $\sigma$ 的个数未超过 answer 中的个数,则应标为黄色;否则应标为红色。
      • 举个例子,假设 answeraabbawordabaaa(这两个词都不存在,此例仅做演示),此为第一轮猜测,则 word_state 应为 GYYRG。首先将 word 中的第一个 a 和最后一个 a 均标记为绿色 G。然后将第二个 a 标为黄色 Y,此时标记的 a 的数量已经等于 answera 的数量。因此,第三个 a 标记为红色 R
    • 对于 alphabetState 而言:如果一个字母曾经已经被猜测为绿色,则它不会变为黄色或红色;如果一个字母已经被猜测为黄色,则它不会变为红色。即优先级:绿色 > 黄色 > 红色 > 灰色。
    • answerword 都将在读入时转为大写。

如何测试

将代码补全完毕后,你可以选择:

  • 在本地查看测试结果:
    • 在 IntelliJ IDEA 中运行 src/test/java/homework/ 中对应的测试文件。
    • 或是运行脚本,
      • 对于 Windows 用户,运行 gradlew.bat
      • 对于 Linux 或其他用户,运行 gradlew
  • 或是将代码提交至 GitHub。由于仓库已经配置好了 CI,故在每一次提交后你都可以通过查看 GitHub Actions 是否成功运行以判断你的代码是否正确。

如何提交

如果你完成了作业,可以将你的仓库链接发在本仓库的 issue 区。请遵循已提供的 issue 模板进行填写。

LICENSE

除非另有说明,本仓库的内容采用 CC BY-NC-SA 4.0 许可协议。在遵守许可协议的前提下,您可以自由地分享、修改本文档的内容,但不得用于商业目的。

如果您认为文档的部分内容侵犯了您的合法权益,请联系项目维护者,我们会尽快删除相关内容。

About

may be wrong

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%