music_quiz: answer 정규화 도입 (대소문자/공백 무시)
- mq:answer/normalize: storage 의 norm.in 을 한 글자씩 떼어내 소문자화 + 공백 제거 후 norm.acc 에 누적. char 단위 반복은 'data modify ... set string from ... <start> <end>' (1.20+) 로, 결합은 매크로 ($(acc)$(c)) 로 수행하는 pure-datapack 구현. - process: 큐의 text 를 정규화한 결과를 judge.input 으로 사용 - judge: answer.title 정규화 후 judge.answer 로 사용 - iter_aliases: alias 각 항목 정규화 후 비교 원본 songs.mcfunction 의 title/alias 표기는 그대로 유지 (display 및 정규화 입력으로 모두 사용됨). 입력이 'Lose My Mind' / 'lose my mind' / 'LOSEMYMIND' / 'losemymind' 어떤 형태든 동일한 정규형으로 떨어져 매치.
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# acc 끝에 c 를 매크로로 concat
|
||||
# 매크로 인자: storage mq:tmp norm → $(acc), $(c)
|
||||
$data modify storage mq:tmp norm.acc set value "$(acc)$(c)"
|
||||
47
music_quiz/data/mq/function/answer/normalize/step.mcfunction
Normal file
47
music_quiz/data/mq/function/answer/normalize/step.mcfunction
Normal file
@@ -0,0 +1,47 @@
|
||||
# normalize 의 1-문자 처리 + 재귀 스텝
|
||||
# 사전조건: storage mq:tmp norm.in 비어있지 않을 수 있음 / norm.acc 누적값
|
||||
|
||||
execute store result score n.len func.temp run data get storage mq:tmp norm.in
|
||||
execute if score n.len func.temp matches 0 run return 0
|
||||
|
||||
# 머리글자 추출 → norm.c
|
||||
data modify storage mq:tmp norm.c set string from storage mq:tmp norm.in 0 1
|
||||
|
||||
# 공백 제거 (스킵)
|
||||
execute if data storage mq:tmp norm{c:" "} run data modify storage mq:tmp norm.c set value ""
|
||||
|
||||
# 대문자 A-Z → 소문자 a-z
|
||||
execute if data storage mq:tmp norm{c:"A"} run data modify storage mq:tmp norm.c set value "a"
|
||||
execute if data storage mq:tmp norm{c:"B"} run data modify storage mq:tmp norm.c set value "b"
|
||||
execute if data storage mq:tmp norm{c:"C"} run data modify storage mq:tmp norm.c set value "c"
|
||||
execute if data storage mq:tmp norm{c:"D"} run data modify storage mq:tmp norm.c set value "d"
|
||||
execute if data storage mq:tmp norm{c:"E"} run data modify storage mq:tmp norm.c set value "e"
|
||||
execute if data storage mq:tmp norm{c:"F"} run data modify storage mq:tmp norm.c set value "f"
|
||||
execute if data storage mq:tmp norm{c:"G"} run data modify storage mq:tmp norm.c set value "g"
|
||||
execute if data storage mq:tmp norm{c:"H"} run data modify storage mq:tmp norm.c set value "h"
|
||||
execute if data storage mq:tmp norm{c:"I"} run data modify storage mq:tmp norm.c set value "i"
|
||||
execute if data storage mq:tmp norm{c:"J"} run data modify storage mq:tmp norm.c set value "j"
|
||||
execute if data storage mq:tmp norm{c:"K"} run data modify storage mq:tmp norm.c set value "k"
|
||||
execute if data storage mq:tmp norm{c:"L"} run data modify storage mq:tmp norm.c set value "l"
|
||||
execute if data storage mq:tmp norm{c:"M"} run data modify storage mq:tmp norm.c set value "m"
|
||||
execute if data storage mq:tmp norm{c:"N"} run data modify storage mq:tmp norm.c set value "n"
|
||||
execute if data storage mq:tmp norm{c:"O"} run data modify storage mq:tmp norm.c set value "o"
|
||||
execute if data storage mq:tmp norm{c:"P"} run data modify storage mq:tmp norm.c set value "p"
|
||||
execute if data storage mq:tmp norm{c:"Q"} run data modify storage mq:tmp norm.c set value "q"
|
||||
execute if data storage mq:tmp norm{c:"R"} run data modify storage mq:tmp norm.c set value "r"
|
||||
execute if data storage mq:tmp norm{c:"S"} run data modify storage mq:tmp norm.c set value "s"
|
||||
execute if data storage mq:tmp norm{c:"T"} run data modify storage mq:tmp norm.c set value "t"
|
||||
execute if data storage mq:tmp norm{c:"U"} run data modify storage mq:tmp norm.c set value "u"
|
||||
execute if data storage mq:tmp norm{c:"V"} run data modify storage mq:tmp norm.c set value "v"
|
||||
execute if data storage mq:tmp norm{c:"W"} run data modify storage mq:tmp norm.c set value "w"
|
||||
execute if data storage mq:tmp norm{c:"X"} run data modify storage mq:tmp norm.c set value "x"
|
||||
execute if data storage mq:tmp norm{c:"Y"} run data modify storage mq:tmp norm.c set value "y"
|
||||
execute if data storage mq:tmp norm{c:"Z"} run data modify storage mq:tmp norm.c set value "z"
|
||||
|
||||
# acc = acc + c (매크로 결합)
|
||||
function mq:answer/normalize/append with storage mq:tmp norm
|
||||
|
||||
# 나머지로 진행
|
||||
data modify storage mq:tmp norm.in set string from storage mq:tmp norm.in 1
|
||||
|
||||
function mq:answer/normalize/step
|
||||
Reference in New Issue
Block a user