diff --git a/00_DIC_2522A_TEST.xlsx b/00_DIC_2522A_TEST.xlsx new file mode 100644 index 0000000..331e81e Binary files /dev/null and b/00_DIC_2522A_TEST.xlsx differ diff --git a/00_DIC_2522B_TEST.xlsx b/00_DIC_2522B_TEST.xlsx new file mode 100644 index 0000000..367b283 Binary files /dev/null and b/00_DIC_2522B_TEST.xlsx differ diff --git a/00_DPI_2508B_TEST.xlsx b/00_DPI_2508B_TEST.xlsx new file mode 100644 index 0000000..2fb6bc9 Binary files /dev/null and b/00_DPI_2508B_TEST.xlsx differ diff --git a/01_copy_files.py b/01_copy_files.py index 5d829cf..5ac6da9 100644 --- a/01_copy_files.py +++ b/01_copy_files.py @@ -1,5 +1,3 @@ -# 분류된 "과목별" 폴더에서 시험 파일을 복사하는 스크립트 - import os import shutil import re @@ -75,8 +73,10 @@ def copy_exam_files(exam_round, exam_codes, source_dir): # 사용 예시 if __name__ == "__main__": - exam_round = "2508" - exam_codes = ["DIC", "DPI"] - source_dir = r"D:\project\data\제2508회 정기\(전체답안)답안파일(과목별)" + exam_round = "2522" + # exam_codes = ["DIC", "DPI"] + exam_codes = ["DIC"] + # source_dir = r"D:\project\data\제2508회 정기\(전체답안)답안파일(과목별)" + source_dir = r"D:\project\data\제2522회 특별\(추가)과목별_답안파일" copy_exam_files(exam_round, exam_codes, source_dir) diff --git a/250905_DIC_2522A_채점결과.xlsx b/250905_DIC_2522A_채점결과.xlsx new file mode 100644 index 0000000..34ba3c4 Binary files /dev/null and b/250905_DIC_2522A_채점결과.xlsx differ diff --git a/250905_DIC_2522B_채점결과.xlsx b/250905_DIC_2522B_채점결과.xlsx new file mode 100644 index 0000000..450ef6b Binary files /dev/null and b/250905_DIC_2522B_채점결과.xlsx differ diff --git a/250915_DPI_2508B_채점결과.xlsx b/250915_DPI_2508B_채점결과.xlsx new file mode 100644 index 0000000..e371f11 Binary files /dev/null and b/250915_DPI_2508B_채점결과.xlsx differ diff --git a/DIC_2522A.json b/DIC_2522A.json new file mode 100644 index 0000000..676db11 --- /dev/null +++ b/DIC_2522A.json @@ -0,0 +1,751 @@ +{ + "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": "none", + "point": 0 + }, + "5": { + "ele": "$.children[?(@.name=='A train & a stop sign')].name", + "value": "A train & a stop sign", + "point": 4 + }, + "6": { + "ele": "$.children[?(@.name=='A train & a stop sign')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "7": { + "ele": "$.children[?(@.name=='A train & a stop sign')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='A train & a stop sign')].text.font.sizes[0]", + "value": 48, + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='A train & a stop sign')].text.font.colors[0]", + "type": "color", + "value": "d6d6d6", + "point": 2 + }, + "10": { + "ele": "none", + "point": 0 + }, + "11": { + "ele": "none", + "point": 0 + }, + "12": { + "ele": "none", + "point": 0 + }, + "13": { + "ele": "$.children[?(@.name=='기차 여행과 표지판')].name", + "value": "기차 여행과 표지판", + "point": 4 + }, + "14": { + "ele": "$.children[?(@.name=='기차 여행과 표지판')].text.font.names[0]", + "type": "font", + "value": "YetR", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "15": { + "ele": "$.children[?(@.name=='기차 여행과 표지판')].text.font.sizes[0]", + "value": 36, + "point": 2 + }, + "16": { + "ele": "$.children[?(@.name=='기차 여행과 표지판')].text.font.colors[0]", + "type": "color", + "value": "035b80", + "point": 2 + }, + "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": "size", + "value": { + "width": 65, + "height": 45 + }, + "point": 4 + }, + "28": { + "ele": "none", + "point": 0, + "desc": "파일명 확인" + } + }, + "2": { + "1": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", + "type": "mediaOrder", + "value": ["동영상.mp4", "이미지1.jpg", "이미지2.jpg", "이미지3.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": "150" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "330" + }, + "point": 2, + "desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "52", + "VID100": "5", + "VID103": "0.69999999" + }, + "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": "00ffe6", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "달리는 기차를 보며", + "type": "video.Location", + "value": ["0.29583335", "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": "이미지1.jpg", + "value": 150, + "point": 2 + }, + "14": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "125", + "VID101": "8" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "96", + "Range": "390:480", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지2.jpg", + "value": 150, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지2.jpg", + "value": { + "ID": "99", + "VID100": "50" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "35", + "Range": "600:660", + "Type": "16" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 180, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "102", + "VID101": "8" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "1", + "Range": "780:810", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "기차 여행 Train Travel", + "type": "video.Text", + "value": "기차 여행 Train Travel", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "기차 여행 Train Travel", + "type": "video.Text", + "value": "궁서체", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "기차 여행 Train Travel", + "type": "video.Text", + "value": "130", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "기차 여행 Train Travel", + "type": "video.Text.Color", + "value": "0300f0", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "기차 여행 Train Travel", + "type": "video.Text.Outline", + "value": { + "width": "35", + "color": "bcebf7" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "기차 여행 Train Travel", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "3", + "VID507": "2" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "기차 여행 Train Travel", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "기차 여행 Train Travel", + "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": 740, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "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": "Valley", + "point": 5, + "desc": "Valley 레이어가 있는지 여부 체크" + }, + "4": { + "type": "layer.Effects", + "ele": "//Layer/Effects/Item", + "ele_temp": "//Layer[Name[@value='{search}']]/Effects/Item", + "search": "Valley", + "value": { + "name": "선명하게", + "option": { + "양": "7" + } + }, + "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": "RECTANGLE", + "point": 3, + "desc": { + "모서리가 둥근 사각형": "ROUNDED_RECTANGLE", + "사각형": "RECTANGLE", + "타원": "ELLIPSE" + } + }, + "8": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 335, + "height": 35 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "9": { + "type": "shape.color", + "ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "46A64A", + "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, + "desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE" + }, + "6": { + "type": "shape.size", + "ele": "//Layer//op_points", + "value": { + "width": 400, + "height": 50 + }, + "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": "3CB241", + "endColor": "931FAD" + }, + "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": "24", + "point": 3 + }, + "12": { + "type": "text.color", + "ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value", + "value": "AA2318", + "point": 3 + }, + "13": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value", + "value": "5", + "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": "ELLIPSE", + "point": 3, + "desc": { + "사각형": "RECTANGLE", + "원형/타원형": "ELLIPSE", + "17~20 문항 option값 변경": "" + } + }, + "17": { + "type": "clipping.size", + "ele": "//Layer//Shape[shape_type/@value='{option}']//op_points", + "option": "ELLIPSE", + "value": { + "width": 170, + "height": 170 + }, + "point": 3, + "desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점" + }, + "18": { + "type": "exists", + "ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value", + "option": "ELLIPSE", + "value": "3", + "point": 3 + }, + "19": { + "type": "clipping.color", + "ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value", + "option": "ELLIPSE", + "value": "4B7E5C", + "point": 3, + "desc": "채우기:secondary_color, 외곽선:primary_color" + }, + "20": { + "type": "shadow", + "ele": "//Layer//Shape[shape_type/@value='{option}']", + "option": "ELLIPSE", + "value": { + "shadow": true, + "width": "5", + "distance": "2", + "blur": "1", + "angle": "320" + }, + "point": 5, + "desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점" + }, + "21": { + "type": "none", + "ele": "", + "point": 0, + "desc": "기본설정" + }, + "22": { + "type": "none", + "ele": "", + "point": 0, + "desc": "파일명 확인" + } + } +} diff --git a/DIC_2522B.json b/DIC_2522B.json new file mode 100644 index 0000000..fef222a --- /dev/null +++ b/DIC_2522B.json @@ -0,0 +1,740 @@ +{ + "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=='Pattaya Floating Market')].name", + "value": "Pattaya Floating Market", + "point": 4 + }, + "7": { + "ele": "$.children[?(@.name=='Pattaya Floating Market')].text.font.names[0]", + "type": "font", + "value": "Arial", + "point": 2 + }, + "8": { + "ele": "$.children[?(@.name=='Pattaya Floating Market')].text.font.names[0]", + "value": "Arial-BoldItalicMT", + "point": 2 + }, + "9": { + "ele": "$.children[?(@.name=='Pattaya Floating Market')].text.font.sizes[0]", + "value": 40, + "point": 2 + }, + "10": { + "ele": "$.children[?(@.name=='Pattaya Floating Market')].text.font.colors[0]", + "type": "color", + "value": "efe109", + "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": "Gungsuh", + "point": 2, + "desc": { + "돋움체": "DotumChe", + "궁서체": "GungsuhChe", + "굴림체": "GulimChe", + "휴먼옛체": "YetR" + } + }, + "16": { + "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.sizes[0]", + "value": 24, + "point": 2 + }, + "17": { + "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.colors[0]", + "type": "color", + "value": "fc07a8", + "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", "이미지1.jpg", "이미지3.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": "150" + }, + "point": 2, + "desc": "100당 1배속 / 130 = 1.3배속" + }, + "3": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", + "type": "startEnd", + "media": "동영상.mp4", + "value": { + "start": "0", + "end": "410" + }, + "point": 2, + "desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." + }, + "4": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "effect", + "media": "동영상.mp4", + "value": { + "ID": "44", + "VID100": "10", + "VID103": "0.80000001" + }, + "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": "c00712", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "9": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", + "search": "태국문화 엿보기", + "type": "video.Location", + "value": ["0.34270835", "0.92962962"], + "point": 2, + "desc": [ + "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다", + "CRCUnitArr의 VID600이 X좌표, VID601이 Y좌표" + ] + }, + "10": { + "ele": "", + "search": "태국문화 엿보기", + "type": "video.StartTime", + "value": 150, + "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": "102", + "VID101": "7" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "15": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지2.jpg", + "value": { + "ID": "0", + "Range": "530:560", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "16": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지1.jpg", + "value": 150, + "point": 2 + }, + "17": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지1.jpg", + "value": { + "ID": "128", + "VID101": "2" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "18": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지1.jpg", + "value": { + "ID": "14", + "Range": "650:710", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "19": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", + "type": "imageLength", + "media": "이미지3.jpg", + "value": 150, + "point": 2 + }, + "20": { + "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "imageOverlay", + "media": "이미지3.jpg", + "value": { + "ID": "173", + "VID102": "220" + }, + "point": 2, + "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" + }, + "21": { + "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", + "type": "clipTransition", + "media": "이미지3.jpg", + "value": { + "ID": "19", + "Range": "830:860", + "Type": "2" + }, + "point": 2, + "desc": "오버랩일 경우 Type속성값 16으로 변경" + }, + "22": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", + "search": "로컬시장 투어 Local market tour", + "type": "video.Text", + "value": "로컬시장 투어 Local market tour", + "point": 3 + }, + "23": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", + "search": "로컬시장 투어 Local market tour", + "type": "video.Text", + "value": "궁서", + "point": 2 + }, + "24": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", + "search": "로컬시장 투어 Local market tour", + "type": "video.Text", + "value": "150", + "point": 2 + }, + "25": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", + "search": "로컬시장 투어 Local market tour", + "type": "video.Text.Color", + "value": "1a237e", + "point": 2, + "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" + }, + "26": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", + "search": "로컬시장 투어 Local market tour", + "type": "video.Text.Outline", + "value": { + "width": "20", + "color": "1976d2" + }, + "point": 2, + "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" + }, + "27": { + "ele": "//CROwneUnit[{index}]/CRCUnitArr", + "search": "로컬시장 투어 Local market tour", + "type": "opening.Text.FadeInEffect", + "value": { + "VID505": "1", + "VID507": "2" + }, + "point": 3, + "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." + }, + "28": { + "ele": "", + "search": "기차 여행 Train Travel", + "type": "opening.StartTime", + "value": 0, + "point": 2, + "desc": "오프닝자막의 시작시간 value 속성만 수정" + }, + "29": { + "ele": "", + "search": "기차 여행 Train Travel", + "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": 840, + "point": 2 + }, + "32": { + "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", + "type": "audio.Effect", + "media": "음악.mp3", + "value": { + "ID": "1", + "Duration": "90" + }, + "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": "파일명 확인" + } + } +} diff --git a/DPI_2508B.json b/DPI_2508B.json index 6beaa76..7163f92 100644 --- a/DPI_2508B.json +++ b/DPI_2508B.json @@ -666,7 +666,7 @@ "point": 3 }, "15": { - "type": "exists", + "type": "hasClippingMask.exists", "ele": "//Layer/MaskOpType/@value", "value": "Clipping", "point": 6, diff --git a/git_branch_manage.md b/git_branch_manage.md new file mode 100644 index 0000000..d433264 --- /dev/null +++ b/git_branch_manage.md @@ -0,0 +1,87 @@ +# GIT branch + +## 📌 장기간 개발용 브랜치 전략 + +### 1. 메인(main) 브랜치 + +* 항상 **안정된 코드** +* 실제 서비스/라이브에서 사용하는 코드 +* 여기서는 직접 실험하지 않음 + +### 2. 기능(feature) 브랜치 + +* 장기간 개발할 기능을 위한 브랜치 +* 예시: `feature/new-parser`, `feature/ui-redesign` + +--- + +## 📌 워크플로우 + +### 1. 기능 브랜치 생성 + +```bash +git checkout main +git pull origin main # 최신화 +git checkout -b feature/new-parser +``` + +### 2. 기능 개발 (여러 번 커밋) + +```bash +# 코드 수정 +git add . +git commit -m "초기 버전: XML 파서 구조 추가" +``` + +* 계속 개발하면서 커밋 누적 +* 필요하면 `git push origin feature/new-parser` 해서 원격에도 올려두기 (백업용) + +### 3. 장기간 개발 중 main 따라가기 (동기화) + +* main 브랜치가 바뀌면, 기능 브랜치로 가져와야 충돌 줄임 + +```bash +git checkout main +git pull origin main +git checkout feature/new-parser +git merge main # main의 최신 내용 병합 +``` + +⚡ 이 과정을 정기적으로 하면 `feature` 브랜치가 main과 멀어지지 않음 + +### 4. 기능 완료 → main에 병합 + +```bash +git checkout main +git pull origin main +git merge feature/new-parser +git push origin main +``` + +### 5. 필요 시 브랜치 삭제 + +```bash +git branch -d feature/new-parser +git push origin --delete feature/new-parser +``` + +--- + +## 📌 네이밍 규칙 (혼자 관리할 때도 편리) + +* `feature/기능명` : 장기간 개발용 (예: `feature/new-ui`) +* `fix/버그명` : 버그 수정용 (예: `fix/xml-encoding`) +* `test/실험명` : 단기 테스트용 (예: `test/xpath`) + +--- + +✅ 정리 + +* **main = 안정 코드** +* **feature 브랜치 = 장기간 개발용** (필요할 때 main과 동기화) +* 완료되면 main에 병합 → 안정화 +* 이렇게 하면 실험/개발/운영 코드가 깔끔하게 분리됨 + +--- + +👉 기능 브랜치 개발 중에, **main 브랜치 변경분을 가져올 때** `merge` 방식이 편할까요, 아니면 `rebase` 로 깔끔하게 이력을 유지하는 게 좋을까요? diff --git a/gpdpScoring.js b/gpdpScoring.js index 6c9dd0e..76c18d0 100644 --- a/gpdpScoring.js +++ b/gpdpScoring.js @@ -132,10 +132,20 @@ function getGpdpScore(gpdpData, scoringJson, index) { let totalScore = 0; + // 15번 문항의 정답 여부를 추적할 상태 플래그를 선언합니다. + let hasClippingMask = false; + // 15번 문항에 종속적인 문항들의 키 목록을 정의합니다. + const clippingMaskKeys = ['16', '17', '18', '19', '20']; + // 채점기준표 문항별 분류 for (const key in scoringData) { console.log(`❔❔ 문제번호 : [${index}-${key}]`) + if ( clippingMaskKeys.includes(key) && !hasClippingMask ) { + console.log("❌ 오답: 클리핑 마스크 미적용(15번 문항 오답)이므로 오답처리 ") + scoringResult[key] = 0; + continue; // 현재 문항 채점을 건너뛰고 다음 문항으로 넘어갑니다. + } let ele = scoringData[key].ele; let ele2 = scoringData[key].ele2; const rightAnswer = scoringData[key].value; @@ -309,7 +319,6 @@ function getGpdpScore(gpdpData, scoringJson, index) { for (const v of existsValues) { userAnswer = v.value; - if (type.includes('layer') || type.includes('text')) { // 공백, 대소문자 무시 @@ -338,6 +347,9 @@ function getGpdpScore(gpdpData, scoringJson, index) { totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult); } + if ( type.includes('hasClippingMask') && scoringResult[key] > 0 ) { + hasClippingMask = true; + } } diff --git a/psdExport_2.js b/psdExport_2.js index 28a5446..fd182f7 100644 --- a/psdExport_2.js +++ b/psdExport_2.js @@ -17,12 +17,11 @@ const codeTypes = [ // 'DIC', 'DPI', ]; -// const DICorDPI = 'DIC' -// const DICorDPI = 'DPI' + const examTypes = [ - 'A', + // 'A', 'B', - 'C', + // 'C', // 'D' ]; diff --git a/회차별채점자료/2522/A_clipping/DIC_2522A.json b/회차별채점자료/2522/A_clipping/DIC_2522A.json index a10b3f0..676db11 100644 --- a/회차별채점자료/2522/A_clipping/DIC_2522A.json +++ b/회차별채점자료/2522/A_clipping/DIC_2522A.json @@ -295,7 +295,7 @@ "media": "이미지1.jpg", "value": { "ID": "125", - "VID102": "8" + "VID101": "8" }, "point": 2, "desc": "오버레이 속성 키값(VID10X) 확인하고 변경" @@ -337,7 +337,7 @@ "value": { "ID": "35", "Range": "600:660", - "Type": "2" + "Type": "16" }, "point": 2, "desc": "오버랩일 경우 Type속성값 16으로 변경" diff --git a/회차별채점자료/2522/B_layer/DIC_2522B.json b/회차별채점자료/2522/B_layer/DIC_2522B.json index 590d091..241f8a6 100644 --- a/회차별채점자료/2522/B_layer/DIC_2522B.json +++ b/회차별채점자료/2522/B_layer/DIC_2522B.json @@ -105,12 +105,12 @@ "point": 0 }, "14": { - "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요')].name", - "value": "파타야 수상시장 놀러오세요", + "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].name", + "value": "파타야 수상시장 놀러오세요.", "point": 4 }, "15": { - "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요')].text.font.names[0]", + "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.names[0]", "type": "font", "value": "GungsuhChe", "point": 2, @@ -122,12 +122,12 @@ } }, "16": { - "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요')].text.font.sizes[0]", + "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.sizes[0]", "value": 24, "point": 2 }, "17": { - "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요')].text.font.colors[0]", + "ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.colors[0]", "type": "color", "value": "fc07a8", "point": 2 diff --git a/회차별채점자료/2522/B_layer/DIC_2522B.xlsx b/회차별채점자료/2522/B_layer/DIC_2522B.xlsx index 8c77f61..0634a5f 100644 Binary files a/회차별채점자료/2522/B_layer/DIC_2522B.xlsx and b/회차별채점자료/2522/B_layer/DIC_2522B.xlsx differ