From 4ab805bb007907e3ace8aa28f9d4f580d00a7d08 Mon Sep 17 00:00:00 2001 From: intyou <123916296+intyouss@users.noreply.github.com> Date: Thu, 9 Apr 2026 10:53:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?```=20refactor(handou):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=88=90=E8=AF=AD=E7=8C=9C=E8=B0=9C=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E7=9A=84=E6=8B=BC=E9=9F=B3=E5=8C=B9=E9=85=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加成语记录功能用于存储历史数据 - 简化字符匹配逻辑,移除不必要的条件判断 - 重构拼音处理流程,提高代码可读性 - 优化历史正确拼音字符的合并逻辑 - 改进拼音匹配算法的准确性和性能 ``` --- plugin/handou/game.go | 48 +++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/plugin/handou/game.go b/plugin/handou/game.go index bfc61778bc..6bef4ef5e9 100644 --- a/plugin/handou/game.go +++ b/plugin/handou/game.go @@ -254,6 +254,7 @@ func newHandouGame(target idiomJSON) func(string) (bool, []byte, error) { tickExistChars = make([]string, class) tickExistPinyin = make([]string, 0, class) + // 成语记录 record = make([]string, 0, 7) ) // 初始化 tick, 第一个是已知的拼音 @@ -315,51 +316,40 @@ func newHandouGame(target idiomJSON) func(string) (bool, []byte, error) { char := answerData.Chars[i] if char == chars[i] { tickExistChars[i] = char - } else { - tickExistChars[i] = "?" - } - } - - // 确保 tickExistPinyin 有足够的长度 - if len(tickExistPinyin) < class { - for i := len(tickExistPinyin); i < class; i++ { - tickExistPinyin = append(tickExistPinyin, "") } } // 处理拼音匹配逻辑 minPinyinLen := min(len(pinyin), len(answerData.Pinyin)) for i := range minPinyinLen { - pyChar := pinyin[i] - answerPinyinChar := []rune(pyChar) + answerPinyinChar := []rune(pinyin[i]) + PinyinChar := []rune(answerData.Pinyin[i]) + // 用户提交的历史正确拼音段 + historyCorrectPinyinChar := []rune(tickTruePinyin[i]) + tickTruePinyinChar := make([]rune, len(answerPinyinChar)) tickExistPinyinChar := []rune(tickExistPinyin[i]) - if tickTruePinyin[i] != "" { - copy(tickTruePinyinChar, []rune(tickTruePinyin[i])) + if len(historyCorrectPinyinChar) > 0 { + copy(tickTruePinyinChar, historyCorrectPinyinChar) } else { for k := range answerPinyinChar { tickTruePinyinChar[k] = kong } } - PinyinChar := answerData.Pinyin[i] - for j, c := range []rune(PinyinChar) { + for j, c := range PinyinChar { if c == kong { continue } - switch { - case j < len(answerPinyinChar) && c == answerPinyinChar[j]: - tickTruePinyinChar[j] = c - case slices.Contains(answerPinyinChar, c): - // 如果字符存在但位置不对,添加到 tickExistPinyinChar - if !slices.Contains(tickExistPinyinChar, c) { + + if j < len(answerPinyinChar) { + if c == answerPinyinChar[j] { + tickTruePinyinChar[j] = c + } else if slices.Contains(answerPinyinChar, c) && !slices.Contains(tickExistPinyinChar, c) { + // 如果字符存在但位置不对,添加到 tickExistPinyinChar tickExistPinyinChar = append(tickExistPinyinChar, c) } - default: - if j < len(tickTruePinyinChar) { - tickTruePinyinChar[j] = kong - } } } @@ -378,6 +368,14 @@ func newHandouGame(target idiomJSON) func(string) (bool, []byte, error) { tickTruePinyinChar[j] = '_' } } + + // 合并之前和当前的正确字符 + for j, c := range tickTruePinyinChar { + if c == kong && j < len(historyCorrectPinyinChar) && historyCorrectPinyinChar[j] != kong { + tickTruePinyinChar[j] = historyCorrectPinyinChar[j] + } + } + // 更新提示拼音 tickTruePinyin[i] = string(tickTruePinyinChar) tickExistPinyin[i] = string(tickExistPinyinChar) From 4920b0ca6bf0586aab00de02938c17e5da11daed Mon Sep 17 00:00:00 2001 From: intyou <123916296+intyouss@users.noreply.github.com> Date: Wed, 15 Apr 2026 10:56:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(handou):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=88=87=E7=89=87=E5=AE=B9=E9=87=8F=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 tickExistPinyin 切片的容量设置从动态调整为固定大小 - 保持其他数据结构的初始化逻辑不变 - 提高内存分配效率和代码一致性 --- plugin/handou/game.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/handou/game.go b/plugin/handou/game.go index 6bef4ef5e9..63feae2c70 100644 --- a/plugin/handou/game.go +++ b/plugin/handou/game.go @@ -252,7 +252,7 @@ func newHandouGame(target idiomJSON) func(string) (bool, []byte, error) { tickTruePinyin = make([]string, class) tickExistChars = make([]string, class) - tickExistPinyin = make([]string, 0, class) + tickExistPinyin = make([]string, class) // 成语记录 record = make([]string, 0, 7)