diff --git a/0217_DIC_2521A_result.xlsx b/0217_DIC_2521A_result.xlsx new file mode 100644 index 0000000..09ee42e Binary files /dev/null and b/0217_DIC_2521A_result.xlsx differ diff --git a/0217_DIC_2521B_result.xlsx b/0217_DIC_2521B_result.xlsx new file mode 100644 index 0000000..59ffd88 Binary files /dev/null and b/0217_DIC_2521B_result.xlsx differ diff --git a/0217_DIC_2521C_result.xlsx b/0217_DIC_2521C_result.xlsx new file mode 100644 index 0000000..ff297eb Binary files /dev/null and b/0217_DIC_2521C_result.xlsx differ diff --git a/0217_DIC_2521D_result.xlsx b/0217_DIC_2521D_result.xlsx new file mode 100644 index 0000000..17118d5 Binary files /dev/null and b/0217_DIC_2521D_result.xlsx differ diff --git a/DIC_2521A.json b/DIC_2521A.json index 0ec80c8..c8d58ed 100644 --- a/DIC_2521A.json +++ b/DIC_2521A.json @@ -209,12 +209,10 @@ "9": { "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "multi", + "type": "range", "search": "양을 모는 목동", - "value": [ - 0.353, - 0.929 - ], + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], "point": 2 }, "10": { diff --git a/DIC_2521A_TEST.json b/DIC_2521A_TEST.json new file mode 100644 index 0000000..c8d58ed --- /dev/null +++ b/DIC_2521A_TEST.json @@ -0,0 +1,376 @@ +{ + "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": "$.children[?(@.name=='초원')]", + "type": "boolean", + "point": 10 + }, + "5": { + "ele": "none", + "point": 0 + }, + "6": { + "ele": "$.children[?(@.name=='Sheep Ranch')].name", + "value": "Sheep Ranch", + "point": 10 + }, + "7": { + "ele": "$.children[?(@.name=='Sheep Ranch')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 10 + }, + "8": { + "ele": "$.children[?(@.name=='Sheep Ranch')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 10 + }, + "9": { + "ele": "$.children[?(@.name=='Sheep Ranch')].text.font.sizes[0]", + "value": 48, + "point": 10 + }, + "10": { + "ele": "$.children[?(@.name=='Sheep Ranch')].text.font.colors[0]", + "type": "color", + "value": "12ba00", + "point": 10 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "none", + "point": 0 + }, + "14": { + "ele": "$.children[?(@.name=='양 목장')].name", + "value": "양 목장", + "point": 10 + }, + "15": { + "ele": "$.children[?(@.name=='양 목장')].text.font.names[0]", + "type": "font", + "value": "GungsuhChe", + "point": 10 + }, + "16": { + "ele": "$.children[?(@.name=='양 목장')].text.font.sizes[0]", + "value": 36, + "point": 10 + }, + "17": { + "ele": "$.children[?(@.name=='양 목장')].text.font.colors[0]", + "type": "color", + "value": "ff9000", + "point": 10 + }, + "18": { + "ele": "none", + "point": 0 + }, + "19": { + "ele": "none", + "point": 0 + }, + "20": { + "ele": "none", + "point": 0 + }, + "21": { + "ele": "none", + "point": 0 + }, + "22": { + "ele": "$.children[?(@.name=='초원')]", + "type": "boolean", + "point": 10 + }, + "23": { + "ele": "none", + "point": 0 + }, + "24": { + "ele": "none", + "point": 0 + }, + "25": { + "ele": "none", + "point": 0 + }, + "26": { + "ele": "$[?(@.width == 65 && @.height == 35)]", + "type": "boolean", + "point": 10 + } + }, + "2": { + "1": { + "ele": "//CRClipArr/CRClip[position() = //CRTrackList[1]/CRTrackClip/@ClipIndex]/@Path", + "type": "array", + "value": [ + "동영상.mp4", + "이미지2.jpg", + "이미지3.jpg", + "이미지1.jpg" + ], + "point": 4 + }, + "2": { + "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1][@Speed='130']", + "point": 2 + }, + "3": { + "ele": "count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)", + "type": "startend", + "start": "0", + "end": "340", + "point": 2 + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='동영상.mp4']/preceding-sibling::*)]//CRFilter[@ID='52'][@VID100='10'][@VID103='0.80000001']", + "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='110']", + "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='110']", + "search": "양을 모는 목동", + "point": 2 + }, + "8": { + "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-270661']", + "ele2": "//CROwneUnit[1]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-270661']", + "search": "양을 모는 목동", + "point": 2 + }, + "9": { + "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", + "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", + "type": "range", + "search": "양을 모는 목동", + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], + "point": 2 + }, + "10": { + "existEle": "//CRCUnitArr[@Name='{search}']", + "ele": "sum(//CRTrackList[@Name='텍스트']/CRTrackClip[not(@ClipIndex=count(//CROwneUnit[1]/CRCUnitArr/preceding::CROwneUnit))]/@Length)", + "type": "searchIndex", + "value": 160, + "search": "양을 모는 목동", + "point": 2 + }, + "11": { + "ele": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[.//CRCUnitArr[@Name='양을 모는 목동']]/preceding::CROwneUnit))][@Length='120']", + "ele2": "//CRTrackList[@Name='텍스트']/CRTrackClip[(@ClipIndex=count(//CROwneUnit[1]/CRCUnitArr/preceding::CROwneUnit))][@Length='120']", + "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='이미지2.jpg']", + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::*)]/@Length", + "type": "searchIndex", + "value": "180", + "point": 2 + }, + "14": { + "type": "multi", + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::*)]//CRFilter/@ID |//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::*)]//CRFilter/@VID100", + "value": [ + "99", + "65" + ], + "point": 2 + }, + "15": { + "type": "multi", + "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@ID|//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@Range|//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지2.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@Type", + "value": [ + "19", + "460:520", + "2" + ], + "point": 2 + }, + "16": { + "existEle": "//CRClip[@Path='이미지3.jpg']", + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::*)]/@Length", + "type": "searchIndex", + "value": "150", + "point": 2 + }, + "17": { + "type": "multi", + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::*)]//CRFilter/@ID |//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::*)]//CRFilter/@VID101", + "value": [ + "128", + "2" + ], + "point": 2 + }, + "18": { + "type": "multi", + "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@ID|//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@Range|//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지3.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@Type", + "value": [ + "14", + "610:670", + "2" + ], + "point": 2 + }, + "19": { + "existEle": "//CRClip[@Path='이미지1.jpg']", + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::*)]/@Length", + "type": "searchIndex", + "value": "150", + "point": 2 + }, + "20": { + "type": "multi", + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::*)]//CRFilter/@ID |//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::*)]//CRFilter/@VID100", + "value": [ + "184", + "20" + ], + "point": 2 + }, + "21": { + "type": "multi", + "ele": "//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@ID|//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@Range|//CRTransFilter[@ClipIndex=count(//CRTrackList/CRTrackClip[@ClipIndex=count(//CRClip[@Path='이미지1.jpg']/preceding-sibling::*)]/preceding-sibling::CRTrackClip)]/@Type", + "value": [ + "0", + "760:820", + "2" + ], + "point": 2 + }, + "22": { + "ele": "//CRCUnitArr[@Name='{search}']", + "search": "공존하는 개와 양 (Dog and sheep)", + "point": 3 + }, + "23": { + "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", + "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID102='돋움체']", + "search": "공존하는 개와 양 (Dog and sheep)", + "point": 2 + }, + "24": { + "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool[@Type='1']/GCUnit[@VID101='160']", + "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit[@VID101='160']", + "search": "공존하는 개와 양 (Dog and sheep)", + "point": 2 + }, + "25": { + "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='4'][@VID100='-1589535']", + "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4'][@VID100='-1589535']", + "search": "공존하는 개와 양 (Dog and sheep)", + "point": 2 + }, + "26": { + "ele": "//CRCUnitArr[@Name='{search}']//GCUnitPool/GCUnit[@Type='2'][@VID100='0.2'][@VID101='-8510694']", + "ele2": "//CROwneUnit[2]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2'][@VID100='0.2'][@VID101='-8510694']", + "search": "공존하는 개와 양 (Dog and sheep)", + "point": 2 + }, + "27": { + "ele": "//CRCUnitArr[@Name='{search}'][@VID505='18'][@VID507='2']", + "ele2": "//CROwneUnit[2]/CRCUnitArr[@VID505='18'][@VID507='2']", + "search": "공존하는 개와 양 (Dog and sheep)", + "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": "공존하는 개와 양 (Dog and sheep)", + "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": "공존하는 개와 양 (Dog and sheep)", + "point": 2 + }, + "30": { + "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", + "point": 2 + }, + "31": { + "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Length='810']", + "point": 2 + }, + "32": { + "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']//CRFilter[@Type='2'][@ID='1'][@VID8='60']", + "point": 2 + } + } +} \ No newline at end of file diff --git a/DIC_2521A_TEST.xlsx b/DIC_2521A_TEST.xlsx new file mode 100644 index 0000000..a7d67e0 Binary files /dev/null and b/DIC_2521A_TEST.xlsx differ diff --git a/DIC_2521B.json b/DIC_2521B.json index 24f10ab..2faf6a6 100644 --- a/DIC_2521B.json +++ b/DIC_2521B.json @@ -211,12 +211,10 @@ "9": { "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "multi", + "type": "range", "search": "연못의 연잎들", - "value": [ - 0.351, - 0.922 - ], + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], "point": 2 }, "10": { diff --git a/DIC_2521C.json b/DIC_2521C.json index bae6faf..ccc35a6 100644 --- a/DIC_2521C.json +++ b/DIC_2521C.json @@ -209,12 +209,10 @@ "9": { "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "multi", + "type": "range", "search": "꽃으로 만든 조형물", - "value": [ - 0.329, - 0.933 - ], + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], "point": 2 }, "10": { diff --git a/DIC_2521D.json b/DIC_2521D.json index 7df2a90..0f50701 100644 --- a/DIC_2521D.json +++ b/DIC_2521D.json @@ -211,12 +211,10 @@ "9": { "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "multi", + "type": "range", "search": "산책하는 젖소들", - "value": [ - 0.356, - 0.933 - ], + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], "point": 2 }, "10": { diff --git a/README.md b/README.md index e88b9cf..326cd7f 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,16 @@ xpath 테스트 용 1. 문제3-9번 자막 위치 설정 '화면 정가운데 아래' 판별 시 자막의 길이에 따라 위치 기준이 바뀜 * 텍스트 유사도 판별을 거치게 되면 정답으로 인정되는 텍스트의 길이도 유동적이므로 위치도 유동적으로 변경되어야 함 * 수정예상방안 : 글자 수 마다 x,y 위치 값 따로 설정하는 방식 + * 현재 최소좌표와 최대좌표 사이의 값이면 정답으로 채점되도록 변경 2. .jpg / .psd 채점 파일 예외사항 + * 멀티미디어-003666-최우진(A) : 1번 jpg psd 파일 누락 + * 멀티미디어-005647-최영훈(A) : 2번 psd 파일 오류(2번 jpg파일의 확장자만 psd로 변경) + * 멀티미디어-003361-장하린(B) : + * 멀티미디어-001273-허윤서(C) : 수험번호 없는 psd파일 [멀티미디어_01-허윤서.psd]이 포함 + * 멀티미디어-005156-임예지(D) : + + 1. 1번 파일 누락, 2번 파일만 작성 * 현재 차례대로 읽어 들여 채점 하는 방식 -> 1번 파일이 누락 된 수험자는 2번 파일이 1번 파일로 인식되어 채점 @@ -40,4 +48,10 @@ xpath 테스트 용 2. 3개 이상 파일이 있는 경우 ![alt text](image.png) - * \ No newline at end of file + * psd 1번, 2번 이후 3번째 psd 파일이 존재 하는 경우 + - 프로그램 실행 예상 결과는 scoringResult[] 리스트의 1번 2번 인덱스에 psd가 저장되고 3번에 gmep가 저장되어야 하지만 + 4개이상의 psd 파일이 있는 경우 scoringResult[4] 위치까지 데이터가 저장됨 + - gmep의 채점결과는 scoringResult[3]에 직접 저장하므로 + - 결과 예상은 scoringResult[3]까지 저장되어야 하지만 scoringResult[4]에 더미 값이 저장됨 + + \ No newline at end of file diff --git a/psdExport_2.js b/psdExport_2.js index 26fdb6e..a0d7b0a 100644 --- a/psdExport_2.js +++ b/psdExport_2.js @@ -9,16 +9,18 @@ const { DOMParser } = require('xmldom'); const findSimilarString = require('./findSimilarString'); // -------------------------------------------------------- -const scoringJson = require('./DIC_2521A.json'); +// const scoringJson = require('./DIC_2521A.json'); // const scoringJson = require('./DIC_2521B.json'); // const scoringJson = require('./DIC_2521C.json'); -// const scoringJson = require('./DIC_2521D.json'); +const scoringJson = require('./DIC_2521D.json'); +// TEST +// const scoringJson = require('./DIC_2521A_TEST.json'); // -------------------------------------------------------- -const answerFilesDir = './output/A/DIC'; +// const answerFilesDir = './output/A/DIC'; // const answerFilesDir = './output/B/DIC'; // const answerFilesDir = './output/C/DIC'; -// const answerFilesDir = './output/D/DIC'; +const answerFilesDir = './output/D/DIC'; // TEST // const answerFilesDir = './output/A/TEST'; @@ -26,10 +28,10 @@ const answerFilesDir = './output/A/DIC'; // const answerFilesDir = './output/D/TEST'; // -------------------------------------------------------- -const outputExcelFile = './DIC_2521A_result.xlsx'; +// const outputExcelFile = './DIC_2521A_result.xlsx'; // const outputExcelFile = './DIC_2521B_result.xlsx'; // const outputExcelFile = './DIC_2521C_result.xlsx'; -// const outputExcelFile = './DIC_2521D_result.xlsx'; +const outputExcelFile = './DIC_2521D_result.xlsx'; // TEST // const outputExcelFile = './DIC_2521A_TEST.xlsx'; @@ -148,20 +150,15 @@ function getGmepScore(gmepData, scoringJson, index) { * CRCUnitArr태그 Name속성 찾는 구문으로 변환 * > 멀티라인 텍스트 유사도 판별하기 어려움 */ - if (search !== undefined) { let result = findSimilarString(gmepXmlDoc, search, 0.2) - console.log("🚀 ~ getGmepScore ~ result:", result) - ele = ele.replace(/{search}/g, result); - console.log("🚀 ~ getGmepScore ~ ele:", ele) if ( existEle !== undefined ){ existEle = existEle.replace(/{search}/g, result); } } console.log(`example number: ${key}`) - // xpath if (ele === 'none') { scoringResult[key] = "확인필요"; @@ -268,6 +265,48 @@ 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{ + const result = xpath.select(ele, gmepXmlDoc); + if (result.length == 0) { + 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); diff --git a/회차별채점자료/2521/Excel_채점결과/DIC_2521A_result.xlsx b/회차별채점자료/2521/Excel_채점결과/0215_DIC_2521A_result.xlsx similarity index 100% rename from 회차별채점자료/2521/Excel_채점결과/DIC_2521A_result.xlsx rename to 회차별채점자료/2521/Excel_채점결과/0215_DIC_2521A_result.xlsx diff --git a/회차별채점자료/2521/Excel_채점결과/DIC_2521B_result.xlsx b/회차별채점자료/2521/Excel_채점결과/0215_DIC_2521B_result.xlsx similarity index 100% rename from 회차별채점자료/2521/Excel_채점결과/DIC_2521B_result.xlsx rename to 회차별채점자료/2521/Excel_채점결과/0215_DIC_2521B_result.xlsx diff --git a/회차별채점자료/2521/Excel_채점결과/DIC_2521C_result.xlsx b/회차별채점자료/2521/Excel_채점결과/0215_DIC_2521C_result.xlsx similarity index 100% rename from 회차별채점자료/2521/Excel_채점결과/DIC_2521C_result.xlsx rename to 회차별채점자료/2521/Excel_채점결과/0215_DIC_2521C_result.xlsx diff --git a/회차별채점자료/2521/Excel_채점결과/DIC_2521D_result.xlsx b/회차별채점자료/2521/Excel_채점결과/0215_DIC_2521D_result.xlsx similarity index 100% rename from 회차별채점자료/2521/Excel_채점결과/DIC_2521D_result.xlsx rename to 회차별채점자료/2521/Excel_채점결과/0215_DIC_2521D_result.xlsx diff --git a/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521A_result.xlsx b/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521A_result.xlsx new file mode 100644 index 0000000..09ee42e Binary files /dev/null and b/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521A_result.xlsx differ diff --git a/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521B_result.xlsx b/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521B_result.xlsx new file mode 100644 index 0000000..59ffd88 Binary files /dev/null and b/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521B_result.xlsx differ diff --git a/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521C_result.xlsx b/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521C_result.xlsx new file mode 100644 index 0000000..ff297eb Binary files /dev/null and b/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521C_result.xlsx differ diff --git a/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521D_result.xlsx b/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521D_result.xlsx new file mode 100644 index 0000000..17118d5 Binary files /dev/null and b/회차별채점자료/2521/Excel_채점결과/0217_DIC_2521D_result.xlsx differ diff --git a/회차별채점자료/2521/JSON_채점기준표/DIC_2521A.json b/회차별채점자료/2521/JSON_채점기준표/DIC_2521A.json index 0ec80c8..c8d58ed 100644 --- a/회차별채점자료/2521/JSON_채점기준표/DIC_2521A.json +++ b/회차별채점자료/2521/JSON_채점기준표/DIC_2521A.json @@ -209,12 +209,10 @@ "9": { "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "multi", + "type": "range", "search": "양을 모는 목동", - "value": [ - 0.353, - 0.929 - ], + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], "point": 2 }, "10": { diff --git a/회차별채점자료/2521/JSON_채점기준표/DIC_2521B.json b/회차별채점자료/2521/JSON_채점기준표/DIC_2521B.json index d731f8a..2faf6a6 100644 --- a/회차별채점자료/2521/JSON_채점기준표/DIC_2521B.json +++ b/회차별채점자료/2521/JSON_채점기준표/DIC_2521B.json @@ -153,7 +153,7 @@ "point": 0 }, "27": { - "ele": "$[?(@.width == 65 && @.height == 35)]", + "ele": "$[?(@.width == 65 && @.height == 45)]", "type": "boolean", "point": 10 } @@ -211,12 +211,10 @@ "9": { "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "multi", + "type": "range", "search": "연못의 연잎들", - "value": [ - 0.351, - 0.922 - ], + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], "point": 2 }, "10": { diff --git a/회차별채점자료/2521/JSON_채점기준표/DIC_2521C.json b/회차별채점자료/2521/JSON_채점기준표/DIC_2521C.json index bae6faf..ccc35a6 100644 --- a/회차별채점자료/2521/JSON_채점기준표/DIC_2521C.json +++ b/회차별채점자료/2521/JSON_채점기준표/DIC_2521C.json @@ -209,12 +209,10 @@ "9": { "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "multi", + "type": "range", "search": "꽃으로 만든 조형물", - "value": [ - 0.329, - 0.933 - ], + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], "point": 2 }, "10": { diff --git a/회차별채점자료/2521/JSON_채점기준표/DIC_2521D.json b/회차별채점자료/2521/JSON_채점기준표/DIC_2521D.json index 7bbb257..0f50701 100644 --- a/회차별채점자료/2521/JSON_채점기준표/DIC_2521D.json +++ b/회차별채점자료/2521/JSON_채점기준표/DIC_2521D.json @@ -98,7 +98,7 @@ "14": { "ele": "$.children[?(@.name=='젖소 목장 체험')].text.font.names[0]", "type": "font", - "value": "YetR-HM", + "value": "YetR", "point": 10 }, "15": { @@ -211,12 +211,10 @@ "9": { "ele": "//CRCUnitArr[@Name='{search}']/@VID600 | //CRCUnitArr[@Name='{search}']/@VID601", "ele2": "//CROwneUnit[1]/CRCUnitArr/@VID600 | //CROwneUnit[1]/CRCUnitArr/@VID601", - "type": "multi", + "type": "range", "search": "산책하는 젖소들", - "value": [ - 0.356, - 0.933 - ], + "start": [ 0.100, 0.785 ], + "end": [ 0.475, 0.999 ], "point": 2 }, "10": {