diff --git a/250307_DIC_2502C_채점결과.xlsx b/250307_DIC_2502C_채점결과.xlsx index 085e04f..98c7647 100644 Binary files a/250307_DIC_2502C_채점결과.xlsx and b/250307_DIC_2502C_채점결과.xlsx differ diff --git a/250318_DIC_2502C_TEST.xlsx b/250318_DIC_2502C_TEST.xlsx new file mode 100644 index 0000000..eb40abe Binary files /dev/null and b/250318_DIC_2502C_TEST.xlsx differ diff --git a/250319_DIC_2502C_TEST.xlsx b/250319_DIC_2502C_TEST.xlsx new file mode 100644 index 0000000..bfecc9f Binary files /dev/null and b/250319_DIC_2502C_TEST.xlsx differ diff --git a/250319_DIC_2502C_채점결과.xlsx b/250319_DIC_2502C_채점결과.xlsx new file mode 100644 index 0000000..5bf05d2 Binary files /dev/null and b/250319_DIC_2502C_채점결과.xlsx differ diff --git a/DIC_2502A.json b/DIC_2502A.json index 6461743..346c6ee 100644 --- a/DIC_2502A.json +++ b/DIC_2502A.json @@ -159,6 +159,8 @@ } }, "2": { + "videoStartTime": 160, + "openingStartTime": 0, "1": { "ele": "//CRClipArr/CRClip[position() = //CRTrackList[1]/CRTrackClip/@ClipIndex]/@Path", "type": "array", @@ -186,48 +188,60 @@ "point": 3 }, "5": { - "ele": "//CRCUnitArr[@Name='{search}']", - "search": "나무기차", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", + "type": "video", + "value": "나무기차", "point": 3 }, "6": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", "search": "나무기차", + "type": "video", + "value": "돋움체", "point": 2 }, "7": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID101='120']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='120']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID101", "search": "나무기차", + "type": "video", + "value": "120", "point": 2 }, "8": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-13290016']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-13290016']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4']/@VID100", "search": "나무기차", + "type": "video", + "value": "-13290016", "point": 2 }, "9": { - "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", - "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "range", + "ele":"//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "ele2": "//CRCUnitArr[@Name={search}]/@*[name()='VID600' or name()='VID601']", + "type": "video", "search": "나무기차", - "start": [ 0.200, 0.800 ], - "end": [ 0.666, 0.999 ], + "value": [ + 0.240, + 0.777 + ], "point": 2 }, "10": { - "existEle": "//CRCUnitArr[@Name='{search}']", - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex=count(//CROwneUnit[1]/preceding-sibling::CROwneUnit))]/@Length)", - "type": "searchIndex", - "value": 160, + "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", + "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", "search": "나무기차", + "type": "video", + "value": 160, "point": 2 }, "11": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='나무기차']]/preceding::CROwneUnit))][@Length='150']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[1]/preceding-sibling::CROwneUnit))][@Length='150']", + "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", + "search": "나무기차", + "type": "video", + "value": "150", "point": 2 }, "12": { @@ -316,50 +330,72 @@ "point": 2 }, "22": { - "ele": "//CRCUnitArr[@Name='{search}']", - "search": "멋진 기차 모형 (Fine Train Model)", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", + "type": "opening", + "value": "멋진 기차 모형 (Fine Train Model)", "point": 3 }, "23": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID102='바탕체']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='바탕체']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", "search": "멋진 기차 모형 (Fine Train Model)", + "type": "opening", + "value": "바탕체", "point": 2 }, "24": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID101", "search": "멋진 기차 모형 (Fine Train Model)", + "type": "opening", + "value": "150", "point": 2 }, "25": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-14688179']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-14688179']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4']/@VID100", "search": "멋진 기차 모형 (Fine Train Model)", + "type": "opening", + "value": "-14688179", "point": 2 }, "26": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2'][@VID100='0.2'][@VID101='-16307450']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2'][@VID100='0.2'][@VID101='-16307450']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", "search": "멋진 기차 모형 (Fine Train Model)", + "type": "opening", + "value": [ + "0.2", + "-16307450" + ], "point": 2 }, "27": { - "ele": "//CRCUnitArr[@Name='{search}'][@VID505='2'][@VID507='2']", - "ele2": "//CROwneUnit[2]/CRCUnitArr[@VID505='2'][@VID507='2']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID505' or name()='VID507']", + "ele2": "//CRCUnitArr[@Name='{search}']/@*[name()='VID505' or name()='VID507']", "search": "멋진 기차 모형 (Fine Train Model)", + "type": "opening", + "value":[ + "2", + "2" + ], "point": 3 }, "28": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[//CRCUnitArr[@Name='{search}']]/preceding::CROwneUnit)][@Pos='0']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[2]/CRCUnitArr/preceding::CROwneUnit)][@Pos='0']", + "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", + "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", "search": "멋진 기차 모형 (Fine Train Model)", + "type": "opening", + "value": 0, "point": 2 }, "29": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[//CRCUnitArr[@Name='{search}']]/preceding::CROwneUnit))][@Length='120']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[2]/CRCUnitArr/preceding::CROwneUnit)][@Length='120']", + "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = {startTime}]/@Length", + "ele3": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", "search": "멋진 기차 모형 (Fine Train Model)", + "type": "opening", + "value": "120", "point": 2 }, "30": { diff --git a/DIC_2502B.json b/DIC_2502B.json index 887e165..dd5b178 100644 --- a/DIC_2502B.json +++ b/DIC_2502B.json @@ -184,48 +184,61 @@ "point": 3 }, "5": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]", - "search": "자연이 빚어낸 섬", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", + "type": "video", + "value": "자연이 빚어낸 섬", "point": 3 }, "6": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool[@Type='1']/GCUnit[@VID102='바탕체']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='바탕체']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", "search": "자연이 빚어낸 섬", + "type": "video", + "value": "바탕체", "point": 2 }, + "7": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool[@Type='1']/GCUnit[@VID101='120']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='120']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool[@Type='1']/GCUnit/@VID101", "search": "자연이 빚어낸 섬", + "type": "video", + "value": "120", "point": 2 }, "8": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='4'][@VID100='-10541088']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-10541088']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='4']/@VID100", "search": "자연이 빚어낸 섬", + "type": "video", + "value": "-1487764", "point": 2 }, "9": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]/@VID600 | //CRCUnitArr[@Name=\"{search}\"]/@VID601", - "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "range", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@VID600' or name()='VID601", + "ele2": "//CRCUnitArr[@Name={search}]/@*[name()='VID600' or name()='VID601']", + "type": "video", "search": "자연이 빚어낸 섬", - "start": [ 0.200, 0.800 ], - "end": [ 0.666, 0.999 ], + "value": [ + 0.071, + 0.777 + ], "point": 2 }, "10": { - "existEle": "//CRCUnitArr[@Name=\"{search}\"]", - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex=count(//CROwneUnit[1]/preceding-sibling::CROwneUnit))]/@Length)", - "type": "searchIndex", - "value": 150, + "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", + "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", "search": "자연이 빚어낸 섬", + "type": "video", + "value": 150, "point": 2 }, "11": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='자연이 빚어낸 섬']]/preceding::CROwneUnit))][@Length='120']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[1]/preceding-sibling::CROwneUnit))][@Length='120']", + "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", + "search": "자연이 빚어낸 섬", + "type": "video", + "value": "120", "point": 2 }, "12": { @@ -314,50 +327,72 @@ "point": 2 }, "22": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]", - "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", + "type": "opening", + "value": "마나가하섬으로 가자 (Let's go to Managaha Island)", "point": 3 }, "23": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", + "type": "opening", + "value": "돋움체", "point": 2 }, "24": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool[@Type='1']/GCUnit/@VID101", "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", + "type": "opening", + "value": "150", "point": 2 }, "25": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='4'][@VID100='-1487764']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-1487764']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='4']/@VID100", "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", + "type": "opening", + "value": "-1487764", "point": 2 }, "26": { - "ele": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='2'][@VID100='0.30000001'][@VID101='-1']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2'][@VID100='0.30000001'][@VID101='-1']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", + "ele2": "//CRCUnitArr[@Name=\"{search}\"]//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", + "type": "opening", + "value": [ + "0.300", + "-1" + ], "point": 2 }, "27": { - "ele": "//CRCUnitArr[@Name=\"{search}\"][@VID505='1'][@VID507='2']", - "ele2": "//CROwneUnit[2]/CRCUnitArr[@VID505='1'][@VID507='2']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID505' or name()='VID507']", + "ele2": "//CRCUnitArr[@Name=\"{search}\"]/@*[name()='VID505' or name()='VID507']", "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", + "type": "opening", + "value":[ + "1", + "2" + ], "point": 3 }, "28": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name=\"{search}\"]]/preceding::CROwneUnit)][@Pos='0']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[2]/CRCUnitArr/preceding::CROwneUnit)][@Pos='0']", + "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", + "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name=\"{search}\"]]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", + "type": "opening", + "value": 0, "point": 2 }, "29": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name=\"{search}\"]]/preceding::CROwneUnit))][@Length='120']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[2]/CRCUnitArr/preceding::CROwneUnit)][@Length='120']", + "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = {startTime}]/@Length", + "ele3": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name=\"{search}\"]]/preceding-sibling::CROwneUnit)]/@Length", "search": "마나가하섬으로 가자 (Let's go to Managaha Island)", + "type": "opening", + "value": "120", "point": 2 }, "30": { diff --git a/DIC_2502C copy.json b/DIC_2502C copy.json deleted file mode 100644 index 7bab7a8..0000000 --- a/DIC_2502C copy.json +++ /dev/null @@ -1,378 +0,0 @@ -{ - "0": { - "1": { - "ele": "none", - "point": 0 - }, - "2": { - "ele": "none", - "point": 0 - }, - "3": { - "ele": "none", - "point": 0 - }, - "4": { - "ele": "none", - "point": 0 - }, - "5": { - "ele": "none", - "point": 0 - }, - "6": { - "ele": "none", - "point": 0 - }, - "7": { - "ele": "none", - "point": 0 - }, - "8": { - "ele": "$[?(@.width == 65 && @.height == 45)]", - "type": "boolean", - "point": 10 - } - }, - "1": { - "1": { - "ele": "none", - "point": 0 - }, - "2": { - "ele": "none", - "point": 0 - }, - "3": { - "ele": "none", - "point": 0 - }, - "4": { - "ele": "none", - "point": 0 - }, - "5": { - "ele": "$.children[?(@.name=='Mountains of Cheorwon')].name", - "value": "Mountains of Cheorwon", - "point": 10 - }, - "6": { - "ele": "$.children[?(@.name=='Mountains of Cheorwon')].text.font.names[0]", - "type": "font", - "value": "Arial", - "point": 10 - }, - "7": { - "ele": "$.children[?(@.name=='Mountains of Cheorwon')].text.font.names[0]", - "value": "Arial-BoldItalicMT", - "point": 10 - }, - "8": { - "ele": "$.children[?(@.name=='Mountains of Cheorwon')].text.font.sizes[0]", - "value": 40, - "point": 10 - }, - "9": { - "ele": "$.children[?(@.name=='Mountains of Cheorwon')].text.font.colors[0]", - "type": "color", - "value": "f1eb4a", - "point": 10 - }, - "10": { - "ele": "none", - "point": 0 - }, - "11": { - "ele": "none", - "point": 0 - }, - "12": { - "ele": "none", - "point": 0 - }, - "13": { - "ele": "$.children[?(@.name=='철원 금학산 등산')].name", - "value": "철원 금학산 등산", - "point": 10 - }, - "14": { - "ele": "$.children[?(@.name=='철원 금학산 등산')].text.font.names[0]", - "type": "font", - "value": "GulimChe", - "point": 10 - }, - "15": { - "ele": "$.children[?(@.name=='철원 금학산 등산')].text.font.sizes[0]", - "value": 30, - "point": 10 - }, - "16": { - "ele": "$.children[?(@.name=='철원 금학산 등산')].text.font.colors[0]", - "type": "color", - "value": "f1eb4a", - "point": 10 - }, - "17": { - "ele": "none", - "point": 0 - }, - "18": { - "ele": "none", - "point": 0 - }, - "19": { - "ele": "none", - "point": 0 - }, - "20": { - "ele": "none", - "point": 0 - }, - "21": { - "ele": "none", - "point": 0 - }, - "22": { - "ele": "none", - "point": 0 - }, - "23": { - "ele": "none", - "point": 0 - }, - "24": { - "ele": "none", - "point": 0 - }, - "25": { - "ele": "none", - "point": 0 - }, - "26": { - "ele": "none", - "point": 0 - }, - "27": { - "ele": "$[?(@.width == 65 && @.height == 45)]", - "type": "boolean", - "point": 10 - } - }, - "2": { - "1": { - "ele": "//CRClipArr/CRClip[position() = //CRTrackList[1]/CRTrackClip/@ClipIndex]/@Path", - "type": "array", - "value": [ - "동영상.mp4", - "이미지1.jpg", - "이미지3.jpg", - "이미지2.jpg" - ], - "point": 4 - }, - "2": { - "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1][@Speed='120']", - "point": 2 - }, - "3": { - "ele": "count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)", - "type": "startend", - "start": "0", - "end": "385", - "point": 2 - }, - "4": { - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)]//CRFilter[@Type='1'][@ID='47'][@VID100='6'][@VID103='1']", - "point": 3 - }, - "5": { - "ele": "//CRCUnitArr[@Name='{search}']", - "search": "금학산 정상에서", - "point": 3 - }, - "6": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID102='바탕체']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='바탕체']", - "search": "금학산 정상에서", - "point": 2 - }, - "7": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID101='170']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='170']", - "search": "금학산 정상에서", - "point": 2 - }, - "8": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-15081004']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-15081004']", - "search": "금학산 정상에서", - "point": 2 - }, - "9": { - "existEle": "//CRCUnitArr[@Name='{search}']", - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex=count(//CROwneUnit/CRCUnitArr[@Name='{search}']/parent::CROwneUnit/preceding-sibling::CROwneUnit))]/@Length)", - "type": "searchIndex", - "value": 170, - "search": "금학산 정상에서", - "point": 2 - }, - "10": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='금학산 정상에서']]/preceding::CROwneUnit))][@Length='150']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[1]/preceding-sibling::CROwneUnit))][@Length='150']", - "point": 2 - }, - "11": { - "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", - "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "range", - "search": "금학산 정상에서", - "start": [ 0.200, 0.800 ], - "end": [ 0.666, 0.999 ], - "point": 2 - }, - "12": { - "existEle": "//CRClip[@Path='동영상.mp4']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)]/@Mute", - "type": "searchIndex", - "value": "1", - "point": 2 - }, - "13": { - "existEle": "//CRClip[@Path='이미지1.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "150", - "point": 2 - }, - "14": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID103']", - "value": [ - "67", - "8" - ], - "point": 2 - }, - "15": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지1.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "10", - "475:535", - "2" - ], - "point": 2 - }, - "16": { - "existEle": "//CRClip[@Path='이미지3.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "120", - "point": 2 - }, - "17": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID102']", - "value": [ - "102", - "9" - ], - "point": 2 - }, - "18": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지3.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "13", - "595:655", - "2" - ], - "point": 2 - }, - "19": { - "existEle": "//CRClip[@Path='이미지2.jpg'] | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]/@Length", - "type": "searchIndex", - "value": "180", - "point": 2 - }, - "20": { - "type": "multi", - "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID102']", - "value": [ - "184", - "25" - ], - "point": 2 - }, - "21": { - "type": "multi", - "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='이미지2.jpg']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)]/@*[name()='ID' or name()='Range' or name()='Type']", - "value": [ - "19", - "805:835", - "2" - ], - "point": 2 - }, - "22": { - "ele": "//CRCUnitArr[@Name='{search}']", - "search": "금학산의 기운 (Energy of a Mountain)", - "point": 3 - }, - "23": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", - "search": "금학산의 기운 (Energy of a Mountain)", - "point": 2 - }, - "24": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", - "search": "금학산의 기운 (Energy of a Mountain)", - "point": 2 - }, - "25": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-4077760']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-4077760']", - "search": "금학산의 기운 (Energy of a Mountain)", - "point": 2 - }, - "26": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2'][@VID100='0.30000001'][@VID101='-16777216']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2'][@VID100='0.30000001'][@VID101='-16777216']", - "search": "금학산의 기운 (Energy of a Mountain)", - "point": 2 - }, - "27": { - "ele": "//CRCUnitArr[@Name='{search}'][@VID505='1'][@VID507='2']", - "ele2": "//CROwneUnit[2]/CRCUnitArr[@VID505='1'][@VID507='2']", - "search": "금학산의 기운 (Energy of a Mountain)", - "point": 3 - }, - "28": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='{search}']]/preceding::CROwneUnit)][@Pos='0']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[2]/CRCUnitArr/preceding::CROwneUnit)][@Pos='0']", - "search": "금학산의 기운 (Energy of a Mountain)", - "point": 2 - }, - "29": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='{search}']]/preceding::CROwneUnit))][@Length='120']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[2]/CRCUnitArr/preceding::CROwneUnit)][@Length='120']", - "search": "금학산의 기운 (Energy of a Mountain)", - "point": 2 - }, - "30": { - "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]", - "point": 2 - }, - "31": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Length='830']", - "point": 2 - }, - "32": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']//CRFilter[@Type='2'][@ID='1'][@VID8='90']", - "point": 2 - } - } -} \ No newline at end of file diff --git a/DIC_2502C.json b/DIC_2502C.json index 48f1f44..001349d 100644 --- a/DIC_2502C.json +++ b/DIC_2502C.json @@ -159,7 +159,7 @@ } }, "2": { - "subtitleStartTime": 170, + "videoStartTime": 170, "openingStartTime": 0, "1": { "ele": "//CRClipArr/CRClip[position() = //CRTrackList[1]/CRTrackClip/@ClipIndex]/@Path", @@ -189,8 +189,7 @@ }, "5": { "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", - "ele2": "", - "type": "subtitle", + "type": "video", "value": "금학산 정상에서", "point": 3 }, @@ -198,7 +197,7 @@ "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", "search" : "금학산 정상에서", - "type": "subtitle", + "type": "video", "value": "바탕체", "point": 2 }, @@ -206,7 +205,7 @@ "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID101", "search": "금학산 정상에서", - "type": "subtitle", + "type": "video", "value": "170", "point": 2 }, @@ -214,7 +213,7 @@ "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4']/@VID100", "search": "금학산 정상에서", - "type": "subtitle", + "type": "video", "value": "-15081004", "point": 2 }, @@ -222,23 +221,22 @@ "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", "search": "금학산 정상에서", - "type": "subtitle", + "type": "video", "value": 170, "point": 2 }, "10": { "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = {startTime}]/@Length", - "ele3": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", "search" : "금학산 정상에서", - "type": "subtitle", + "type": "video", "value": "150", "point": 2 }, "11": { - "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@VID600 | //CROwneUnit[{subtitleIndex}]/CRCUnitArr/@VID601", - "ele2": "//CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID600 | //CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID601", - "type": "subtitle", + "ele":"//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "ele2": "//CRCUnitArr[@Name={search}]/@*[name()='VID600' or name()='VID601']", + "type": "video", "search": "금학산 정상에서", "value": ["0.260", "0.888"], "point": 2 @@ -329,53 +327,72 @@ "point": 2 }, "22": { - "ele": "//CRCUnitArr[@Name='{search}']", - "search": "금학산의 기운 (Energy of a Mountain)", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", + "type": "opening", + "value": "금학산의 기운 (Energy of a Mountain)", "point": 3 }, "23": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", "search": "금학산의 기운 (Energy of a Mountain)", + "type": "opening", + "value": "돋움체", "point": 2 }, "24": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID101", "search": "금학산의 기운 (Energy of a Mountain)", + "type": "opening", + "value": "150", "point": 2 }, "25": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-4077760']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-4077760']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4']/@VID100", "search": "금학산의 기운 (Energy of a Mountain)", + "type": "opening", + "value": "-4077760", "point": 2 }, "26": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2'][@VID100='0.30000001'][@VID101='-16777216']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2'][@VID100='0.30000001'][@VID101='-16777216']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", "search": "금학산의 기운 (Energy of a Mountain)", + "type": "opening", + "value":[ + "0.3", + "-16777216" + ], "point": 2 }, "27": { - "ele": "//CRCUnitArr[@Name='{search}'][@VID505='1'][@VID507='2']", - "ele2": "//CROwneUnit[2]/CRCUnitArr[@VID505='1'][@VID507='2']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID505' or name()='VID507']", + "ele2": "//CRCUnitArr[@Name='{search}']/@*[name()='VID505' or name()='VID507']", "search": "금학산의 기운 (Energy of a Mountain)", + "type": "opening", + "value":[ + "1", + "2" + ], "point": 3 }, "28": { - "existEle": "//CRCUnitArr[@Name='{search}']", - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", - "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[not(CRCUnitArr[@Name='기본자막'])][2]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", - "type": "searchIndex", - "value": 0, + "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", + "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", "search": "금학산의 기운 (Energy of a Mountain)", + "type": "opening", + "value": 0, "point": 2 }, "29": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit/CRCUnitArr[@Name='금학산의 기운 (Energy of a Mountain)']/parent::CROwneUnit/preceding-sibling::CROwneUnit)][@Length=120]", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[not(CRCUnitArr[@Name='기본자막'])][2]/preceding::CROwneUnit)][@Length='120']", + "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = {startTime}]/@Length", + "ele3": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", "search": "금학산의 기운 (Energy of a Mountain)", + "type": "opening", + "value": "120", "point": 2 }, "30": { diff --git a/DIC_2502D.json b/DIC_2502D.json index 2a54a47..9516df0 100644 --- a/DIC_2502D.json +++ b/DIC_2502D.json @@ -184,48 +184,60 @@ "point": 3 }, "5": { - "ele": "//CRCUnitArr[@Name='{search}']", - "search": "대룡산의 아름다움", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", + "type": "video", + "value": "대룡산의 아름다움", "point": 3 }, "6": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID102='바탕체']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='바탕체']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", "search": "대룡산의 아름다움", + "type": "video", + "value": "바탕체", "point": 2 }, "7": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID101='170']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='170']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID101", "search": "대룡산의 아름다움", + "type": "video", + "value": "170", "point": 2 }, "8": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-10148184']", - "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-10148184']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4']/@VID100", "search": "대룡산의 아름다움", + "type": "video", + "value": "-10148184", "point": 2 }, "9": { - "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", - "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "range", + "ele":"//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "ele2": "//CRCUnitArr[@Name={search}]/@*[name()='VID600' or name()='VID601']", + "type": "video", "search": "대룡산의 아름다움", - "start": [ 0.200, 0.800 ], - "end": [ 0.666, 0.999 ], + "value": [ + 0.229, + 0.888 + ], "point": 2 }, "10": { - "existEle": "//CRCUnitArr[@Name='{search}']", - "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex=count(//CROwneUnit[1]/preceding-sibling::CROwneUnit))]/@Length)", - "type": "searchIndex", - "value": 150, + "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", + "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", "search": "대룡산의 아름다움", + "type": "video", + "value": 150, "point": 2 }, "11": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='대룡산의 아름다움']]/preceding::CROwneUnit))][@Length='120']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[1]/preceding-sibling::CROwneUnit))][@Length='120']", + "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", + "search": "대룡산의 아름다움", + "type": "video", + "value": "120", "point": 2 }, "12": { @@ -314,50 +326,72 @@ "point": 2 }, "22": { - "ele": "//CRCUnitArr[@Name='{search}']", - "search": "대룡산의 정기 (The spirit of the Mountain)", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@Name", + "type": "opening", + "value": "대룡산의 정기 (The spirit of the Mountain)", "point": 3 }, "23": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID102", "search": "대룡산의 정기 (The spirit of the Mountain)", + "type": "opening", + "value": "돋움체", "point": 2 }, "24": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='150']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit/@VID101", "search": "대룡산의 정기 (The spirit of the Mountain)", + "type": "opening", + "value": "150", "point": 2 }, "25": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-6991812']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-6991812']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4']/@VID100", "search": "대룡산의 정기 (The spirit of the Mountain)", + "type": "opening", + "value": "-6991812", "point": 2 }, "26": { - "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2'][@VID100='0.30000001'][@VID101='-16777216']", - "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2'][@VID100='0.30000001'][@VID101='-16777216']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", + "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", "search": "대룡산의 정기 (The spirit of the Mountain)", + "type": "opening", + "value": [ + "0.30000001", + "-16777216" + ], "point": 2 }, "27": { - "ele": "//CRCUnitArr[@Name='{search}'][@VID505='1'][@VID507='2']", - "ele2": "//CROwneUnit[2]/CRCUnitArr[@VID505='1'][@VID507='2']", + "ele": "//CROwneUnit[{subtitleIndex}]/CRCUnitArr/@*[name()='VID505' or name()='VID507']", + "ele2": "//CRCUnitArr[@Name='{search}']/@*[name()='VID505' or name()='VID507']", "search": "대룡산의 정기 (The spirit of the Mountain)", + "type": "opening", + "value":[ + "1", + "2" + ], "point": 3 }, "28": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='{search}']]/preceding::CROwneUnit)][@Pos='0']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[2]/CRCUnitArr/preceding::CROwneUnit)][@Pos='0']", + "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/preceding-sibling::CRTrackClip/@Length)", + "ele2": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/preceding-sibling::CRTrackClip/@Length)", "search": "대룡산의 정기 (The spirit of the Mountain)", + "type": "opening", + "value": 0, "point": 2 }, "29": { - "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='{search}']]/preceding::CROwneUnit))][@Length='120']", - "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[2]/CRCUnitArr/preceding::CROwneUnit)][@Length='120']", + "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][{subtitleOrder}]/@Length", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = {startTime}]/@Length", + "ele3": "//CRTrackList[@Name='텍스트']/CRTrackClip[@ClipIndex=count(//CROwneUnit[CRCUnitArr[@Name='{search}']]/preceding-sibling::CROwneUnit)]/@Length", "search": "대룡산의 정기 (The spirit of the Mountain)", + "type": "opening", + "value": "120", "point": 2 }, "30": { diff --git a/psdExport_2.js b/psdExport_2.js index 933a17d..200afa5 100644 --- a/psdExport_2.js +++ b/psdExport_2.js @@ -38,7 +38,7 @@ const answerFilesDir = './samples/'; // -------------------------------------------------------- // const outputExcelFile = './'+todayDate+'_DIC_2502A_채점결과.xlsx'; // const outputExcelFile = './'+todayDate+'_DIC_2502B_채점결과.xlsx'; -// const outputExcelFile = './'+todayDate+'_DIC_2502C_채점결과.xlsx'; +// const outputExcelFile = './' + todayDate + '_DIC_2502C_채점결과.xlsx'; // const outputExcelFile = './'+todayDate+'_DIC_2502D_채점결과.xlsx'; // TEST @@ -122,14 +122,29 @@ studentDirs.forEach(student => { // Flatten the resultData for better representation in Excel const flattenedData = scoringResultList.map(student => { - const name = student["0"] + const name = student["0"]; const flattened = { "학생": student["0"] }; + + // excel에 표시하지 않을 key값들 + const exceptKeys = [ + "0", // 학생 이름 항상 제외 + "1", // 1번 PSD 파일 채점 결과 + "2", // 2번 PSD 파일 채점 결과 + ] + const exceptSubkeys = [ + "videoStartTime", + "openingStartTime", + ]; Object.keys(student).forEach(key => { - if (key !== "0") { - Object.keys(student[key]).forEach(subKey => { - flattened[`${key}_${subKey}`] = student[key][subKey]; - }); + if (exceptKeys.includes(key)) { + return; } + Object.keys(student[key]).forEach(subKey => { + if (exceptSubkeys.includes(subKey)) { + return; + } + flattened[`${key}_${subKey}`] = student[key][subKey]; + }); }); return flattened; }); @@ -150,15 +165,15 @@ console.log('채점 결과가 ' + outputExcelFile + ' 파일에 저장되었습 * 자막 태그의 인덱스를 구할 때 사용 * 1. CRTrackClip 요소의 순서에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 * 2. CRTrackClip 요소의 시작시간에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 - * @returns subtitle index + * @returns video index * */ -function getTrackClipNode(xmlDoc, type, subtitleStartTime, openingStartTime) { +function getTrackClipNode(xmlDoc, type, videoStartTime, openingStartTime) { let trackClipNode = null; // 동영상 자막이면 2, 오프닝 자막이면 1, 그 외는 0 - const subtitleOrder = type === 'subtitle' ? 2 : type === 'opening' ? 1 : 0; - const startTime = type === 'subtitle' ? subtitleStartTime : openingStartTime; + const subtitleOrder = type === 'video' ? 2 : type === 'opening' ? 1 : 0; + const startTime = type === 'video' ? videoStartTime : openingStartTime; // xpath 구문을 통해 CRTrackClip 요소의 ClipIndex를 찾음 const trackClipNode1 = xpath.select1(`//CRTrackList[@Name="텍스트"]/CRTrackClip[not(@ClipIndex='-1')][${subtitleOrder}]`, xmlDoc); @@ -192,15 +207,14 @@ function getGmepScore(gmepData, scoringJson, index) { const point = scoringData[key].point; const type = scoringData[key].type; const search = scoringData[key].search; - const subtitleStartTime = scoringData.subtitleStartTime; + const videoStartTime = scoringData.videoStartTime; const openingStartTime = scoringData.openingStartTime; // xpath 전처리 - const trackClipNode = getTrackClipNode(gmepXmlDoc, type, subtitleStartTime, - openingStartTime); + const trackClipNode = getTrackClipNode(gmepXmlDoc, type, videoStartTime, openingStartTime); const subtitleIndex = trackClipNode ? parseInt(trackClipNode.getAttribute('ClipIndex'), 10) + 1 : null; - const subtitleOrder = type === 'subtitle' ? 2 : type === 'opening' ? 1 : null; - const startTime = type === 'subtitle' ? subtitleStartTime + const subtitleOrder = type === 'video' ? 2 : type === 'opening' ? 1 : null; + const startTime = type === 'video' ? videoStartTime : type === 'opening' ? openingStartTime : null; [ele, ele2] = [ele, ele2].map(e => e?.replace(/{subtitleIndex}/g, subtitleIndex)); @@ -213,7 +227,7 @@ function getGmepScore(gmepData, scoringJson, index) { // search 값이 undefined 아니면 ele의 {search}부분을 search로 치환 /** * JSON파일 곰믹스 5번문항/22번 문항 - * type : "subtitle" 인 항목들 + * type : "video" 인 항목들 * GPString태그 VID7속성 찾는 xpath구문 * CRCUnitArr태그 Name속성 찾는 구문으로 변환 * > 멀티라인 텍스트 유사도 판별하기 어려움 @@ -314,7 +328,7 @@ function getGmepScore(gmepData, scoringJson, index) { totalScore += posNode.value === start && lengthNode.value === end ? point : 0; } - // else if (type == "subtitle") { + // else if (type == "video") { // const result = xpath.select(ele, gmepXmlDoc); // const length = scoringData[key].length; @@ -341,51 +355,6 @@ function getGmepScore(gmepData, scoringJson, index) { scoringResult[key] = result.length > 0 && rightAnswer === result[0].value ? point : 0; } - - // [3-9]문제 : 자막 '화면 정가운데 아래' - // 자막의 글자 갯수, 글자 크기, 폰트에 따라 위치가 유동적으로 바뀌어서 - // 예상되는 최소 좌표부터 최대 좌표를 미리 입력하고 (JSON파일 start/end 속성) - // 수험자가 입력한 자막의 좌표값이 범위 안에 들어가면 정답으로 채점 - else if (type == "range") { - const start = scoringData[key].start; - const end = scoringData[key].end; - - try { - let result = xpath.select(ele, gmepXmlDoc); - if (!result) { - result = xpath.select(ele2, gmepXmlDoc); - if (!result) { - scoringResult[key] = 0; - continue; - } - } - - // 수험자 답안 자막 좌표 (x,y) - const x = parseFloat(result[0]?.value); - const y = parseFloat(result[1]?.value); - // 최소 좌표 (x1, y1) - const x1 = parseFloat(start[0]); - const y1 = parseFloat(start[1]); - // 최대 좌표 (x2, y2) - const x2 = parseFloat(end[0]); - const y2 = parseFloat(end[1]); - - // (x1,y1) <= (x,y) <= (x2,y2) 이면 true - const isPointInRange = (x, y, x1, y1, x2, y2) => - (x >= x1 && x <= x2) && (y >= y1 && y <= y2); - - if (isPointInRange(x, y, x1, y1, x2, y2) === true) { - totalScore += point; - scoringResult[key] = point; - } - else - scoringResult[key] = 0; - } - catch (e) { - console.log('err :', e); - scoringResult[key] = 0; - } - } else if (type == "multi") { try { const result = xpath.select(ele, gmepXmlDoc); @@ -484,19 +453,28 @@ function getGmepScore(gmepData, scoringJson, index) { * 시작시간이 170이 아닌 경우 false값이 반환되고 0으로 인식되어 * //CROwneUnit[0]/CRCUnitArr/@Name 의 값이 반환됨 ****************************************************************/ - else if (type == "subtitle" || type == "opening") { + + // 문제의 타입이 video(동영상자막) 또는 opening(오프닝자막)일 경우 + else if (type == "video" || type == "opening") { const result = ele ? xpath.select(ele, gmepXmlDoc) : []; const result2 = ele2 ? xpath.select(ele2, gmepXmlDoc) : []; const result3 = ele3 ? xpath.select(ele3, gmepXmlDoc) : []; - const resultValues = Array.isArray(result) ? result.map(r => (typeof r === 'object' ? r.value : r)) : [result]; - const resultValues2 = Array.isArray(result2) ? result2.map(r => (typeof r === 'object' ? r.value : r)) : [result2]; - const resultValues3 = Array.isArray(result3) ? result3.map(r => (typeof r === 'object' ? r.value : r)) : [result3]; + // 결과값이 배열이 아닌 경우 배열로 변환 + // 예시) (2-9)는 xpath를 통해 클립(자막) 시작시간(number자료형)을 반환받으므로 배열로 변환하여 비교 + const resultValues = Array.isArray(result) ? + result.map(r => (typeof r === 'object' ? r.value : r)) : [result]; + const resultValues2 = Array.isArray(result2) ? + result2.map(r => (typeof r === 'object' ? r.value : r)) : [result2]; + const resultValues3 = Array.isArray(result3) ? + result3.map(r => (typeof r === 'object' ? r.value : r)) : [result3]; + // 결과값들을 하나의 배열로 합침 const allResults = [...[resultValues], ...[resultValues2], ...[resultValues3]]; console.log("🚀 ~ allResults:", allResults) - // rightAnswer가 배열일 경우 배열로 변환 + // 정답(rightAnswer)의 값이 단일값이 아닐 경우 값 비교를 위해 단일 배열로 변환 + // (2-11) 자막의 위치 좌표값 비교를 위해 [x, y] 값을 가져오므로 배열로 변환하여 비교 const rightAnswerArray = Array.isArray(rightAnswer) ? rightAnswer : [rightAnswer]; // 결과값이 범위값인 경우 소수점 3자리까지 비교 @@ -504,8 +482,12 @@ function getGmepScore(gmepData, scoringJson, index) { // result의 길이가 1이상인 조건은 result값이 [x, y] 좌표값인 경우를 말한다 if (Array.isArray(result) && result.length > 1) { return result.map(r => { - if (typeof r === 'string') { - return (Math.floor(parseFloat(r) * 1000) / 1000).toFixed(3); + // xml파일에 저장된 곰믹스 좌표값 소수점 3자리 아래 버리는 형식이므로 + // 동일하게 결과값 소수점 3자리 아래 버린 후 반환 + const parsedValue = parseFloat(r); + if (parsedValue >= 0 && parsedValue < 1) { + // 소수점 3자리 아래 버림 + return (Math.floor(parsedValue * 1000) / 1000).toFixed(3); } return r; }); @@ -543,7 +525,7 @@ function getGmepScore(gmepData, scoringJson, index) { scoringResult[key] = 0; } } - // else if (type == "subtitle" || type == "opening") { + // else if (type == "video" || type == "opening") { // const result = ele && xpath.select(ele, gmepXmlDoc); // const result2 = ele2 && xpath.select(ele2, gmepXmlDoc); // const result3 = ele3 && xpath.select(ele3, gmepXmlDoc); diff --git a/z.xbook b/z.xbook index b654d7d..8159dc9 100644 --- a/z.xbook +++ b/z.xbook @@ -1 +1 @@ -[{"kind":2,"language":"xpath","value":"//CROwneUnit[position() = //CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][2]/@ClipIndex + 1]/CRCUnitArr/@VID600 | //CROwneUnit[position() = //CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][2]/@ClipIndex + 1]/CRCUnitArr/@VID601"},{"kind":2,"language":"xpath","value":"//CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID600 | //CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID601"},{"kind":2,"language":"xpath","value":"position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 110]/@ClipIndex) + 1"},{"kind":2,"language":"xpath","value":"//CROwneUnit[//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][2]/@ClipIndex]"},{"kind":2,"language":"xpath","value":"//CROwneUnit[position() = //CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][1]/@ClipIndex + 1]/CRCUnitArr/@Name"},{"kind":2,"language":"xpath","value":"//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex='-1')][1]/@ClipIndex"}] \ No newline at end of file +[{"kind":2,"language":"xpath","value":"//CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID600 | //CROwneUnit[position() = (//CRTrackList[@Name='텍스트']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = 170]/@ClipIndex) + 1]/CRCUnitArr/@VID601"},{"kind":2,"language":"xpath","value":"//CRCUnitArr[@Name='금학산 정상에서']/@*[name()='VID600' or name()='VID601']"}] \ No newline at end of file diff --git a/회차별채점자료/2502/excel_채점기준표/DIC_2502B.xlsx b/회차별채점자료/2502/excel_채점기준표/DIC_2502B.xlsx index 2e0fcb6..ee9f941 100644 Binary files a/회차별채점자료/2502/excel_채점기준표/DIC_2502B.xlsx and b/회차별채점자료/2502/excel_채점기준표/DIC_2502B.xlsx differ diff --git a/회차별채점자료/2502/excel_채점기준표/DIC_2502C.xlsx b/회차별채점자료/2502/excel_채점기준표/DIC_2502C.xlsx index 174a1c7..17b8717 100644 Binary files a/회차별채점자료/2502/excel_채점기준표/DIC_2502C.xlsx and b/회차별채점자료/2502/excel_채점기준표/DIC_2502C.xlsx differ