Compare commits
10 Commits
2e1ef0fc8a
...
461f377d0c
| Author | SHA1 | Date | |
|---|---|---|---|
| 461f377d0c | |||
| 61d9e0f2b8 | |||
| 9da5420a35 | |||
| eb4e6071ad | |||
| 99250cd161 | |||
| b2f99b92d0 | |||
| 1e4a625d85 | |||
| 0f961fd027 | |||
| 23946baccf | |||
| 0fd9c9e8c0 |
4
.bashrc.local
Normal file
4
.bashrc.local
Normal file
@@ -0,0 +1,4 @@
|
||||
# 프로젝트 루트 폴더/.bashrc.local
|
||||
if [ -f .venv/Scripts/activate ]; then
|
||||
source .venv/Scripts/activate
|
||||
fi
|
||||
18
.gitignore
vendored
18
.gitignore
vendored
@@ -1,4 +1,22 @@
|
||||
.venv/
|
||||
|
||||
# 기본적으로 output 디렉토리 전체 무시
|
||||
output/
|
||||
|
||||
sample/
|
||||
|
||||
.DS_Store
|
||||
|
||||
# 시험자료와 그 하위 회차 폴더는 포함
|
||||
!시험자료/
|
||||
!시험자료/*/
|
||||
# 기본적으로 모든 것을 무시
|
||||
시험자료/*/*
|
||||
# 하지만 회차 폴더 안의 파일은 다시 포함
|
||||
!시험자료/*/*.*
|
||||
# 모든 회차 폴더 안의 하위 폴더는 무시
|
||||
시험자료/*/*/
|
||||
|
||||
# ent파일
|
||||
ent/
|
||||
|
||||
|
||||
@@ -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):
|
||||
# 대상 디렉토리가 없으면 생성
|
||||
@@ -34,18 +36,21 @@ def copy_ent_files(source_root, target_root):
|
||||
for root, dirs, files in os.walk(source_root):
|
||||
for file in files:
|
||||
if file.endswith('.ent'):
|
||||
space_remove_file = file.replace(" ","")
|
||||
|
||||
source_file_path = os.path.join(root, file)
|
||||
target_file_path = os.path.join(target_root, file)
|
||||
target_file_path = os.path.join(target_root, space_remove_file)
|
||||
|
||||
# 파일 복사
|
||||
shutil.copy2(source_file_path, target_file_path)
|
||||
print(f"Copied {source_file_path} to {target_file_path}")
|
||||
|
||||
# 사용법
|
||||
source_directory = r"/Users/waterdrw/Downloads/제2502회 코딩활용능력 2급 수시4_답안파일" # 원본 디렉토리 경로
|
||||
target_directory = r"./output/"
|
||||
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_제2510회 정기\제2510회 코딩활용능력 2급 정기 답안파일" # 원본 디렉토리 경로
|
||||
target_directory = r".\ent\2510_CAS_2_A"
|
||||
# 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)
|
||||
59
02_extract_project_json.py
Normal file
59
02_extract_project_json.py
Normal file
@@ -0,0 +1,59 @@
|
||||
import os
|
||||
import gzip
|
||||
import tarfile
|
||||
import json
|
||||
from io import BytesIO
|
||||
|
||||
def extract_project_json_from_gz(filepath, output_folder):
|
||||
# 1. .gz 압축 해제 → tar 형식 데이터 얻기
|
||||
with gzip.open(filepath, 'rb') as gz_file:
|
||||
tar_data = gz_file.read()
|
||||
|
||||
# 2. tar 데이터를 메모리에서 처리
|
||||
tar_bytes = BytesIO(tar_data)
|
||||
|
||||
with tarfile.open(fileobj=tar_bytes, mode='r:') as tar:
|
||||
try:
|
||||
target = tar.getmember("temp/project.json")
|
||||
except KeyError:
|
||||
print(f"❌ {os.path.basename(filepath)}: temp/project.json 없음")
|
||||
return
|
||||
|
||||
# 압축파일 내부 temp/project.json 파일의 파일 오브젝트 추출
|
||||
extracted = tar.extractfile(target)
|
||||
if not extracted:
|
||||
print(f"❌ {os.path.basename(filepath)}: 파일 추출 실패")
|
||||
return
|
||||
|
||||
# 파일 오브젝트를 JSON 객체로 로드
|
||||
project_data = json.load(extracted)
|
||||
|
||||
# 해당 경로에 project.json 파일로 저장
|
||||
os.makedirs(output_folder, exist_ok=True)
|
||||
output_json_path = os.path.join(output_folder, "project.json")
|
||||
with open(output_json_path, "w", encoding="utf-8") as out_file:
|
||||
json.dump(project_data, out_file, ensure_ascii=False, indent=2)
|
||||
|
||||
print(f"✅ 처리 완료: {filepath} → {output_json_path}")
|
||||
|
||||
def process_ent_files(ent_dir, output_dir):
|
||||
for filename in os.listdir(ent_dir):
|
||||
if filename.lower().endswith((".ent")):
|
||||
filename = filename.replace(" ","")
|
||||
filepath = os.path.join(ent_dir, filename)
|
||||
output_root = output_dir
|
||||
output_folder = os.path.join(output_root, os.path.splitext(filename)[0])
|
||||
try:
|
||||
extract_project_json_from_gz(filepath, output_folder)
|
||||
except Exception as e:
|
||||
print(f"❌ 오류 발생 ({filename}): {e}")
|
||||
|
||||
# 실행 예
|
||||
if __name__ == "__main__":
|
||||
# test_names = ["2509_CAT_3_A"]
|
||||
# test_names = ["2508_CAS_2_A","2508_CAS_2_B"]
|
||||
test_names = ["2510_CAS_2_A"]
|
||||
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)
|
||||
BIN
2502회 코딩활용능력 2급 수시4.xlsx
Normal file
BIN
2502회 코딩활용능력 2급 수시4.xlsx
Normal file
Binary file not shown.
BIN
250901_2508_CAS_2_A_채점결과.xlsx
Normal file
BIN
250901_2508_CAS_2_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
250901_2508_CAS_2_B_채점결과.xlsx
Normal file
BIN
250901_2508_CAS_2_B_채점결과.xlsx
Normal file
Binary file not shown.
BIN
251001_2509_CAT_3_A_채점결과.xlsx
Normal file
BIN
251001_2509_CAT_3_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
251002_2509_CAT_3_A_채점결과.xlsx
Normal file
BIN
251002_2509_CAT_3_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
251030_2510_CAS_2_A_채점결과.xlsx
Normal file
BIN
251030_2510_CAS_2_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
251031_2510_CAS_2_A_채점결과.xlsx
Normal file
BIN
251031_2510_CAS_2_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
251103_2510_CAS_2_A_채점결과.xlsx
Normal file
BIN
251103_2510_CAS_2_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
251104_2510_CAS_2_A_채점결과.xlsx
Normal file
BIN
251104_2510_CAS_2_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
251105_2510_CAS_2_A_TEST.xlsx
Normal file
BIN
251105_2510_CAS_2_A_TEST.xlsx
Normal file
Binary file not shown.
BIN
251105_2510_CAS_2_A_채점결과.xlsx
Normal file
BIN
251105_2510_CAS_2_A_채점결과.xlsx
Normal file
Binary file not shown.
8
Entry-Scoring.code-workspace
Normal file
8
Entry-Scoring.code-workspace
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
}
|
||||
14
README.md
14
README.md
@@ -1,4 +1,16 @@
|
||||
# Entry 채점 프로그램
|
||||
|
||||
### main.py
|
||||
scoring.json 기준표 작성
|
||||
scoring.json 기준표 작성 (샘플 파일)
|
||||
|
||||
1. 채점용 답안 파일 복사 후 .ent 파일 .zip 으로 변경
|
||||
2. 변경된 압축 파일 디렉토리 포함해서 압축 해제
|
||||
|
||||
> 채점 디렉토리 구조의 예
|
||||
> 2502 CAT 3급 수시2/학생명/temp/project.json 채점
|
||||
>
|
||||
|
||||
|
||||
### copyFiles.py
|
||||
특정 디렉토리의 .ent 파일을 타겟 디렉토리로 복사
|
||||
복사 시 copy_ent_files 함수 확인
|
||||
BIN
__pycache__/logging_config.cpython-312.pyc
Normal file
BIN
__pycache__/logging_config.cpython-312.pyc
Normal file
Binary file not shown.
BIN
__pycache__/script_utils.cpython-312.pyc
Normal file
BIN
__pycache__/script_utils.cpython-312.pyc
Normal file
Binary file not shown.
476
_scoring.json
Normal file
476
_scoring.json
Normal file
@@ -0,0 +1,476 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='꽃밭')]",
|
||||
"points": 1.7,
|
||||
"desc": "배경 이름 변경"
|
||||
},
|
||||
"1-2": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='숲속')]",
|
||||
"points": 1.7,
|
||||
"desc": "배경 이름 변경"
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='당근')]",
|
||||
"points": 1.7,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='하트')]",
|
||||
"points": 1.7,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='토끼')]",
|
||||
"points": 1.7,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='상자')]",
|
||||
"points": 1.7,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"2-1": {
|
||||
"type": "scene",
|
||||
"ele": "$.variables[?(@.name=='당근')]['value', 'object']",
|
||||
"answer": [
|
||||
"10",
|
||||
null
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "변수 기본값, 전체 사용 여부"
|
||||
},
|
||||
"2-2": {
|
||||
"type": "scene",
|
||||
"ele": "$.variables[?(@.name=='점수')]['value', 'object']",
|
||||
"answer": [
|
||||
0,
|
||||
null
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "변수 기본값, 전체 사용 여부"
|
||||
},
|
||||
"2-3": {
|
||||
"type": "scene",
|
||||
"ele": "$.messages[?@.name=='종료']",
|
||||
"points": 1.77,
|
||||
"desc": "시그널 작성 여부"
|
||||
},
|
||||
"2": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=='당근')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.77,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"points": 1.77,
|
||||
"answer": "45",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2]['params']",
|
||||
"points": 1.77,
|
||||
"answer": [
|
||||
"FORWARD",
|
||||
null
|
||||
],
|
||||
"desc": "물체 앞으로 보내기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].params[0].params[?(@.type=='get_variable')].type",
|
||||
"$[0][3].params[0].params[?(@=='LESS')]",
|
||||
"$[0][3].params[0].params[?(@.type=='text')].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"get_variable",
|
||||
"LESS",
|
||||
"1"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "변수가 1보다 클때까지 반복"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][?@.type=='locate_xy'].params[*].params",
|
||||
"answer": [
|
||||
"0",
|
||||
"-120"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "x:0, y:-120 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].params[0].params[0]",
|
||||
"answer": "32",
|
||||
"points": 1.77,
|
||||
"desc": "스페이스(32) 를 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].statements[0][0].params[0].params[0]",
|
||||
"answer": "0.2",
|
||||
"points": 1.77,
|
||||
"desc": "0.2초 기다리기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].statements[0][1].params[1].params[0]",
|
||||
"answer": "-1",
|
||||
"points": 1.77,
|
||||
"desc": "변수에 -1"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].statements[0][2].params[0].params[0]",
|
||||
"$[0][3].statements[0][1].statements[0][2].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"0.5",
|
||||
"mouse"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "0.5초 동안 마우스 좌표 위치로 이동"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "if reach something"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][2].statements[0][0].params[1].params[0]",
|
||||
"answer": "10",
|
||||
"points": 1.77,
|
||||
"desc": "변수에 10"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][2].statements[0][1].params[*].params",
|
||||
"answer": [
|
||||
"성공!",
|
||||
"0.5"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "dialog_time 시작!을 0.5초"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].type",
|
||||
"answer": "message_cast",
|
||||
"points": 1.77,
|
||||
"desc": "신호 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][5].type",
|
||||
"answer": "hide",
|
||||
"points": 1.77,
|
||||
"desc": "숨기기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?name=~'하트'].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.77,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 1.77,
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0]",
|
||||
"answer": "FRONT",
|
||||
"points": 1.77,
|
||||
"desc": "맨 앞으로 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[0]",
|
||||
"answer": null,
|
||||
"points": 1.77,
|
||||
"desc": "반복하기 (계속)"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate",
|
||||
"mouse"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "마우스 위치로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_message_cast",
|
||||
"points": 1.77,
|
||||
"desc": "신호를 받았을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].type",
|
||||
"answer": "hide",
|
||||
"points": 1.77,
|
||||
"desc": "숨기기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=='토끼')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.77,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "90",
|
||||
"points": 1.77,
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"0",
|
||||
"60"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "x:0, y:60 으로 이동"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].params[0].params[?(@.type=='get_variable')].type",
|
||||
"$[0][3].params[0].params[?(@=='LESS')]",
|
||||
"$[0][3].params[0].params[?(@.type=='text')].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"get_variable",
|
||||
"LESS",
|
||||
"1"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "변수가 1보다 클때까지 반복"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][*].params[0].params[0]",
|
||||
"$[0][3].statements[0][*].params[1].params[*].params[0]",
|
||||
"$[0][3].statements[0][*].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"2",
|
||||
"-200",
|
||||
"200",
|
||||
"60"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "2초 동안 무작위로 x:-200~200, y:60"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_message_cast",
|
||||
"points": 1.77,
|
||||
"desc": "신호를 받았을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].params[*].params[0]",
|
||||
"answer": [
|
||||
"2",
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "2초 동안 x:0, y:0 좌표 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 1.77,
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][3].params[0].params[0].type",
|
||||
"$[1][3].params[0].params[1]",
|
||||
"$[1][3].params[0].params[2].params[0]",
|
||||
"$[1][3].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"get_variable",
|
||||
"PLUS",
|
||||
"점 입니다.",
|
||||
"3"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "변수 + 점 입니다. 3초 동안 말하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].params[0].params[0]",
|
||||
"answer": "0.5",
|
||||
"points": 1.77,
|
||||
"desc": "0.5초 기다리기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][5].type",
|
||||
"answer": "start_scene",
|
||||
"points": 1.77,
|
||||
"desc": "장면 전환"
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?name=~'상자'].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.77,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[*][1].params[0]",
|
||||
"points": 1.77,
|
||||
"answer": "FORWARD",
|
||||
"desc": "물체 앞으로 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"0",
|
||||
"-100"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "x:0, y:-100 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[0].params[0]",
|
||||
"points": 1.77,
|
||||
"answer": "90",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].params[*].params",
|
||||
"answer": [
|
||||
"시작!",
|
||||
"0.5"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "dialog_time 시작!을 0.5초"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_message_cast",
|
||||
"points": 1.77,
|
||||
"desc": "신호를 받았을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].type",
|
||||
"answer": "hide",
|
||||
"points": 1.77,
|
||||
"desc": "숨기기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"6": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=='숲속')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_scene_start",
|
||||
"points": 1.77,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].type",
|
||||
"answer": "hide_variable",
|
||||
"points": 1.77,
|
||||
"desc": "변수 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].type",
|
||||
"answer": "hide_variable",
|
||||
"points": 1.77,
|
||||
"desc": "변수 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_object_click",
|
||||
"points": 2,
|
||||
"desc": "오브젝트 클릭 시"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"change_effect_amount",
|
||||
"color",
|
||||
"50"
|
||||
],
|
||||
"points": 2,
|
||||
"desc": "색깔 효과를 50으로 변경"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][2].type",
|
||||
"$[1][2].params[0].params[0]",
|
||||
"$[1][2].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"dialog",
|
||||
"처음부터 다시 실행합니다.",
|
||||
"speak"
|
||||
],
|
||||
"points": 2,
|
||||
"desc": "처음부터 다시 실행합니다. 를 말하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][3].params[0].params[0]",
|
||||
"answer": "2",
|
||||
"points": 2,
|
||||
"desc": "2초 기다리기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].type",
|
||||
"answer": "restart_project",
|
||||
"points": 2,
|
||||
"desc": "처음부터 다시 시작하기"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
511
_scripts.json
Normal file
511
_scripts.json
Normal file
@@ -0,0 +1,511 @@
|
||||
[
|
||||
[
|
||||
{
|
||||
"id": "vlyg",
|
||||
"x": 50,
|
||||
"y": 30,
|
||||
"type": "when_run_button_click",
|
||||
"params": [
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "wqvc",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "set_scale_size",
|
||||
"params": [
|
||||
{
|
||||
"id": "7qfb",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"30"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "kmdb",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "locate_xy",
|
||||
"params": [
|
||||
{
|
||||
"id": "yry5",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"-100"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "g3wu",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"-100"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "wh5n",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "dialog_time",
|
||||
"params": [
|
||||
{
|
||||
"id": "cga0",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "text",
|
||||
"params": [
|
||||
"야호! 출발!"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "gihc",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"1"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"speak",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"id": "mfln",
|
||||
"x": 50,
|
||||
"y": 168,
|
||||
"type": "when_some_key_pressed",
|
||||
"params": [
|
||||
null,
|
||||
"49"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "t3ej",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "locate_object_time",
|
||||
"params": [
|
||||
{
|
||||
"id": "th0s",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"2"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"meq4",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "zakv",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "hide",
|
||||
"params": [
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "f98n",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "wait_second",
|
||||
"params": [
|
||||
{
|
||||
"id": "urh6",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"1"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "p4yn",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "show",
|
||||
"params": [
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"id": "hlnb",
|
||||
"x": 50,
|
||||
"y": 444,
|
||||
"type": "when_some_key_pressed",
|
||||
"params": [
|
||||
null,
|
||||
"50"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "smqv",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "locate_object_time",
|
||||
"params": [
|
||||
{
|
||||
"id": "941e",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"2"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"6kvc",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "f8ez",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "hide",
|
||||
"params": [
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "6ln4",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "wait_second",
|
||||
"params": [
|
||||
{
|
||||
"id": "eihx",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"1"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "mism",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "show",
|
||||
"params": [
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
]
|
||||
[
|
||||
{
|
||||
"id": "edyx",
|
||||
"x": 50,
|
||||
"y": 334,
|
||||
"type": "when_some_key_pressed",
|
||||
"params": [
|
||||
null,
|
||||
"51"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "vjkb",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "locate_object_time",
|
||||
"params": [
|
||||
{
|
||||
"id": "jwnn",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"2"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"9200",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "brfk",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "dialog_time",
|
||||
"params": [
|
||||
{
|
||||
"id": "nun7",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "text",
|
||||
"params": [
|
||||
"다녀왔습니다!"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "sriu",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"1"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"speak",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
]
|
||||
]
|
||||
669
correct/2502 CAT 2급 A형.json
Normal file
669
correct/2502 CAT 2급 A형.json
Normal file
@@ -0,0 +1,669 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='들길')]",
|
||||
"points": 1.7,
|
||||
"desc": "배경 이름 변경"
|
||||
},
|
||||
"1-2": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='하늘')]",
|
||||
"points": 1.7,
|
||||
"desc": "배경 이름 변경"
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='나무')]",
|
||||
"points": 1.7,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='돌')]",
|
||||
"points": 1.7,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='행인')]",
|
||||
"points": 1.7,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='마라토너')]",
|
||||
"points": 1.7,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"2": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'나무|나무(10)')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.6,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].type",
|
||||
"points": 1.6,
|
||||
"answer": "hide",
|
||||
"desc": "숨기기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "무한 반복"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][2].statements[0][0].type",
|
||||
"$[0][2].statements[0][0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"create_clone",
|
||||
"self"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "clone self"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][2].statements[0][1].type",
|
||||
"$[0][2].statements[0][1].params[0].type",
|
||||
"$[0][2].statements[0][1].params[0].params[1].params[0]",
|
||||
"$[0][2].statements[0][1].params[0].params[3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"calc_rand",
|
||||
"1",
|
||||
"3"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "wait random 1 betwwen 3 sec"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"points": 1.6,
|
||||
"answer": "when_clone_start",
|
||||
"desc": "cloen start"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"240",
|
||||
"-20"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "변수가 1보다 클때까지 반복"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].type",
|
||||
"points": 1.6,
|
||||
"answer": "show",
|
||||
"desc": "show"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][3].type",
|
||||
"$[1][3].params[0].params[0].params[3]",
|
||||
"$[1][3].params[0].params[1]",
|
||||
"$[1][3].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true",
|
||||
"x",
|
||||
"LESS",
|
||||
"-240"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "while object x pos less then -240"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][3].statements[0][0].type",
|
||||
"$[1][3].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"-3"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "move x pos -3"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].type",
|
||||
"points": 1.6,
|
||||
"answer": "delete_clone",
|
||||
"desc": "delete clone"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'돌|바위(1)')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.6,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "30",
|
||||
"points": 1.6,
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].type",
|
||||
"points": 1.6,
|
||||
"answer": "hide",
|
||||
"desc": "숨기기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "무한 반복"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"create_clone",
|
||||
"self"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "clone self"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].type",
|
||||
"$[0][3].statements[0][1].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][1].params[0].params[3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"calc_rand",
|
||||
"1.5",
|
||||
"3"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "wait random 1.5 betwwen 3 sec"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"points": 1.6,
|
||||
"answer": "when_clone_start",
|
||||
"desc": "cloen start"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"240",
|
||||
"-105"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "move location x:240, y:-105"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].type",
|
||||
"points": 1.6,
|
||||
"answer": "show",
|
||||
"desc": "show"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][3].type",
|
||||
"$[1][3].params[0].params[0].params[3]",
|
||||
"$[1][3].params[0].params[1]",
|
||||
"$[1][3].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true",
|
||||
"x",
|
||||
"LESS",
|
||||
"-240"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "while object x pos less then -240"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][3].statements[0][0].type",
|
||||
"$[1][3].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"-3"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "move x pos -3"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].type",
|
||||
"points": 1.6,
|
||||
"answer": "delete_clone",
|
||||
"desc": "delete clone"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'행인|가을 자전거를 타는 모습')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.6,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"240",
|
||||
"-30"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "move location x:240, y:-30"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "무한 반복"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][2].statements[0][0].type",
|
||||
"$[0][2].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_direction",
|
||||
"-1"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "무한 반복"
|
||||
}
|
||||
]
|
||||
},
|
||||
"28": {
|
||||
"type": "scene",
|
||||
"ele": "$.messages[?(@.name=='넘어짐')]",
|
||||
"points": 1.6,
|
||||
"desc": "시그널 작성 여부"
|
||||
},
|
||||
"5": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'마라토너|축구선수')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.6,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].type",
|
||||
"points": 1.6,
|
||||
"answer": "flip_y",
|
||||
"desc": "y axis flip"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-150",
|
||||
"-70"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "move location x:240, y:-30"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "무한 반복"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][0].params[0]",
|
||||
"points": 1.6,
|
||||
"answer": "next",
|
||||
"desc": "change to next shape check value"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"0.1"
|
||||
],
|
||||
"desc": "wait 0.1 second"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"32"
|
||||
],
|
||||
"desc": "if press space key"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].statements[0][0].type",
|
||||
"$[0][3].statements[0][2].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"repeat_basic",
|
||||
"20"
|
||||
],
|
||||
"desc": "while 20"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].statements[0][0].statements[0][0].type",
|
||||
"$[0][3].statements[0][2].statements[0][0].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"move_y",
|
||||
"5"
|
||||
],
|
||||
"desc": "y pos move 5"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].statements[0][1].type",
|
||||
"$[0][3].statements[0][2].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"repeat_basic",
|
||||
"20"
|
||||
],
|
||||
"desc": "while 20"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].statements[0][1].statements[0][0].type",
|
||||
"$[0][3].statements[0][2].statements[0][1].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"move_y",
|
||||
"-5"
|
||||
],
|
||||
"desc": "y pos move -5"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].type",
|
||||
"$[0][3].statements[0][3].params[0].type"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"desc": "if reach object"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].statements[0][0].type",
|
||||
"points": 1.6,
|
||||
"answer": "message_cast",
|
||||
"desc": "신호 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_message_cast",
|
||||
"points": 1.6,
|
||||
"desc": "신호를 받았을 때"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0].type",
|
||||
"$[1][1].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"rotate_relative",
|
||||
"angle",
|
||||
"40"
|
||||
],
|
||||
"desc": "rotate angle 40"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][2].type",
|
||||
"$[1][2].params[0].params[0]",
|
||||
"$[1][2].params[1].params[0]",
|
||||
"$[1][2].params[2].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"locate_xy_time",
|
||||
"0.2",
|
||||
"-140",
|
||||
"-100"
|
||||
],
|
||||
"desc": "locate x: -140, y:-100 during 0.2 sec "
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][3].type",
|
||||
"$[1][3].params[0].params[0]",
|
||||
"$[1][3].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"dialog",
|
||||
"아야!",
|
||||
"speak"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "아야! speak"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][4].type",
|
||||
"$[1][4].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"stop_object",
|
||||
"otherThread"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "object other code stop"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][5].type",
|
||||
"$[1][5].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"desc": "wait 1 second"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][6].type",
|
||||
"answer": "start_neighbor_scene",
|
||||
"points": 1.6,
|
||||
"desc": "next scene start"
|
||||
}
|
||||
]
|
||||
},
|
||||
"6": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'하늘|날씨')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_scene_start",
|
||||
"points": 1.6,
|
||||
"desc": "scene start"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"dialog",
|
||||
"아쉽지만 잘했어!",
|
||||
"speak"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "말하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_object_click",
|
||||
"points": 1.6,
|
||||
"desc": "오브젝트 클릭 시"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"brightness",
|
||||
"55"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "add brightness 55 effect"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][2].type",
|
||||
"$[1][2].params[0].params[0]",
|
||||
"$[1][2].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"dialog",
|
||||
"처음부터 다시 실행합니다.",
|
||||
"speak"
|
||||
],
|
||||
"points": 1.6,
|
||||
"desc": "말하기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][3].type",
|
||||
"$[1][3].params[0].params[0]"
|
||||
],
|
||||
"points": 1.6,
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"2"
|
||||
],
|
||||
"desc": "wait 2 second"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].type",
|
||||
"answer": "restart_project",
|
||||
"points": 1.6,
|
||||
"desc": "restart"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
370
correct/2502회 CAT 3급 B형 수시2.json
Normal file
370
correct/2502회 CAT 3급 B형 수시2.json
Normal file
@@ -0,0 +1,370 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='꽃밭')]",
|
||||
"points": 2,
|
||||
"desc": "배경 이름 변경"
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='당근')]",
|
||||
"points": 2,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='하트')]",
|
||||
"points": 2,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='토끼')]",
|
||||
"points": 2,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='상자')]",
|
||||
"points": 2,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"2": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=='당근')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.57,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"points": 2.57,
|
||||
"answer": "45",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2]['params']",
|
||||
"points": 2.57,
|
||||
"answer": [
|
||||
"FORWARD",
|
||||
null
|
||||
],
|
||||
"desc": "물체 앞으로 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].type",
|
||||
"points": 2.57,
|
||||
"answer": "hide",
|
||||
"desc": "숨기기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].params[0]",
|
||||
"answer": null,
|
||||
"points": 2.57,
|
||||
"desc": "반복하기 (계속)"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].statements[0][?@.type=='locate_xy'].params[*].params",
|
||||
"answer": [
|
||||
"0",
|
||||
"-100"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "x:0, y:-100 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].statements[0][1].type",
|
||||
"points": 2.57,
|
||||
"answer": "show",
|
||||
"desc": "모양보이기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].statements[0][2].params[0].params[0]",
|
||||
"answer": "32",
|
||||
"points": 2.57,
|
||||
"desc": "스페이스(32) 를 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].statements[0][2].statements[0][0].params[0].params[0]",
|
||||
"answer": "0.2",
|
||||
"points": 2.57,
|
||||
"desc": "0.2초 기다리기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][4].statements[0][2].statements[0][1].params[0].params[0]",
|
||||
"$[0][4].statements[0][2].statements[0][1].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"0.5",
|
||||
"mouse"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "0.5초 동안 마우스 좌표 위치로 이동"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][4].statements[0][3].type",
|
||||
"$[0][4].statements[0][3].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "if reach something"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].statements[0][3].statements[0][0].params[*].params",
|
||||
"answer": [
|
||||
"냠냠!",
|
||||
"0.5"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "dialog_time 냠냠!을 0.5초"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][4].statements[0][4].type",
|
||||
"$[0][4].statements[0][4].params[0].type",
|
||||
"$[0][4].statements[0][4].params[0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something",
|
||||
"wall"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "if reach something wall"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][4].statements[0][4].statements[0][0].type",
|
||||
"$[0][4].statements[0][4].statements[0][0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"stop_object",
|
||||
"all"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "모든 오브젝트 정지"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?name=~'하트'].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.57,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 2.57,
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0]",
|
||||
"answer": "FRONT",
|
||||
"points": 2.57,
|
||||
"desc": "맨 앞으로 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[0]",
|
||||
"answer": null,
|
||||
"points": 2.57,
|
||||
"desc": "반복하기 (계속)"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate",
|
||||
"mouse"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "마우스 위치로 이동"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0]",
|
||||
"$[0][3].statements[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"color",
|
||||
"0.5"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "Add Color effect 0.5 duration"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=='토끼')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.57,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "90",
|
||||
"points": 2.57,
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"0",
|
||||
"60"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "x:0, y:60 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[0]",
|
||||
"answer": null,
|
||||
"points": 2.57,
|
||||
"desc": "계속 반복하기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].params[0].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[*].params[0]",
|
||||
"$[0][3].statements[0][0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"2",
|
||||
"-200",
|
||||
"200",
|
||||
"60"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "2초 동안 무작위로 x:-200~200, y:60"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "if reach something"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].statements[0][0].params[0].params[0]",
|
||||
"answer": "10",
|
||||
"points": 2.57,
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].statements[0][1].params[0].params[0].type",
|
||||
"$[0][3].statements[0][1].statements[0][1].params[0].params[0].params[3]",
|
||||
"$[0][3].statements[0][1].statements[0][1].params[0].params[1]",
|
||||
"$[0][3].statements[0][1].statements[0][1].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"coordinate_object",
|
||||
"size",
|
||||
"EQUAL",
|
||||
"120"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "비교 오브젝트의 크기가 120과 같을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].statements[0][1].statements[0][0].params[*].params",
|
||||
"answer": [
|
||||
"미션 성공!",
|
||||
"2"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "dialog_time 미션 성공!을 2초"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].statements[0][1].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].statements[0][1].statements[0][1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"stop_object",
|
||||
"all"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "모든 오브젝트 정지"
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?name=~'상자'].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.57,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0]",
|
||||
"points": 2.57,
|
||||
"answer": "FORWARD",
|
||||
"desc": "물체 앞으로 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"0",
|
||||
"-100"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "x:0, y:-100 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[0].params[0]",
|
||||
"points": 2.57,
|
||||
"answer": "90",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].params[*].params",
|
||||
"answer": [
|
||||
"시작!",
|
||||
"0.5"
|
||||
],
|
||||
"points": 2.57,
|
||||
"desc": "dialog_time 시작!을 0.5초"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
382
correct/2503 CAT 3급 A형.json
Normal file
382
correct/2503 CAT 3급 A형.json
Normal file
@@ -0,0 +1,382 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='약도')]",
|
||||
"points": 2,
|
||||
"desc": "배경 이름 변경"
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='놀이동산')]",
|
||||
"points": 2,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='백화점')]",
|
||||
"points": 2,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='우리집')]",
|
||||
"points": 2,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='어린이')]",
|
||||
"points": 2,
|
||||
"desc": "물체 이름 변경"
|
||||
},
|
||||
"2": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'놀이동산')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"points": 2.43,
|
||||
"answer": "90",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"-25",
|
||||
"60"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "x:-25, y:60 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].params",
|
||||
"points": 2.43,
|
||||
"answer": [
|
||||
null,
|
||||
"49"
|
||||
],
|
||||
"desc": "키보드 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"color",
|
||||
"30"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "Add Color effect 30 duration"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].params[*].params",
|
||||
"answer": [
|
||||
"여기는 놀이동산!",
|
||||
"1"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "dialog_time 여기는 놀이동산 1초 "
|
||||
},
|
||||
{
|
||||
"ele": "$[1][3].type",
|
||||
"answer": "erase_all_effects",
|
||||
"points": 2.43,
|
||||
"desc": "효과 모두 삭제하기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'백화점|건물')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"points": 2.43,
|
||||
"answer": "50",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"180",
|
||||
"50"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "x:-25, y:60 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].params",
|
||||
"points": 2.43,
|
||||
"answer": [
|
||||
null,
|
||||
"50"
|
||||
],
|
||||
"desc": "키보드 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"color",
|
||||
"40"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "Add Color effect 30 duration"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].params[*].params",
|
||||
"answer": [
|
||||
"여기는 백화점!",
|
||||
"1"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "dialog_time 여기는 놀이동산 1초 "
|
||||
},
|
||||
{
|
||||
"ele": "$[1][3].type",
|
||||
"answer": "erase_all_effects",
|
||||
"points": 2.43,
|
||||
"desc": "효과 모두 삭제하기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'우리집|예쁜집')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"points": 2.43,
|
||||
"answer": "60",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"-190",
|
||||
"-90"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "x:-25, y:60 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].params",
|
||||
"points": 2.43,
|
||||
"answer": [
|
||||
null,
|
||||
"51"
|
||||
],
|
||||
"desc": "키보드 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]",
|
||||
"$[1][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"color",
|
||||
"35"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "Add Color effect 30 duration"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].type",
|
||||
"answer": "erase_all_effects",
|
||||
"points": 2.43,
|
||||
"desc": "효과 모두 삭제하기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?name=~'어린이'].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"points": 2.57,
|
||||
"answer": "30",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"-100",
|
||||
"-100"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "x:-25, y:60 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[*].params",
|
||||
"answer": [
|
||||
"야호! 출발!",
|
||||
"1"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "dialog_time 여기는 놀이동산 1초 "
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].params",
|
||||
"points": 2.43,
|
||||
"answer": [
|
||||
null,
|
||||
"49"
|
||||
],
|
||||
"desc": "키보드 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "Locate Object 2 sec"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][2].type",
|
||||
"points": 2.43,
|
||||
"answer": "hide",
|
||||
"desc": "숨기기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[1][3].type",
|
||||
"$[1][3].params[0].params[0]"
|
||||
],
|
||||
"points": 2.43,
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"desc": "wait second"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].type",
|
||||
"points": 2.43,
|
||||
"answer": "show",
|
||||
"desc": "보이기"
|
||||
},
|
||||
{
|
||||
"ele": "$[2][0].params",
|
||||
"points": 2.43,
|
||||
"answer": [
|
||||
null,
|
||||
"50"
|
||||
],
|
||||
"desc": "키보드 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[2][1].type",
|
||||
"$[2][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "Locate Object 2 sec"
|
||||
},
|
||||
{
|
||||
"ele": "$[2][2].type",
|
||||
"points": 2.43,
|
||||
"answer": "hide",
|
||||
"desc": "숨기기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[2][3].type",
|
||||
"$[2][3].params[0].params[0]"
|
||||
],
|
||||
"points": 2.43,
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"desc": "wait second"
|
||||
},
|
||||
{
|
||||
"ele": "$[2][4].type",
|
||||
"points": 2.43,
|
||||
"answer": "show",
|
||||
"desc": "보이기"
|
||||
},
|
||||
{
|
||||
"ele": "$[3][0].params",
|
||||
"points": 2.43,
|
||||
"answer": [
|
||||
null,
|
||||
"51"
|
||||
],
|
||||
"desc": "키보드 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[3][1].type",
|
||||
"$[3][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "Locate Object 2 sec"
|
||||
},
|
||||
{
|
||||
"ele": "$[3][2].params[*].params",
|
||||
"answer": [
|
||||
"다녀왔습니다!",
|
||||
"1"
|
||||
],
|
||||
"points": 2.43,
|
||||
"desc": "dialog_time 여기는 놀이동산 1초 "
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
656
correct/2504CAS2A.json
Normal file
656
correct/2504CAS2A.json
Normal file
@@ -0,0 +1,656 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='약도')]",
|
||||
"points": 1.7,
|
||||
"desc": "문제 1/장면 1/[배경] 이름 설정 1/이름 변경 없음"
|
||||
},
|
||||
"1-2": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='나의 방')]",
|
||||
"points": 1.7,
|
||||
"desc": "문제 1/장면 2/[배경] 이름 설정 2/이름을 '나의 방'으로 변경하기"
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='놀이동산')]",
|
||||
"points": 1.7,
|
||||
"desc": "문제 1/놀이동산(1)/[개체] 이름 설정 1/이름을 '놀이동산'으로 변경하기"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='백화점')]",
|
||||
"points": 1.7,
|
||||
"desc": "문제 1/건물(6)/[개체] 이름 설정 2/이름을 '백화점'으로 변경하기"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='우리집')]",
|
||||
"points": 1.7,
|
||||
"desc": "문제 1/예쁜집/[개체] 이름 설정 3/이름을 '우리집'으로 변경하기"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='어린이')]",
|
||||
"points": 1.7,
|
||||
"desc": "문제 1/어린이(2)/[개체] 이름 설정 4/이름을 '어린이'로 변경하기"
|
||||
},
|
||||
"2": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'놀이동산')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/놀이동산/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "100",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/놀이동산/[시작]의 세부 동작 1/크기를 '100' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-25",
|
||||
"80"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/놀이동산/[시작]의 세부 동작 2/x: '-25' y: '80' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_object_click",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/놀이동산/오브젝트/오브젝트를 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].params[*].params",
|
||||
"answer": [
|
||||
"여기는 놀이동산!",
|
||||
"1"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/놀이동산/[오브젝트]의 세부 동작/'여기는 놀이동산!' 을 '1' 초 동안 '말하기'"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'화점|건물')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/백화점/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "80",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/백화점/[시작]의 세부 동작 1/크기를 '80' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"170",
|
||||
"-80"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/백화점/[시작]의 세부 동작 2/x: '170' y: '-80' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_object_click",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/백화점/오브젝트/오브젝트를 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].params[*].params",
|
||||
"answer": [
|
||||
"여기는 백화점!",
|
||||
"1"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/백화점/[오브젝트]의 세부 동작/'여기는 백화점!' 을 '1' 초 동안 '말하기'"
|
||||
}
|
||||
]
|
||||
},
|
||||
"31": {
|
||||
"type": "scene",
|
||||
"ele": "$.messages[?(@.name=='놀이동산')]",
|
||||
"points": 1.56,
|
||||
"desc": "시그널 작성 여부"
|
||||
},
|
||||
"32": {
|
||||
"type": "scene",
|
||||
"ele": "$.messages[?(@.name=='백화점')]",
|
||||
"points": 1.56,
|
||||
"desc": "시그널 작성 여부"
|
||||
},
|
||||
"4": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'우리집|예쁜')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "110",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/[시작]의 세부 동작 1/크기를 '110' 으로 정하기 "
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-170",
|
||||
"-90"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/[시작]의 세부 동작 2/x: '-170' y: '-90' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_object_click",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/오브젝트/오브젝트를 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"ask_and_wait",
|
||||
"첫 번째로 방문할 장소는?"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/[오브젝트]의 세부 동작 1/'첫 번째로 방문할 장소는?' 을 묻고 대답 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][2].type",
|
||||
"$[1][2].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"0.5"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/[오브젝트]의 세부 동작 2/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][3].type",
|
||||
"$[1][3].params[0].type",
|
||||
"$[1][3].params[0].params[0].type",
|
||||
"$[1][3].params[0].params[1]",
|
||||
"$[1][3].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"boolean_basic_operator",
|
||||
"get_canvas_input_value",
|
||||
"EQUAL",
|
||||
"놀이동산"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/만일 1/만일 '대답' = '놀이동산' 이라면 ",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][3].statements[0][0].type",
|
||||
"answer": "message_cast",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/[만일 1]의 세부 동작/'놀이동산' 신호 보내기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][4].type",
|
||||
"$[1][4].params[0].type",
|
||||
"$[1][4].params[0].params[0].type",
|
||||
"$[1][4].params[0].params[1]",
|
||||
"$[1][4].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"boolean_basic_operator",
|
||||
"get_canvas_input_value",
|
||||
"EQUAL",
|
||||
"백화점"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/만일 2/만일 '대답' = '백화점' 이라면 ",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].statements[0][0].type",
|
||||
"answer": "message_cast",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/우리집/[만일 2]의 세부 동작/'백화점' 신호 보내기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'어린이')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "40",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[시작]의 세부 동작 1/크기를 '40' 으로 정하기 "
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-170",
|
||||
"-100"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[시작]의 세부 동작 2/x: '-170' y: '-100' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 1.56,
|
||||
"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]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"39"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/만일/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].statements[0][0].params[0].params[0]",
|
||||
"$[0][3].statements[0][0].statements[0][0].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-90",
|
||||
"-100"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[만일]의 세부 동작/x: '-90' y: '-100' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_message_cast",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/신호 1/'놀이동산' 신호를 받았을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/반복 1/'놀이동산' 에 닿았는가? '이 될 때까지' 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].statements[0][0].type",
|
||||
"$[1][1].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[반복 1]의 세부 동작 1/'2' 초 동안 '놀이동산' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].statements[0][1].type",
|
||||
"$[1][1].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"0.5"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[반복 1]의 세부 동작 2/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][2].type"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/반복 2/'백화점' 에 닿았는가? '이 될 때까지' 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][2].statements[0][0].type",
|
||||
"$[1][2].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[반복 2]의 세부 동작 1/'2' 초 동안 '백화점' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][2].statements[0][1].type",
|
||||
"$[1][2].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[반복 2]의 세부 동작 2/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][3].type",
|
||||
"$[1][3].params[0].params[0]",
|
||||
"$[1][3].params[1].params[0]",
|
||||
"$[1][3].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy_time",
|
||||
"2",
|
||||
"-120",
|
||||
"-100"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[신호 1]의 세부 동작 1/'2' 초 동안 x: '-120' y: '-100' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][4].params[*].params",
|
||||
"answer": [
|
||||
"집 도착!",
|
||||
"1"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[신호 1]의 세부 동작 2/'집 도착!' 을 '1' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][5].type",
|
||||
"answer": "start_neighbor_scene",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[신호 1]의 세부 동작 3/'다음' 장면 시작하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[2][0].type",
|
||||
"answer": "when_message_cast",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/신호 2/'백화점' 신호를 받았을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][1].type"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/반복 1/'백화점' 에 닿았는가? '이 될 때까지' 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][1].statements[0][0].type",
|
||||
"$[2][1].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[반복 1]의 세부 동작 1/'2' 초 동안 '백화점' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][1].statements[0][1].type",
|
||||
"$[2][1].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"0.5"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[반복 1]의 세부 동작 2/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][2].type"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_while_true"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/반복 2/'놀이동산' 에 닿았는가? '이 될 때까지' 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][2].statements[0][0].type",
|
||||
"$[2][2].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_object_time",
|
||||
"2"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[반복 2]의 세부 동작 1/'2' 초 동안 '놀이동산' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][2].statements[0][1].type",
|
||||
"$[2][2].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[반복 2]의 세부 동작 2/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[2][3].type",
|
||||
"$[2][3].params[0].params[0]",
|
||||
"$[2][3].params[1].params[0]",
|
||||
"$[2][3].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy_time",
|
||||
"2",
|
||||
"-120",
|
||||
"-100"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[신호 1]의 세부 동작 1/'2' 초 동안 x: '-120' y: '-100' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[2][4].params[*].params",
|
||||
"answer": [
|
||||
"집 도착!",
|
||||
"1"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[신호 1]의 세부 동작 2/'집 도착!' 을 '1' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": "$[2][5].type",
|
||||
"answer": "start_neighbor_scene",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/어린이/[신호 1]의 세부 동작 3/'다음' 장면 시작하기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"6": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'나의|방')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_scene_start",
|
||||
"points": 1.56,
|
||||
"desc": "문제2/나의 방/장면/장면이 시작되었을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"set_visible_answer",
|
||||
"HIDE"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/나의 방/[장면]의 세부 동작 1/대답 '숨기기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]",
|
||||
"$[0][2].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"dialog",
|
||||
"my room!",
|
||||
"speak"
|
||||
],
|
||||
"points": 1.56,
|
||||
"desc": "문제2/나의 방/[장면]의 세부 동작 2/'my room!' 을 '말하기'",
|
||||
"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",
|
||||
"brightness",
|
||||
"10"
|
||||
],
|
||||
"points": 2,
|
||||
"desc": "문제 3/나의 방/[오브젝트]의 세부 동작 1/'밝기' 효과를 '10' 만큼 주기",
|
||||
"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/처음부터 다시 실행하기"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
482
correct/2505CAT3A.json
Normal file
482
correct/2505CAT3A.json
Normal file
@@ -0,0 +1,482 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='바다')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/바닷속(3)/[배경] 이름 설정/이름을 '바다'로 변경하기"
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='신비한 열매')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/블루베리/[개체] 이름 설정 1/이름을 '신비한 열매'로 변경하기"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='쓰레기')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/쓰레기/[개체] 이름 설정 2/이름 변경 없음"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='물고기')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/빨간 물고기/[개체] 이름 설정 3/이름을 '물고기'로 변경하기"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='상어')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/상어(1)/[개체] 이름 설정 4/이름을 '상어'로 변경하기"
|
||||
},
|
||||
"2": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'열매|블루베|신비한열매')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/신비한 열매/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].type",
|
||||
"answer": "hide",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/신비한 열매/[시작]의 세부 동작 1/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "40",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/신비한 열매/[시작]의 세부 동작 2/크기를 '40' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/신비한 열매/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0].params[*].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[*].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-200",
|
||||
"200",
|
||||
"-120",
|
||||
"120"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/신비한 열매/[반복]의 세부 동작 1/x: '-200 부터 200 사이의 무작위 수' y: '-120 부터 120 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/신비한 열매/[반복]의 세부 동작 2/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][2].type",
|
||||
"answer": "show",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/신비한 열매/[반복]의 세부 동작 3/모양 보이기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'쓰레기|변경없음')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/쓰레기/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].type",
|
||||
"answer": "hide",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/쓰레기/[시작]의 세부 동작 1/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "30",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/쓰레기/[시작]의 세부 동작 2/크기를 '30' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/쓰레기/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0].params[*].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[*].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"-200",
|
||||
"200",
|
||||
"-120",
|
||||
"120"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/쓰레기/[반복]의 세부 동작 1/x: '-200 부터 200 사이의 무작위 수' y: '-120 부터 120 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/쓰레기/[반복]의 세부 동작 2/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][2].type",
|
||||
"answer": "show",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/쓰레기/[반복]의 세부 동작 3/모양 보이기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'물고기')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"100",
|
||||
"60"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[시작]의 세부 동작 1/x: '100' y: '60' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[시작]의 세부 동작 2/크기를 '50' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.19,
|
||||
"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]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"37"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/만일 1/만일 '왼쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"-5"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 1]의 세부 동작/x 좌표를 '-5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].type",
|
||||
"$[0][3].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"39"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/만일 2/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].statements[0][0].type",
|
||||
"$[0][3].statements[0][1].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"5"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 2]의 세부 동작/x 좌표를 '5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"38"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/만일 3/만일 '위쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].statements[0][0].type",
|
||||
"$[0][3].statements[0][2].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_y",
|
||||
"5"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 3]의 세부 동작/y 좌표를 '5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].type",
|
||||
"$[0][3].statements[0][3].params[0].type",
|
||||
"$[0][3].statements[0][3].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"40"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/만일 4/만일 '아래쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][3].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_y",
|
||||
"-5"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 4]의 세부 동작/y 좌표를 '-5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/만일 5/만일 '신비한 열매' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][4].statements[0][0].params[*].params",
|
||||
"answer": [
|
||||
"냠냠!",
|
||||
"2"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 5]의 세부 동작 1/'냠냠!' 을 '2' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][4].statements[0][1].params[0].params[0]",
|
||||
"answer": "120",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 5]의 세부 동작 2/크기를 '120' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][4].statements[0][2].type",
|
||||
"answer": "hide",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 5]의 세부 동작 3/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].type",
|
||||
"$[0][3].statements[0][5].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/만일 6/만일 '쓰레기' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][0].type",
|
||||
"$[0][3].statements[0][5].statements[0][0].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][0].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"add_effect_amount",
|
||||
"color",
|
||||
"30"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 6]의 세부 동작 1/'색깔' 효과를 '30' 만큼 주기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][5].statements[0][1].params[*].params",
|
||||
"answer": [
|
||||
"으악!",
|
||||
"2"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 6]의 세부 동작 2/'으악!' 을 '2' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][5].statements[0][2].type",
|
||||
"answer": "erase_all_effects",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/물고기/[만일 6]의 세부 동작 3/효과 모두 지우기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"5": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'상어')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/상어/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].type",
|
||||
"answer": "hide",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/상어/[시작]의 세부 동작 1/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].type",
|
||||
"$[0][2].params[0].params[1]",
|
||||
"$[0][2].params[0].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_until_true",
|
||||
"boolean_basic_operator",
|
||||
"EQUAL",
|
||||
"120"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/상어/[시작]의 세부 동작 2/'물고기' 의 '크기' = '120' 이 될 때까지 기다리기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"stop_object",
|
||||
"other_objects"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/상어/[시작]의 세부 동작 3/'다른 오브젝트의' 코드 멈추기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].type",
|
||||
"answer": "locate",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/상어/[시작]의 세부 동작 4/'물고기' 위치로 이동하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][5].type",
|
||||
"answer": "show",
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/상어/[시작]의 세부 동작 5/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][6].params[*].params",
|
||||
"answer": [
|
||||
"상어로 변했어!",
|
||||
"2"
|
||||
],
|
||||
"points": 2.19,
|
||||
"desc": "문제 2/상어/[시작]의 세부 동작 6/'상어로 변했어!' 를 '2' 초 동안 '말하기'"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
870
correct/2506_CAS_2_A.json
Normal file
870
correct/2506_CAS_2_A.json
Normal file
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
362
correct/2507_CAT_3_A.json
Normal file
362
correct/2507_CAT_3_A.json
Normal file
@@ -0,0 +1,362 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='실험실')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/교실 뒤(3)/[배경] 이름 설정/이름을 '실험실'으로 변경하기"
|
||||
},
|
||||
"1-2": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='새로운 약')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/물약(빨강)/[개체] 이름 설정 1/이름을 '새로운 약'으로 변경하기"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='불')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/불(2)/[개체] 이름 설정 2/이름을 '불'로 변경하기"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='마법사')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/꼬마 마법사/[개체] 이름 설정 3/이름을 '마법사'로 변경하기"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='마법의 약')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/마법의 약/[개체] 이름 설정 4/이름 변경 없음"
|
||||
},
|
||||
"2-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'새로운 약|물약')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "50", "5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[시작]의 세부 동작 1/x: '50' y: '5' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "60",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[시작]의 세부 동작 2/크기를 '60' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_object_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/오브젝트/오브젝트를 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": ["$[1][1].type", "$[1][1].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].statements[0][0].type",
|
||||
"answer": "locate",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[반복]의 세부 동작/'마우스 포인터' 위치로 이동하기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'불')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-150", "-30"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 1/x: '-150' y: '-30' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "90",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 2/크기를 '90' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": ["$[0][3].type", "$[0][3].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][0].params[0].params[3].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[1].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[3].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-150", "0", "-10", "40"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 1/x: '-150 부터 0 사이의 무작위 수' y: '-10 부터 40 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].type",
|
||||
"answer": "hide",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 2/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type",
|
||||
"$[0][3].statements[0][2].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][2].params[0].params[3].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "calc_rand", "1", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 3/'1 부터 2 사이의 무작위 수' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].type",
|
||||
"answer": "show",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 4/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "0.5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 5/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].type",
|
||||
"$[0][3].statements[0][5].params[0].type"
|
||||
],
|
||||
"answer": ["_if", "reach_something"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/만일/만일 '새로운 약' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][5].statements[0][0].params[0].params[0]",
|
||||
"answer": "300",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 1/크기를 '300' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][1].type",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[0].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[1]"
|
||||
],
|
||||
"answer": ["dialog", "마법 실패", "speak"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 2/'마법 실패' 를 '말하기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][2].type",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[0]"
|
||||
],
|
||||
"answer": ["stop_object", "all"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 3/'모든' 코드 멈추기",
|
||||
"type": "list"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'마법사')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "135", "-20"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 1/x: '135' y: '-20' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "180",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 2/크기를 '180' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[*].params",
|
||||
"answer": ["마법 실험을 해봐야지!", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 3/'마법 실험을 해봐야지!' 를 '2' 초 동안 '말하기'"
|
||||
}
|
||||
]
|
||||
},
|
||||
"5-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'마법의 약')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-40", "10"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[시작]의 세부 동작 1/x: '-40' y: '10' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[시작]의 세부 동작 2/크기를 '50' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": ["$[0][3].type", "$[0][3].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][0].type",
|
||||
"answer": "hide",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 1/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][1].params[0].params[3].params[0]"
|
||||
],
|
||||
"answer": ["locate_x", "-160", "60"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 2/x: '-160 부터 60 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 3/ '2' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].type",
|
||||
"answer": "show",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 4/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "0.5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 5/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].type",
|
||||
"$[0][3].statements[0][5].params[0].type"
|
||||
],
|
||||
"answer": ["_if", "reach_something"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/만일/만일 '새로운 약' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][5].statements[0][0].params[0].params[0]",
|
||||
"answer": "100",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 1/크기를 '100' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][1].type",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["add_effect_amount", "color", "70"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 2/'색깔' 효과를 '70' 만큼 주기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][2].type",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[0].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[1]"
|
||||
],
|
||||
"answer": ["dialog", "마법 성공", "speak"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 3/'마법 성공' 을 '말하기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][3].type",
|
||||
"$[0][3].statements[0][5].statements[0][3].params[0]"
|
||||
],
|
||||
"answer": ["stop_object", "all"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 4/'모든' 코드 멈추기",
|
||||
"type": "list"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
774
correct/2508_CAS_2_A.json
Normal file
774
correct/2508_CAS_2_A.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
825
correct/2508_CAS_2_B.json
Normal file
825
correct/2508_CAS_2_B.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
557
correct/2509_CAT_3_A.json
Normal file
557
correct/2509_CAT_3_A.json
Normal file
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='화산')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/화산섬/[배경] 이름 설정/이름을 '화산'으로 변경하기",
|
||||
"sort": 11
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='불')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/불(2)/[개체] 이름 설정 1/이름을 '불'로 변경하기",
|
||||
"sort": 13
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='공룡')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/공룡/[개체] 이름 설정 2/이름 변경 없음",
|
||||
"sort": 14
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='알')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/계란/[개체] 이름 설정 3/이름을 '알'로 변경하기",
|
||||
"sort": 15
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='바위')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/바위(4)/[개체] 이름 설정 4/이름을 '바위'로 변경하기",
|
||||
"sort": 16
|
||||
},
|
||||
"2-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'불')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"120",
|
||||
"90"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 1/x: '120' y: '90' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "130",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 2/크기를 '130' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"change_to_some_shape",
|
||||
"get_pictures"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 1/'불(2)_3' 모양으로 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"0.5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 2/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"change_to_some_shape",
|
||||
"get_pictures"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 3/'불(2)_1' 모양으로 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].type",
|
||||
"$[0][3].statements[0][3].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"0.5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 4/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
}
|
||||
],
|
||||
"sort": 102
|
||||
},
|
||||
"3-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'공룡')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"0",
|
||||
"-20"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[시작]의 세부 동작 1/x: '0' y: '-20' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"공룡알을 구하자",
|
||||
"1"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[시작]의 세부 동작 2/'공룡알을 구하자' 를 '1' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.14,
|
||||
"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]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"38"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 1/만일 '위쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_y",
|
||||
"5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 1]의 세부 동작/y 좌표를 '5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].type",
|
||||
"$[0][3].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"40"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 2/만일 '아래쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].statements[0][0].type",
|
||||
"$[0][3].statements[0][1].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_y",
|
||||
"-5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 2]의 세부 동작/y 좌표를 '-5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"37"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 3/만일 '왼쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].statements[0][0].type",
|
||||
"$[0][3].statements[0][2].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"-5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 3]의 세부 동작/x 좌표를 '-5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].type",
|
||||
"$[0][3].statements[0][3].params[0].type",
|
||||
"$[0][3].statements[0][3].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"39"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 4/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][3].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 4]의 세부 동작/x 좌표를 '5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 5/만일 '불' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].statements[0][0].type",
|
||||
"$[0][3].statements[0][4].statements[0][0].params[0].params[0]",
|
||||
"$[0][3].statements[0][4].statements[0][0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"dialog",
|
||||
"앗 뜨거워!",
|
||||
"speak"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 5]의 세부 동작 1/'앗 뜨거워!' 를 '말하기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].statements[0][1].type",
|
||||
"$[0][3].statements[0][4].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 5]의 세부 동작 2/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].statements[0][2].type",
|
||||
"$[0][3].statements[0][4].statements[0][2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"stop_object",
|
||||
"all"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 5]의 세부 동작 3/'모든' 코드 멈추기",
|
||||
"type": "list"
|
||||
}
|
||||
],
|
||||
"sort": 110
|
||||
},
|
||||
"4-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'알|계')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[시작]의 세부 동작 1/크기를 '50' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"rotate_absolute",
|
||||
"270"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[시작]의 세부 동작 2/방향을 '270°' 로 정하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][0].type",
|
||||
"answer": "show",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[반복]의 세부 동작 1/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][1].params[0].params[3].params[0]",
|
||||
"$[0][3].statements[0][1].params[1].params[1].params[0]",
|
||||
"$[0][3].statements[0][1].params[1].params[3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"55",
|
||||
"160",
|
||||
"5",
|
||||
"10"
|
||||
],
|
||||
"points": 2.2,
|
||||
"desc": "문제 2/알/[반복]의 세부 동작 2/x: '55 부터 160 사이의 무작위 수' y: '5 부터 10 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]",
|
||||
"$[0][3].statements[0][2].params[1].params[1].params[0]",
|
||||
"$[0][3].statements[0][2].params[1].params[3].params[0]",
|
||||
"$[0][3].statements[0][2].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_xy_time",
|
||||
"2",
|
||||
"-200",
|
||||
"200",
|
||||
"-140"
|
||||
],
|
||||
"points": 2.2,
|
||||
"desc": "문제 2/알/[반복]의 세부 동작 3/'2' 초 동안 x: '-200 부터 200 사이의 무작위 수' y: '-140' 만큼 움직이기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].type",
|
||||
"$[0][3].statements[0][3].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/만일/만일 '바위' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].statements[0][0].params[*].params",
|
||||
"answer": [
|
||||
"공룡알이 깨졌다!",
|
||||
"0.2"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[만일]의 세부 동작 1/'공룡알이 깨졌다!' 를 '0.2' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].statements[0][1].type",
|
||||
"answer": "hide",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[만일]의 세부 동작 2/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].params",
|
||||
"answer": [
|
||||
null,
|
||||
"32"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/스페이스/'스페이스' 키를 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].statements[0][0].type",
|
||||
"$[1][1].statements[0][0].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/만일/만일 '공룡' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].statements[0][0].statements[0][0].type",
|
||||
"answer": "locate",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[만일]의 세부 동작 1/'공룡' 위치로 이동하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].statements[0][0].statements[0][1].type",
|
||||
"$[1][1].statements[0][0].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"-20"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[만일]의 세부 동작 2/x 좌표를 '-20' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
}
|
||||
],
|
||||
"sort": 126
|
||||
},
|
||||
"5-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'바위')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/바위/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"130",
|
||||
"-120"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/바위/[시작]의 세부 동작 1/x: '130' y: '-120' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "150",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/바위/[시작]의 세부 동작 2/크기를 '150' 으로 정하기"
|
||||
}
|
||||
],
|
||||
"sort": 141
|
||||
}
|
||||
}
|
||||
1008
correct/2510_CAS_2_A.json
Normal file
1008
correct/2510_CAS_2_A.json
Normal file
File diff suppressed because it is too large
Load Diff
877
correct/_2508_CAS_2_A.json
Normal file
877
correct/_2508_CAS_2_A.json
Normal file
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
870
correct/_2508_CAS_2_B.json
Normal file
870
correct/_2508_CAS_2_B.json
Normal file
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
24
logging_config.py
Normal file
24
logging_config.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import logging
|
||||
import os
|
||||
|
||||
def setup_logging():
|
||||
log_dir = "logs"
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
log_file = os.path.join(log_dir, "cat.log")
|
||||
|
||||
log_format = "[%(asctime)s] [%(levelname)s] [%(module)s:%(lineno)d] %(message)s"
|
||||
date_format = "%Y-%m-%d %H:%M:%S"
|
||||
|
||||
logger = logging.getLogger()
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
console_handler = logging.StreamHandler()
|
||||
console_handler.setLevel(logging.DEBUG)
|
||||
console_handler.setFormatter(logging.Formatter(log_format, date_format))
|
||||
|
||||
file_handler = logging.FileHandler(log_file, encoding="utf-8")
|
||||
file_handler.setLevel(logging.DEBUG)
|
||||
file_handler.setFormatter(logging.Formatter(log_format, date_format))
|
||||
|
||||
logger.addHandler(console_handler)
|
||||
logger.addHandler(file_handler)
|
||||
1127
logs/2503CAT3A.log
Normal file
1127
logs/2503CAT3A.log
Normal file
File diff suppressed because it is too large
Load Diff
88
logs/2504CAS2A-정답.log
Normal file
88
logs/2504CAS2A-정답.log
Normal file
@@ -0,0 +1,88 @@
|
||||
|
||||
Processing: ./sample/제2504회 코딩활용능력 2급 A형 정답/temp/project.json
|
||||
example: 1-1
|
||||
elements found for $..objects[?(@.name=='약도')]
|
||||
$..objects[?(@.name=='약도')] found
|
||||
example: 1-2
|
||||
elements found for $..objects[?(@.name=='나의 방')]
|
||||
$..objects[?(@.name=='나의 방')] found
|
||||
example: 1-3
|
||||
elements found for $..objects[?(@.name=='놀이동산')]
|
||||
$..objects[?(@.name=='놀이동산')] found
|
||||
example: 1-4
|
||||
elements found for $..objects[?(@.name=='백화점')]
|
||||
$..objects[?(@.name=='백화점')] found
|
||||
example: 1-5
|
||||
elements found for $..objects[?(@.name=='우리집')]
|
||||
$..objects[?(@.name=='우리집')] found
|
||||
example: 1-6
|
||||
elements found for $..objects[?(@.name=='어린이')]
|
||||
$..objects[?(@.name=='어린이')] found
|
||||
example: 2
|
||||
2-1: when_run_button_click == when_run_button_click
|
||||
2-2: 100 == 100
|
||||
2-3: ['locate_xy', '-25', '80'] == ['locate_xy', '-25', '80']
|
||||
2-4: when_object_click == when_object_click
|
||||
2-5: ['여기는 놀이동산!', '1'] == ['여기는 놀이동산!', '1']
|
||||
example: 3
|
||||
3-1: when_run_button_click == when_run_button_click
|
||||
3-2: 80 == 80
|
||||
3-3: ['locate_xy', '170', '-80'] == ['locate_xy', '170', '-80']
|
||||
3-4: when_object_click == when_object_click
|
||||
3-5: ['여기는 백화점!', '1'] == ['여기는 백화점!', '1']
|
||||
example: 31
|
||||
elements found for $.messages[?(@.name=='놀이동산')]
|
||||
$.messages[?(@.name=='놀이동산')] found
|
||||
example: 32
|
||||
elements found for $.messages[?(@.name=='백화점')]
|
||||
$.messages[?(@.name=='백화점')] found
|
||||
example: 4
|
||||
4-1: when_run_button_click == when_run_button_click
|
||||
4-2: 110 == 110
|
||||
4-3: ['locate_xy', '-170', '-90'] == ['locate_xy', '-170', '-90']
|
||||
4-4: when_object_click == when_object_click
|
||||
4-5: ['ask_and_wait', '첫 번째로 방문할 장소는?'] == ['ask_and_wait', '첫 번째로 방문할 장소는?']
|
||||
4-6: ['wait_second', '0.5'] == ['wait_second', '0.5']
|
||||
4-7: ['_if', 'boolean_basic_operator', 'get_canvas_input_value', 'EQUAL', '놀이동산'] == ['_if', 'boolean_basic_operator', 'get_canvas_input_value', 'EQUAL', '놀이동산']
|
||||
4-8: message_cast == message_cast
|
||||
4-9: ['_if', 'boolean_basic_operator', 'get_canvas_input_value', 'EQUAL', '백화점'] == ['_if', 'boolean_basic_operator', 'get_canvas_input_value', 'EQUAL', '백화점']
|
||||
4-10: message_cast == message_cast
|
||||
example: 5
|
||||
5-1: when_run_button_click == when_run_button_click
|
||||
5-2: 40 == 40
|
||||
5-3: ['locate_xy', '-170', '-100'] == ['locate_xy', '-170', '-100']
|
||||
5-4: ['repeat_inf', 'None'] == ['repeat_inf', 'None']
|
||||
5-5: ['_if', 'is_press_some_key', '39'] == ['_if', 'is_press_some_key', '39']
|
||||
5-6: ['locate_xy', '-90', '-100'] == ['locate_xy', '-90', '-100']
|
||||
5-7: when_message_cast == when_message_cast
|
||||
5-8: ['repeat_while_true'] == ['repeat_while_true']
|
||||
5-9: ['locate_object_time', '2'] == ['locate_object_time', '2']
|
||||
5-10: ['wait_second', '0.5'] == ['wait_second', '0.5']
|
||||
5-11: ['repeat_while_true'] == ['repeat_while_true']
|
||||
5-12: ['locate_object_time', '2'] == ['locate_object_time', '2']
|
||||
5-13: ['wait_second', '1'] == ['wait_second', '1']
|
||||
5-14: ['locate_xy_time', '2', '-120', '-100'] == ['locate_xy_time', '2', '-120', '-100']
|
||||
5-15: ['집 도착!', '1'] == ['집 도착!', '1']
|
||||
5-16: start_neighbor_scene == start_neighbor_scene
|
||||
5-17: when_message_cast == when_message_cast
|
||||
5-18: ['repeat_while_true'] == ['repeat_while_true']
|
||||
5-19: ['locate_object_time', '2'] == ['locate_object_time', '2']
|
||||
5-20: ['wait_second', '0.5'] == ['wait_second', '0.5']
|
||||
5-21: ['repeat_while_true'] == ['repeat_while_true']
|
||||
5-22: ['locate_object_time', '2'] == ['locate_object_time', '2']
|
||||
5-23: ['wait_second', '1'] == ['wait_second', '1']
|
||||
5-24: ['locate_xy_time', '2', '-120', '-100'] == ['locate_xy_time', '2', '-120', '-100']
|
||||
5-25: ['집 도착!', '1'] == ['집 도착!', '1']
|
||||
5-26: start_neighbor_scene == start_neighbor_scene
|
||||
example: 6
|
||||
6-1: when_scene_start == when_scene_start
|
||||
6-2: ['set_visible_answer', 'HIDE'] == ['set_visible_answer', 'HIDE']
|
||||
6-3: ['dialog', 'my room!', 'speak'] == ['dialog', 'my room!', 'speak']
|
||||
6-4: when_object_click == when_object_click
|
||||
6-5: ['add_effect_amount', 'brightness', '10'] == ['add_effect_amount', 'brightness', '10']
|
||||
6-6: ['dialog', '처음부터 다시 실행합니다.', 'speak'] == ['dialog', '처음부터 다시 실행합니다.', 'speak']
|
||||
6-7: ['wait_second', '2'] == ['wait_second', '2']
|
||||
6-8: restart_project == restart_project
|
||||
Total Points for ['temp', 1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 1.56, 2, 2, 2, 2, 2, 99.76000000000008]
|
||||
|
||||
Results saved to ./sample/제2504회 코딩활용능력 2급 A형 정답/results.xlsx
|
||||
7379
logs/2504CAS2A.log
Normal file
7379
logs/2504CAS2A.log
Normal file
File diff suppressed because it is too large
Load Diff
3123
logs/2505CAT3A.log
Normal file
3123
logs/2505CAT3A.log
Normal file
File diff suppressed because it is too large
Load Diff
9797
logs/2506_CAS_2_A.log
Normal file
9797
logs/2506_CAS_2_A.log
Normal file
File diff suppressed because it is too large
Load Diff
259
logs/cat.log
Normal file
259
logs/cat.log
Normal file
@@ -0,0 +1,259 @@
|
||||
[2025-07-31 15:50:20] [ERROR] [main:381] Error processing ./output/2507_CAT_3_A/2507회코딩활용능력3급A형정답\project.json: cannot access local variable 'student_id' where it is not associated with a value
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 375, in main
|
||||
points.insert(0, student_id)
|
||||
^^^^^^^^^^
|
||||
UnboundLocalError: cannot access local variable 'student_id' where it is not associated with a value
|
||||
[2025-07-31 15:52:50] [ERROR] [main:380] 🚫Error processing ./output/2507_CAT_3_A/2507회코딩활용능력3급A형정답\project.json: cannot access local variable 'student_id' where it is not associated with a value
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 375, in main
|
||||
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'
|
||||
[2025-10-01 15:43:18] [ERROR] [main:300] 🚫Error processing ./output/2509_CAT_3_A/2509_CAT_3_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 295, 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-10-30 16:24:04] [ERROR] [main:301] 🚫Error processing ./output/2510_CAS_2_A/2510_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 296, 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-10-30 16:26:32] [ERROR] [main:301] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: unsupported operand type(s) for +=: 'float' and 'NoneType'
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 296, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 212, in process_project
|
||||
total_points += block_points
|
||||
TypeError: unsupported operand type(s) for +=: 'float' and 'NoneType'
|
||||
[2025-10-31 17:08:00] [ERROR] [main:322] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'NoneType' object is not iterable
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 317, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 167, in process_project
|
||||
for block in block_list
|
||||
^^^^^^^^^^
|
||||
TypeError: 'NoneType' object is not iterable
|
||||
[2025-10-31 17:14:04] [ERROR] [main:324] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: unhashable type: 'list'
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 319, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 168, in process_project
|
||||
if block.get("answer") in target_event_answers
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
TypeError: unhashable type: 'list'
|
||||
[2025-10-31 17:17:42] [ERROR] [main:327] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: unhashable type: 'list'
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 322, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 171, in process_project
|
||||
if answer in target_event_answers: # 조건에 맞는지 확인
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
TypeError: unhashable type: 'list'
|
||||
[2025-10-31 17:51:14] [ERROR] [main:360] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'list' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 355, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 234, in process_project
|
||||
script_data = reorder_script_by_event_order(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 149, in reorder_script_by_event_order
|
||||
if script.get("type") == event_type:
|
||||
^^^^^^^^^^
|
||||
AttributeError: 'list' object has no attribute 'get'
|
||||
[2025-10-31 17:56:20] [ERROR] [main:360] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'list' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 355, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 234, in process_project
|
||||
script_data = reorder_script_by_event_order(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 149, in reorder_script_by_event_order
|
||||
if script.get("type") == event_type:
|
||||
^^^^^^^^^^
|
||||
AttributeError: 'list' object has no attribute 'get'
|
||||
[2025-10-31 17:56:40] [ERROR] [main:360] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'list' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 355, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 234, in process_project
|
||||
script_data = reorder_script_by_event_order(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 149, in reorder_script_by_event_order
|
||||
if script.get("type") == event_type:
|
||||
^^^^^^^^^^
|
||||
AttributeError: 'list' object has no attribute 'get'
|
||||
[2025-10-31 17:58:18] [ERROR] [main:361] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'list' object has no attribute 'get'
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 356, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 235, in process_project
|
||||
script_data = reorder_script_by_event_order(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 150, in reorder_script_by_event_order
|
||||
if script.get("type") == event_type:
|
||||
^^^^^^^^^^
|
||||
AttributeError: 'list' object has no attribute 'get'
|
||||
[2025-11-03 16:09:35] [ERROR] [main:399] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: list indices must be integers or slices, not str
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 394, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 270, in process_project
|
||||
script_data = reorder_script_all_cases(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases
|
||||
type_map.setdefault(s["type"], []).append(s)
|
||||
~^^^^^^^^
|
||||
TypeError: list indices must be integers or slices, not str
|
||||
[2025-11-03 17:15:12] [ERROR] [main:433] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 0
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 428, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 310, in process_project
|
||||
block_elements = find_element(single_script, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 33, in find_element
|
||||
for match in jsonpath_expr.find(item):
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 268, in find
|
||||
for subdata in self.left.find(datum)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 270, in find
|
||||
for submatch in self.right.find(subdata)]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 680, in find
|
||||
return self._find_base(datum, create=False)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 692, in _find_base
|
||||
return [DatumInContext(datum.value[self.index], path=self, context=datum)]
|
||||
~~~~~~~~~~~^^^^^^^^^^^^
|
||||
KeyError: 0
|
||||
[2025-11-03 17:20:20] [ERROR] [main:417] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 0
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 412, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 300, in process_project
|
||||
block_elements = find_element(data, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 33, in find_element
|
||||
for match in jsonpath_expr.find(item):
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 268, in find
|
||||
for subdata in self.left.find(datum)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 270, in find
|
||||
for submatch in self.right.find(subdata)]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 680, in find
|
||||
return self._find_base(datum, create=False)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 692, in _find_base
|
||||
return [DatumInContext(datum.value[self.index], path=self, context=datum)]
|
||||
~~~~~~~~~~~^^^^^^^^^^^^
|
||||
KeyError: 0
|
||||
[2025-11-03 17:21:39] [ERROR] [main:407] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 1
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 402, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 288, in process_project
|
||||
block_elements = find_list_element(data, block_path)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 48, in find_list_element
|
||||
result.append([match.value for match in jsonpath_expr.find(data)])
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 268, in find
|
||||
for subdata in self.left.find(datum)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 270, in find
|
||||
for submatch in self.right.find(subdata)]
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 680, in find
|
||||
return self._find_base(datum, create=False)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 692, in _find_base
|
||||
return [DatumInContext(datum.value[self.index], path=self, context=datum)]
|
||||
~~~~~~~~~~~^^^^^^^^^^^^
|
||||
KeyError: 1
|
||||
[2025-11-04 15:36:56] [ERROR] [main:423] 🚫Error processing ./output/2510_CAS_2_A/코딩활용능력2급(엔트리)-000139-성지환\project.json: 'NoneType' object is not iterable
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 418, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 268, in process_project
|
||||
script_data = reorder_script_all_cases(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases
|
||||
for s in script_json:
|
||||
^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object is not iterable
|
||||
[2025-11-04 16:20:44] [ERROR] [main:423] 🚫Error processing ./output/2510_CAS_2_A/코딩활용능력2급(엔트리)-000139-성지환\project.json: 'NoneType' object is not iterable
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 418, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 268, in process_project
|
||||
script_data = reorder_script_all_cases(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases
|
||||
for s in script_json:
|
||||
^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object is not iterable
|
||||
[2025-11-04 17:11:33] [ERROR] [main:423] 🚫Error processing ./output/2510_CAS_2_A/코딩활용능력2급(엔트리)-000139-성지환\project.json: 'NoneType' object is not iterable
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 418, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 268, in process_project
|
||||
script_data = reorder_script_all_cases(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases
|
||||
for s in script_json:
|
||||
^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object is not iterable
|
||||
[2025-11-05 16:02:42] [ERROR] [main:423] 🚫Error processing ./output/00_test/코딩활용능력2급(엔트리)-000139-성지환\project.json: 'NoneType' object is not iterable
|
||||
Traceback (most recent call last):
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 418, in main
|
||||
points = process_project(project_data, scoring_data)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 268, in process_project
|
||||
script_data = reorder_script_all_cases(script_json, block_event_order)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases
|
||||
for s in script_json:
|
||||
^^^^^^^^^^^
|
||||
TypeError: 'NoneType' object is not iterable
|
||||
79
logs/main-김세연.log
Normal file
79
logs/main-김세연.log
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
Processing: output/2502 CAT 2급 A형/cas-000549-김세연/temp/project.json
|
||||
example: 1-1
|
||||
Element '$..objects[?(@.name=='들길')]' not found
|
||||
example: 1-2
|
||||
Element '$..objects[?(@.name=='하늘')]' not found
|
||||
example: 1-3
|
||||
Element '$..objects[?(@.name=='나무')]' not found
|
||||
example: 1-4
|
||||
Element '$..objects[?(@.name=='돌')]' not found
|
||||
example: 1-5
|
||||
Element '$..objects[?(@.name=='행인')]' not found
|
||||
example: 1-6
|
||||
Element '$..objects[?(@.name=='마라토너')]' not found
|
||||
example: 2
|
||||
2-1: when_run_button_click == when_run_button_click
|
||||
2-2: hide == hide
|
||||
2-3: ['repeat_inf', 'None'] == ['repeat_inf', 'None']
|
||||
2-4: ['create_clone', 'self'] == ['create_clone', 'self']
|
||||
2-5: ['wait_second', 'calc_rand', '1', '3'] == ['wait_second', 'calc_rand', '1', '3']
|
||||
2-6: when_clone_start == when_clone_start
|
||||
2-7: ['locate_xy', '240', '-20'] == ['locate_xy', '240', '-20']
|
||||
2-8: show == show
|
||||
2-9: ['repeat_while_true', 'x', 'LESS', '-240'] == ['repeat_while_true', 'x', 'LESS', '-240']
|
||||
2-10: ['move_x', '-3'] == ['move_x', '-3']
|
||||
2-11: delete_clone == delete_clone
|
||||
example: 3
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
3-1: Script Not exist
|
||||
example: 4
|
||||
4-1: when_run_button_click == when_run_button_click
|
||||
4-2: ['locate_xy', '240', '-30'] == ['locate_xy', '240', '-30']
|
||||
4-3: ['repeat_inf', 'None'] == ['repeat_inf', 'None']
|
||||
4-4: ['move_direction', '-1'] == ['move_direction', '-1']
|
||||
example: 28
|
||||
elements found for $.messages[?(@.name=='넘어짐')]
|
||||
$.messages[?(@.name=='넘어짐')] found
|
||||
example: 5
|
||||
5-1: when_run_button_click == when_run_button_click
|
||||
5-2: flip_y == flip_y
|
||||
5-3: ['locate_xy', '-150', '-70'] == ['locate_xy', '-150', '-70']
|
||||
5-4: ['repeat_inf', 'None'] == ['repeat_inf', 'None']
|
||||
5-5: next == next
|
||||
5-6: ['wait_second', '0.1'] == ['wait_second', '0.1']
|
||||
5-7: ['_if', 'is_press_some_key', '32'] == ['_if', 'is_press_some_key', '32']
|
||||
5-8: ['repeat_basic', '20'] == ['repeat_basic', '20']
|
||||
5-9: ['move_y', '5'] == ['move_y', '5']
|
||||
5-10: ['repeat_basic', '20'] == ['repeat_basic', '20']
|
||||
5-11: ['move_y', '-5'] == ['move_y', '-5']
|
||||
5-12: ['_if', 'reach_something'] == ['_if', 'reach_something']
|
||||
5-13: message_cast == message_cast
|
||||
5-14: when_message_cast == when_message_cast
|
||||
5-15: ['rotate_relative', 'angle', '40'] == ['rotate_relative', 'angle', '40']
|
||||
5-16: ['locate_xy_time', '0.2', '-140', '-100'] == ['locate_xy_time', '0.2', '-140', '-100']
|
||||
5-17: ['dialog', '아야!', 'speak'] == ['dialog', '아야!', 'speak']
|
||||
5-18: ['stop_object', 'otherThread'] == ['stop_object', 'otherThread']
|
||||
5-19: ['wait_second', '1'] == ['wait_second', '1']
|
||||
5-20: start_neighbor_scene == start_neighbor_scene
|
||||
example: 6
|
||||
6-1: when_scene_start == when_scene_start
|
||||
6-2: ['dialog', '아쉽지만 잘했어!', 'speak'] == ['dialog', '아쉽지만 잘했어!', 'speak']
|
||||
6-3: when_object_click == when_object_click
|
||||
6-4: ['add_effect_amount', 'brightness', '55'] == ['add_effect_amount', 'brightness', '55']
|
||||
6-5: ['dialog', '처음부터 다시 실행합니다.', 'speak'] == ['dialog', '처음부터 다시 실행합니다.', 'speak']
|
||||
6-6: ['wait_second', '2'] == ['wait_second', '2']
|
||||
6-7: restart_project == restart_project
|
||||
Total Points for ['cas-000549-김세연', 0, 0, 0, 0, 0, 0, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, '확인 필요', '확인 필요', '확인 필요', '확인 필요', '확인 필요', '확인 필요', '확인 필요', '확인 필요', '확인 필요', '확인 필요', '확인 필요', '확인 필요', 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 68.80000000000001]
|
||||
|
||||
Results saved to output/2502 CAT 2급 A형/cas-000549-김세연/results.xlsx
|
||||
36943
logs/main.log
Normal file
36943
logs/main.log
Normal file
File diff suppressed because it is too large
Load Diff
461
main.py
461
main.py
@@ -1,10 +1,19 @@
|
||||
from jsonpath_ng.ext import parse
|
||||
import json
|
||||
from itertools import chain
|
||||
import os
|
||||
import pandas as pd # 추가된 import
|
||||
import unicodedata # 상단에 import 추가
|
||||
import re # 상단에 추가
|
||||
from datetime import datetime
|
||||
import logging
|
||||
from logging_config import setup_logging # logging 설정을 위한 import
|
||||
import traceback
|
||||
import itertools
|
||||
import copy
|
||||
|
||||
# 파일 경로 설정
|
||||
project_json_path = './sample/제2502회 코딩활용능력 2급 B형 정답/project.json'
|
||||
scoring_json_path = './scoring.json'
|
||||
from script_utils import extract_and_format_scripts # 스크립트 추출 함수 import
|
||||
|
||||
setup_logging() # logging 설정 호출
|
||||
|
||||
# JSON 파일 읽기
|
||||
def read_json(file_path):
|
||||
@@ -13,9 +22,13 @@ def read_json(file_path):
|
||||
|
||||
# 요소 탐색 함수
|
||||
def find_element(project_data, jsonpath_expr):
|
||||
jsonpath_expr = parse(jsonpath_expr)
|
||||
return [match.value for match in jsonpath_expr.find(project_data)]
|
||||
|
||||
"""
|
||||
주어진 데이터(project_data)에서 jsonpath 표현식에 일치하는 모든 값들을 찾아
|
||||
리스트로 반환합니다.
|
||||
"""
|
||||
parsed_expr = parse(jsonpath_expr)
|
||||
return [match.value for match in parsed_expr.find(project_data)]
|
||||
|
||||
# 요소 탐색 함수
|
||||
def find_script_element(project_data, jsonpath_expr):
|
||||
jsonpath_expr = parse(jsonpath_expr)
|
||||
@@ -28,96 +41,380 @@ def find_script_element(project_data, jsonpath_expr):
|
||||
|
||||
# jsonpath_expr_list 로 넘어온 jsonpath들을 하나씩 parse 해주고 결과를 result 리스트로 반환
|
||||
def find_list_element(data, jsonpath_expr_list):
|
||||
"""
|
||||
주어진 데이터(data)에서 여러 jsonpath 표현식들에 일치하는 값들을 찾아
|
||||
결과를 리스트의 리스트 형태로 반환합니다.
|
||||
"""
|
||||
return [
|
||||
[match.value for match in parse(expr).find(data)]
|
||||
for expr in jsonpath_expr_list
|
||||
]
|
||||
|
||||
# 스크립트 채점 진행 전 스크립트 블럭 순서가 when_run_button_click 1번째, when_clone_start 2번째 배열에 없으면
|
||||
# 리스트 순서 스왑해서 각각 0, 1번 순서로 배치될 수 있도록 함
|
||||
# when_scene_start 1번째, when_message_cast 2번째 동일한 순서로 리스트 순서 스왑해서 정렬
|
||||
# when_scene_start = [장면이 시작되었을 때]
|
||||
# when_message_cast = ["성공"신호를 받았을 때]
|
||||
def swap_script(origin):
|
||||
"""스크립트 블록 순서 정렬 함수"""
|
||||
if not origin or len(origin) == 0:
|
||||
return origin
|
||||
|
||||
# 스크립트 블록 분류를 위한 임시 저장소
|
||||
run_button_blocks = []
|
||||
key_press_blocks = []
|
||||
clone_start_block = None
|
||||
message_cast_block = []
|
||||
other_blocks = []
|
||||
|
||||
# 각 블록을 타입별로 분류
|
||||
for i, block in enumerate(origin):
|
||||
if not block or len(block) == 0:
|
||||
continue
|
||||
|
||||
block_type = block[0].get("type")
|
||||
|
||||
# # 기존 로직: run_button과 scene_start 처리
|
||||
# if (block_type == "when_run_button_click" or block_type == "when_scene_start") and i > 0:
|
||||
# print(f"swap script run button or scene start")
|
||||
# swap = origin[0]
|
||||
# origin[0] = origin[i]
|
||||
# origin[i] = swap
|
||||
|
||||
# # 기존 로직: clone_start와 message_cast 처리
|
||||
# elif (block_type == "when_clone_start" or block_type == "when_message_cast") and i > 0:
|
||||
# print(f"swap script clone start or msg cast")
|
||||
# swap = origin[1]
|
||||
# origin[1] = origin[i]
|
||||
# origin[i] = swap
|
||||
|
||||
# 새로운 로직: 키 이벤트 처리
|
||||
if block_type == "when_run_button_click":
|
||||
run_button_blocks.append(block)
|
||||
elif block_type == "when_some_key_pressed":
|
||||
# params[1]에서 키 값 확인 (49, 50, 51) 아스키코드 값이므로 필요하면 추가 가능
|
||||
key_value = block[0].get("params")[1]
|
||||
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
|
||||
elif block_type == "when_message_cast":
|
||||
message_cast_block.append(block)
|
||||
else:
|
||||
other_blocks.append(block)
|
||||
|
||||
# 결과 배열 재구성
|
||||
result = []
|
||||
|
||||
for jsonpath_expr in jsonpath_expr_list:
|
||||
jsonpath_expr = parse(jsonpath_expr)
|
||||
result.append([match.value for match in jsonpath_expr.find(data)])
|
||||
|
||||
return result
|
||||
|
||||
# 1. when_run_button_click 블록을 첫 번째로 추가
|
||||
if run_button_blocks:
|
||||
result.extend(run_button_blocks)
|
||||
|
||||
|
||||
|
||||
# main 함수
|
||||
def main():
|
||||
project_data = read_json(project_json_path)
|
||||
scoring_data = read_json(scoring_json_path)
|
||||
|
||||
total_points = 0
|
||||
# 2. when_some_key_pressed 블록들을 키 값 순서대로 정렬하여 추가
|
||||
key_press_blocks.sort(key=lambda x: int(x[0]) if x[0] else 0)
|
||||
result.extend([block for _, block in key_press_blocks])
|
||||
|
||||
for key, value in scoring_data.items():
|
||||
ele = value.get('ele')
|
||||
type = value.get('type')
|
||||
blocks = value.get('blocks')
|
||||
# 정답
|
||||
answer = value.get('answer')
|
||||
# 3. clone_start와 message_cast 블록 추가
|
||||
if message_cast_block:
|
||||
result.extend(message_cast_block)
|
||||
if clone_start_block:
|
||||
result.append(clone_start_block)
|
||||
|
||||
|
||||
# 4. 나머지 블록 추가
|
||||
result.extend(other_blocks)
|
||||
|
||||
# 결과가 비어있으면 원본 반환
|
||||
return result if result else origin
|
||||
|
||||
def reorder_script_all_cases(script_json, block_event_order):
|
||||
"""
|
||||
script_json의 'type' 순서를 block_event_order 순서에 맞게 재정렬합니다.
|
||||
|
||||
Args:
|
||||
script_json (list[dict]): 각 요소가 {'type': '...', ...} 형태의 리스트
|
||||
block_event_order (list[str]): 원하는 type 순서 예: ['when_run_button_click', 'when_message_cast']
|
||||
|
||||
Returns:
|
||||
list[dict]: block_event_order 순서대로 재정렬된 리스트
|
||||
"""
|
||||
# 타입별로 스크립트를 분류
|
||||
type_map = {}
|
||||
for s in script_json:
|
||||
type_map.setdefault(s[0]["type"], []).append(s)
|
||||
|
||||
results = []
|
||||
|
||||
def backtrack(order_idx, used_counts, current):
|
||||
# ✅ 모든 이벤트 순서를 처리했으면 결과에 추가
|
||||
if order_idx == len(block_event_order):
|
||||
results.append(copy.deepcopy(current))
|
||||
return
|
||||
|
||||
event_type = block_event_order[order_idx]
|
||||
available_scripts = type_map.get(event_type, [])
|
||||
|
||||
# 아직 사용하지 않은 script만 선택
|
||||
for i, script in enumerate(available_scripts):
|
||||
if used_counts[event_type][i]:
|
||||
continue
|
||||
used_counts[event_type][i] = True
|
||||
current.append(script)
|
||||
backtrack(order_idx + 1, used_counts, current)
|
||||
current.pop()
|
||||
used_counts[event_type][i] = False
|
||||
|
||||
# 사용 여부 초기화
|
||||
used_counts = {t: [False] * len(lst) for t, lst in type_map.items()}
|
||||
backtrack(0, used_counts, [])
|
||||
|
||||
return results
|
||||
|
||||
def clean_string(text):
|
||||
"""문자열 끝의 . 또는 ! 제거"""
|
||||
if isinstance(text, str):
|
||||
# 문자열 끝의 . 또는 ! 제거
|
||||
return re.sub(r'', '', text.strip())
|
||||
return text
|
||||
|
||||
def convert_to_str(value):
|
||||
"""값을 문자열로 변환"""
|
||||
if isinstance(value, (list, tuple)):
|
||||
return [convert_to_str(v) for v in value]
|
||||
return str(value)
|
||||
|
||||
def process_project(project_data, scoring_data):
|
||||
total_points = 0
|
||||
score_list = []
|
||||
|
||||
# - 시작하기 버튼을 클릭했을 때 : when_run_button_click
|
||||
# - (특정) 신호를 받았을 때 : when_message_cast
|
||||
# - 복제본이 생성 되었을 때 : when_clone_start
|
||||
# - 장면이 시작 되었을 때 : when_scene_start
|
||||
# - 오브젝트를 클릭 했을 때 : when_object_click
|
||||
# 이벤트 블록이 존재하는지 여부 확인용 변수
|
||||
target_event_type = {
|
||||
"when_run_button_click",
|
||||
"when_message_cast",
|
||||
"when_clone_start",
|
||||
"when_scene_start",
|
||||
"when_object_click"
|
||||
}
|
||||
|
||||
for question_key, question_info in scoring_data.items():
|
||||
element_path = question_info.get('ele')
|
||||
question_type = question_info.get('type')
|
||||
block_list = question_info.get('blocks')
|
||||
expected_answer = question_info.get('answer')
|
||||
question_points = question_info.get('point')
|
||||
|
||||
print(f"example: {key}")
|
||||
if type == "scene":
|
||||
exists = find_element(project_data, ele)
|
||||
if exists:
|
||||
print(f"elements found for {ele}")
|
||||
if exists == answer:
|
||||
total_points += value.get('points')
|
||||
elif exists and answer == None:
|
||||
total_points += value.get('points')
|
||||
print(f"{ele} found ");
|
||||
else :
|
||||
print(f"{exists} not found");
|
||||
block_event_order = [] # 결과를 저장할 리스트 생성
|
||||
|
||||
# target_event_type 리스트 중
|
||||
# 채점기준표의 block_list의 answer 키값과 일치하는 값이 있으면
|
||||
# block_event_order 리스트에 추가
|
||||
if isinstance(block_list, list) and block_list:
|
||||
for block in block_list:
|
||||
answer = block.get("answer") # answer 키값을 안전하게 가져오기
|
||||
if isinstance(answer, str) and answer in target_event_type:
|
||||
block_event_order.append(answer) # 리스트에 추가
|
||||
|
||||
print(f"▶ Processing question: {question_key}")
|
||||
|
||||
# ✅ SCENE TYPE 처리
|
||||
if question_type == "scene":
|
||||
scene_elements = find_element(project_data, element_path)
|
||||
|
||||
if scene_elements:
|
||||
print(f"🟨 Found elements for '{element_path}'")
|
||||
scene_elements = [convert_to_str(x) for x in scene_elements]
|
||||
|
||||
if scene_elements == expected_answer or (expected_answer is None and scene_elements):
|
||||
total_points += question_points
|
||||
score_list.append(question_points)
|
||||
# print(f"✅ Matched: {scene_elements}")
|
||||
else:
|
||||
score_list.append(0)
|
||||
print(f"❌ Mismatch: {scene_elements} vs {expected_answer}")
|
||||
else:
|
||||
print(f"Element '{ele}' exists in project.json: {exists}")
|
||||
|
||||
if type == "script":
|
||||
exists = find_script_element(project_data, ele)
|
||||
|
||||
if exists == None:
|
||||
temp = None
|
||||
else:
|
||||
temp = json.loads(exists)
|
||||
|
||||
innerKey= 1;
|
||||
for block in blocks:
|
||||
innerType = block.get('type')
|
||||
|
||||
if temp == None:
|
||||
print(f"{key}-{innerKey}: Script Not exist")
|
||||
innerKey = innerKey + 1
|
||||
print(f"🟥 Element '{element_path}' not found")
|
||||
score_list.append(0)
|
||||
|
||||
# ✅ SCRIPT TYPE 처리
|
||||
elif question_type == "script":
|
||||
script_raw = find_script_element(project_data, element_path)
|
||||
script_json = json.loads(script_raw) if script_raw else None
|
||||
|
||||
# 스크립트 블록 순서 재정렬
|
||||
script_data = reorder_script_all_cases(script_json, block_event_order) if script_json else None
|
||||
|
||||
block_index = 1
|
||||
for block in block_list:
|
||||
block_type = block.get('type')
|
||||
block_path = block.get('ele')
|
||||
block_answer = block.get('answer', None)
|
||||
block_points = block.get('point')
|
||||
|
||||
if script_data is None:
|
||||
print(f"{question_key}-{block_index}: Script Not Found")
|
||||
score_list.append("확인 필요")
|
||||
block_index += 1
|
||||
continue
|
||||
|
||||
if innerType == "list":
|
||||
block_exists = find_list_element(temp, block.get('ele'))
|
||||
# 1. 현재 블록(문제)이 정답인지 판별하는 플래그
|
||||
is_block_correct = False
|
||||
|
||||
# 2. 로깅을 위해 마지막으로 찾은 값을 저장할 변수
|
||||
last_found_values = None
|
||||
|
||||
# 3. script_data가 단일 객체여도 처리 가능하도록 리스트로 통일
|
||||
scripts_to_check = script_data if isinstance(script_data, list) else [script_data]
|
||||
|
||||
else:
|
||||
block_exists = find_element(temp, block.get('ele'))
|
||||
# 4. 여러 스크립트 뭉치를 순회하며 정답이 하나라도 있는지 확인
|
||||
for single_script in scripts_to_check:
|
||||
# 단일 스크립트 객체(single_script)에 대해 블록 요소 검색
|
||||
if block_type == "list":
|
||||
block_elements = find_list_element(single_script, block_path)
|
||||
else:
|
||||
block_elements = find_element(single_script, block_path)
|
||||
|
||||
# 정답
|
||||
answer = block.get('answer', None)
|
||||
|
||||
if isinstance(answer, list):
|
||||
flat_matches = list(chain.from_iterable(block_exists))
|
||||
# 결과값 정리
|
||||
if block_elements and isinstance(block_answer, list):
|
||||
# 1. 비어있는 sublist를 ['None']으로 먼저 치환합니다.
|
||||
# - sublist가 비어있지 않으면(if sublist) sublist를 그대로 사용하고,
|
||||
# - 비어있으면 ['None']으로 대체합니다.
|
||||
processed_elements = [sublist if sublist else ['None'] for sublist in block_elements]
|
||||
found_values = [convert_to_str(x) for x in itertools.chain.from_iterable(processed_elements)]
|
||||
else:
|
||||
found_values = convert_to_str(block_elements[0]) if block_elements else None
|
||||
|
||||
else:
|
||||
flat_matches = block_exists[0]
|
||||
# 실패 시 출력할 값을 위해 마지막으로 찾은 값을 저장
|
||||
last_found_values = found_values
|
||||
expected_str = convert_to_str(block_answer) if block_answer is not None else None
|
||||
|
||||
|
||||
# 블록에 따라 params 값이나 statements 값이 있는 경우 처리 추가 필요
|
||||
if block_exists:
|
||||
if answer is not None and answer != flat_matches:
|
||||
print(f"{key}-{innerKey}: {answer} != {flat_matches}")
|
||||
elif answer is not None and answer == flat_matches:
|
||||
print(f"{key}-{innerKey}: {answer} == {flat_matches}")
|
||||
total_points += block.get('points')
|
||||
elif answer is None and block_exists:
|
||||
total_points += block.get('points')
|
||||
print(f"{key}-{innerKey}: exist ele: {block_exists}")
|
||||
# 정답 조건 확인
|
||||
if block_elements:
|
||||
# 5-1. 정답(block_answer)이 없고, 요소만 찾으면 되는 경우
|
||||
if block_answer is None:
|
||||
is_block_correct = True
|
||||
# 5-2. 정답이 있고, 찾은 값과 일치하는 경우
|
||||
elif expected_str == found_values:
|
||||
is_block_correct = True
|
||||
|
||||
# 6. 정답을 찾았으면, 더 이상 다른 스크립트를 확인할 필요 없이 내부 반복문 탈출
|
||||
if is_block_correct:
|
||||
break # for single_script in scripts_to_check: 루프를 중단
|
||||
|
||||
# 7. 내부 반복문 종료 후, 플래그를 기반으로 최종 점수 처리
|
||||
if is_block_correct:
|
||||
# 정답을 맞힌 경우
|
||||
if block_answer is not None:
|
||||
print(f"{question_key}-{block_index}: ✅ {expected_str} == {last_found_values}")
|
||||
else:
|
||||
print(f"{question_key}-{block_index}: Element Exists")
|
||||
total_points += block_points
|
||||
score_list.append(block_points)
|
||||
else:
|
||||
print(f"No elements found for {block.get('ele')}")
|
||||
# 모든 스크립트를 확인했지만 정답이 없는 경우
|
||||
if last_found_values is not None: # 요소는 찾았으나 값이 틀린 경우
|
||||
print(f"{question_key}-{block_index}: ❌ {expected_str} != {last_found_values}")
|
||||
else: # 요소를 전혀 찾지 못한 경우
|
||||
print(f"{question_key}-{block_index}: No elements found for {block_path}")
|
||||
score_list.append(0)
|
||||
|
||||
block_index += 1
|
||||
|
||||
# total_points = round(total_points, ndigits=0) # 총점 반올림
|
||||
score_list.append(total_points)
|
||||
return score_list
|
||||
|
||||
def normalize_path(path):
|
||||
"""한글 경로명을 NFC 방식으로 정규화"""
|
||||
|
||||
return unicodedata.normalize('NFC', path)
|
||||
|
||||
innerKey = innerKey + 1
|
||||
def main():
|
||||
timestamp = datetime.now().strftime("%y%m%d")
|
||||
test_mode = False # 테스트 모드 설정
|
||||
# test_mode = True # 테스트 모드 설정
|
||||
exam_round = "2510"
|
||||
# exam_names = ["CAT_3_A"] # 여러 시험명을 리스트로 설정
|
||||
exam_names = ["CAS_2_A"] # 여러 시험명을 리스트로 설정
|
||||
excel_list = []
|
||||
|
||||
print(f"Total Points: {total_points}")
|
||||
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"\n🟠 Processing: {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()
|
||||
BIN
results.xlsx
Normal file
BIN
results.xlsx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -41,7 +41,7 @@ def calculate_points(project_data, scoring_data):
|
||||
return total_points
|
||||
|
||||
def main():
|
||||
project_data = load_json('sample/제2410회 코딩활용능력 2급 B형 정답/project.json')
|
||||
project_data = load_json(r'D:\project\Entry\Entry-Scoring\sample\제2506회 코딩활용능력 2급 A형 정답\temp\project.json')
|
||||
scoring_data = load_json('scoring.json')
|
||||
|
||||
total_points = calculate_points(project_data, scoring_data)
|
||||
|
||||
235
scoring.json
235
scoring.json
@@ -1,235 +0,0 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$.scenes[0].name",
|
||||
"answer": "꽃밭",
|
||||
"points": 1.77,
|
||||
"desc": "장면 1 이름 변경"
|
||||
},
|
||||
"1-2": {
|
||||
"type": "scene",
|
||||
"ele": "$.scenes[1].name",
|
||||
"answer": "숲속",
|
||||
"points": 1.77,
|
||||
"desc": "장면 2 이름 변경"
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='당근')]",
|
||||
"points": 1.77,
|
||||
"desc": "장면 2 이름 변경"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='하트')]",
|
||||
"points": 1.77,
|
||||
"desc": "장면 2 이름 변경"
|
||||
},
|
||||
"2-1": {
|
||||
"type": "scene",
|
||||
"ele": "$.variables[?(@.name=='당근')]['value', 'object']",
|
||||
"answer": [
|
||||
"10",
|
||||
null
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "변수 기본값, 전체 사용 여부"
|
||||
},
|
||||
"2-2": {
|
||||
"type": "scene",
|
||||
"ele": "$.variables[?(@.name=='점수')]['value', 'object']",
|
||||
"answer": [
|
||||
0,
|
||||
null
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "변수 기본값, 전체 사용 여부"
|
||||
},
|
||||
"2-3": {
|
||||
"type": "scene",
|
||||
"ele": "$.messages[?@.name=='종료']",
|
||||
"points": 1.77,
|
||||
"desc": "시그널 작성 여부"
|
||||
},
|
||||
"2": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=='당근')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.77,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"points": 1.77,
|
||||
"answer": "45",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2]['params']",
|
||||
"points": 1.77,
|
||||
"answer": [
|
||||
"FORWARD",
|
||||
null
|
||||
],
|
||||
"desc": "물체 앞으로 보내기"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].params[0].params[?(@.type=='get_variable')].type",
|
||||
"$[0][3].params[0].params[?(@=='LESS')]",
|
||||
"$[0][3].params[0].params[?(@.type=='text')].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"get_variable",
|
||||
"LESS",
|
||||
"1"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "x:0, y:-100 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][?@.type=='locate_xy'].params[*].params",
|
||||
"answer": [
|
||||
"0",
|
||||
"-120"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "x:0, y:-120 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].params[0].params[0]",
|
||||
"answer": "32",
|
||||
"points": 1.77,
|
||||
"desc": "스페이스(32) 를 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].statements[0][0].params[0].params[0]",
|
||||
"answer": "0.2",
|
||||
"points": 1.77,
|
||||
"desc": "0.2초 기다리기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].statements[0][1].params[1].params[0]",
|
||||
"answer": "-1",
|
||||
"points": 1.77,
|
||||
"desc": "변수에 -1"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].statements[0][2].params[0].params[0]",
|
||||
"$[0][3].statements[0][1].statements[0][2].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"0.5",
|
||||
"mouse"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "0.5초 동안 마우스 좌표 위치로 이동"
|
||||
},
|
||||
{
|
||||
"type": "list",
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "if reach something"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][2].statements[0][0].params[1].params[0]",
|
||||
"answer": "10",
|
||||
"points": 1.77,
|
||||
"desc": "변수에 10"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][2].statements[0][1].params[*].params",
|
||||
"answer": [
|
||||
"성공!",
|
||||
"0.5"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "dialog_time 시작!을 0.5초"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].type",
|
||||
"answer": "message_cast",
|
||||
"points": 1.77,
|
||||
"desc": "신호 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][5].type",
|
||||
"answer": "hide",
|
||||
"points": 1.77,
|
||||
"desc": "신호 보내기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=='하트')].script",
|
||||
"blocks": []
|
||||
},
|
||||
"5": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=='상자')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 1.77,
|
||||
"desc": "시작하기 버튼을 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[*][?(@.type=='change_object_index')].params[0]",
|
||||
"points": 1.77,
|
||||
"answer": "FORWARD",
|
||||
"desc": "물체 앞으로 보내기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"0",
|
||||
"-100"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "x:0, y:-100 으로 이동"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[0].params[0]",
|
||||
"points": 1.77,
|
||||
"answer": "90",
|
||||
"desc": "크기 지정"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][4].params[*].params",
|
||||
"answer": [
|
||||
"시작!",
|
||||
"0.5"
|
||||
],
|
||||
"points": 1.77,
|
||||
"desc": "dialog_time 시작!을 0.5초"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_message_cast",
|
||||
"points": 1.77,
|
||||
"desc": "신호를 받았을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].type",
|
||||
"answer": "hide",
|
||||
"points": 1.77,
|
||||
"desc": "숨기기"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
78
script_utils.py
Normal file
78
script_utils.py
Normal file
@@ -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"D:\project\Entry\Entry-Scoring\output\2509_CAS_3_A" # 원하는 최상위 디렉토리 경로로 수정
|
||||
|
||||
# 하위 디렉토리 순회
|
||||
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()
|
||||
500
scripts.json
500
scripts.json
@@ -1,500 +0,0 @@
|
||||
[
|
||||
[
|
||||
{
|
||||
"id": "om8f",
|
||||
"x": 50,
|
||||
"y": 70,
|
||||
"type": "when_run_button_click",
|
||||
"params": [
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "y31p",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "set_scale_size",
|
||||
"params": [
|
||||
{
|
||||
"id": "vohi",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"45"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "ybwv",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "change_object_index",
|
||||
"params": [
|
||||
"FORWARD",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "g6zh",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "repeat_while_true",
|
||||
"params": [
|
||||
{
|
||||
"id": "t4xt",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "boolean_basic_operator",
|
||||
"params": [
|
||||
{
|
||||
"id": "fe87",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "get_variable",
|
||||
"params": [
|
||||
"ofvf",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"LESS",
|
||||
{
|
||||
"id": "7eqj",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "text",
|
||||
"params": [
|
||||
"1"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"until",
|
||||
null
|
||||
],
|
||||
"statements": [
|
||||
[
|
||||
{
|
||||
"id": "6dad",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "locate_xy",
|
||||
"params": [
|
||||
{
|
||||
"id": "bj58",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"0"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "oeup",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"-120"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "bdne",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "_if",
|
||||
"params": [
|
||||
{
|
||||
"id": "kzo7",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "is_press_some_key",
|
||||
"params": [
|
||||
"32",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [
|
||||
[
|
||||
{
|
||||
"id": "skya",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "wait_second",
|
||||
"params": [
|
||||
{
|
||||
"id": "lw8x",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"0.2"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "cwhq",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "change_variable",
|
||||
"params": [
|
||||
"ofvf",
|
||||
{
|
||||
"id": "zzzs",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "text",
|
||||
"params": [
|
||||
"-1"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "fi2n",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "locate_object_time",
|
||||
"params": [
|
||||
{
|
||||
"id": "kwih",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"0.5"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"mouse",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
]
|
||||
],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "w10m",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "_if",
|
||||
"params": [
|
||||
{
|
||||
"id": "3mja",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "reach_something",
|
||||
"params": [
|
||||
null,
|
||||
"1dcp",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [
|
||||
[
|
||||
{
|
||||
"id": "1o2h",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "change_variable",
|
||||
"params": [
|
||||
"cyzm",
|
||||
{
|
||||
"id": "v14q",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "text",
|
||||
"params": [
|
||||
"10"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "f6lo",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "dialog_time",
|
||||
"params": [
|
||||
{
|
||||
"id": "sydb",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "text",
|
||||
"params": [
|
||||
"성공!"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "qxvc",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "number",
|
||||
"params": [
|
||||
"0.5"
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
"speak",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
]
|
||||
],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
]
|
||||
],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "b4zg",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "message_cast",
|
||||
"params": [
|
||||
"4tjs",
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
},
|
||||
{
|
||||
"id": "937f",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"type": "hide",
|
||||
"params": [
|
||||
null
|
||||
],
|
||||
"statements": [],
|
||||
"movable": null,
|
||||
"deletable": 1,
|
||||
"emphasized": false,
|
||||
"readOnly": null,
|
||||
"copyable": true,
|
||||
"assemble": true,
|
||||
"extensions": []
|
||||
}
|
||||
]
|
||||
]
|
||||
1
temp.csv
Normal file
1
temp.csv
Normal file
@@ -0,0 +1 @@
|
||||
'cas-000039-정승혁', 0, 0, 1.77, 1.77, 0, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 0, 0, 0, 0, 0, 0, 0, 1.77, 1.77, 0, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 1.77, 58.41000000000004
|
||||
|
BIN
시험자료/2506/제2506회 코딩활용능력 2급 A형 문제.hwp
Normal file
BIN
시험자료/2506/제2506회 코딩활용능력 2급 A형 문제.hwp
Normal file
Binary file not shown.
BIN
시험자료/2506/제2506회 코딩활용능력 2급 A형 정답.ent
Normal file
BIN
시험자료/2506/제2506회 코딩활용능력 2급 A형 정답.ent
Normal file
Binary file not shown.
BIN
시험자료/2506/제2506회 코딩활용능력 2급 A형 채점기준표.xlsx
Normal file
BIN
시험자료/2506/제2506회 코딩활용능력 2급 A형 채점기준표.xlsx
Normal file
Binary file not shown.
362
시험자료/2507/2507_CAT_3_A.json
Normal file
362
시험자료/2507/2507_CAT_3_A.json
Normal file
@@ -0,0 +1,362 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='실험실')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/교실 뒤(3)/[배경] 이름 설정/이름을 '실험실'으로 변경하기"
|
||||
},
|
||||
"1-2": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='새로운 약')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/물약(빨강)/[개체] 이름 설정 1/이름을 '새로운 약'으로 변경하기"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='불')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/불(2)/[개체] 이름 설정 2/이름을 '불'로 변경하기"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='마법사')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/꼬마 마법사/[개체] 이름 설정 3/이름을 '마법사'로 변경하기"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='마법의 약')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/마법의 약/[개체] 이름 설정 4/이름 변경 없음"
|
||||
},
|
||||
"2-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'새로운 약|물약')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "50", "5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[시작]의 세부 동작 1/x: '50' y: '5' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "60",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[시작]의 세부 동작 2/크기를 '60' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_object_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/오브젝트/오브젝트를 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": ["$[1][1].type", "$[1][1].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].statements[0][0].type",
|
||||
"answer": "locate",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[반복]의 세부 동작/'마우스 포인터' 위치로 이동하기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'불')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-150", "-30"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 1/x: '-150' y: '-30' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "90",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 2/크기를 '90' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": ["$[0][3].type", "$[0][3].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][0].params[0].params[3].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[1].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[3].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-150", "0", "-10", "40"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 1/x: '-150 부터 0 사이의 무작위 수' y: '-10 부터 40 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].type",
|
||||
"answer": "hide",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 2/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type",
|
||||
"$[0][3].statements[0][2].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][2].params[0].params[3].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "calc_rand", "1", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 3/'1 부터 2 사이의 무작위 수' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].type",
|
||||
"answer": "show",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 4/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "0.5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 5/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].type",
|
||||
"$[0][3].statements[0][5].params[0].type"
|
||||
],
|
||||
"answer": ["_if", "reach_something"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/만일/만일 '새로운 약' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][5].statements[0][0].params[0].params[0]",
|
||||
"answer": "300",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 1/크기를 '300' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][1].type",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[0].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[1]"
|
||||
],
|
||||
"answer": ["dialog", "마법 실패", "speak"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 2/'마법 실패' 를 '말하기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][2].type",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[0]"
|
||||
],
|
||||
"answer": ["stop_object", "all"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 3/'모든' 코드 멈추기",
|
||||
"type": "list"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'마법사')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "135", "-20"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 1/x: '135' y: '-20' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "180",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 2/크기를 '180' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[*].params",
|
||||
"answer": ["마법 실험을 해봐야지!", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 3/'마법 실험을 해봐야지!' 를 '2' 초 동안 '말하기'"
|
||||
}
|
||||
]
|
||||
},
|
||||
"5-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'마법의 약')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-40", "10"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[시작]의 세부 동작 1/x: '-40' y: '10' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[시작]의 세부 동작 2/크기를 '50' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": ["$[0][3].type", "$[0][3].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][0].type",
|
||||
"answer": "hide",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 1/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][1].params[0].params[3].params[0]"
|
||||
],
|
||||
"answer": ["locate_x", "-160", "60"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 2/x: '-160 부터 60 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 3/ '2' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].type",
|
||||
"answer": "show",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 4/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "0.5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 5/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].type",
|
||||
"$[0][3].statements[0][5].params[0].type"
|
||||
],
|
||||
"answer": ["_if", "reach_something"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/만일/만일 '새로운 약' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][5].statements[0][0].params[0].params[0]",
|
||||
"answer": "100",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 1/크기를 '100' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][1].type",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["add_effect_amount", "color", "70"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 2/'색깔' 효과를 '70' 만큼 주기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][2].type",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[0].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[1]"
|
||||
],
|
||||
"answer": ["dialog", "마법 성공", "speak"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 3/'마법 성공' 을 '말하기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][3].type",
|
||||
"$[0][3].statements[0][5].statements[0][3].params[0]"
|
||||
],
|
||||
"answer": ["stop_object", "all"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 4/'모든' 코드 멈추기",
|
||||
"type": "list"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
시험자료/2507/2507회 코딩활용능력 3급 A형 문제.pdf
Normal file
BIN
시험자료/2507/2507회 코딩활용능력 3급 A형 문제.pdf
Normal file
Binary file not shown.
BIN
시험자료/2507/2507회 코딩활용능력 3급 A형 정답.ent
Normal file
BIN
시험자료/2507/2507회 코딩활용능력 3급 A형 정답.ent
Normal file
Binary file not shown.
BIN
시험자료/2507/2507회 코딩활용능력 3급 A형 채점기준표.xlsx
Normal file
BIN
시험자료/2507/2507회 코딩활용능력 3급 A형 채점기준표.xlsx
Normal file
Binary file not shown.
BIN
시험자료/2507/250801_2507_CAT_3_A_채점결과.xlsx
Normal file
BIN
시험자료/2507/250801_2507_CAT_3_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
시험자료/2507/250804_2507_CAT_3_A_채점결과.xlsx
Normal file
BIN
시험자료/2507/250804_2507_CAT_3_A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
시험자료/2507/250805_2507_CAT_3_A_채점결과.xlsx
Normal file
BIN
시험자료/2507/250805_2507_CAT_3_A_채점결과.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user