곰픽 채점 기준 수정버전

This commit is contained in:
2025-06-30 17:04:10 +09:00
parent 9aa1425d81
commit db5176bc75
8 changed files with 2607 additions and 2652 deletions

BIN
00_DPI_2504B_TEST.xlsx Normal file

Binary file not shown.

View File

@@ -184,12 +184,7 @@
"1": { "1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder", "type": "mediaOrder",
"value": [ "value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"],
"동영상.mp4",
"이미지3.jpg",
"이미지1.jpg",
"이미지2.jpg"
],
"point": 4, "point": 4,
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." "desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
}, },
@@ -258,10 +253,7 @@
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "화단의 꽃들", "search": "화단의 꽃들",
"type": "video.Location", "type": "video.Location",
"value": [ "value": ["0.38333333", "0.92962962"],
"0.38333333",
"0.92962962"
],
"point": 2, "point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
}, },
@@ -303,7 +295,8 @@
"ID": "67", "ID": "67",
"VID102": "40" "VID102": "40"
}, },
"point": 2 "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
}, },
"15": { "15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
@@ -321,7 +314,7 @@
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지1.jpg", "media": "이미지1.jpg",
"value": "150", "value": "180",
"point": 2 "point": 2
}, },
"17": { "17": {
@@ -329,18 +322,19 @@
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지1.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "184", "ID": "103",
"VID102": "30" "VID102": "7"
}, },
"point": 2 "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
}, },
"18": { "18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition", "type": "clipTransition",
"media": "이미지1.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "19", "ID": "12",
"Range": "650:680", "Range": "670:730",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -350,7 +344,7 @@
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": "180", "value": "150",
"point": 2 "point": 2
}, },
"20": { "20": {
@@ -358,18 +352,19 @@
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "67", "ID": "102",
"VID102": "30" "VID101": "3"
}, },
"point": 2 "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
}, },
"21": { "21": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition", "type": "clipTransition",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "10", "ID": "0",
"Range": "800:860", "Range": "850:880",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -400,7 +395,7 @@
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "fd5721", "value": "ec008c",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
@@ -409,7 +404,7 @@
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "video.Text.Outline", "type": "video.Text.Outline",
"value": { "value": {
"width": "30", "width": "40",
"color": "fff9c4" "color": "fff9c4"
}, },
"point": 2, "point": 2,
@@ -420,14 +415,14 @@
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "opening.Text.FadeInEffect", "type": "opening.Text.FadeInEffect",
"value": { "value": {
"ID": "4", "ID": "14",
"PlayTime": "2" "PlayTime": "2"
}, },
"point": 3, "point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
}, },
"28": { "28": {
"ele": "{search}", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "opening.StartTime", "type": "opening.StartTime",
"value": 0, "value": 0,
@@ -435,7 +430,7 @@
"desc": "오프닝자막의 시작시간 value 속성만 수정" "desc": "오프닝자막의 시작시간 value 속성만 수정"
}, },
"29": { "29": {
"ele": "{search}", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "opening.Length", "type": "opening.Length",
"value": 120, "value": 120,
@@ -452,7 +447,7 @@
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime", "type": "audio.EndTime",
"media": "음악.mp3", "media": "음악.mp3",
"value": 810, "value": "870",
"point": 2 "point": 2
}, },
"32": { "32": {
@@ -461,7 +456,7 @@
"media": "음악.mp3", "media": "음악.mp3",
"value": { "value": {
"ID": "1", "ID": "1",
"PlayTime": "90" "PlayTime": "60"
}, },
"point": 2, "point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃: 1" "desc": "ID속성-페이드인:0 / 페이드아웃: 1"
@@ -476,10 +471,7 @@
"1": { "1": {
"type": "canvas.Size", "type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value", "ele": "//Document/Width/@value | //Document/Height/@value",
"value": [ "value": ["650", "350"],
"650",
"350"
],
"point": 5, "point": 5,
"desc": "캔버스 사이즈 650*350" "desc": "캔버스 사이즈 650*350"
}, },
@@ -490,7 +482,7 @@
"desc": "자유 변형 문항은 채점 불가" "desc": "자유 변형 문항은 채점 불가"
}, },
"3": { "3": {
"type": "layer.Exists", "type": "layer.exists",
"ele": "//Layer/Name/@value", "ele": "//Layer/Name/@value",
"value": "Flower", "value": "Flower",
"point": 5, "point": 5,
@@ -501,14 +493,21 @@
"ele": "//Layer[Name[@value='{search}']]/Effects/Item", "ele": "//Layer[Name[@value='{search}']]/Effects/Item",
"search": "Flower", "search": "Flower",
"value": { "value": {
"name": "세피아", "name": "생동감",
"option": { "option": {
"U": "75", "생동감": "40"
"V": "150"
} }
}, },
"point": 5, "point": 5,
"desc": "Flower 레이어의 효과 체크" "desc": {
"흑백": "강도",
"밝기/대비": ["밝기", "대비"],
"노출": "노출",
"색조/채도": ["색조", "채도", "명도"],
"감마":["리프트","감마","게인"],
"세피아":["U","V"],
"생동감": "생동감"
}
}, },
"5": { "5": {
"type": "none", "type": "none",
@@ -573,10 +572,7 @@
"1": { "1": {
"type": "canvas.Size", "type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value", "ele": "//Document/Width/@value | //Document/Height/@value",
"value": [ "value": ["650", "450"],
"650",
"450"
],
"point": 5, "point": 5,
"desc": "캔버스 사이즈 650*450" "desc": "캔버스 사이즈 650*450"
}, },
@@ -627,7 +623,7 @@
"point": 6 "point": 6
}, },
"8": { "8": {
"type": "exists", "type": "text.exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value", "ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
"value": "흰 꽃 사이 노란 꽃", "value": "흰 꽃 사이 노란 꽃",
"point": 5 "point": 5
@@ -714,13 +710,6 @@
"20": { "20": {
"type": "shadow", "type": "shadow",
"ele": "//Layer//Shape[shape_type/@value='{option}']", "ele": "//Layer//Shape[shape_type/@value='{option}']",
"ele2": {
"shadow": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]",
"width": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]/shadow_width/@value",
"distance": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]/shadow_distance/@value",
"blur": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]/shadow_blur/@value",
"angle": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]/shadow_angle/@value"
},
"option": "RECTANGLE", "option": "RECTANGLE",
"value": { "value": {
"shadow": true, "shadow": true,

View File

@@ -115,10 +115,10 @@
"value": "GulimChe", "value": "GulimChe",
"point": 2, "point": 2,
"desc": { "desc": {
"돋움체":"DotumChe", "돋움체": "DotumChe",
"궁서체":"GungsuhChe", "궁서체": "GungsuhChe",
"굴림체":"GulimChe", "굴림체": "GulimChe",
"옛":"YetR" "옛": "YetR"
} }
}, },
"16": { "16": {
@@ -187,12 +187,7 @@
"1": { "1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder", "type": "mediaOrder",
"value": [ "value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"],
"동영상.mp4",
"이미지3.jpg",
"이미지1.jpg",
"이미지2.jpg"
],
"point": 4, "point": 4,
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." "desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
}, },
@@ -266,10 +261,7 @@
"ele2": "//CRCUnitArr[@Name='{search}']/@*[name()='VID600' or name()='VID601']", "ele2": "//CRCUnitArr[@Name='{search}']/@*[name()='VID600' or name()='VID601']",
"type": "video", "type": "video",
"search": "모래 촉감 놀이", "search": "모래 촉감 놀이",
"value": [ "value": [0.35312501, 0.92962962],
0.35312501,
0.92962962
],
"point": 2 "point": 2
}, },
"10": { "10": {
@@ -305,21 +297,14 @@
"type": "multi", "type": "multi",
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID101']", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID101']",
"image": "이미지3.jpg", "image": "이미지3.jpg",
"value": [ "value": ["184", "5"],
"184",
"5"
],
"point": 2 "point": 2
}, },
"15": { "15": {
"type": "multi", "type": "multi",
"ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)][@Type='2']/@*[name()='ID' or name()='Range' or name()='Type']", "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)][@Type='2']/@*[name()='ID' or name()='Range' or name()='Type']",
"image": "이미지3.jpg", "image": "이미지3.jpg",
"value": [ "value": ["21", "480:540", "2"],
"21",
"480:540",
"2"
],
"point": 2, "point": 2,
"desc": "오버랩일 경우 XPATH구문에서 Type속성값 16으로 변경, 그리고 ClipIndex값은 트랜지션이 끝나는 지점 이미지의 ClipIndex값을 가지게 되어 다음 순서의 이미지로 변경해주어야한다." "desc": "오버랩일 경우 XPATH구문에서 Type속성값 16으로 변경, 그리고 ClipIndex값은 트랜지션이 끝나는 지점 이미지의 ClipIndex값을 가지게 되어 다음 순서의 이미지로 변경해주어야한다."
}, },
@@ -335,21 +320,14 @@
"type": "multi", "type": "multi",
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID100']", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID100']",
"image": "이미지1.jpg", "image": "이미지1.jpg",
"value": [ "value": ["102", "6"],
"102",
"6"
],
"point": 2 "point": 2
}, },
"18": { "18": {
"type": "multi", "type": "multi",
"ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)][@Type='2']/@*[name()='ID' or name()='Range' or name()='Type']", "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)][@Type='2']/@*[name()='ID' or name()='Range' or name()='Type']",
"image": "이미지1.jpg", "image": "이미지1.jpg",
"value": [ "value": ["9", "690:720", "2"],
"9",
"690:720",
"2"
],
"point": 2, "point": 2,
"desc": "오버랩일 경우 XPATH구문에서 Type속성값 16으로 변경, 그리고 ClipIndex값은 트랜지션이 끝나는 지점 이미지의 ClipIndex값을 가지게 되어 다음 순서의 이미지로 변경해주어야한다." "desc": "오버랩일 경우 XPATH구문에서 Type속성값 16으로 변경, 그리고 ClipIndex값은 트랜지션이 끝나는 지점 이미지의 ClipIndex값을 가지게 되어 다음 순서의 이미지로 변경해주어야한다."
}, },
@@ -365,21 +343,14 @@
"type": "multi", "type": "multi",
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID103']", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]//CRFilter/@*[name()='ID' or name()='VID103']",
"image": "이미지2.jpg", "image": "이미지2.jpg",
"value": [ "value": ["67", "7"],
"67",
"7"
],
"point": 2 "point": 2
}, },
"21": { "21": {
"type": "multi", "type": "multi",
"ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)][@Type='2']/@*[name()='ID' or name()='Range' or name()='Type']", "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='{image}']/preceding-sibling::CRClip | //CRClip[@Type='11']/CRCUnitArr[@Path='{image}']/../preceding-sibling::CRClip)][1]/preceding-sibling::CRTrackClip)][@Type='2']/@*[name()='ID' or name()='Range' or name()='Type']",
"image": "이미지2.jpg", "image": "이미지2.jpg",
"value": [ "value": ["94", "840:870", "2"],
"94",
"840:870",
"2"
],
"point": 2, "point": 2,
"desc": "오버랩일 경우 XPATH구문에서 Type속성값 16으로 변경, 그리고 ClipIndex값은 트랜지션이 끝나는 지점 이미지의 ClipIndex값을 가지게 되어 다음 순서의 이미지로 변경해주어야한다." "desc": "오버랩일 경우 XPATH구문에서 Type속성값 16으로 변경, 그리고 ClipIndex값은 트랜지션이 끝나는 지점 이미지의 ClipIndex값을 가지게 되어 다음 순서의 이미지로 변경해주어야한다."
}, },
@@ -420,10 +391,7 @@
"ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']", "ele2": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2']/@*[name()='VID100' or name()='VID101']",
"search": "자연 놀이터 (Nature Playground)", "search": "자연 놀이터 (Nature Playground)",
"type": "opening", "type": "opening",
"value": [ "value": ["0.30000001", "-13107457"],
"0.30000001",
"-13107457"
],
"point": 2 "point": 2
}, },
"27": { "27": {
@@ -431,10 +399,7 @@
"ele2": "//CRCUnitArr[@Name='{search}']/@*[name()='VID505' or name()='VID507']", "ele2": "//CRCUnitArr[@Name='{search}']/@*[name()='VID505' or name()='VID507']",
"search": "자연 놀이터 (Nature Playground)", "search": "자연 놀이터 (Nature Playground)",
"type": "opening", "type": "opening",
"value": [ "value": ["14", "2"],
"14",
"2"
],
"point": 3 "point": 3
}, },
"28": { "28": {
@@ -475,10 +440,7 @@
"1": { "1": {
"type": "multi", "type": "multi",
"ele": "//Document/Width/@value | //Document/Height/@value", "ele": "//Document/Width/@value | //Document/Height/@value",
"value": [ "value": ["650", "350"],
"650",
"350"
],
"point": 5, "point": 5,
"desc": "캔버스 사이즈 650*350" "desc": "캔버스 사이즈 650*350"
}, },
@@ -499,10 +461,7 @@
"ele": "//Layer[Name[@value='{layer}']]/Effects/Item[EffectData/{option}]/Name/@value | //Layer[Name[@value='{layer}']]/Effects/Item/EffectData/{option}/@value", "ele": "//Layer[Name[@value='{layer}']]/Effects/Item[EffectData/{option}]/Name/@value | //Layer[Name[@value='{layer}']]/Effects/Item/EffectData/{option}/@value",
"layer": "Flower", "layer": "Flower",
"option": "VibranceValue", "option": "VibranceValue",
"value": [ "value": ["39", "생동감"],
"39",
"생동감"
],
"point": 5, "point": 5,
"desc": "Flower 레이어의 효과 체크" "desc": "Flower 레이어의 효과 체크"
}, },
@@ -545,10 +504,7 @@
"10": { "10": {
"type": "multiValue", "type": "multiValue",
"ele": "//Layer/BlendOp/@value | //Layer/Opacity/@value", "ele": "//Layer/BlendOp/@value | //Layer/Opacity/@value",
"value": [ "value": ["반사", "80"],
"반사",
"80"
],
"point": 6, "point": 6,
"desc": "혼합모드(색 회피율, 불투명도 : 80)" "desc": "혼합모드(색 회피율, 불투명도 : 80)"
}, },
@@ -567,10 +523,7 @@
"1": { "1": {
"type": "multi", "type": "multi",
"ele": "//Document/Width/@value | //Document/Height/@value", "ele": "//Document/Width/@value | //Document/Height/@value",
"value": [ "value": ["650", "450"],
"650",
"450"
],
"point": 5, "point": 5,
"desc": "캔버스 사이즈 650*450" "desc": "캔버스 사이즈 650*450"
}, },

View File

@@ -1,729 +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": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"9": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"1": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "$.children[?(@.name=='한옥')].name",
"value": "한옥",
"point": 4
},
"5": {
"ele": "none",
"point": 0
},
"6": {
"ele": "$.children[?(@.name=='Traditional Park')].name",
"value": "Traditional Park",
"point": 4
},
"7": {
"ele": "$.children[?(@.name=='Traditional Park')].text.font.names[0]",
"type": "font",
"value": "Arial",
"point": 2
},
"8": {
"ele": "$.children[?(@.name=='Traditional Park')].text.font.names[0]",
"value": "Arial-BoldItalicMT",
"point": 2
},
"9": {
"ele": "$.children[?(@.name=='Traditional Park')].text.font.sizes[0]",
"value": 48,
"point": 2
},
"10": {
"ele": "$.children[?(@.name=='Traditional Park')].text.font.colors[0]",
"type": "color",
"value": "017e86",
"point": 2
},
"11": {
"ele": "none",
"point": 0
},
"12": {
"ele": "none",
"point": 0
},
"13": {
"ele": "none",
"point": 0
},
"14": {
"ele": "$.children[?(@.name=='전통 문화 공원')].name",
"value": "전통 문화 공원",
"point": 4
},
"15": {
"ele": "$.children[?(@.name=='전통 문화 공원')].text.font.names[0]",
"type": "font",
"value": "GungsuhChe",
"point": 2,
"desc": {
"돋움체": "DotumChe",
"궁서체": "GungsuhChe",
"굴림체": "GulimChe",
"휴먼옛체": "YetR"
}
},
"16": {
"ele": "$.children[?(@.name=='전통 문화 공원')].text.font.sizes[0]",
"value": 36,
"point": 2
},
"17": {
"ele": "$.children[?(@.name=='전통 문화 공원')].text.font.colors[0]",
"type": "color",
"value": "ffeeca",
"point": 2
},
"18": {
"ele": "none",
"point": 0
},
"19": {
"ele": "none",
"point": 0
},
"20": {
"ele": "none",
"point": 0
},
"21": {
"ele": "none",
"point": 0
},
"22": {
"ele": "$.children[?(@.name=='맷돌')].name",
"value": "맷돌",
"point": 4
},
"23": {
"ele": "none",
"point": 0
},
"24": {
"ele": "none",
"point": 0
},
"25": {
"ele": "none",
"point": 0
},
"26": {
"ele": "$[?(@.width == 65 && @.height == 35)]",
"type": "size",
"value": {
"width": 65,
"height": 35
},
"point": 5
},
"27": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"2": {
"1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder",
"value": [
"동영상.mp4",
"이미지2.jpg",
"이미지3.jpg",
"이미지1.jpg"
],
"point": 4,
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
},
"2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer",
"value": {
"speed": "120"
},
"point": 2,
"desc": "100당 1배속 / 130 = 1.3배속"
},
"3": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "startEnd",
"media": "동영상.mp4",
"value": {
"start": "0",
"end": "380"
},
"point": 2,
"desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다."
},
"4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect",
"media": "동영상.mp4",
"value": {
"ID": "70",
"VID100": "30",
"VID101": "20"
},
"point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
},
"5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "청량하고 시원한 폭포",
"type": "video.Text",
"value": "청량하고 시원한 폭포",
"point": 3
},
"6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "청량하고 시원한 폭포",
"type": "video.Text",
"value": "돋움체",
"point": 2
},
"7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "청량하고 시원한 폭포",
"type": "video.Text",
"value": "120",
"point": 2
},
"8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "청량하고 시원한 폭포",
"type": "video.Text.Color",
"value": "1db0f1",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "청량하고 시원한 폭포",
"type": "video.Location",
"value": [
"0.27395833",
"0.9222222"
],
"point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
},
"10": {
"ele": "",
"search": "청량하고 시원한 폭포",
"type": "video.StartTime",
"value": 170,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"11": {
"ele": "",
"search": "청량하고 시원한 폭포",
"type": "video.Length",
"value": 150,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"12": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute",
"type": "Mute",
"media": "동영상.mp4",
"value": "1",
"point": 2
},
"13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지2.jpg",
"value": "150",
"point": 2
},
"14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지2.jpg",
"value": {
"ID": "103",
"VID102": "7"
},
"point": 2
},
"15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지2.jpg",
"value": {
"ID": "11",
"Range": "500:530",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지3.jpg",
"value": "150",
"point": 2
},
"17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지3.jpg",
"value": {
"ID": "184",
"VID102": "30"
},
"point": 2
},
"18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지3.jpg",
"value": {
"ID": "19",
"Range": "650:680",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"19": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지1.jpg",
"value": "180",
"point": 2
},
"20": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지1.jpg",
"value": {
"ID": "67",
"VID102": "30"
},
"point": 2
},
"21": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지1.jpg",
"value": {
"ID": "10",
"Range": "800:860",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "전통 공원 (Traditional Park)",
"type": "video.Text",
"value": "전통 공원 (Traditional Park)",
"point": 3
},
"23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "전통 공원 (Traditional Park)",
"type": "video.Text",
"value": "궁서체",
"point": 2
},
"24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "전통 공원 (Traditional Park)",
"type": "video.Text",
"value": "140",
"point": 2
},
"25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "전통 공원 (Traditional Park)",
"type": "video.Text.Color",
"value": "fd5721",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "전통 공원 (Traditional Park)",
"type": "video.Text.Outline",
"value": {
"width": "30",
"color": "fff9c4"
},
"point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
},
"27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "전통 공원 (Traditional Park)",
"type": "opening.Text.FadeInEffect",
"value": {
"ID": "4",
"PlayTime": "2"
},
"point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
},
"28": {
"ele": "",
"search": "전통 공원 (Traditional Park)",
"type": "opening.StartTime",
"value": 0,
"point": 2,
"desc": "오프닝자막의 시작시간 value 속성만 수정"
},
"29": {
"ele": "",
"search": "전통 공원 (Traditional Park)",
"type": "opening.Length",
"value": 120,
"point": 2
},
"30": {
"ele": "",
"type": "audio.StartTime",
"media": "음악.mp3",
"value": 0,
"point": 2
},
"31": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime",
"media": "음악.mp3",
"value": 810,
"point": 2
},
"32": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "audio.Effect",
"media": "음악.mp3",
"value": {
"ID": "1",
"PlayTime": "90"
},
"point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃:1"
},
"33": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"4": {
"1": {
"type": "multi",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": [
"650",
"350"
],
"point": 5,
"desc": "캔버스 사이즈 650*350"
},
"2": {
"ele": "none",
"point": 5,
"desc": "자유 변형 문항은 채점 불가"
},
"3": {
"type": "isExist",
"ele": "//Layer/Name/@value",
"value": "Flower",
"point": 5,
"desc": "Flower 레이어가 있는지 여부 체크"
},
"4": {
"type": "multiValue",
"ele": "//Layer[Name[@value='{layer}']]/Effects/Item[EffectData/{option}]/Name/@value | //Layer[Name[@value='{layer}']]/Effects/Item/EffectData/{option}/@value",
"layer": "Flower",
"option": "VibranceValue",
"value": [
"39",
"생동감"
],
"point": 5,
"desc": "Flower 레이어의 효과 체크"
},
"5": {
"ele": "none",
"point": 6,
"desc": "올가미 도구/이미지 문항은 채점 불가"
},
"6": {
"type": "exists",
"ele": "//Layer/Effects/Item/Name/@value",
"value": "세피아",
"point": 6,
"desc": "세피아 효과가 있는지 여부 체크"
},
"7": {
"type": "exact",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "ELLIPSE",
"point": 3,
"desc": "레이어 쉐이프 타입이 타원인지 체크"
},
"8": {
"type": "size",
"ele": "//Layer//op_points",
"value": {
"width": 120,
"height": 120
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"9": {
"type": "color",
"ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "7097bb",
"point": 6,
"desc": "색상 코드 비교 시 소문자로 입력할 것"
},
"10": {
"type": "multiValue",
"ele": "//Layer/BlendOp/@value | //Layer/Opacity/@value",
"value": [
"반사",
"80"
],
"point": 6,
"desc": "혼합모드(색 회피율, 불투명도 : 80)"
},
"11": {
"ele": "none",
"point": 0,
"desc": "기본설정"
},
"12": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"5": {
"1": {
"type": "multi",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": [
"650",
"450"
],
"point": 5,
"desc": "캔버스 사이즈 650*450"
},
"2": {
"ele": "none",
"point": 5,
"desc": "배경색 문항은 채점 불가"
},
"3": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Layering",
"point": 6
},
"4": {
"ele": "none",
"point": 6,
"desc": "가로방향 흐릿하게 문항은 채점 불가"
},
"5": {
"type": "exists",
"ele": "//Layer//shape_type/@value",
"value": "ROUNDED_RECTANGLE",
"point": 3
},
"6": {
"type": "size",
"ele": "//Layer//op_points",
"value": {
"width": 400,
"height": 60
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"7": {
"type": "gradient",
"ele": "//Layer/Shapes/Shape",
"startColor": "gradient_start_color/@value",
"endColor": "gradient_end_color/@value",
"value": {
"startColor": "ffe000",
"endColor": "34a159"
},
"point": 6
},
"8": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
"value": "흰 꽃 사이 노란 꽃",
"point": 5
},
"9": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value",
"value": "맑은 고딕",
"point": 3
},
"10": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value",
"style": "Italic",
"value": "True",
"point": 3
},
"11": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value",
"value": "30",
"point": 3
},
"12": {
"type": "color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "b46ef8",
"point": 3,
"desc": "색상 코드 비교 시 소문자로 입력할 것"
},
"13": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value",
"value": "7",
"point": 3
},
"14": {
"type": "color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value",
"value": "ffffff",
"point": 3,
"desc": "색상 코드 비교 시 소문자로 입력할 것"
},
"15": {
"ele": "//Layer[MaskOpType/@value='Clipping'][last()]",
"point": 6,
"desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
},
"16": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "RECTANGLE",
"point": 3
},
"17": {
"type": "size",
"ele": "//Layer//op_points",
"value": {
"width": 150,
"height": 150
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"18": {
"type": "exists",
"ele": "//Layer//outline_peninfo/Width/@value",
"value": "7",
"point": 3
},
"19": {
"type": "color",
"ele": "//Layer//Shape[contains(draw_type/@value, 'Outline')]/primary_color/@value",
"value": "e8e88e",
"point": 3,
"desc": "색상 코드 비교 시 소문자로 입력할 것(채우기:secondary_color, 외곽선:primary_color)"
},
"20": {
"type": "shadow",
"ele": {
"shadow": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]",
"width": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]/shadow_width/@value",
"distance": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]/shadow_distance/@value",
"blur": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]/shadow_blur/@value",
"angle": "//Layer//Shape[contains(draw_type/@value, 'Shadow')]/shadow_angle/@value"
},
"value": {
"width": "3",
"distance": "5",
"blur": "1",
"angle": "320"
},
"point": 5,
"desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
},
"21": {
"ele": "none",
"point": 0,
"desc": "기본설정"
},
"22": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
}
}

View File

@@ -501,7 +501,7 @@
"layer": "Flower", "layer": "Flower",
"option": "VibranceValue", "option": "VibranceValue",
"value": [ "value": [
"39", "40",
"생동감" "생동감"
], ],
"point": 5, "point": 5,

View File

@@ -0,0 +1,737 @@
{
"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": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"9": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"1": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "$.children[?(@.name=='꽃잎들')].name",
"value": "꽃잎들",
"point": 4
},
"5": {
"ele": "none",
"point": 0
},
"6": {
"ele": "$.children[?(@.name=='Flower Rock')].name",
"value": "Flower Rock",
"point": 4
},
"7": {
"ele": "$.children[?(@.name=='Flower Rock')].text.font.names[0]",
"type": "font",
"value": "Arial",
"point": 2
},
"8": {
"ele": "$.children[?(@.name=='Flower Rock')].text.font.names[0]",
"value": "Arial-BoldItalicMT",
"point": 2
},
"9": {
"ele": "$.children[?(@.name=='Flower Rock')].text.font.sizes[0]",
"value": 48,
"point": 2
},
"10": {
"ele": "$.children[?(@.name=='Flower Rock')].text.font.colors[0]",
"type": "color",
"value": "d6f592",
"point": 2
},
"11": {
"ele": "none",
"point": 0
},
"12": {
"ele": "none",
"point": 0
},
"13": {
"ele": "none",
"point": 0
},
"14": {
"ele": "$.children[?(@.name=='꽃과 바위')].name",
"value": "꽃과 바위",
"point": 4
},
"15": {
"ele": "$.children[?(@.name=='꽃과 바위')].text.font.names[0]",
"type": "font",
"value": "GungsuhChe",
"point": 2,
"desc": {
"돋움체": "DotumChe",
"궁서체": "GungsuhChe",
"굴림체": "GulimChe",
"휴먼옛체": "YetR"
}
},
"16": {
"ele": "$.children[?(@.name=='꽃과 바위')].text.font.sizes[0]",
"value": 36,
"point": 2
},
"17": {
"ele": "$.children[?(@.name=='꽃과 바위')].text.font.colors[0]",
"type": "color",
"value": "0d17d5",
"point": 2
},
"18": {
"ele": "none",
"point": 0
},
"19": {
"ele": "none",
"point": 0
},
"20": {
"ele": "none",
"point": 0
},
"21": {
"ele": "none",
"point": 0
},
"22": {
"ele": "$.children[?(@.name=='노랑꽃')].name",
"value": "노랑꽃",
"point": 4
},
"23": {
"ele": "none",
"point": 0
},
"24": {
"ele": "none",
"point": 0
},
"25": {
"ele": "none",
"point": 0
},
"26": {
"ele": "$[?(@.width == 65 && @.height == 35)]",
"type": "size",
"value": {
"width": 65,
"height": 35
},
"point": 5
},
"27": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"2": {
"1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder",
"value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"],
"point": 4,
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
},
"2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer",
"value": {
"speed": "140"
},
"point": 2,
"desc": "100당 1배속 / 130 = 1.3배속"
},
"3": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "startEnd",
"media": "동영상.mp4",
"value": {
"start": "0",
"end": "370"
},
"point": 2,
"desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다."
},
"4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect",
"media": "동영상.mp4",
"value": {
"ID": "44",
"VID100": "8",
"VID103": "0.89999998"
},
"point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
},
"5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "화단의 꽃들",
"type": "video.Text",
"value": "화단의 꽃들",
"point": 3
},
"6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "화단의 꽃들",
"type": "video.Text",
"value": "돋움체",
"point": 2
},
"7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "화단의 꽃들",
"type": "video.Text",
"value": "110",
"point": 2
},
"8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "화단의 꽃들",
"type": "video.Text.Color",
"value": "ff531b",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "화단의 꽃들",
"type": "video.Location",
"value": ["0.38333333", "0.92962962"],
"point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
},
"10": {
"ele": "",
"search": "화단의 꽃들",
"type": "video.StartTime",
"value": 170,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"11": {
"ele": "",
"search": "화단의 꽃들",
"type": "video.Length",
"value": 150,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"12": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute",
"type": "Mute",
"media": "동영상.mp4",
"value": "1",
"point": 2
},
"13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지3.jpg",
"value": "180",
"point": 2
},
"14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지3.jpg",
"value": {
"ID": "67",
"VID102": "40"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지3.jpg",
"value": {
"ID": "10",
"Range": "490:550",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지1.jpg",
"value": "180",
"point": 2
},
"17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지1.jpg",
"value": {
"ID": "103",
"VID102": "7"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지1.jpg",
"value": {
"ID": "12",
"Range": "670:730",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"19": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지2.jpg",
"value": "150",
"point": 2
},
"20": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지2.jpg",
"value": {
"ID": "102",
"VID101": "3"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"21": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지2.jpg",
"value": {
"ID": "0",
"Range": "850:880",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "video.Text",
"value": "아름다운 꽃 축제 (Happy Flower Festival)",
"point": 3
},
"23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "video.Text",
"value": "궁서체",
"point": 2
},
"24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "video.Text",
"value": "140",
"point": 2
},
"25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "video.Text.Color",
"value": "ec008c",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "video.Text.Outline",
"value": {
"width": "40",
"color": "fff9c4"
},
"point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
},
"27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "opening.Text.FadeInEffect",
"value": {
"ID": "14",
"PlayTime": "2"
},
"point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
},
"28": {
"ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "opening.StartTime",
"value": 0,
"point": 2,
"desc": "오프닝자막의 시작시간 value 속성만 수정"
},
"29": {
"ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)",
"type": "opening.Length",
"value": 120,
"point": 2
},
"30": {
"ele": "",
"type": "audio.StartTime",
"media": "음악.mp3",
"value": 0,
"point": 2
},
"31": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime",
"media": "음악.mp3",
"value": "870",
"point": 2
},
"32": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "audio.Effect",
"media": "음악.mp3",
"value": {
"ID": "1",
"PlayTime": "60"
},
"point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃: 1"
},
"33": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"4": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "350"],
"point": 5,
"desc": "캔버스 사이즈 650*350"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "자유 변형 문항은 채점 불가"
},
"3": {
"type": "layer.exists",
"ele": "//Layer/Name/@value",
"value": "Flower",
"point": 5,
"desc": "Flower 레이어가 있는지 여부 체크"
},
"4": {
"type": "layer.Effects",
"ele": "//Layer[Name[@value='{search}']]/Effects/Item",
"search": "Flower",
"value": {
"name": "생동감",
"option": {
"생동감": "40"
}
},
"point": 5,
"desc": {
"흑백": "강도",
"밝기/대비": ["밝기", "대비"],
"노출": "노출",
"색조/채도": ["색조", "채도", "명도"],
"감마":["리프트","감마","게인"],
"세피아":["U","V"],
"생동감": "생동감"
}
},
"5": {
"type": "none",
"ele": "",
"point": 6,
"desc": "올가미 도구/이미지 문항은 채점 불가"
},
"6": {
"type": "exists",
"ele": "//Layer/Effects/Item/Name/@value",
"value": "세피아",
"point": 6,
"desc": "세피아 효과가 있는지 여부 체크"
},
"7": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "ELLIPSE",
"point": 3,
"desc": "레이어 쉐이프 타입이 타원인지 체크"
},
"8": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 120,
"height": 120
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"9": {
"type": "shape.color",
"ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "7097BB",
"point": 6,
"desc": ""
},
"10": {
"type": "layer.blend.opacity",
"ele": "//Layer",
"value": {
"BlendOp": "반사",
"Opacity": "80"
},
"point": 6
},
"11": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"12": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
},
"5": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "450"],
"point": 5,
"desc": "캔버스 사이즈 650*450"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "배경색 문항은 채점 불가"
},
"3": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Layering",
"point": 6,
"desc": "레이어 마스크 설정 확인"
},
"4": {
"type": "none",
"ele": "",
"point": 6,
"desc": "가로방향 흐릿하게 문항은 채점 불가"
},
"5": {
"type": "exists",
"ele": "//Layer//shape_type/@value",
"value": "ROUNDED_RECTANGLE",
"point": 3
},
"6": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 400,
"height": 60
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"7": {
"type": "gradient.color",
"ele": "//Layer/Shapes/Shape",
"startColor": "gradient_start_color/@value",
"endColor": "gradient_end_color/@value",
"value": {
"startColor": "ffe000",
"endColor": "34A159"
},
"point": 6
},
"8": {
"type": "text.exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
"value": "흰 꽃 사이 노란 꽃",
"point": 5
},
"9": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value",
"value": "맑은 고딕",
"point": 3
},
"10": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value",
"style": "Italic",
"value": "True",
"point": 3
},
"11": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value",
"value": "30",
"point": 3
},
"12": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "b46Ef8",
"point": 3
},
"13": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value",
"value": "7",
"point": 3
},
"14": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value",
"value": "ffffff",
"point": 3
},
"15": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Clipping",
"point": 6,
"desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
},
"16": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "RECTANGLE",
"point": 3,
"desc": {
"사각형": "RECTANGLE"
}
},
"17": {
"type": "clipping.size",
"ele": "//Layer//Shape[shape_type/@value='{option}']//op_points",
"option": "RECTANGLE",
"value": {
"width": 150,
"height": 150
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"18": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value",
"option": "RECTANGLE",
"value": "7",
"point": 3
},
"19": {
"type": "clipping.color",
"ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value",
"option": "RECTANGLE",
"value": "e8e88e",
"point": 3,
"desc": "채우기:secondary_color, 외곽선:primary_color"
},
"20": {
"type": "shadow",
"ele": "//Layer//Shape[shape_type/@value='{option}']",
"option": "RECTANGLE",
"value": {
"shadow": true,
"width": "3",
"distance": "5",
"blur": "1",
"angle": "320"
},
"point": 5,
"desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
},
"21": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"22": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
}
}

View File

@@ -192,38 +192,26 @@ function getGpdpScore(gpdpData, scoringJson, index) {
} }
// [] // []
else if (type === "layer.Exists") { // else if (type === "layer.exists") {
const layerNameList = xpath.select(ele, gpdpXmlDoc); // const layerNameList = xpath.select(ele, gpdpXmlDoc);
const layerNames = layerNameList.map(layer => layer.value); // const layerNames = layerNameList.map(layer => layer.value);
let isMatched = false // let isMatched = false
// for (const layerName of layerNames) { // let result = findSimilarString(gpdpXmlDoc, rightAnswer, 0.8);
// if (layerName.trim().toLowerCase() === rightAnswer.trim().toLowerCase()) { // if (result !== null) {
// userAnswer = layerName; // userAnswer = result;
// isMatched = true; // isMatched = true;
// break;
// }
// } // }
// if (isMatched) { // if (isMatched) {
// totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult, {
// type: 'force-correct'
// });
// }
// else {
// totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult); // totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
// } // }
// }
let result = findSimilarString(gpdpXmlDoc, rightAnswer, 0.8);
if (result !== null) {
userAnswer = result;
isMatched = true;
}
if (isMatched) {
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult, {
type: 'force-correct'
});
}
else {
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
}
}
// [1-4] 사진1 > 조정 // [1-4] 사진1 > 조정
else if (type === "layer.Effects") { else if (type === "layer.Effects") {
@@ -328,25 +316,42 @@ function getGpdpScore(gpdpData, scoringJson, index) {
} }
// //
else if (type === "exists") { // else if (type === "exists") {
else if (type.includes("exists")) {
const existsValues = xpath.select(ele, gpdpXmlDoc); const existsValues = xpath.select(ele, gpdpXmlDoc);
let isMatched = false; let isMatched = false;
for (const v of existsValues) { for (const v of existsValues) {
// 하나라도 일치하면 정답
if (v.value === rightAnswer) {
userAnswer = v.value; userAnswer = v.value;
if (type.includes('layer') || type.includes('text')) {
// 공백, 대소문자 무시
const cleanUserAnswer = userAnswer.replace(/\s+/g, '').toLowerCase();
const cleanRightAnswer = rightAnswer.replace(/\s+/g, '').toLowerCase();
// 하나라도 일치하면 정답
if (cleanUserAnswer === cleanRightAnswer) {
isMatched = true; isMatched = true;
break; break;
} }
} }
// if (isMatched) { else {
if (userAnswer === rightAnswer) {
isMatched = true;
break;
}
}
}
if (isMatched) {
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult, {
type: 'force-correct'
});
}
else {
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
}
// }
// else {
// }
totalScore = compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
} }
@@ -378,7 +383,7 @@ function getGpdpScore(gpdpData, scoringJson, index) {
} }
} }
totalScore = compareAndScore(userAnswer, rightAnswer, point, key, scoringResult); totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
continue; continue;
} }
@@ -417,8 +422,8 @@ function getGpdpScore(gpdpData, scoringJson, index) {
} }
} }
// else if (type.includes('shape') || type.includes('text') || type.includes('clipping')) { // else {
else { else if (type.includes('shape') || type.includes('text') || type.includes('clipping')) {
const color = parseColorToHex(item.value); const color = parseColorToHex(item.value);
userAnswer = color; userAnswer = color;
normalizedAnswer = rightAnswer.toLowerCase?.(); normalizedAnswer = rightAnswer.toLowerCase?.();
@@ -430,7 +435,7 @@ function getGpdpScore(gpdpData, scoringJson, index) {
} }
} }
} }
totalScore = compareAndScore(userAnswer, normalizedAnswer, point, key, scoringResult); totalScore += compareAndScore(userAnswer, normalizedAnswer, point, key, scoringResult);
} }
else if (type === 'layer.blend.opacity') { else if (type === 'layer.blend.opacity') {
@@ -453,7 +458,7 @@ function getGpdpScore(gpdpData, scoringJson, index) {
} }
} }
totalScore = compareAndScore(userAnswer, rightAnswer, point, key, scoringResult); totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
continue; continue;
} }
@@ -494,8 +499,8 @@ function getGpdpScore(gpdpData, scoringJson, index) {
} }
} }
console.log("🚀 ~ userAnswer:", userAnswer); // console.log("🚀 ~ userAnswer:", userAnswer);
console.log("🚀 ~ rightAnswer : ", rightAnswer) // console.log("🚀 ~ rightAnswer : ", rightAnswer)
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult, { totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult, {
partial: true partial: true
}) })
@@ -722,7 +727,7 @@ function getGpdpScore(gpdpData, scoringJson, index) {
totalScore += result.length > 0 ? point : 0; totalScore += result.length > 0 ? point : 0;
scoringResult[key] = result.length > 0 ? point : 0; scoringResult[key] = result.length > 0 ? point : 0;
} }
} }
scoringResult['총점'] = totalScore; scoringResult['총점'] = totalScore;
return scoringResult; return scoringResult;
} }

View File

@@ -24,8 +24,8 @@ const examTypes = [
]; ];
// testMode가 true일 경우 TEST 폴더에 있는 답안 파일을 읽어옴 // testMode가 true일 경우 TEST 폴더에 있는 답안 파일을 읽어옴
const testMode = false; // const testMode = false;
// const testMode = true; const testMode = true;
const outputExcelFiles = []; const outputExcelFiles = [];
@@ -459,7 +459,7 @@ function getGmepScore(gmepData, scoringJson, index) {
// 만약 CRClip 요소가 motion clip인 경우 CRCUnitArr의 Path를 찾기 // 만약 CRClip 요소가 motion clip인 경우 CRCUnitArr의 Path를 찾기
if (mediaPath == null) { if (mediaPath == null) {
const motionClipPath = xpath.select1(`//CRClipArr/CRClip[${CRClipIndex}]/CRCUnitArr/@Path`, gmepXmlDoc); const motionClipPath = xpath.select1(`//CRClipArr/CRClip[${CRClipIndex}]/CRCUnitArr/@Path`, gmepXmlDoc);
if (motionClipPath !== null) { if (motionClipPath != null) {
const fileName = path.basename(motionClipPath.value); const fileName = path.basename(motionClipPath.value);
mediaOrderList.push(fileName); mediaOrderList.push(fileName);
} }
@@ -616,7 +616,7 @@ function getGmepScore(gmepData, scoringJson, index) {
else { else {
const xpathExpr = ele?.replace(/{CRClipIndex}/g, crclipIndex); const xpathExpr = ele?.replace(/{CRClipIndex}/g, crclipIndex);
const muteStatus = xpath.select1(xpathExpr, gmepXmlDoc); const muteStatus = xpath.select1(xpathExpr, gmepXmlDoc);
userAnswer = muteStatus.value; userAnswer = muteStatus?.value;
} }
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult); totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
} }
@@ -649,7 +649,7 @@ function getGmepScore(gmepData, scoringJson, index) {
if (!crTrackClip) { if (!crTrackClip) {
userAnswer = null; userAnswer = null;
} else { } else {
const length = parseInt(crTrackClip.getAttribute('Length'), 10); const length = crTrackClip.getAttribute('Length');
userAnswer = length; userAnswer = length;
} }
} }