From b2f99b92d0f1602fff2f951f4975d4c93c4b1fd4 Mon Sep 17 00:00:00 2001 From: dragdra Date: Mon, 1 Sep 2025 17:53:37 +0900 Subject: [PATCH] =?UTF-8?q?2508=ED=9A=8C=20=EC=B1=84=EC=A0=90=EC=9E=90?= =?UTF-8?q?=EB=A3=8C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 - 01_copyFiles.py | 13 +- 02_extract_project_json.py | 10 +- 250901_2508_CAS_2_A_채점결과.xlsx | Bin 0 -> 106341 bytes 250901_2508_CAS_2_B_채점결과.xlsx | Bin 0 -> 25751 bytes __pycache__/script_utils.cpython-312.pyc | Bin 0 -> 3716 bytes correct/2508_CAS_2_A.json | 774 ++++++++++++++++ correct/2508_CAS_2_B.json | 825 ++++++++++++++++ correct/_2508_CAS_2_A.json | 877 ++++++++++++++++++ correct/_2508_CAS_2_B.json | 870 +++++++++++++++++ logs/cat.log | 16 + main.py | 256 ++--- script_utils.py | 78 ++ .../2507/250801_2507_CAT_3_A_채점결과.xlsx | Bin 0 -> 5244 bytes .../2507/250804_2507_CAT_3_A_채점결과.xlsx | Bin 0 -> 5416 bytes .../2507/250805_2507_CAT_3_A_채점결과.xlsx | Bin 0 -> 16885 bytes 16 files changed, 3539 insertions(+), 184 deletions(-) create mode 100644 250901_2508_CAS_2_A_채점결과.xlsx create mode 100644 250901_2508_CAS_2_B_채점결과.xlsx create mode 100644 __pycache__/script_utils.cpython-312.pyc create mode 100644 correct/2508_CAS_2_A.json create mode 100644 correct/2508_CAS_2_B.json create mode 100644 correct/_2508_CAS_2_A.json create mode 100644 correct/_2508_CAS_2_B.json create mode 100644 script_utils.py create mode 100644 시험자료/2507/250801_2507_CAT_3_A_채점결과.xlsx create mode 100644 시험자료/2507/250804_2507_CAT_3_A_채점결과.xlsx create mode 100644 시험자료/2507/250805_2507_CAT_3_A_채점결과.xlsx diff --git a/.gitignore b/.gitignore index dcb6b35..8916c4c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,6 @@ # 기본적으로 output 디렉토리 전체 무시 output/ -# 예외 처리: 2단계 하위 폴더의 .xlsx 파일은 추적 -!output/*/ -!output/*/*.xlsx - sample/ .DS_Store diff --git a/01_copyFiles.py b/01_copyFiles.py index 414ef35..7eeae4a 100644 --- a/01_copyFiles.py +++ b/01_copyFiles.py @@ -2,6 +2,7 @@ import os import shutil import unicodedata +""" def copy_dic_subdirs(source_root, target_root_b, target_root_c): for root, dirs, files in os.walk(source_root): for dir_name in dirs: @@ -26,6 +27,7 @@ def copy_dic_subdirs(source_root, target_root_b, target_root_c): else: print(f"Skipping {dir_name} under {parent_dir}, as it doesn't match '2교시' or '3교시'.") +""" def copy_ent_files(source_root, target_root): # 대상 디렉토리가 없으면 생성 @@ -44,10 +46,11 @@ def copy_ent_files(source_root, target_root): print(f"Copied {source_file_path} to {target_file_path}") # 사용법 -source_directory = r"D:\project\data\CAT_제2507회 정기\채점의뢰" # 원본 디렉토리 경로 -target_directory = r"./ent/2507_CAT_3_A" -target_directory_a = r"./output/A" # '1교시'의 타겟 경로 -target_directory_b = r"./output/B" # '2교시'의 타겟 경로 -target_directory_c = r"./output/C" # '3교시'의 타겟 경로 + +source_directory = r"D:\project\data\CAS_제2508회 정기\답안파일\(전체답안)1교시2교시나눔\B형" # 원본 디렉토리 경로 +target_directory = r".\ent\2508_CAS_2_B" +# target_directory_a = r"./output/A" # '1교시'의 타겟 경로 +# target_directory_b = r"./output/B" # '2교시'의 타겟 경로 +# target_directory_c = r"./output/C" # '3교시'의 타겟 경로 copy_ent_files(source_directory, target_directory) diff --git a/02_extract_project_json.py b/02_extract_project_json.py index 944ef30..0c1223d 100644 --- a/02_extract_project_json.py +++ b/02_extract_project_json.py @@ -50,7 +50,9 @@ def process_ent_files(ent_dir, output_dir): # 실행 예 if __name__ == "__main__": - test_name = "2507_CAT_3_A" - ent_dir = f".\\ent\\{test_name}" - output_dir = f".\\output\\{test_name}" - process_ent_files(ent_dir, output_dir) + # test_names = ["2507_CAT_3_A"] + test_names = ["2508_CAS_2_A","2508_CAS_2_B"] + for test_name in test_names: + ent_dir = f".\\ent\\{test_name}" + output_dir = f".\\output\\{test_name}" + process_ent_files(ent_dir, output_dir) diff --git a/250901_2508_CAS_2_A_채점결과.xlsx b/250901_2508_CAS_2_A_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..66e1e67b8835b03d5f8e4b0ac6059399bc426afd GIT binary patch literal 106341 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 literal 0 HcmV?d00001 diff --git a/250901_2508_CAS_2_B_채점결과.xlsx b/250901_2508_CAS_2_B_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b77f47faa871b43b9ee9edc9fd40926e35077bbb GIT binary patch literal 25751 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 XjWK-UKDGE?8s^m73l!2+C@TL0#EKg7 literal 0 HcmV?d00001 diff --git a/correct/2508_CAS_2_A.json b/correct/2508_CAS_2_A.json new file mode 100644 index 0000000..e618583 --- /dev/null +++ b/correct/2508_CAS_2_A.json @@ -0,0 +1,774 @@ +{ + "1-1": { + "type": "scene", + "ele": "$..objects[?(@.name=='우주')]", + "points": 1.7, + "desc": "문제 1/장면 1/[배경] 이름 설정 1/이름을 '우주'로 변경하기", + "sort": 11 + }, + "1-2": { + "type": "scene", + "ele": "$..objects[?(@.name=='우주정거장')]", + "points": 1.5, + "desc": "문제 1/장면 2/[배경] 이름 설정 2/이름 변경 없음", + "sort": 12 + }, + "1-3": { + "type": "scene", + "ele": "$..objects[?(@.name=='에너지원')]", + "points": 1.7, + "desc": "문제 1/물약(빨강)/[개체] 이름 설정 1/이름을 '에너지원'으로 변경하기", + "sort": 13 + }, + "1-4": { + "type": "scene", + "ele": "$..objects[?(@.name=='운석')]", + "points": 1.7, + "desc": "문제 1/검은 돌멩이/[개체] 이름 설정 2/이름을 '운석'으로 변경하기", + "sort": 14 + }, + "1-5": { + "type": "scene", + "ele": "$..objects[?(@.name=='행성')]", + "points": 1.7, + "desc": "문제 1/행성(5)/[개체] 이름 설정 3/이름을 '행성'으로 변경하기", + "sort": 15 + }, + "1-6": { + "type": "scene", + "ele": "$..objects[?(@.name=='우주선')]", + "points": 1.7, + "desc": "문제 1/우주선 탄 엔트리봇/[개체] 이름 설정 4/이름을 '우주선'으로 변경하기", + "sort": 16 + }, + "1-0": { + "ele": "$..variables[?(@.name=='연료')]", + "points": 1.38, + "desc": "문제 2/에너지원/변수 1/'연료' 변수 만들기 (변수 기본값은 '100', '모든 오브젝트에 사용' 설정하기)", + "type": "scene", + "sort": 101 + }, + "2-0": { + "ele": "$..variables[?(@.name=='점수')]", + "points": 1.38, + "desc": "문제 2/에너지원/변수 2/'점수' 변수 만들기 (변수 기본값은 '0', '모든 오브젝트에 사용' 설정하기)", + "type": "scene", + "sort": 102 + }, + "3-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'에너지원')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.38, + "desc": "문제 2/에너지원/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "50", + "points": 1.38, + "desc": "문제 2/에너지원/[시작]의 세부 동작/크기를 '50' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.38, + "desc": "문제 2/에너지원/반복/계속 반복하기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].type", + "answer": "hide", + "points": 1.38, + "desc": "문제 2/에너지원/[반복]의 세부 동작 1/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][1].type", + "$[0][2].statements[0][1].params[0].params[1].params[0]", + "$[0][2].statements[0][1].params[0].params[3].params[0]", + "$[0][2].statements[0][1].params[1].params[1].params[0]", + "$[0][2].statements[0][1].params[1].params[3].params[0]" + ], + "answer": [ + "locate_xy", + "-200", + "200", + "-100", + "100" + ], + "points": 1.38, + "desc": "문제 2/에너지원/[반복]의 세부 동작 2/x: '-200 부터 200 사이의 무작위 수' y: '-100 부터 100 사이의 무작위 수' 위치로 이동하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][2].type", + "$[0][2].statements[0][2].params[0].type", + "$[0][2].statements[0][2].params[0].params[1].params[0]", + "$[0][2].statements[0][2].params[0].params[3].params[0]" + ], + "answer": [ + "wait_second", + "calc_rand", + "1", + "2" + ], + "points": 1.38, + "desc": "문제 2/에너지원/[반복]의 세부 동작 3/'1 부터 2 사이의 무작위 수' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][3].type", + "answer": "show", + "points": 1.38, + "desc": "문제 2/에너지원/[반복]의 세부 동작 4/모양 보이기" + }, + { + "ele": [ + "$[0][2].statements[0][4].type", + "$[0][2].statements[0][4].params[0].params[0]" + ], + "answer": [ + "wait_second", + "1" + ], + "points": 1.38, + "desc": "문제 2/에너지원/[반복]의 세부 동작 5/'1' 초 기다리기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][5].type", + "$[0][2].statements[0][5].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.38, + "desc": "문제 2/에너지원/만일/만일 '우주선' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][5].statements[0][0].type", + "$[0][2].statements[0][5].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "10" + ], + "points": 1.38, + "desc": "문제 2/에너지원/[만일]의 세부 동작 1/'점수' 에 '10' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][5].statements[0][1].type", + "$[0][2].statements[0][5].statements[0][1].params[1].params[0]" + ], + "answer": [ + "change_variable", + "50" + ], + "points": 1.38, + "desc": "문제 2/에너지원/[만일]의 세부 동작 2/'연료' 에 '50' 만큼 더하기", + "type": "list" + } + ], + "sort": 105 + }, + "4-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'운석|검은 돌멩')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.38, + "desc": "문제 2/운석/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "30", + "points": 1.38, + "desc": "문제 2/운석/[시작]의 세부 동작/크기를 '30' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.38, + "desc": "문제 2/운석/반복/계속 반복하기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].type", + "answer": "hide", + "points": 1.38, + "desc": "문제 2/운석/[반복]의 세부 동작 1/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][1].type", + "$[0][2].statements[0][1].params[0].params[1].params[0]", + "$[0][2].statements[0][1].params[0].params[3].params[0]", + "$[0][2].statements[0][1].params[1].params[1].params[0]", + "$[0][2].statements[0][1].params[1].params[3].params[0]" + ], + "answer": [ + "locate_xy", + "-200", + "200", + "-100", + "100" + ], + "points": 1.38, + "desc": "문제 2/운석/[반복]의 세부 동작 2/x: '-200 부터 200 사이의 무작위 수' y: '-100 부터 100 사이의 무작위 수' 위치로 이동하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][2].type", + "$[0][2].statements[0][2].params[0].type", + "$[0][2].statements[0][2].params[0].params[1].params[0]", + "$[0][2].statements[0][2].params[0].params[3].params[0]" + ], + "answer": [ + "wait_second", + "calc_rand", + "0", + "3" + ], + "points": 1.38, + "desc": "문제 2/운석/[반복]의 세부 동작 3/'0 부터 3 사이의 무작위 수' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][3].type", + "answer": "show", + "points": 1.38, + "desc": "문제 2/운석/[반복]의 세부 동작 4/모양 보이기" + }, + { + "ele": [ + "$[0][2].statements[0][4].type", + "$[0][2].statements[0][4].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.5" + ], + "points": 1.38, + "desc": "문제 2/운석/[반복]의 세부 동작 5/'0.5' 초 기다리기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][5].type", + "$[0][2].statements[0][5].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.38, + "desc": "문제 2/운석/만일/만일 '우주선' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][5].statements[0][0].type", + "$[0][2].statements[0][5].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-5" + ], + "points": 1.38, + "desc": "문제 2/운석/[만일]의 세부 동작/'점수' 에 '-5' 만큼 더하기", + "type": "list" + } + ], + "sort": 115 + }, + "5-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'행성')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.38, + "desc": "문제 2/행성/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[0].params[0]", + "$[0][1].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "150", + "80" + ], + "points": 1.38, + "desc": "문제 2/행성/[시작]의 세부 동작/x: '150' y: '80' 위치로 이동하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.38, + "desc": "문제 2/행성/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].type", + "$[0][2].statements[0][0].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.38, + "desc": "문제 2/행성/만일/만일 '우주선' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][0].type", + "$[0][2].statements[0][0].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "50" + ], + "points": 1.38, + "desc": "문제 2/행성/[만일]의 세부 동작 1/'연료' 에 '50' 만큼 더하기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][1].type", + "answer": "hide", + "points": 1.38, + "desc": "문제 2/행성/[만일]의 세부 동작 2/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][1].type", + "$[0][2].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "1" + ], + "points": 1.38, + "desc": "문제 2/행성/[반복]의 세부 동작 1/'1' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][2].type", + "answer": "show", + "points": 1.38, + "desc": "문제 2/행성/[반복]의 세부 동작 2/모양 보이기" + } + ], + "sort": 125 + }, + "32-0": { + "ele": "$.messages[?(@.name=='탐사 성공')]", + "points": 1.38, + "desc": "문제 2/우주선/신호/'탐사 성공' 신호 만들기", + "type": "scene", + "sort": 132 + }, + "6-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'우주선')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.38, + "desc": "문제 2/우주선/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.38, + "desc": "문제 2/우주선/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][0].type", + "$[0][1].statements[0][0].params[0].type", + "$[0][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "37" + ], + "points": 1.38, + "desc": "문제 2/우주선/만일 1/만일 '왼쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][0].statements[0][0].type", + "$[0][1].statements[0][0].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_x", + "-5" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 1]의 세부 동작 1/x 좌표를 '-5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][0].statements[0][1].type", + "$[0][1].statements[0][0].statements[0][1].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-1" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 1]의 세부 동작 2/'연료' 에 '-1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][1].type", + "$[0][1].statements[0][1].params[0].type", + "$[0][1].statements[0][1].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "39" + ], + "points": 1.38, + "desc": "문제 2/우주선/만일 2/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][1].statements[0][0].type", + "$[0][1].statements[0][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_x", + "5" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 2]의 세부 동작 1/x 좌표를 '5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][1].statements[0][1].type", + "$[0][1].statements[0][1].statements[0][1].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-1" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 2]의 세부 동작 2/'연료' 에 '-1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][2].type", + "$[0][1].statements[0][2].params[0].type", + "$[0][1].statements[0][2].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "38" + ], + "points": 1.38, + "desc": "문제 2/우주선/만일 3/만일 '위쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][2].statements[0][0].type", + "$[0][1].statements[0][2].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + "5" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 3]의 세부 동작 1/y 좌표를 '5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][2].statements[0][1].type", + "$[0][1].statements[0][2].statements[0][1].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-1" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 3]의 세부 동작 2/'연료' 에 '-1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][3].type", + "$[0][1].statements[0][3].params[0].type", + "$[0][1].statements[0][3].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "40" + ], + "points": 1.38, + "desc": "문제 2/우주선/만일 4/만일 '아래쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][3].statements[0][0].type", + "$[0][1].statements[0][3].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + "-5" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 4]의 세부 동작 1/y 좌표를 '-5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][3].statements[0][1].type", + "$[0][1].statements[0][3].statements[0][1].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-1" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 4]의 세부 동작 2/'연료' 에 '-1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][1].statements[0][4].type", + "$[0][1].statements[0][4].params[0].type" + ], + "answer": [ + "_if", + "boolean_and_or" + ], + "points": 1.38, + "desc": "문제 2/우주선/만일 5/만일 '점수' 값 ≥ '30' '그리고' '연료' 값 > '0'", + "type": "list" + }, + { + "ele": "$[0][1].statements[0][4].statements[0][0].params[*].params", + "answer": [ + "탐사성공!", + "1" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 5]의 세부 동작 1/'탐사성공!' 을 '1' 초 동안 '말하기'" + }, + { + "ele": "$[0][1].statements[0][4].statements[0][1].type", + "answer": "message_cast", + "points": 1.38, + "desc": "문제 2/우주선/[만일 5]의 세부 동작 2/'탐사 성공' 신호 보내기" + }, + { + "ele": [ + "$[0][1].statements[0][5].type", + "$[0][1].statements[0][5].params[0].type", + "$[0][1].statements[0][5].params[0].params[0].type", + "$[0][1].statements[0][5].params[0].params[1]", + "$[0][1].statements[0][5].params[0].params[2].params[0]" + ], + "answer": [ + "_if", + "boolean_basic_operator", + "get_variable", + "LESS_OR_EQUAL", + "0" + ], + "points": 1.38, + "desc": "문제 2/우주선/만일 6/만일 '연료' 값 ≤ '0' 이라면", + "type": "list" + }, + { + "ele": "$[0][1].statements[0][5].statements[0][0].params[*].params", + "answer": [ + "미션실패", + "2" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 6]의 세부 동작 1/'미션실패' 를 '2' 초 동안 '말하기'" + }, + { + "ele": [ + "$[0][1].statements[0][5].statements[0][1].type", + "$[0][1].statements[0][5].statements[0][1].params[0]" + ], + "answer": [ + "stop_object", + "all" + ], + "points": 1.38, + "desc": "문제 2/우주선/[만일 6]의 세부 동작 2/'모든' 코드 멈추기", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_message_cast", + "points": 1.38, + "desc": "문제 2/우주선/탐사 성공/'탐사 성공' 신호를 받았을 때 " + }, + { + "ele": "$[1][1].type", + "answer": "start_neighbor_scene", + "points": 1.38, + "desc": "문제 2/우주선/[탐사 성공]의 세부 동작/'다음' 장면 시작하기" + } + ], + "sort": 133 + }, + "7-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'우주정거장')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_scene_start", + "points": 1.38, + "desc": "문제 2/우주정거장/장면/장면이 시작되었을 때" + }, + { + "ele": "$[0][1].type", + "answer": "hide_variable", + "points": 1.38, + "desc": "문제 2/우주정거장/[장면 2]의 세부 동작 1/변수 '연료' 숨기기" + }, + { + "ele": "$[0][2].type", + "answer": "hide_variable", + "points": 1.38, + "desc": "문제 2/우주정거장/[장면 2]의 세부 동작 2/변수 '점수' 숨기기" + }, + { + "ele": [ + "$[0][3].type", + "$[0][3].params[0].params[0]", + "$[0][3].params[1]" + ], + "answer": [ + "dialog", + "탐사 완료!", + "speak" + ], + "points": 1.38, + "desc": "문제 2/우주정거장/[장면 2]의 세부 동작 3/'탐사 완료!' 를 '말하기'", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_object_click", + "points": 2, + "desc": "문제 3/우주정거장/오브젝트/오브젝트를 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]", + "$[1][1].params[1].params[0]" + ], + "answer": [ + "add_effect_amount", + "color", + "50" + ], + "points": 2, + "desc": "문제 3/우주정거장/[오브젝트]의 세부 동작 1/'색깔' 효과를 '50' 만큼 주기", + "type": "list" + }, + { + "ele": [ + "$[1][2].type", + "$[1][2].params[0].params[0]", + "$[1][2].params[1]" + ], + "answer": [ + "dialog", + "처음부터 다시 실행합니다.", + "speak" + ], + "points": 2, + "desc": "문제 3/우주정거장/[오브젝트]의 세부 동작 2/'처음부터 다시 실행합니다.' 를 '말하기'", + "type": "list" + }, + { + "ele": [ + "$[1][3].type", + "$[1][3].params[0].params[0]" + ], + "answer": [ + "wait_second", + "2" + ], + "points": 2, + "desc": "문제 3/우주정거장/[오브젝트]의 세부 동작 3/'2' 초 기다리기", + "type": "list" + }, + { + "ele": "$[1][4].type", + "answer": "restart_project", + "points": 2, + "desc": "문제 3/우주정거장/[오브젝트]의 세부 동작 4/처음부터 다시 실행하기" + } + ], + "sort": 156 + } +} \ No newline at end of file diff --git a/correct/2508_CAS_2_B.json b/correct/2508_CAS_2_B.json new file mode 100644 index 0000000..2cc2547 --- /dev/null +++ b/correct/2508_CAS_2_B.json @@ -0,0 +1,825 @@ +{ + "1-1": { + "type": "scene", + "ele": "$..objects[?(@.name=='체육관')]", + "points": 1.7, + "desc": "문제 1/장면 1/[배경] 이름 설정 1/이름을 '체육관'으로 변경하기", + "sort": 11 + }, + "1-2": { + "type": "scene", + "ele": "$..objects[?(@.name=='복도')]", + "points": 1.7, + "desc": "문제 1/장면 2/[배경] 이름 설정 2/이름을 '복도'로 변경하기", + "sort": 12 + }, + "1-3": { + "type": "scene", + "ele": "$..objects[?(@.name=='곰인형')]", + "points": 1.6, + "desc": "문제 1/곰인형/[개체] 이름 설정 1/이름 변경 없음", + "sort": 13 + }, + "1-4": { + "type": "scene", + "ele": "$..objects[?(@.name=='풍선')]", + "points": 1.6, + "desc": "문제 1/풍선/[개체] 이름 설정 2/이름 변경 없음", + "sort": 14 + }, + "1-5": { + "type": "scene", + "ele": "$..objects[?(@.name=='다트 날개')]", + "points": 1.7, + "desc": "문제 1/빛나는 효과/[개체] 이름 설정 3/이름을 '다트 날개'로 변경하기", + "sort": 15 + }, + "1-6": { + "type": "scene", + "ele": "$..objects[?(@.name=='다트')]", + "points": 1.7, + "desc": "문제 1/룰렛 화살표/[개체] 이름 설정 4/이름을 '다트'로 변경하기", + "sort": 16 + }, + "1-0": { + "ele": "$..variables[?(@.name=='다트 개수')]", + "points": 1.29, + "desc": "문제 2/곰인형/변수 1/'다트 개수' 변수 만들기 (변수 기본값은 '0', '모든 오브젝트에 사용' 설정하기)", + "type": "scene", + "sort": 101 + }, + "2-0": { + "ele": "$..variables[?(@.name=='점수')]", + "points": 1.29, + "desc": "문제 2/곰인형/변수 2/'점수' 변수 만들기 (변수 기본값은 '0', '모든 오브젝트에 사용' 설정하기)", + "type": "scene", + "sort": 102 + }, + "3-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'곰인형')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.29, + "desc": "문제 2/곰인형/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[0].params[0]", + "$[0][1].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "180", + "-70" + ], + "points": 1.29, + "desc": "문제 2/곰인형/[시작]의 세부 동작 1/x: '180' y: '-70' 위치로 이동하기", + "type": "list" + }, + { + "ele": "$[0][2].params[0].params[0]", + "answer": "25", + "points": 1.29, + "desc": "문제 2/곰인형/[시작]의 세부 동작 2/크기를 '25' 로 정하기" + }, + { + "ele": "$[0][3].type", + "answer": "hide", + "points": 1.29, + "desc": "문제 2/곰인형/[시작]의 세부 동작 3/모양 숨기기" + }, + { + "ele": [ + "$[0][4].type", + "$[0][4].params[0].params[0]" + ], + "answer": [ + "repeat_basic", + "3" + ], + "points": 1.29, + "desc": "문제 2/곰인형/반복/'3' 번 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][4].statements[0][0].type", + "$[0][4].statements[0][0].params[0]" + ], + "answer": [ + "create_clone", + "self" + ], + "points": 1.29, + "desc": "문제 2/곰인형/[반복]의 세부 동작 1/'자신' 의 복제본 만들기", + "type": "list" + }, + { + "ele": [ + "$[0][4].statements[0][1].type", + "$[0][4].statements[0][1].params[0].params[0]" + ], + "answer": [ + "move_y", + "70" + ], + "points": 1.29, + "desc": "문제 2/곰인형/[반복]의 세부 동작 2/y 좌표를 '70' 만큼 바꾸기", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_clone_start", + "points": 1.29, + "desc": "문제 2/곰인형/복제본/복제본이 처음 생성되었을 때" + }, + { + "ele": "$[1][1].type", + "answer": "show", + "points": 1.29, + "desc": "문제 2/곰인형/[복제본]의 세부 동작/모양 보이기" + }, + { + "ele": [ + "$[1][2].type", + "$[1][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.29, + "desc": "문제 2/곰인형/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][0].type", + "$[1][2].statements[0][0].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.29, + "desc": "문제 2/곰인형/만일/만일 '다트'에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][0].statements[0][0].type", + "$[1][2].statements[0][0].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-5" + ], + "points": 1.29, + "desc": "문제 2/곰인형/[만일]의 세부 동작 1/'점수' 에 '-5' 만큼 더하기", + "type": "list" + }, + { + "ele": "$[1][2].statements[0][0].statements[0][1].type", + "answer": "delete_clone", + "points": 1.29, + "desc": "문제 2/곰인형/[만일]의 세부 동작 2/이 복제본 삭제하기" + } + ], + "sort": 105 + }, + "4-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'풍선')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.29, + "desc": "문제 2/풍선/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[0].params[0]", + "$[0][1].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "130", + "-100" + ], + "points": 1.29, + "desc": "문제 2/풍선/[시작]의 세부 동작 1/x: '130' y: '-100' 위치로 이동하기", + "type": "list" + }, + { + "ele": "$[0][2].params[0].params[0]", + "answer": "30", + "points": 1.29, + "desc": "문제 2/풍선/[시작]의 세부 동작 2/크기를 '30' 으로 정하기" + }, + { + "ele": "$[0][3].type", + "answer": "hide", + "points": 1.29, + "desc": "문제 2/풍선/[시작]의 세부 동작 3/모양 숨기기" + }, + { + "ele": [ + "$[0][4].type", + "$[0][4].params[0].params[0]" + ], + "answer": [ + "repeat_basic", + "6" + ], + "points": 1.29, + "desc": "문제 2/풍선/반복/'6' 번 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][4].statements[0][0].type", + "$[0][4].statements[0][0].params[0]" + ], + "answer": [ + "create_clone", + "self" + ], + "points": 1.29, + "desc": "문제 2/풍선/[반복]의 세부 동작 1/'자신' 의 복제본 만들기", + "type": "list" + }, + { + "ele": [ + "$[0][4].statements[0][1].type", + "$[0][4].statements[0][1].params[0].params[0]" + ], + "answer": [ + "move_y", + "40" + ], + "points": 1.29, + "desc": "문제 2/풍선/[반복]의 세부 동작 2/y 좌표를 '40' 만큼 바꾸기", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_clone_start", + "points": 1.29, + "desc": "문제 2/풍선/복제본/복제본이 처음 생성되었을 때" + }, + { + "ele": "$[1][1].type", + "answer": "show", + "points": 1.29, + "desc": "문제 2/풍선/[복제본]의 세부 동작/모양 보이기" + }, + { + "ele": [ + "$[1][2].type", + "$[1][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.29, + "desc": "문제 2/풍선/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][0].type", + "$[1][2].statements[0][0].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.29, + "desc": "문제 2/풍선/만일/만일 '다트' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][0].statements[0][0].type", + "$[1][2].statements[0][0].statements[0][0].params[0].type" + ], + "answer": [ + "change_to_some_shape", + "get_pictures" + ], + "points": 1.29, + "desc": "문제 2/풍선/[만일]의 세부 동작 1/'풍선_터짐' 모양으로 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][0].statements[0][1].type", + "$[1][2].statements[0][0].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.5" + ], + "points": 1.29, + "desc": "문제 2/풍선/[만일]의 세부 동작 2/'0.5' 초 기다리기", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][0].statements[0][2].type", + "$[1][2].statements[0][0].statements[0][2].params[1].params[0]" + ], + "answer": [ + "change_variable", + "10" + ], + "points": 1.29, + "desc": "문제 2/풍선/[만일]의 세부 동작 3/'점수' 에 '10' 만큼 더하기", + "type": "list" + }, + { + "ele": "$[1][2].statements[0][0].statements[0][3].type", + "answer": "delete_clone", + "points": 1.29, + "desc": "문제 2/풍선/[만일]의 세부 동작 4/이 복제본 삭제하기" + } + ], + "sort": 117 + }, + "5-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'다트 날개|빛나는 효')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.29, + "desc": "문제 2/다트 날개/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "50", + "points": 1.29, + "desc": "문제 2/다트 날개/[시작]의 세부 동작/크기를 '50' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.29, + "desc": "문제 2/다트 날개/반복/계속 반복하기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].type", + "answer": "locate", + "points": 1.29, + "desc": "문제 2/다트 날개/[반복]의 세부 동작 1/'다트' 위치로 이동하기" + }, + { + "ele": [ + "$[0][2].statements[0][1].type", + "$[0][2].statements[0][1].params[0].params[0]" + ], + "answer": [ + "move_x", + "-20" + ], + "points": 1.29, + "desc": "문제 2/다트 날개/[반복]의 세부 동작 2/x 좌표를 '-20' 만큼 바꾸기", + "type": "list" + } + ], + "sort": 132 + }, + "6-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'다트|룰렛 화살')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.29, + "desc": "문제 2/다트/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[1].params[0]" + ], + "answer": [ + "set_variable", + "10" + ], + "points": 1.29, + "desc": "문제 2/다트/[시작]의 세부 동작 1/'다트 개수' 를 '10' 으로 정하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "-180", + "-20" + ], + "points": 1.29, + "desc": "문제 2/다트/[시작]의 세부 동작 2/x: '-180' y: '-20' 위치로 이동하기", + "type": "list" + }, + { + "ele": [ + "$[0][3].type", + "$[0][3].params[0].params[0]" + ], + "answer": [ + "rotate_absolute", + "90" + ], + "points": 1.29, + "desc": "문제 2/다트/[시작]의 세부 동작 3/방향을 '90°' 로 정하기", + "type": "list" + }, + { + "ele": "$[0][4].params[0].params[0]", + "answer": "40", + "points": 1.29, + "desc": "문제 2/다트/[시작]의 세부 동작 4/크기를 '40' 으로 정하기" + }, + { + "ele": [ + "$[0][5].type", + "$[0][5].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.29, + "desc": "문제 2/다트/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][5].statements[0][0].type", + "$[0][5].statements[0][0].params[0].type", + "$[0][5].statements[0][0].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "38" + ], + "points": 1.29, + "desc": "문제 2/다트/만일 1/만일 '위쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][5].statements[0][0].statements[0][0].type", + "$[0][5].statements[0][0].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + "3" + ], + "points": 1.29, + "desc": "문제 2/다트/[만일 1]의 세부 동작/y 좌표를 '3' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[0][5].statements[0][1].type", + "$[0][5].statements[0][1].params[0].type", + "$[0][5].statements[0][1].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "40" + ], + "points": 1.29, + "desc": "문제 2/다트/만일 2/만일 '아래쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][5].statements[0][1].statements[0][0].type", + "$[0][5].statements[0][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + "-3" + ], + "points": 1.29, + "desc": "문제 2/다트/[만일 2]의 세부 동작/y 좌표를 '-3' 만큼 바꾸기", + "type": "list" + }, + { + "ele": "$[1][0].params", + "answer": [ + null, + "32" + ], + "points": 1.29, + "desc": "문제 2/다트/스페이스/'스페이스' 키를 눌렀을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0].type", + "$[1][1].params[0].params[0].type", + "$[1][1].params[0].params[1]", + "$[1][1].params[0].params[2].params[0]" + ], + "answer": [ + "if_else", + "boolean_basic_operator", + "get_variable", + "GREATER_OR_EQUAL", + "50" + ], + "points": 1.29, + "desc": "문제 2/다트/만일/만일 '점수' 값 ≥ '50' 이라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0]" + ], + "answer": [ + "stop_object", + "all" + ], + "points": 1.29, + "desc": "문제 2/다트/[만일]의 세부 동작/'모든' 코드 멈추기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[1][0].type", + "$[1][1].statements[1][0].params[0].params[0]", + "$[1][1].statements[1][0].params[1].params[0]", + "$[1][1].statements[1][0].params[2].params[0]" + ], + "answer": [ + "locate_xy_time", + "1", + "330", + null + ], + "points": 1.29, + "desc": "문제 2/다트/[아니면]의 세부 동작 1/'1' 초 동안 x: '330' y: '자신의 y 좌푯값' 위치로 이동하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[1][1].type", + "$[1][1].statements[1][1].params[0].params[0]", + "$[1][1].statements[1][1].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "-180", + "-20" + ], + "points": 1.29, + "desc": "문제 2/다트/[아니면]의 세부 동작 2/x: '-180' y: '-20' 위치로 이동하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[1][2].type", + "$[1][1].statements[1][2].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-1" + ], + "points": 1.29, + "desc": "문제 2/다트/[아니면]의 세부 동작 3/'다트 개수' 에 '-1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[1][3].type", + "$[1][1].statements[1][3].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.1" + ], + "points": 1.29, + "desc": "문제 2/다트/[아니면]의 세부 동작 4/'0.1' 초 기다리기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[1][4].type", + "$[1][1].statements[1][4].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.29, + "desc": "문제 2/다트/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[1][4].statements[0][0].type", + "$[1][1].statements[1][4].statements[0][0].params[0].type", + "$[1][1].statements[1][4].statements[0][0].params[0].params[0].params[0].type", + "$[1][1].statements[1][4].statements[0][0].params[0].params[0].params[1]", + "$[1][1].statements[1][4].statements[0][0].params[0].params[0].params[2].params[0]", + "$[1][1].statements[1][4].statements[0][0].params[0].params[1]", + "$[1][1].statements[1][4].statements[0][0].params[0].params[2].type", + "$[1][1].statements[1][4].statements[0][0].params[0].params[2].params[0].type", + "$[1][1].statements[1][4].statements[0][0].params[0].params[2].params[1]", + "$[1][1].statements[1][4].statements[0][0].params[0].params[2].params[2].params[0]" + ], + "answer": [ + "_if", + "boolean_and_or", + "get_variable", + "EQUAL", + "0", + "AND", + "boolean_basic_operator", + "get_variable", + "LESS", + "50" + ], + "points": 1.31, + "desc": "문제 2/다트/만일 1/만일 '다트 개수' 값 = '0' '그리고' '점수 값' < '50' 이라면", + "type": "list" + }, + { + "ele": "$[1][1].statements[1][4].statements[0][0].statements[0][0].type", + "answer": "start_neighbor_scene", + "points": 1.29, + "desc": "문제 2/다트/[만일 1]의 세부 동작/'다음' 장면 시작하기" + }, + { + "ele": [ + "$[1][1].statements[1][4].statements[0][1].type", + "$[1][1].statements[1][4].statements[0][1].params[0].type", + "$[1][1].statements[1][4].statements[0][1].params[0].params[0].type", + "$[1][1].statements[1][4].statements[0][1].params[0].params[1]", + "$[1][1].statements[1][4].statements[0][1].params[0].params[2].params[0]" + ], + "answer": [ + "_if", + "boolean_basic_operator", + "get_variable", + "GREATER_OR_EQUAL", + "50" + ], + "points": 1.29, + "desc": "문제 2/다트/만일 2/만일 '점수' 값 ≥ '50' 이라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[1][4].statements[0][1].statements[0][0].type", + "$[1][1].statements[1][4].statements[0][1].statements[0][0].params[0].params[0]", + "$[1][1].statements[1][4].statements[0][1].statements[0][0].params[1]" + ], + "answer": [ + "dialog", + "미션 성공!", + "speak" + ], + "points": 1.29, + "desc": "문제 2/다트/[만일 2]의 세부 동작 1/'미션 성공!' 을 '말하기'", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[1][4].statements[0][1].statements[0][1].type", + "$[1][1].statements[1][4].statements[0][1].statements[0][1].params[0]" + ], + "answer": [ + "stop_object", + "all" + ], + "points": 1.29, + "desc": "문제 2/다트/[만일 2]의 세부 동작 2/'모든' 코드 멈추기", + "type": "list" + } + ], + "sort": 137 + }, + "7-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'복도|장면 ')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_scene_start", + "points": 1.29, + "desc": "문제 2/복도/장면/장면이 시작되었을 때" + }, + { + "ele": "$[0][1].type", + "answer": "hide_variable", + "points": 1.29, + "desc": "문제 2/복도/[장면 2]의 세부 동작 1/변수 '다트 개수' 숨기기" + }, + { + "ele": "$[0][2].type", + "answer": "hide_variable", + "points": 1.29, + "desc": "문제 2/복도/[장면 2]의 세부 동작 2/변수 '점수' 숨기기" + }, + { + "ele": [ + "$[0][3].type", + "$[0][3].params[0].params[0]", + "$[0][3].params[1]" + ], + "answer": [ + "dialog", + "미션 실패!", + "speak" + ], + "points": 1.29, + "desc": "문제 2/복도/[장면 2]의 세부 동작 3/'미션 실패!' 를 '말하기'", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_object_click", + "points": 2, + "desc": "문제 3/복도/오브젝트/오브젝트를 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]", + "$[1][1].params[1].params[0]" + ], + "answer": [ + "add_effect_amount", + "color", + "60" + ], + "points": 2, + "desc": "문제 3/복도/[오브젝트]의 세부 동작 1/'색깔' 효과를 '60' 만큼 주기", + "type": "list" + }, + { + "ele": [ + "$[1][2].type", + "$[1][2].params[0].params[0]", + "$[1][2].params[1]" + ], + "answer": [ + "dialog", + "처음부터 다시 실행합니다.", + "speak" + ], + "points": 2, + "desc": "문제 3/복도/[오브젝트]의 세부 동작 2/'처음부터 다시 실행합니다.' 를 '말하기'", + "type": "list" + }, + { + "ele": [ + "$[1][3].type", + "$[1][3].params[0].params[0]" + ], + "answer": [ + "wait_second", + "2" + ], + "points": 2, + "desc": "문제 3/복도/[오브젝트]의 세부 동작 3/'2' 초 기다리기", + "type": "list" + }, + { + "ele": "$[1][4].type", + "answer": "restart_project", + "points": 2, + "desc": "문제 3/복도/[오브젝트]의 세부 동작 4/처음부터 다시 실행하기" + } + ], + "sort": 160 + } +} \ No newline at end of file diff --git a/correct/_2508_CAS_2_A.json b/correct/_2508_CAS_2_A.json new file mode 100644 index 0000000..86b9a67 --- /dev/null +++ b/correct/_2508_CAS_2_A.json @@ -0,0 +1,877 @@ +{ + "1-1": { + "type": "scene", + "ele": "$..objects[?(@.name=='우주')]", + "points": 1.8, + "desc": "장면 1/[배경] 이름 설정 1/이름을 ‘우주’로 변경하기", + "sort": 11 + }, + "1-2": { + "type": "scene", + "ele": "$..objects[?(@.name=='우주정거장')]", + "points": 1.8, + "desc": "장면 2/[배경] 이름 설정 2/이름 변경 없음", + "sort": 12 + }, + "1-3": { + "type": "scene", + "ele": "$..objects[?(@.name=='에너지원')]", + "points": 1.6, + "desc": "물약(빨강)/[개체] 이름 설정 1/이름을 ‘에너지원’으로 변경하기", + "sort": 13 + }, + "1-4": { + "type": "scene", + "ele": "$..objects[?(@.name=='운석')]", + "points": 1.6, + "desc": "검은 돌멩이/[개체] 이름 설정 2/이름을 ‘운석’으로 변경하기", + "sort": 14 + }, + "1-5": { + "type": "scene", + "ele": "$..objects[?(@.name=='행성')]", + "points": 1.6, + "desc": "행성(5)/[개체] 이름 설정 3/이름을 ‘행성’으로 변경하기", + "sort": 15 + }, + "1-6": { + "type": "scene", + "ele": "$..objects[?(@.name=='우주선')]", + "points": 1.6, + "desc": "우주선 탄 엔트리봇/[개체] 이름 설정 4/이름을 ‘우주선’으로 변경하기", + "sort": 16 + }, + "1-7": { + "type": "scene", + "ele": "$..variables[?(@.name=='연료')]", + "points": 1, + "desc": "문제 2/에너지원/변수 1/‘연료’변수 만들기 (변수 기본값은 ‘100’, ‘모든 오브젝트에 사용’ 설정하기)", + "sort": 101 + }, + "1-8": { + "type": "scene", + "ele": "$..variables[?(@.name=='점수')]", + "points": 1, + "desc": "문제 2/에너지원/변수 2/‘점수’ 변수 만들기 (변수 기본값은 ‘0’, ‘모든 오브젝트에 사용’ 설정하기)", + "sort": 102 + }, + "2-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'에너지원')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/에너지원/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "50", + "points": 1.2, + "desc": "문제 2/에너지원/[시작]의 세부 동작/크기를 ‘50’ 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/에너지원/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].type", + "$[0][2].statements[0][0].params[0]" + ], + "answer": [ + "hide", + null + ], + "points": 1.2, + "desc": "문제 2/에너지원/[반복]의 세부 동작 1/모양 숨기기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][0].type", + "$[0][2].statements[0][0].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "1" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 1/'물고기 수'에 '1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][1].type", + "$[0][2].statements[0][0].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.01" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 2/'0.01' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][2].type", + "answer": "hide", + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 3/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][3].type", + "$[0][2].statements[0][0].statements[0][3].params[0].type", + "$[0][2].statements[0][0].statements[0][3].params[0].params[1].params[0]", + "$[0][2].statements[0][0].statements[0][3].params[0].params[3].params[0]" + ], + "answer": [ + "wait_second", + "calc_rand", + "0.5", + "3" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 4/'0.5 부터 3 사이의 무작위 수' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][4].type", + "answer": "show", + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 5/모양 보이기" + }, + { + "ele": "$[1][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/빨간 물고기/시작2/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_direction", + null + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[반복]의 세부 동작 1/이동 방향으로 '1 부터 2 사이의 무작위 수' 만큼 움직이기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].type", + "$[1][1].statements[0][1].params[0].params[1].params[0]", + "$[1][1].statements[0][1].params[0].params[3].params[0]" + ], + "answer": [ + "direction_relative", + "calc_rand", + "-1", + "1" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[반복]의 세부 동작 2/이동 방향을 '-1 부터 1 사이의 무작위 수' 만큼 회전하기", + "type": "list" + }, + { + "ele": "$[1][1].statements[0][2].type", + "answer": "bounce_wall", + "points": 1.2, + "desc": "문제 2/빨간 물고기/[반복]의 세부 동작 3/화면 끝에 닿으면 튕기기" + } + ], + "sort": 102, + "list": [ + "set_scale_size", + "repeat_inf" + ] + }, + "3-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'노란 물고기|물고')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/노란 물고기/시작1/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "30", + "points": 1.2, + "desc": "문제 2/노란 물고기/[시작1]의 세부 동작 1/크기를 '30' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].type", + "$[0][2].statements[0][0].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/만일/만일 '상어' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][0].type", + "$[0][2].statements[0][0].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "2" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 1/물고기 수'에 '2' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][1].type", + "$[0][2].statements[0][0].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.01" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 2/'0.01' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][2].type", + "answer": "hide", + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 3/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][3].type", + "$[0][2].statements[0][0].statements[0][3].params[0].type", + "$[0][2].statements[0][0].statements[0][3].params[0].params[1].params[0]", + "$[0][2].statements[0][0].statements[0][3].params[0].params[3].params[0]" + ], + "answer": [ + "wait_second", + "calc_rand", + "0.5", + "1.5" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 4/'0.5' 부터 '1.5' 사이의 무작위 수' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][4].type", + "answer": "show", + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 5/모양 보이기" + }, + { + "ele": "$[1][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/노란 물고기/시작2/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_direction", + null + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[반복]의 세부 동작 1/이동 방향으로 '1 부터 2 사이의 무작위 수' 만큼 움직이기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].type", + "$[1][1].statements[0][1].params[0].params[1].params[0]", + "$[1][1].statements[0][1].params[0].params[3].params[0]" + ], + "answer": [ + "direction_relative", + "calc_rand", + "-1", + "1" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[반복]의 세부 동작 2/이동 방향을 '-1 부터 1 사이의 무작위 수' 만큼 회전하기", + "type": "list" + }, + { + "ele": "$[1][1].statements[0][2].type", + "answer": "bounce_wall", + "points": 1.2, + "desc": "문제 2/노란 물고기/[반복]의 세부 동작 3/화면 끝에 닿으면 튕기기" + } + ], + "sort": 117, + "list": [ + "set_scale_size", + "repeat_inf" + ] + }, + "4-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'쓰레기')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/쓰레기/시작1/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "30", + "points": 1.2, + "desc": "문제 2/쓰레기/[시작1]의 세부 동작 1/크기를 '30' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/쓰레기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].type", + "$[0][2].statements[0][0].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/만일/만일 '상어' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][0].type", + "$[0][2].statements[0][0].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-1" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 1/물고기 수'에 '-1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][1].type", + "$[0][2].statements[0][0].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.01" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 2/'0.01' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][2].type", + "answer": "hide", + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 3/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][3].type", + "$[0][2].statements[0][0].statements[0][3].params[0].type", + "$[0][2].statements[0][0].statements[0][3].params[0].params[1].params[0]", + "$[0][2].statements[0][0].statements[0][3].params[0].params[3].params[0]" + ], + "answer": [ + "wait_second", + "calc_rand", + "0.5", + "3" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 4/'0.5 부터 3 사이의 무작위 수' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][4].type", + "answer": "show", + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 5/모양 보이기" + }, + { + "ele": "$[1][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/쓰레기/시작2/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/쓰레기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_direction", + null + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[반복]의 세부 동작 1/이동 방향으로 '1 부터 2 사이의 무작위 수' 만큼 움직이기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].type", + "$[1][1].statements[0][1].params[0].params[1].params[0]", + "$[1][1].statements[0][1].params[0].params[3].params[0]" + ], + "answer": [ + "direction_relative", + "calc_rand", + "-1", + "1" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[반복]의 세부 동작 2/이동 방향을 '-1 부터 1 사이의 무작위 수' 만큼 회전하기", + "type": "list" + }, + { + "ele": "$[1][1].statements[0][2].type", + "answer": "bounce_wall", + "points": 1.2, + "desc": "문제 2/쓰레기/[반복]의 세부 동작 3/화면 끝에 닿으면 튕기기" + } + ], + "sort": 131, + "list": [ + "set_scale_size", + "repeat_inf" + ] + }, + "44-0": { + "ele": "$.messages[?(@.name=='성공')]", + "points": 1, + "desc": "문제 2/상어/신호/'성공'신호 만들기", + "type": "scene", + "sort": 144 + }, + "5-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'상어')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/상어/시작1/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "50", + "points": 1.2, + "desc": "문제 2/상어/[시작]의 세부 동작 1/크기를 '50' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "-100", + "0" + ], + "points": 1.2, + "desc": "문제 2/상어/[시작]의 세부 동작 2/x: '-100' y: '0' 위치로 이동하기", + "type": "list" + }, + { + "ele": [ + "$[0][3].type", + "$[0][3].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/상어/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][3].statements[0][0].type", + "$[0][3].statements[0][0].params[0].type", + "$[0][3].statements[0][0].params[0].params[0].type", + "$[0][3].statements[0][0].params[0].params[1]", + "$[0][3].statements[0][0].params[0].params[2].params[0]" + ], + "answer": [ + "_if", + "boolean_basic_operator", + "get_variable", + "GREATER", + "10" + ], + "points": 1.2, + "desc": "문제 2/상어/만일/만일 '물고기 수' 값 > '10' 이라면", + "type": "list" + }, + { + "ele": "$[0][3].statements[0][0].statements[0][0].type", + "answer": "message_cast", + "points": 1.2, + "desc": "문제 2/상어/[만일]의 세부 동작 1/성공' 신호보내기" + }, + { + "ele": [ + "$[0][3].statements[0][0].statements[0][1].type", + "$[0][3].statements[0][0].statements[0][1].params[0]" + ], + "answer": [ + "stop_object", + "thisOnly" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일]의 세부 동작 2/자신의' 코드 멈추기", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/상어/시작2/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/상어/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "37" + ], + "points": 1.2, + "desc": "문제 2/상어/만일1/만일 '왼쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].statements[0][0].type", + "$[1][1].statements[0][0].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_x", + "-5" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일1]의 세부 동작 1/x 좌표를 '-5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].type", + "$[1][1].statements[0][1].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "39" + ], + "points": 1.2, + "desc": "문제 2/상어/만일2/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].statements[0][0].type", + "$[1][1].statements[0][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_x", + "5" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일2]의 세부 동작 1/x 좌표를 '5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][2].type", + "$[1][1].statements[0][2].params[0].type", + "$[1][1].statements[0][2].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "38" + ], + "points": 1.2, + "desc": "문제 2/상어/만일3/만일 '위쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][2].statements[0][0].type", + "$[1][1].statements[0][2].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + "5" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일3]의 세부 동작 1/y 좌표를 '5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][3].type", + "$[1][1].statements[0][3].params[0].type", + "$[1][1].statements[0][3].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "40" + ], + "points": 1.2, + "desc": "문제 2/상어/만일4/만일 '아래쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][3].statements[0][0].type", + "$[1][1].statements[0][3].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + "-5" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일4]의 세부 동작 1/y 좌표를 '-5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": "$[2][0].type", + "answer": "when_message_cast", + "points": 1.2, + "desc": "문제 2/상어/신호/'성공' 신호를 받았을 때 " + }, + { + "ele": "$[2][1].params[*].params", + "answer": [ + "배부르다!", + "1" + ], + "points": 1.2, + "desc": "문제 2/상어/[신호]의 세부 동작 1/'배부르다!' 를 '1'초 동안 '말하기'" + }, + { + "ele": "$[2][2].type", + "answer": "start_neighbor_scene", + "points": 1.2, + "desc": "문제 2/상어/[신호]의 세부 동작 2/'다음' 장면 시작하기" + } + ], + "sort": 145, + "list": [ + "set_scale_size", + "repeat_inf", + "dialog_time" + ] + }, + "6-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'바다2|바닷속\\(3\\)1')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_scene_start", + "points": 1.2, + "desc": "문제 2/바다2/장면 2/장면이 시작되었을 때" + }, + { + "ele": "$[0][1].type", + "answer": "hide_variable", + "points": 1.2, + "desc": "문제 2/바다2/[장면 2]의 세부 동작 1/변수 '물고기 수' 숨기기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1]" + ], + "answer": [ + "dialog", + "미션성공!", + "speak" + ], + "points": 1.2, + "desc": "문제 2/바다2/[장면 2]의 세부 동작 2/'미션성공!' 을 '말하기'", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_object_click", + "points": 2, + "desc": "문제 3/바다2/오브젝트/오브젝트를 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]", + "$[1][1].params[1].params[0]" + ], + "answer": [ + "add_effect_amount", + "color", + "30" + ], + "points": 2, + "desc": "문제 3/바다2/[오브젝트]의 세부 동작 1/'색깔' 효과를 '30' 만큼 주기", + "type": "list" + }, + { + "ele": [ + "$[1][2].type", + "$[1][2].params[0].params[0]", + "$[1][2].params[1]" + ], + "answer": [ + "dialog", + "처음부터 다시 실행!", + "speak" + ], + "points": 2, + "desc": "문제 3/바다2/[오브젝트]의 세부 동작 2/'처음부터 다시 실행!' 을 '말하기'", + "type": "list" + }, + { + "ele": [ + "$[1][3].type", + "$[1][3].params[0].params[0]" + ], + "answer": [ + "wait_second", + "2" + ], + "points": 2, + "desc": "문제 3/바다2/[오브젝트]의 세부 동작 3/'2' 초 기다리기", + "type": "list" + }, + { + "ele": "$[1][4].type", + "answer": "restart_project", + "points": 2, + "desc": "문제 3/바다2/[오브젝트]의 세부 동작 4/처음부터 다시 실행하기" + } + ], + "sort": 166, + "list": [ + "hide_variable", + "add_effect_amount" + ] + } +} \ No newline at end of file diff --git a/correct/_2508_CAS_2_B.json b/correct/_2508_CAS_2_B.json new file mode 100644 index 0000000..0e44a46 --- /dev/null +++ b/correct/_2508_CAS_2_B.json @@ -0,0 +1,870 @@ +{ + "1-1": { + "type": "scene", + "ele": "$..objects[?(@.name=='바다1')]", + "points": 1.8, + "desc": "문제 1/장면 1/[배경] 이름 설정 1/이름을 '바다1'로 변경하기", + "sort": 11 + }, + "1-2": { + "type": "scene", + "ele": "$..objects[?(@.name=='바다2')]", + "points": 1.8, + "desc": "문제 1/장면 2/[배경] 이름 설정 2/이름을 '바다2'로 변경하기", + "sort": 12 + }, + "1-3": { + "type": "scene", + "ele": "$..objects[?(@.name=='빨간 물고기')]", + "points": 1.6, + "desc": "문제 1/빨간 물고기/[개체] 이름 설정 1/이름 변경 없음", + "sort": 13 + }, + "1-4": { + "type": "scene", + "ele": "$..objects[?(@.name=='노란 물고기')]", + "points": 1.6, + "desc": "문제 1/물고기/[개체] 이름 설정 2/이름을 '노란 물고기'로 변경하기", + "sort": 14 + }, + "1-5": { + "type": "scene", + "ele": "$..objects[?(@.name=='쓰레기')]", + "points": 1.6, + "desc": "문제 1/쓰레기/[개체] 이름 설정 3/이름 변경 없음", + "sort": 15 + }, + "1-6": { + "type": "scene", + "ele": "$..objects[?(@.name=='상어')]", + "points": 1.6, + "desc": "문제 1/상어(1)/[개체] 이름 설정 4/이름을 '상어'로 변경하기", + "sort": 16 + }, + "1-7": { + "type": "scene", + "ele": "$..variables[?(@.name=='물고기 수')]", + "points": 1, + "desc": "문제 2/빨간 물고기/변수/'물고기 수' 변수 만들기", + "sort": 101 + }, + "2-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'빨간 물고기')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/빨간 물고기/시작1/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "30", + "points": 1.2, + "desc": "문제 2/빨간 물고기/[시작1]의 세부 동작 1/크기를 '30' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].type", + "$[0][2].statements[0][0].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/만일/만일 '상어' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][0].type", + "$[0][2].statements[0][0].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "1" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 1/'물고기 수'에 '1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][1].type", + "$[0][2].statements[0][0].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.01" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 2/'0.01' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][2].type", + "answer": "hide", + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 3/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][3].type", + "$[0][2].statements[0][0].statements[0][3].params[0].type", + "$[0][2].statements[0][0].statements[0][3].params[0].params[1].params[0]", + "$[0][2].statements[0][0].statements[0][3].params[0].params[3].params[0]" + ], + "answer": [ + "wait_second", + "calc_rand", + "0.5", + "3" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 4/'0.5 부터 3 사이의 무작위 수' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][4].type", + "answer": "show", + "points": 1.2, + "desc": "문제 2/빨간 물고기/[만일]의 세부 동작 5/모양 보이기" + }, + { + "ele": "$[1][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/빨간 물고기/시작2/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_direction", + null + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[반복]의 세부 동작 1/이동 방향으로 '1 부터 2 사이의 무작위 수' 만큼 움직이기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].type", + "$[1][1].statements[0][1].params[0].params[1].params[0]", + "$[1][1].statements[0][1].params[0].params[3].params[0]" + ], + "answer": [ + "direction_relative", + "calc_rand", + "-1", + "1" + ], + "points": 1.2, + "desc": "문제 2/빨간 물고기/[반복]의 세부 동작 2/이동 방향을 '-1 부터 1 사이의 무작위 수' 만큼 회전하기", + "type": "list" + }, + { + "ele": "$[1][1].statements[0][2].type", + "answer": "bounce_wall", + "points": 1.2, + "desc": "문제 2/빨간 물고기/[반복]의 세부 동작 3/화면 끝에 닿으면 튕기기" + } + ], + "sort": 102, + "list": [ + "set_scale_size", + "repeat_inf" + ] + }, + "3-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'노란 물고기|물고')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/노란 물고기/시작1/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "30", + "points": 1.2, + "desc": "문제 2/노란 물고기/[시작1]의 세부 동작 1/크기를 '30' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].type", + "$[0][2].statements[0][0].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/만일/만일 '상어' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][0].type", + "$[0][2].statements[0][0].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "2" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 1/물고기 수'에 '2' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][1].type", + "$[0][2].statements[0][0].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.01" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 2/'0.01' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][2].type", + "answer": "hide", + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 3/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][3].type", + "$[0][2].statements[0][0].statements[0][3].params[0].type", + "$[0][2].statements[0][0].statements[0][3].params[0].params[1].params[0]", + "$[0][2].statements[0][0].statements[0][3].params[0].params[3].params[0]" + ], + "answer": [ + "wait_second", + "calc_rand", + "0.5", + "1.5" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 4/'0.5' 부터 '1.5' 사이의 무작위 수' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][4].type", + "answer": "show", + "points": 1.2, + "desc": "문제 2/노란 물고기/[만일]의 세부 동작 5/모양 보이기" + }, + { + "ele": "$[1][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/노란 물고기/시작2/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_direction", + null + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[반복]의 세부 동작 1/이동 방향으로 '1 부터 2 사이의 무작위 수' 만큼 움직이기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].type", + "$[1][1].statements[0][1].params[0].params[1].params[0]", + "$[1][1].statements[0][1].params[0].params[3].params[0]" + ], + "answer": [ + "direction_relative", + "calc_rand", + "-1", + "1" + ], + "points": 1.2, + "desc": "문제 2/노란 물고기/[반복]의 세부 동작 2/이동 방향을 '-1 부터 1 사이의 무작위 수' 만큼 회전하기", + "type": "list" + }, + { + "ele": "$[1][1].statements[0][2].type", + "answer": "bounce_wall", + "points": 1.2, + "desc": "문제 2/노란 물고기/[반복]의 세부 동작 3/화면 끝에 닿으면 튕기기" + } + ], + "sort": 117, + "list": [ + "set_scale_size", + "repeat_inf" + ] + }, + "4-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'쓰레기')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/쓰레기/시작1/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "30", + "points": 1.2, + "desc": "문제 2/쓰레기/[시작1]의 세부 동작 1/크기를 '30' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/쓰레기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].type", + "$[0][2].statements[0][0].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/만일/만일 '상어' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][0].type", + "$[0][2].statements[0][0].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-1" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 1/물고기 수'에 '-1' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][1].type", + "$[0][2].statements[0][0].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.01" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 2/'0.01' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][2].type", + "answer": "hide", + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 3/모양 숨기기" + }, + { + "ele": [ + "$[0][2].statements[0][0].statements[0][3].type", + "$[0][2].statements[0][0].statements[0][3].params[0].type", + "$[0][2].statements[0][0].statements[0][3].params[0].params[1].params[0]", + "$[0][2].statements[0][0].statements[0][3].params[0].params[3].params[0]" + ], + "answer": [ + "wait_second", + "calc_rand", + "0.5", + "3" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 4/'0.5 부터 3 사이의 무작위 수' 초 기다리기", + "type": "list" + }, + { + "ele": "$[0][2].statements[0][0].statements[0][4].type", + "answer": "show", + "points": 1.2, + "desc": "문제 2/쓰레기/[만일]의 세부 동작 5/모양 보이기" + }, + { + "ele": "$[1][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/쓰레기/시작2/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/쓰레기/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_direction", + null + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[반복]의 세부 동작 1/이동 방향으로 '1 부터 2 사이의 무작위 수' 만큼 움직이기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].type", + "$[1][1].statements[0][1].params[0].params[1].params[0]", + "$[1][1].statements[0][1].params[0].params[3].params[0]" + ], + "answer": [ + "direction_relative", + "calc_rand", + "-1", + "1" + ], + "points": 1.2, + "desc": "문제 2/쓰레기/[반복]의 세부 동작 2/이동 방향을 '-1 부터 1 사이의 무작위 수' 만큼 회전하기", + "type": "list" + }, + { + "ele": "$[1][1].statements[0][2].type", + "answer": "bounce_wall", + "points": 1.2, + "desc": "문제 2/쓰레기/[반복]의 세부 동작 3/화면 끝에 닿으면 튕기기" + } + ], + "sort": 131, + "list": [ + "set_scale_size", + "repeat_inf" + ] + }, + "44-0": { + "ele": "$.messages[?(@.name=='성공')]", + "points": 1, + "desc": "문제 2/상어/신호/'성공'신호 만들기", + "type": "scene", + "sort": 144 + }, + "5-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'상어')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/상어/시작1/시작하기 버튼을 클릭했을 때" + }, + { + "ele": "$[0][1].params[0].params[0]", + "answer": "50", + "points": 1.2, + "desc": "문제 2/상어/[시작]의 세부 동작 1/크기를 '50' 으로 정하기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "-100", + "0" + ], + "points": 1.2, + "desc": "문제 2/상어/[시작]의 세부 동작 2/x: '-100' y: '0' 위치로 이동하기", + "type": "list" + }, + { + "ele": [ + "$[0][3].type", + "$[0][3].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/상어/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[0][3].statements[0][0].type", + "$[0][3].statements[0][0].params[0].type", + "$[0][3].statements[0][0].params[0].params[0].type", + "$[0][3].statements[0][0].params[0].params[1]", + "$[0][3].statements[0][0].params[0].params[2].params[0]" + ], + "answer": [ + "_if", + "boolean_basic_operator", + "get_variable", + "GREATER", + "10" + ], + "points": 1.2, + "desc": "문제 2/상어/만일/만일 '물고기 수' 값 > '10' 이라면", + "type": "list" + }, + { + "ele": "$[0][3].statements[0][0].statements[0][0].type", + "answer": "message_cast", + "points": 1.2, + "desc": "문제 2/상어/[만일]의 세부 동작 1/성공' 신호보내기" + }, + { + "ele": [ + "$[0][3].statements[0][0].statements[0][1].type", + "$[0][3].statements[0][0].statements[0][1].params[0]" + ], + "answer": [ + "stop_object", + "thisOnly" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일]의 세부 동작 2/자신의' 코드 멈추기", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_run_button_click", + "points": 1.2, + "desc": "문제 2/상어/시작2/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "points": 1.2, + "desc": "문제 2/상어/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "37" + ], + "points": 1.2, + "desc": "문제 2/상어/만일1/만일 '왼쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].statements[0][0].type", + "$[1][1].statements[0][0].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_x", + "-5" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일1]의 세부 동작 1/x 좌표를 '-5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].type", + "$[1][1].statements[0][1].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "39" + ], + "points": 1.2, + "desc": "문제 2/상어/만일2/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].statements[0][0].type", + "$[1][1].statements[0][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_x", + "5" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일2]의 세부 동작 1/x 좌표를 '5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][2].type", + "$[1][1].statements[0][2].params[0].type", + "$[1][1].statements[0][2].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "38" + ], + "points": 1.2, + "desc": "문제 2/상어/만일3/만일 '위쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][2].statements[0][0].type", + "$[1][1].statements[0][2].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + "5" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일3]의 세부 동작 1/y 좌표를 '5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][3].type", + "$[1][1].statements[0][3].params[0].type", + "$[1][1].statements[0][3].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "40" + ], + "points": 1.2, + "desc": "문제 2/상어/만일4/만일 '아래쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][3].statements[0][0].type", + "$[1][1].statements[0][3].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + "-5" + ], + "points": 1.2, + "desc": "문제 2/상어/[만일4]의 세부 동작 1/y 좌표를 '-5' 만큼 바꾸기", + "type": "list" + }, + { + "ele": "$[2][0].type", + "answer": "when_message_cast", + "points": 1.2, + "desc": "문제 2/상어/신호/'성공' 신호를 받았을 때 " + }, + { + "ele": "$[2][1].params[*].params", + "answer": [ + "배부르다!", + "1" + ], + "points": 1.2, + "desc": "문제 2/상어/[신호]의 세부 동작 1/'배부르다!' 를 '1'초 동안 '말하기'" + }, + { + "ele": "$[2][2].type", + "answer": "start_neighbor_scene", + "points": 1.2, + "desc": "문제 2/상어/[신호]의 세부 동작 2/'다음' 장면 시작하기" + } + ], + "sort": 145, + "list": [ + "set_scale_size", + "repeat_inf", + "dialog_time" + ] + }, + "6-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'바다2|바닷속\\(3\\)1')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_scene_start", + "points": 1.2, + "desc": "문제 2/바다2/장면 2/장면이 시작되었을 때" + }, + { + "ele": "$[0][1].type", + "answer": "hide_variable", + "points": 1.2, + "desc": "문제 2/바다2/[장면 2]의 세부 동작 1/변수 '물고기 수' 숨기기" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1]" + ], + "answer": [ + "dialog", + "미션성공!", + "speak" + ], + "points": 1.2, + "desc": "문제 2/바다2/[장면 2]의 세부 동작 2/'미션성공!' 을 '말하기'", + "type": "list" + }, + { + "ele": "$[1][0].type", + "answer": "when_object_click", + "points": 2, + "desc": "문제 3/바다2/오브젝트/오브젝트를 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]", + "$[1][1].params[1].params[0]" + ], + "answer": [ + "add_effect_amount", + "color", + "30" + ], + "points": 2, + "desc": "문제 3/바다2/[오브젝트]의 세부 동작 1/'색깔' 효과를 '30' 만큼 주기", + "type": "list" + }, + { + "ele": [ + "$[1][2].type", + "$[1][2].params[0].params[0]", + "$[1][2].params[1]" + ], + "answer": [ + "dialog", + "처음부터 다시 실행!", + "speak" + ], + "points": 2, + "desc": "문제 3/바다2/[오브젝트]의 세부 동작 2/'처음부터 다시 실행!' 을 '말하기'", + "type": "list" + }, + { + "ele": [ + "$[1][3].type", + "$[1][3].params[0].params[0]" + ], + "answer": [ + "wait_second", + "2" + ], + "points": 2, + "desc": "문제 3/바다2/[오브젝트]의 세부 동작 3/'2' 초 기다리기", + "type": "list" + }, + { + "ele": "$[1][4].type", + "answer": "restart_project", + "points": 2, + "desc": "문제 3/바다2/[오브젝트]의 세부 동작 4/처음부터 다시 실행하기" + } + ], + "sort": 166, + "list": [ + "hide_variable", + "add_effect_amount" + ] + } +} \ No newline at end of file diff --git a/logs/cat.log b/logs/cat.log index 0bb2e61..66990b1 100644 --- a/logs/cat.log +++ b/logs/cat.log @@ -10,3 +10,19 @@ Traceback (most recent call last): points.insert(0, student_id) ^^^^^^^^^^ UnboundLocalError: cannot access local variable 'student_id' where it is not associated with a value +[2025-09-01 15:17:33] [ERROR] [main:299] 🚫Error processing ./output/2508_CAS_2_A/2508_CAS_2_A_정답\project.json: unsupported operand type(s) for +=: 'int' and 'NoneType' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 294, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 162, in process_project + total_points += question_points +TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType' +[2025-09-01 15:17:34] [ERROR] [main:299] 🚫Error processing ./output/2508_CAS_2_B/2508_CAS_2_B_정답\project.json: unsupported operand type(s) for +=: 'int' and 'NoneType' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 294, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 162, in process_project + total_points += question_points +TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType' diff --git a/main.py b/main.py index 2221e45..6cd3afb 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,8 @@ import logging from logging_config import setup_logging # logging 설정을 위한 import import traceback +from script_utils import extract_and_format_scripts # 스크립트 추출 함수 import + setup_logging() # logging 설정 호출 # JSON 파일 읽기 @@ -90,7 +92,7 @@ def swap_script(origin): elif block_type == "when_some_key_pressed": # params[1]에서 키 값 확인 (49, 50, 51) 아스키코드 값이므로 필요하면 추가 가능 key_value = block[0].get("params")[1] - if key_value in ["49", "50", "51"]: + if key_value in ["32","49","50","51"]: key_press_blocks.append((key_value, block)) elif block_type == "when_clone_start": clone_start_block = block @@ -135,100 +137,6 @@ def convert_to_str(value): return [convert_to_str(v) for v in value] return str(value) -# def process_project(project_data, scoring_data): - total_points = 0 - point_list = [] - - for key, question_info in scoring_data.items(): - element_path = question_info.get('ele') - type = question_info.get('type') - block_list = question_info.get('blocks') - answer = question_info.get('answer') - points = question_info.get('points') - - print(f"example: {key}") - if type == "scene": - found_elements = find_element(project_data, element_path) - if found_elements: - print(f"🟨 Elements found for {element_path}") - # scene type의 경우 문자열 변환 - found_elements = [convert_to_str(x) for x in found_elements] - if found_elements == answer: - total_points += points - point_list.append(points) - - elif found_elements and answer == None: - total_points += points - point_list.append(points) - print(f"{element_path} found ") - else: - point_list.append(0) - print(f"{found_elements} not found") - else: - print(f"🟥 Element '{element_path}' not found") - point_list.append(0) - - # 스크립트 타입의 경우 - # 스크립트 블록을 찾고, 블록 내의 요소를 확인 - # 블록 내의 요소를 확인하고, 정답과 비교하여 점수 계산 - if type == "script": - script_raw = find_script_element(project_data, element_path) - - if script_raw == None: - script_data = None - else: - script_data = json.loads(script_raw) - script_data = swap_script(script_data) - - block_index = 1 - for block in block_list: - block_type = block.get('type') - - if script_data == None: - print(f"{key}-{block_index}: Script Not exist") - point_list.append("확인 필요") - continue - - elif block_type == "list": - block_elements = find_list_element(script_data, block.get('ele')) - else: - block_elements = find_element(script_data, block.get('ele')) - - answer = block.get('answer', None) - - if block_elements and isinstance(answer, list): - # 리스트의 모든 요소를 문자열로 변환 - flat_matches = [convert_to_str(x) for x in list(chain.from_iterable(block_elements))] - else: - if not block_elements: - flat_matches = None - else: - # 단일 값을 문자열로 변환 - flat_matches = convert_to_str(block_elements[0]) - - if block_elements: - # answer도 문자열로 변환하여 비교 - str_answer = convert_to_str(answer) if answer is not None else None - if answer is not None and str_answer != flat_matches: - print(f"{key}-{block_index}: {str_answer} != {flat_matches}") - point_list.append(0) - elif answer is not None and str_answer == flat_matches: - print(f"{key}-{block_index}: {str_answer} == {flat_matches}") - total_points += block.get('points') - point_list.append(block.get('points')) - elif answer is None and block_elements: - total_points += block.get('points') - point_list.append(block.get('points')) - print(f"{key}-{block_index}: exist ele: {block_elements}") - else: - print(f"No elements found for {block.get('ele')}") - point_list.append(0) - - block_index = block_index + 1 - - point_list.append(total_points) - return point_list - def process_project(project_data, scoring_data): total_points = 0 score_list = [] @@ -264,8 +172,8 @@ def process_project(project_data, scoring_data): # ✅ SCRIPT TYPE 처리 elif question_type == "script": script_raw = find_script_element(project_data, element_path) - script_data_1 = json.loads(script_raw) if script_raw else None - script_data = swap_script(script_data_1) if script_data_1 else None + script_json = json.loads(script_raw) if script_raw else None + script_data = swap_script(script_json) if script_json else None block_index = 1 for block in block_list: @@ -321,82 +229,88 @@ def normalize_path(path): """한글 경로명을 NFC 방식으로 정규화""" return unicodedata.normalize('NFC', path) - + def main(): - # 파일 경로 설정 - project_json_path = './output/2507_CAT_3_A/' - # project_json_path = './output/00_test/' - scoring_json_path = './correct/2507_CAT_3_A.json' - - scoring_data = read_json(scoring_json_path) - student_score_list = [] - - # 컬럼명 생성 - columns = ['학생명'] - idx = 1 - for key in scoring_data.keys(): - if scoring_data[key].get('type') == 'scene': - columns.append(f'{idx}') - idx = idx + 1 - elif scoring_data[key].get('type') == 'script': - for i in range(len(scoring_data[key].get('blocks', []))): - columns.append(f'{idx}') - idx = idx + 1 - - columns.append('총점') - - # os.walk 결과를 리스트로 변환하고 정렬 - walk_results = [] - for root, dirs, files in os.walk(project_json_path): - # 디렉토리명 정규화 - normalized_root = normalize_path(root) - normalized_dirs = [normalize_path(d) for d in dirs] - normalized_files = [normalize_path(f) for f in files] - - normalized_dirs.sort() # 정규화된 디렉토리 정렬 - walk_results.append((normalized_root, normalized_dirs, normalized_files)) - - # 정렬된 결과를 바탕으로 처리 - for root, dirs, files in sorted(walk_results): - for file in sorted(files): # 파일도 정렬 - if file == 'project.json': - full_path = os.path.join(root, file) - print(f"\nProcessing: {full_path}") - try: - # 디렉토리 패스 내에 학생 이름만 뽑아서 엑셀 컬럼 명으로 추가 - # output/cas-000040-이지원/temp/project.json - # student_id = normalize_path(full_path.split('/')[3]) - match = re.search(r'(\d{6}[-_][^\\/]+)[\\/]', full_path) - if match: - student_id = match.group(1) - else: - if '정답' in full_path: - student_id = '정답' - else: - student_id = '000000' - - # project.json 파일 내용 - project_data = read_json(full_path) - points = process_project(project_data, scoring_data) - points.insert(0, student_id) - student_score_list.append(points) - print(f"Total Points for {points}") - except Exception as e: - # print(traceback.format_exc()) - logging.exception(f"🚫Error processing {full_path}: {str(e)}") - continue - - # DataFrame 생성 및 엑셀 저장 - df = pd.DataFrame(student_score_list, columns=columns).transpose() - df.columns = df.iloc[0] - df = df[1:] - timestamp = datetime.now().strftime("%y%m%d") + test_mode = False # 테스트 모드 설정 + # test_mode = True # 테스트 모드 설정 + exam_round = "2508" + exam_names = ["CAS_2_A", "CAS_2_B"] # 여러 시험명을 리스트로 설정 + excel_list = [] - excel_path = f'{project_json_path}/{timestamp}_results.xlsx' - - df.to_excel(excel_path, index=False) - print(f"\nResults saved to {excel_path}") - + for exam_name in exam_names: + scoring_json_path = f'./correct/{exam_round}_{exam_name}.json' + project_json_path = f'./output/{"00_test" if test_mode else exam_round+"_"+exam_name}/' + excel_path = f'{timestamp}_{exam_round}_{exam_name}_{"TEST" if test_mode else "채점결과"}.xlsx' + + scoring_data = read_json(scoring_json_path) + student_score_list = [] + + # 컬럼명 생성 + columns = ['학생명'] + idx = 1 + for key in scoring_data.keys(): + if scoring_data[key].get('type') == 'scene': + columns.append(f'{idx}') + idx = idx + 1 + elif scoring_data[key].get('type') == 'script': + for i in range(len(scoring_data[key].get('blocks', []))): + columns.append(f'{idx}') + idx = idx + 1 + + columns.append('총점') + + # os.walk 결과를 리스트로 변환하고 정렬 + walk_results = [] + for root, dirs, files in os.walk(project_json_path): + # 디렉토리명 정규화 + normalized_root = normalize_path(root) + normalized_dirs = [normalize_path(d) for d in dirs] + normalized_files = [normalize_path(f) for f in files] + + normalized_dirs.sort() # 정규화된 디렉토리 정렬 + walk_results.append((normalized_root, normalized_dirs, normalized_files)) + + # 정렬된 결과를 바탕으로 처리 + for root, dirs, files in sorted(walk_results): + for file in sorted(files): # 파일도 정렬 + if file == 'project.json': + full_path = os.path.join(root, file) + print(f"\nProcessing: {full_path}") + try: + # 디렉토리 패스 내에 학생 이름만 뽑아서 엑셀 컬럼 명으로 추가 + match = re.search(r'(\d{6}[-_][^\\/]+)[\\/]', full_path) + if match: + student_id = match.group(1) + else: + if '정답' in full_path: + student_id = '정답' + else: + student_id = '000000' + + # project.json 파일 내용 + project_data = read_json(full_path) + if project_data: + extract_and_format_scripts(project_data, root) + points = process_project(project_data, scoring_data) + points.insert(0, student_id) + student_score_list.append(points) + print(f"Total Points for {points}") + except Exception as e: + logging.exception(f"🚫Error processing {full_path}: {str(e)}") + continue + + # DataFrame 생성 및 엑셀 저장 + df = pd.DataFrame(student_score_list, columns=columns).transpose() + df.columns = df.iloc[0] + df = df[1:] + + df.to_excel(excel_path, index=False) + + excel_list.append(excel_path) + + if excel_list: + print(f"\nResults saved to {excel_list}") + if __name__ == "__main__": main() \ No newline at end of file diff --git a/script_utils.py b/script_utils.py new file mode 100644 index 0000000..fb772c2 --- /dev/null +++ b/script_utils.py @@ -0,0 +1,78 @@ +import os +import json + +def extract_and_format_scripts(project_data, output_directory="script_outputs"): + """ + 읽어온 project_data에서 각 객체의 스크립트를 추출하여 + 별도의 포맷팅된 JSON 파일로 저장합니다. + + :param project_data: read_json을 통해 읽어온 딕셔너리 데이터 + :param output_directory: 결과 파일을 저장할 폴더 이름 + """ + if not project_data: + print("오류: 유효한 프로젝트 데이터가 없습니다.") + return + + # 결과물을 저장할 폴더 생성 (없으면) + if not os.path.exists(output_directory): + os.makedirs(output_directory) + print(f"'{output_directory}' 폴더를 생성했습니다.") + + objects_list = project_data.get("objects", []) + + for obj in objects_list: + object_name = obj.get("name") + script_string = obj.get("script") + + # 객체 이름과 스크립트 문자열이 모두 유효한 경우에만 처리 + if object_name and script_string: + try: + # 1. 스크립트 문자열을 파이썬 객체(리스트)로 파싱 + script_data = json.loads(script_string) + + # 2. 저장할 파일 경로 설정 + file_name = f"{object_name}.json" + output_path = os.path.join(output_directory, file_name) + + # 3. 보기 좋은 형태의 JSON 파일로 저장 + with open(output_path, 'w', encoding='utf-8') as f: + json.dump(script_data, f, indent=2, ensure_ascii=False) + + print(f"성공: '{output_path}' 파일이 생성되었습니다.") + + except json.JSONDecodeError: + print(f"주의: '{object_name}'의 스크립트는 비어있거나 파싱할 수 없어 건너뜁니다.") + except Exception as e: + print(f"오류: '{object_name}' 스크립트 처리 중 예외 발생 - {e}") + + +def read_json(file_path): + """ JSON 파일을 읽어 Python dict 로 반환 """ + if not os.path.exists(file_path): + print(f"오류: 파일 '{file_path}' 을(를) 찾을 수 없습니다.") + return None + try: + with open(file_path, "r", encoding="utf-8") as f: + return json.load(f) + except Exception as e: + print(f"JSON 읽기 오류: {e}") + return None + +def main(): + # base_dir을 코드 내에서 직접 지정 + base_dir = r".\output\2508_CAS_2_B" # 원하는 최상위 디렉토리 경로로 수정하세요 + + # 하위 디렉토리 순회 + for root, dirs, files in os.walk(base_dir): + if "project.json" in files: + json_path = os.path.join(root, "project.json") + output_directory = root # project.json이 있는 동일한 경로 + + print(f"▶ Processing: {json_path}") + project_data = read_json(json_path) + if project_data: + extract_and_format_scripts(project_data, output_directory) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/시험자료/2507/250801_2507_CAT_3_A_채점결과.xlsx b/시험자료/2507/250801_2507_CAT_3_A_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e217d3a7f3afd40a2567c88ec9595852ba3b7e6e GIT binary patch literal 5244 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 a;eQD%T}>=h=LrD7LtV0{49-FJbM_yxxFM?m literal 0 HcmV?d00001 diff --git a/시험자료/2507/250804_2507_CAT_3_A_채점결과.xlsx b/시험자료/2507/250804_2507_CAT_3_A_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dde2718e9e443159b63e83d7a7269c524b0cd3ec GIT binary patch literal 5416 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

m!>b+aU{;T?%m*pNHNGq7Aa(61Xq?On5~O$pH5m z90{JZSvf)`8NcGQ<4JK(Ivk))0ubYnYF6>&GWCetlVGutpvA`#)l}xAVS1r?1dkXq zR7HyeG;yk^o)P2~^UqY4kbyNf9fr|!2{>ygXZ=qQwy>Z&5a;lHEv_cAAabzPg3$e9 zk@tLFC#YL@q21x~6atLln5sm;`ckb zzJ&&*3zsKJ9lN2NBGT+}g1^NM8K5M39tA>-$4ke{$1B6D!)wLsQA#Bwr4=F`+_$jb*zJVd_0uPxQS;G$0CY7WDdB0l zROX)nIw6Q>go|c!GV1muT5K`s?Ztt@MP2uP&o$%{RBfDEstZ|F5NeK+tar<2#w^x# zAQ)Sm(Bp7&!5Pm+3`gv(vl_=JiDYfZ!P>2B3}F-kUM^P;??Uk)@)W6@{Os&`eEu$o zhxAb6@Kh1zx!YT}k?3*hsp#40h3OUP4f6T#P`D8fA{o$H(R$HF(q_<>)3)W%-=R>Z zQlV0%QlnC*(&!SBD3|#kBFKSsT%R?0k5Lb+~`7k7Qlr@ z3G0UcYM?EBiG116H{M+_{tAxBhd9tDkTA+rK{uqsN?3fn(1IglW1baaqCBO5_X(+0 zgcy!^ggA~wganRcgd~pC?oeqKzd4-)AQ}=aE-e);8?7*{BCP=++RILI1Gy=*Xvye+ zXh`()<_P+zpD>)nUdHw($kInKeM6CAJvaUg7j7Yys#sBwIzbtOfl5a~fC|p92apO! z>7ok9jceASSiX%EV3B6*LqzCJNJIEO#fEz#mm^zG%#{#E?DQ?vty_@paB>lT&lBV= z&^$Z4_nU212l~%QoThbE1f*6vqQh$SL@f)YpPsr7HziJ9DQ_ye$L^&d#N=Ymy zNJfRV>d4S)m+Y9Zan^>$ea&4Ld!x+Xg?#H0gg4xtazkhae9tZUfif9K37^lKTaYjc zauK(yhsaw|BMLy6Fp7QC|LG+mXq(=QA8wuWuJtlgXz7ya0qKx*)C|cCCm8k46Y2LH z0aH>JR)`uS850mAXVMx?_|^pR?vNK@I1LVM1ns=wEd|=2kTbCeOjuR2L8M5dKVU&c zWBmM_8jlgLFi7MlaR}lW*i;M)=8_nYRG!NbfEb39v+^aCB61QwY!axF3zW=g%zAMp z0REHZ@vr`~W%K}LPvI}VrDCMO`ry6TqziiD0EK|Rc9ud8is&Q5M?R0T9wpmgiCrHJ zo;tou119cRyD&#-s5J6J>W88al{8s1Q92|sGzDWtUy3HYU=QJl{|>)Iv}jOcojgWB z%#})y|H4`?>{R&k+HR%C&r>ic6A--fkqUAFsxnRGplwrbyw6nrzfr$GsctB zEG0gD=8%0#0guK@jzn8z&{NfU`*D#4q4_r=dA~=(w{H~-`#(J)`k~7R;dsJpVqg7@ z?GO+CV`UbLjqd11(6t&oh6n~6#t23nrU)jSJF=kG7lhYt-7#qeolr_f21Gtj!=b_Z zhG9c?5L+MTJ`i!XJP5Bb0xJ6#h6C7o*m@Xf>i*?q2$ld#4YK|rVUVB-Lelz6KEl_)e~b@O zrb`yV5#OELbCc;wy!@Ou9XB7h47U!q6}JcX-O%smDsxMg_8W3OJw-Ai2Cokz87v^) zq0pfHE2+zw(2Vh!Rbi0V&A&2)P1ERX}0^{!1;2viPK z57Z9S4>Sxk0ZC&#t@OAK62gE)qDDzZJ>gR8HsPlbUi;beJXa=&FW@c+5+v{hW+vQXQ4|UXDAhJxXFcs5*R#fD+7^F}^>Xw3 z&Hwi-6;T8CF)oO$pJT{y2x|9?4sNagiKSlHZlU7J;f434RsJUs7I5bR-ZV)`EbWJo zNO`0F;e~PK8?SkJ)V9XSgg=IS3EvQLLvXyZ#SDD_Ipz(Sg<$)N2 z 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 ceguR+Oe}?mD8P