[task] | single_turn [pass] | ⏳ 미판정 [title] | table [question] | table.pack 함수가 반환하는 테이블에서 필드 "n"은 어떤 역할을 하나요? [answer] | `table.pack` 함수가 반환하는 테이블에서 필드 `"n"`은 **테이블에 저장된 요소의 총 개수**를 나타냅니다. `table.pack`은 전달된 모든 인수를 순서대로 숫자 키(1, 2, 3, ...)에 저장하고, 이 저장된 인수의 개수를 `"n"` 필드에 기록합니다. 이를 통해 가변 길이 인자(...)의 실제 개수를 쉽게 알 수 있습니다. 예를 들어, `local t = table.pack(1, 2, 3)`을 실행하면: - `t[1]`은 1 - `t[2]`은 2 - `t[3]`은 3 - `t.n`은 3 이렇게 됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **string concat(table table, string sep = "", integer i = 1, integer j = #table) [Static]** 테이블의 요소를 연결하여 문자열을 만듭니다. 각 요소 사이에 배치되는 구분 기호를 지정할 수 있고 범위를 지정할 수 있습니다. - **void insert(table table, any value) [Static]** table 끝에 값을 추가합니다 - **void insert(table table, integer pos, any val
[task] | single_turn [pass] | ⏳ 미판정 [title] | string [question] | string.len이 byte 단위로 계산된다는 것은 한글 문자열을 사용할 때 어떤 주의가 필요한가요? [answer] | `string.len`은 문자열의 길이를 **byte(바이트) 단위**로 반환합니다. 한글 문자는 ASCII 문자(1바이트)와 달리 가변 길이 인코딩을 사용하여 저장되므로, 한글 1자가 차지하는 바이트 수는 1이 아닙니다. 따라서 한글 문자열을 사용할 때 다음과 같은 주의가 필요합니다: 1. **문자 개수와 길이의 불일치**: 한글로 된 문장의 "문자 개수"와 `string.len`이 반환하는 "바이트 길이"가 일치하지 않습니다. 예를 들어, 한글 10자로 구성된 문장이 있다고 해도, `string.len`으로 측정한 값은 1 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 반환합니다. - **string, integer gsub(string s, string pattern, any repl, integer n) [Static]** s에서 모든 pattern을 repl로 치환한 문자열과 총 치환 횟수를 반환합니다. n은 최대 치환 횟수입니다. 인덱스와 길이는 byte 단위이나, 문자열은 가변 길이 인코딩이므로 다국어 사용에 유의가 필요합니다. - **string, integer gsub(string s, string pattern, any repl) [Static]** s에서 모든 pattern
[task] | instruction_following [pass] | ⏳ 미판정 [title] | PolygonShape [question] | PolygonShape를 초기화하는 코드만 출력하고 매개변수 설명은 주석으로만 작성하세요. [answer] | ```lua local polygon = PolygonShape( Vector2(0, 0), -- position: 모양의 월드 좌표상 위치 { Vector2(0, 0), Vector2(1, 0), Vector2(1, 1) }, -- points: 다각형을 이루는 점들의 월드 좌표상 위치 0 -- angle: 회전된 각도 ) ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 관련 기능에 활용하는 다각형 모양을 나타냅니다. # Properties - **float Angle** 회전된 각도입니다. - **List<Vector2> Points** 다각형을 이루는 점들의 월드 좌표상 위치입니다. ##### inherited from Shape: - **Vector2 Position** 모양의 월드 좌표상 위치입니다. # Constructors - **PolygonShape(Vector2 position, List<Vector2> points, float angle)** 지정한
[task] | code [pass] | ⏳ 미판정 [title] | global [question] | ipairs와 pairs를 사용하여 주어진 테이블의 숫자 인덱스 요소와 키-값 쌍을 각각 순회하며, 각 요소를 print로 출력하는 테이블 디버깅 스크립트를 작성해줘 [answer] | `ipairs`와 `pairs`는 Lua의 표준 전역 함수(Static)이며, mLua에서도 동일한 문법으로 사용할 수 있습니다. `ipairs`는 숫자 인덱스를 가진 배열형 테이블을 순회할 때, `pairs`는 임의의 키-값 쌍을 가진 테이블을 순회할 때 사용합니다. 주어진 요구사항에 따라 두 함수를 사용하여 테이블을 디버깅하는 스크립트 예시는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { -- 디버깅을 위해 사용할 예시 테이블 -- 배열형(숫자 인덱스 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **any assert(any v, string message = "assertion failed!") [Static]** v의 값이 false 또는 nil이면 error를 호출합니다. 그렇지 않다면 인수 전체를 반환합니다. 오류의 경우 message가 오류 객체가 되며 인수가 없으면 "assertion failed!"을 사용합니다 - **void error(string message, integer level = 1) [Static]** 함수를 종료하고 에러 메시지를 반환합니다. - **any c
[task] | instruction_following [pass] | ⏳ 미판정 [title] | PolygonShape [question] | PolygonShape 생성자의 매개변수 순서와 타입을 표로 정리하세요. [answer] | PolygonShape 생성자는 다음과 같은 매개변수 순서와 타입을 가집니다. | 순서 | 매개변수 이름 | 타입 | 설명 | | :--- | :--- | :--- | :--- | | 1 | `position` | `Vector2` | 모양의 월드 좌표상 위치 | | 2 | `points` | `List<Vector2>` | 다각형을 이루는 점들의 월드 좌표상 위치 목록 | | 3 | `angle` | `float` | 회전된 각도 | 생성자 서명은 `PolygonShape(Vector2 position, List<Vector2 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 관련 기능에 활용하는 다각형 모양을 나타냅니다. # Properties - **float Angle** 회전된 각도입니다. - **List<Vector2> Points** 다각형을 이루는 점들의 월드 좌표상 위치입니다. ##### inherited from Shape: - **Vector2 Position** 모양의 월드 좌표상 위치입니다. # Constructors - **PolygonShape(Vector2 position, List<Vector2> points, float angle)** 지정한
[task] | single_turn [pass] | ⏳ 미판정 [title] | table [question] | table.sort 함수에 comp 인수를 전달하지 않고 호출하면 기본 정렬 기준은 어떻게 되나요? [answer] | `table.sort(table)` 함수에 비교 함수(`comp`) 인수를 전달하지 않고 호출하면, 테이블의 요소가 **기본적인 값 비교 기준**에 따라 정렬됩니다. Lua 표준 테이블 정렬 동작에 따라, 숫자(`number`) 타입의 요소는 오름차순으로, 문자열(`string`) 타입의 요소는 사전순(알파벳 순)으로 정렬됩니다. 이 기본 정렬은 요소의 타입이 혼재된 경우 타입 간 비교가 불가능할 수 있으므로, 주로 단일 타입(예: 모두 숫자 또는 모두 문자열)의 테이블에 적용할 때 사용됩니다. ```lua Method: [se [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **string concat(table table, string sep = "", integer i = 1, integer j = #table) [Static]** 테이블의 요소를 연결하여 문자열을 만듭니다. 각 요소 사이에 배치되는 구분 기호를 지정할 수 있고 범위를 지정할 수 있습니다. - **void insert(table table, any value) [Static]** table 끝에 값을 추가합니다 - **void insert(table table, integer pos, any val
[task] | instruction_following [pass] | ⏳ 미판정 [title] | utf8 [question] | utf8.len 함수가 유효하지 않은 바이트열을 발견할 때 반환하는 값 두 가지의 타입과 의미를 표로 정리하세요. [answer] | `utf8.len` 함수는 문자열 `s`에서 위치 `i`와 `j` 사이에서 시작하는 유효한 UTF-8 문자의 수를 반환합니다. 만약 이 범위 내에서 유효하지 않은 바이트 열을 발견하게 되면, 함수는 두 가지 값을 반환합니다. | 반환 값 | 타입 | 의미 | | :--- | :--- | :--- | | 1번째 값 | `boolean` | `false` (유효하지 않은 바이트 열이 발견됨을 나타냄) | | 2번째 값 | `integer` | 유효하지 않은 바이트의 첫 번째 위치 (인덱스) | [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Properties - **string charpattern [Static]** 패턴 "[\0-\x7F\xC2-\xF4][\x80-0xBF]*"입니다. 유효한 UTF-8 문자열이라면 정확히 한 개의 UTF-8 바이트 열에 일치합니다. # Functions - **integer... codepoint(string s, integer i = 1, integer j = i) [Static]** 바이트 위치 i와 j 사이에서 시작하는 모든 문자에서 코드 포인트를 반환합니다. - **func, string, integer c
[task] | instruction_following [pass] | ⏳ 미판정 [title] | utf8 [question] | utf8.char 함수를 사용하여 코드 포인트 0x4E2D 와 0x6587 을 변환하는 mLua 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua -- utf8.char 함수를 호출하여 코드 포인트 0x4E2D(한)와 0x6587(字)를 UTF-8 문자열로 변환합니다. -- 0x4E2D와 0x6587은 16진수로 표기된 코드 포인트입니다. local result = utf8.char(0x4E2D, 0x6587) -- 변환된 문자열을 로그로 출력합니다. log(result) ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Properties - **string charpattern [Static]** 패턴 "[\0-\x7F\xC2-\xF4][\x80-0xBF]*"입니다. 유효한 UTF-8 문자열이라면 정확히 한 개의 UTF-8 바이트 열에 일치합니다. # Functions - **integer... codepoint(string s, integer i = 1, integer j = i) [Static]** 바이트 위치 i와 j 사이에서 시작하는 모든 문자에서 코드 포인트를 반환합니다. - **func, string, integer c
[task] | single_turn [pass] | ⏳ 미판정 [title] | os [question] | os.clock 함수가 반환하는 CPU 시간과 os.time 함수가 반환하는 현재 시각의 차이점은 무엇인가요? [answer] | `os.clock`과 `os.time`은 측정하는 대상과 반환값의 성격이 완전히 다릅니다. **1. `os.clock()`** * **측정 대상:** 프로그램(스크립트)이 사용한 **CPU 시간**입니다. * **반환 타입:** `number` (실수) * **의미:** 게임 로직이 실제로 CPU 리소스를 소비하며 실행된 시간의 초 단위 근삿값을 반환합니다. 시스템 시간(실제 벽시계 시간)이 아니라, 스크립트 프로세스가 얼마나 계산에 시간을 썼는지를 나타내므로, 프레임 드랍이나 네트워크 지연과 무관하게 코드 실행량에 따 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **any date(string format, integer time) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date(string format) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date() [Static]** 날짜와 시간을 담은 문자열을 반환합니다. - **number clock() [Static]** 프로그램이 사용한 CPU 시간의 초 단위 근
[task] | instruction_following [pass] | ⏳ 미판정 [title] | string [question] | string.pack과 string.unpack 함수가 사용하는 형식 문자열 규칙과 가변 길이 옵션 제한 사항을 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua Method: [server only] void OnBeginPlay() { -- string.pack(fmt, ...)은 형식 문자열 fmt에 따라 인수를 바이너리 데이터로 변환하여 문자열을 반환합니다. -- string.unpack(fmt, s, pos)는 string.pack으로 생성된 바이너리 문자열 s를 fmt 형식에 맞춰 해석하여 원본 데이터를 반환합니다. -- pos는 해석을 시작할 인덱스입니다. 기본값은 1입니다. -- 형식 문자열 규칙: -- 1. 숫자 코드: [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 반환합니다. - **string, integer gsub(string s, string pattern, any repl, integer n) [Static]** s에서 모든 pattern을 repl로 치환한 문자열과 총 치환 횟수를 반환합니다. n은 최대 치환 횟수입니다. 인덱스와 길이는 byte 단위이나, 문자열은 가변 길이 인코딩이므로 다국어 사용에 유의가 필요합니다. - **string, integer gsub(string s, string pattern, any repl) [Static]** s에서 모든 pattern
[task] | code [pass] | ⏳ 미판정 [title] | os [question] | os.date("*t") 호출을 통해 현재 날짜 정보를 테이블로 받아 year, month, day 필드를 추출하고, 이를 문자열로 조합해 log()에 출력하는 스크립트를 작성해줘 [answer] | `os.date("*t")`는 현재 날짜와 시간 정보를 `year`, `month`, `day` 등 필드가 포함된 테이블 형태로 반환합니다. 이 테이블에서 필요한 값을 추출하여 문자열로 조합해 출력하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnBeginPlay() { -- os.date("*t") 호출하여 현재 날짜/시간 정보 테이블 획득 local now = os.date("*t") -- year, month, day 필드 추출 local [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **any date(string format, integer time) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date(string format) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date() [Static]** 날짜와 시간을 담은 문자열을 반환합니다. - **number clock() [Static]** 프로그램이 사용한 CPU 시간의 초 단위 근
[task] | code [pass] | ⏳ 미판정 [title] | os [question] | os.time() 함수의 반환값을 저장한 후 os.difftime() 함수를 통해 5초가 경과했는지 확인하고, 조건이 충족되면 log()로 "5초 경과" 메시지를 출력하는 스크립트를 작성해줘 [answer] | `os.time()`은 현재 시각(초 단위 정수)을 반환하고, `os.difftime(t2, t1)`은 `t1`에서 `t2`까지의 차이를 초 단위로 반환합니다. 따라서 시작 시간을 저장한 후, 현재 시각과 차이를 계산하여 5초 이상인지 확인하는 로직을 `OnUpdate`에서 수행할 수 있습니다. ```lua Property: [None] number startTime = 0 Method: [server only] void OnBeginPlay() { self.startTime = os.time() } [server on [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **any date(string format, integer time) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date(string format) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date() [Static]** 날짜와 시간을 담은 문자열을 반환합니다. - **number clock() [Static]** 프로그램이 사용한 CPU 시간의 초 단위 근
[task] | two_turn [pass] | ⏳ 미판정 [title] | os [question] | os.clock()이 반환하는 CPU 시간과 os.time()의 현재 시각은 어떤 차이가 있나요? [answer] | `os.clock()`과 `os.time()`은 측정하는 대상과 반환 값의 형태가 다릅니다. **1. os.clock()** * **측정 대상:** 프로그램(스크립트)이 사용한 **CPU 시간**입니다. * **반환 값:** 초 단위의 근삿값을 `number` 타입으로 반환합니다. * **특징:** 실제 경과 시간(Wall-clock time)이 아니라, CPU가 실제로 코드를 실행하는 데 쓴 시간을 측정합니다. 따라서 CPU 사용량이 낮은 경우 실제 경과 시간보다 훨씬 작은 값이 반환될 수 있습니다. **2. os. [followup] | 스크립트에서 성능 측정용 타이머를 만들 때 os.clock()을 사용하는 구체적인 예시 코드를 보여주세요. [followup_answer] | mLua 스크립트에서 특정 코드 블록의 실행 시간을 측정하여 성능을 분석할 때 `os.clock()`을 사용할 수 있습니다. `os.clock()`은 CPU 시간이므로, 코드 실행 전후의 값을 각각 기록한 뒤 차이를 구하면 해당 로직이 CPU를 얼마나 사용했는지 알 수 있습니다. 아래는 `OnUpdate`에서 호출되는 특정 함수의 실행 시간을 측정하는 예시입니다. ```lua Property: [None] number startTime = 0 number endTime = 0 Method: [server only] void O [scores] | [judge_reason] | [source_doc] | # Functions - **any date(string format, integer time) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date(string format) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date() [Static]** 날짜와 시간을 담은 문자열을 반환합니다. - **number clock() [Static]** 프로그램이 사용한 CPU 시간의 초 단위 근
[task] | two_turn [pass] | ⏳ 미판정 [title] | PolygonShape [question] | PolygonShape 컴포넌트의 기본 속성과 생성자 구조를 설명해 주세요 [answer] | `PolygonShape`는 충돌 관련 기능에서 활용되는 다각형 모양을 나타내는 객체입니다. 이 객체의 기본 속성과 생성자 구조는 다음과 같습니다. ### 1. 속성 (Properties) `PolygonShape`는 자체적인 속성 2개와 `Shape`에서 상속받은 속성 1개를 가집니다. * **Angle** (`float`): 다각형이 회전된 각도를 나타냅니다. * **Points** (`List<Vector2>`): 다각형을 이루는 점들의 월드 좌표상 위치 리스트입니다. * **Position** (`Vector [followup] | Points 리스트에 월드 좌표가 아닌 로컬 좌표를 넣으면 충돌 판정에 어떤 문제가 생기나요? [followup_answer] | 제공된 참고 문서에는 `Points` 리스트에 로컬 좌표를 넣었을 때 발생하는 구체적인 충돌 판정 문제나 그 결과에 대한 정보가 포함되어 있지 않습니다. 문서에서 확인할 수 있는 사실은 `Points` 속성이 **"다각형을 이루는 점들의 월드 좌표상 위치"**임을 명시하고 있다는 것뿐입니다. 로컬 좌표를 사용했을 때의 동작 방식이나 오류 발생 여부는 문서에 기재되어 있지 않아 답변할 수 없습니다. [scores] | [judge_reason] | [source_doc] | 충돌 관련 기능에 활용하는 다각형 모양을 나타냅니다. # Properties - **float Angle** 회전된 각도입니다. - **List<Vector2> Points** 다각형을 이루는 점들의 월드 좌표상 위치입니다. ##### inherited from Shape: - **Vector2 Position** 모양의 월드 좌표상 위치입니다. # Constructors - **PolygonShape(Vector2 position, List<Vector2> points, float angle)** 지정한
[task] | instruction_following [pass] | ⏳ 미판정 [title] | table [question] | table.move 함수의 매개변수 a1, f, e, t, a2 각각의 역할과 반환값을 표로 정리해서 설명하세요. [answer] | `table.move` 함수는 테이블 `a1`의 특정 범위의 요소를 테이블 `a2`의 지정된 위치부터 시작하여 이동(복사)합니다. 이 작업은 `a2[t], ... = a1[f], ..., a1[e]`과 같은 다중 할당 문법과 동일한 효과를 가집니다. 매개변수별 역할과 반환값은 다음과 같습니다. | 매개변수 | 타입 | 역할 | | :--- | :--- | :--- | | `a1` | table | 요소를 가져올 원본 테이블입니다. | | `f` | integer | `a1`에서 복사할 시작 인덱스입니다. | | `e` | int [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **string concat(table table, string sep = "", integer i = 1, integer j = #table) [Static]** 테이블의 요소를 연결하여 문자열을 만듭니다. 각 요소 사이에 배치되는 구분 기호를 지정할 수 있고 범위를 지정할 수 있습니다. - **void insert(table table, any value) [Static]** table 끝에 값을 추가합니다 - **void insert(table table, integer pos, any val
[task] | code [pass] | ⏳ 미판정 [title] | os [question] | os.date() 함수를 활용하여 현재 시각을 "YYYY-MM-DD HH:MM:SS" 형식의 문자열로 변환해 log()에 출력하는 스크립트를 작성해줘 [answer] | 참고 문서에 따르면 `os.date()` 함수는 형식 문자열을 인수로 받아 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. 요청하신 "YYYY-MM-DD HH:MM:SS" 형식의 문자열을 얻기 위해 `os.date("%Y-%m-%d %H:%M:%S")`를 사용해야 합니다. (Lua 표준의 `date` 형식 지정자: %Y=4자리 연도, %m=2자리 월, %d=2자리 일, %H=24시간제 2자리 시간, %M=2자리 분, %S=2자리 초) 아래는 `OnBeginPlay` 생명주기 메서드에서 현재 시각을 해당 형식으로 변환하여 로 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **any date(string format, integer time) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date(string format) [Static]** 형식 문자열에 따라서 날짜와 시간을 담은 문자열 또는 테이블을 반환합니다. - **any date() [Static]** 날짜와 시간을 담은 문자열을 반환합니다. - **number clock() [Static]** 프로그램이 사용한 CPU 시간의 초 단위 근
[task] | code [pass] | ⏳ 미판정 [title] | RigidbodyAttachEvent [question] | RigidbodyAttachEvent를 수신하여 AttachedEntity가 "/maps/map01/enemy"로 시작하는 경로인지 확인하고, 맞으면 _UserService:CreateUser()를 호출하지 않고 _SpawnService:SpawnByModelId(100, "Effect_Attach", self.Entity.TransformComponent.Position, self.Entity)로 이펙트를 생성하는 스크립트를 작성해줘 [answer] | 요청하신 조건을 만족하는 mLua 스크립트입니다. 참고로 `_UserService:CreateUser()` API는 제공된 참고 문서에 존재하지 않으므로, 질문에서 지시한 대로 해당 호출을 생략하고 `_SpawnService:SpawnByModelId` 로 이펙트를 생성하는 로직만 구현했습니다. ```lua Property: [None] string TargetPathPrefix = "/maps/map01/enemy" Method: [server only] void OnBeginPlay() { -- 초기화 로직이 필요하 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 엔티티가 RigidbodyComponent:AttachTo(string, Vector3)를 통해 특정 엔티티에 붙었을 때 발생하는 이벤트입니다. 플레이어는 클라이언트에서 발생하고, 그 외의 엔티티는 서버 공간에서 발생합니다. 이 Event는 아래 API에 의해 발생합니다. * RigidbodyComponent <img src="https://img.shields.io/static/v1?label=Space&message=Server,Client&color=c4a484" alt="custom" title="Server, Client
[task] | single_turn [pass] | ⏳ 미판정 [title] | string [question] | string.find와 string.match의 차이점과 각각의 반환 값을 비교해 주세요. [answer] | `string.find`와 `string.match`는 모두 문자열 내에서 특정 패턴(pattern)을 검색하는 함수이지만, 반환하는 값의 종류와 용도가 다릅니다. ### 1. 반환 값 차이 | 함수 | 반환 값 | 설명 | | :--- | :--- | :--- | | **`string.find`** | **인덱스 (위치)** | 일치하는 부분의 **시작 인덱스**와 **끝 인덱스**를 반환합니다. <br>일치하지 않으면 `nil`을 반환합니다. | | **`string.match`** | **문자열 (내용)** | 일치하는 부 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 반환합니다. - **string, integer gsub(string s, string pattern, any repl, integer n) [Static]** s에서 모든 pattern을 repl로 치환한 문자열과 총 치환 횟수를 반환합니다. n은 최대 치환 횟수입니다. 인덱스와 길이는 byte 단위이나, 문자열은 가변 길이 인코딩이므로 다국어 사용에 유의가 필요합니다. - **string, integer gsub(string s, string pattern, any repl) [Static]** s에서 모든 pattern
[task] | code [pass] | ⏳ 미판정 [title] | math [question] | math.clamp와 math.sign을 조합하여 터치 이벤트로 입력된 숫자의 부호를 구하고, 해당 값을 0부터 100 사이의 범위로 제한하여 출력하는 스크립트를 작성해줘 [answer] | 사용자가 요청한 `math.clamp`와 `math.sign` 조합 로직은 제공된 참고 문서에 명시된 API와 일치합니다. `math.sign(value)`는 입력값의 부호를 나타내는 정수를 반환하며, `math.clamp(value, min, max)`는 값을 `[min, max]` 범위로 제한합니다. 터치 이벤트로 입력된 숫자의 부호를 구하고(예: -1, 0, 1), 그 값을 0~100 범위로 제한하여 출력하는 스크립트는 다음과 같습니다. ```lua Method: [client only] void OnTouchStart( [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 두 실수형 값이 거의 같은지 확인합니다. - **number cosh(number x) [Static]** x의 쌍곡선 코사인을 반환합니다. - **number sinh(number x) [Static]** x의 쌍곡선 사인을 반환합니다. - **number tanh(number x) [Static]** x의 쌍곡선 탄젠트를 반환합니다. - **number pow(number x, number y) [Static]** x의 y 거듭제곱을 반환합니다. - **number, integer frexp(number x) [S
[task] | code [pass] | ⏳ 미판정 [title] | global [question] | rawget과 rawset을 사용하여 메타테이블의 __index 또는 __newindex 인터셉터를 우회하여 특정 테이블의 속성을 직접 읽고 쓰는 저수준 테이블 조작 스크립트를 작성해줘 [answer] | `rawget`과 `rawset`은 메타테이블의 `__index`와 `__newindex` 메타메소드 호출을 우회하여 테이블의 실제 값(직접 저장된 값)을 읽고 쓰게 해주는 Lua 표준 함수입니다. 참고 문서에 따르면: - **`rawget(table table, any index)`**: `__index` 메타메소드 호출 없이 `t[index]`의 진짜 값을 얻습니다. - **`rawset(table table, any index, any value)`**: `__newindex` 메타메소드 호출 없이 `t[index]`의 값을 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **any assert(any v, string message = "assertion failed!") [Static]** v의 값이 false 또는 nil이면 error를 호출합니다. 그렇지 않다면 인수 전체를 반환합니다. 오류의 경우 message가 오류 객체가 되며 인수가 없으면 "assertion failed!"을 사용합니다 - **void error(string message, integer level = 1) [Static]** 함수를 종료하고 에러 메시지를 반환합니다. - **any c
[task] | single_turn [pass] | ⏳ 미판정 [title] | table [question] | table.clear 함수와 table.initialize 함수의 동작 방식은 어떻게 다른가요? [answer] | `table.clear`와 `table.initialize`는 모두 테이블의 내용을 변경하는 함수이지만, 동작 방식과 목적에서 명확한 차이가 있습니다. **1. table.clear(table table)** * **동작:** 지정한 테이블 내의 **모든 키와 값을 `nil`로 설정**합니다. * **결과:** 기존 테이블의 구조(메모리 주소)는 유지되지만, 내용이 비워진 빈 테이블 상태가 됩니다. * **목적:** 특정 테이블의 기존 데이터를 완전히 삭제하고 초기화할 때 사용합니다. **2. table.initial [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **string concat(table table, string sep = "", integer i = 1, integer j = #table) [Static]** 테이블의 요소를 연결하여 문자열을 만듭니다. 각 요소 사이에 배치되는 구분 기호를 지정할 수 있고 범위를 지정할 수 있습니다. - **void insert(table table, any value) [Static]** table 끝에 값을 추가합니다 - **void insert(table table, integer pos, any val
[task] | code [pass] | ⏳ 미판정 [title] | ResourceUploadEvent [question] | 를 포함하는 리소스 업로드 로그 기록 스크립트를 작성해줘 [answer] | `ResourceService`에서 발생하는 `ResourceUploadEvent`를 처리하여, 리소스 업로드 성공 시 `RUID`와 `UserId`를 로그로 기록하는 스크립트입니다. 이벤트는 서버 공간에서 발생하므로 `[server only]` 속성을 적용해야 하며, `ResourceService`에서 이벤트를 수신하도록 `[service: ResourceService]` 태그를 붙입니다. ```lua Event Handler: [server only] [service: ResourceService] HandleResource [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 월드 플레이 중 생성된 리소스 업로드에 성공했을 때 ResourceService에서 발생하는 이벤트입니다. 이 이벤트는 리소스가 업로드된 월드의 모든 서버에서 발생합니다. 이 Event는 아래 API에 의해 발생합니다. * ResourceService <img src="https://img.shields.io/static/v1?label=Space&message=Server&color=c4a484" alt="custom" title="Server에서 이벤트가 발생합니다." data-nodeid="4"> # Properties
[task] | code [pass] | ⏳ 미판정 [title] | math [question] | math.floor 함수와 math.random(1, 100) 함수를 사용하여 1부터 100까지의 정수 중 하나를 무작위로 선택하여 변수에 저장하고, 선택된 값이 50보다 크면 "Above", 작으면 "Below", 같으면 "Equal"을 log로 출력하는 스크립트를 작성해줘 [answer] | ```lua Method: [server only] void OnBeginPlay() { local randomValue = math.random(1, 100) local storedValue = math.floor(randomValue) if storedValue > 50 then log("Above") elseif storedValue < 50 then log("Below") else log("Equal") end } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Properties - **integer mininteger [Static]** 정수 중 값이 가장 작은 정수입니다. - **integer maxinteger [Static]** 정수 중 값이 가장 큰 정수입니다. - **number pi [Static]** π 값입니다. - **number huge [Static]** 수가 가장 큰 실수 값입니다. # Functions - **integer ceil(number x) [Static]** x보다 크거나 같은 가장 작은 정수 값을 반환합니다. - **numb
[task] | code [pass] | ⏳ 미판정 [title] | math [question] | math.frexp과 math.ldexp를 이용해 실수 123.456을 분해한 후 원래 값으로 복원하여 부동소수점 오차 범위를 확인하는 스크립트를 작성해줘 [answer] | mLua의 `math` 모듈에는 `frexp`와 `ldexp` 함수가 제공되며, 이를 통해 실수를 분해하고 복원하는 과정의 부동소수점 오차를 확인할 수 있습니다. `math.frexp(x)`는 입력 값 `x`를 `m * 2^e` 형태로 분해하여 맨티사(mantissa, `m`)와 지수(exponent, `e`)를 반환합니다. 이후 `math.ldexp(m, e)`를 사용하면 원래 값으로 복원할 수 있습니다. 아래 스크립트는 이 과정을 수행하고, 원래 값과 복원된 값의 차이를 로그로 출력하여 오차 범위를 확인합니다. ```lua [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 두 실수형 값이 거의 같은지 확인합니다. - **number cosh(number x) [Static]** x의 쌍곡선 코사인을 반환합니다. - **number sinh(number x) [Static]** x의 쌍곡선 사인을 반환합니다. - **number tanh(number x) [Static]** x의 쌍곡선 탄젠트를 반환합니다. - **number pow(number x, number y) [Static]** x의 y 거듭제곱을 반환합니다. - **number, integer frexp(number x) [S
[task] | single_turn [pass] | ⏳ 미판정 [title] | PolygonShape [question] | PolygonShape의 Points 프로퍼티에 저장하는 좌표값은 로컬 좌표가 아닌 월드 좌표여야 하나요? [answer] | 네, `PolygonShape`의 `Points` 프로퍼티에 저장하는 좌표값은 로컬 좌표가 아닌 **월드 좌표**여야 합니다. `Points`는 다각형을 이루는 점들의 **월드 좌표상 위치**를 나타내므로, 각 점의 좌표를 설정할 때 월드 좌표를 사용해야 합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 관련 기능에 활용하는 다각형 모양을 나타냅니다. # Properties - **float Angle** 회전된 각도입니다. - **List<Vector2> Points** 다각형을 이루는 점들의 월드 좌표상 위치입니다. ##### inherited from Shape: - **Vector2 Position** 모양의 월드 좌표상 위치입니다. # Constructors - **PolygonShape(Vector2 position, List<Vector2> points, float angle)** 지정한
[task] | code [pass] | ⏳ 미판정 [title] | math [question] | math.min 함수와 math.max 함수를 사용하여 두 개의 숫자 인자 a와 b를 받아 a와 b 중 작은 값과 큰 값을 각각 minVal, maxVal 변수에 저장하고, 이 값들을 log 함수로 출력하는 메서드 CalculateRange를 포함하는 스크립트를 작성해줘 [answer] | `math.min`과 `math.max` 함수를 사용하여 두 숫자 `a`와 `b`의 최솟값과 최댓값을 구하고 출력하는 `CalculateRange` 메서드가 포함된 스크립트입니다. ```lua Method: [server only] void CalculateRange() { local a = 10 local b = 5 local minVal = math.min(a, b) local maxVal = math.max(a, b) log("minVal: " .. minVal) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Properties - **integer mininteger [Static]** 정수 중 값이 가장 작은 정수입니다. - **integer maxinteger [Static]** 정수 중 값이 가장 큰 정수입니다. - **number pi [Static]** π 값입니다. - **number huge [Static]** 수가 가장 큰 실수 값입니다. # Functions - **integer ceil(number x) [Static]** x보다 크거나 같은 가장 작은 정수 값을 반환합니다. - **numb
[task] | single_turn [pass] | ⏳ 미판정 [title] | PolygonShape [question] | PolygonShape 생성자에서 angle 인자에 값을 전달할 때, 각도 단위는 라디안인지 도(deg)인지 어떻게 구별하나요? [answer] | 제공된 문서에는 `PolygonShape` 생성자의 `angle` 인자가 **라디안(radian)**인지 **도(degrees)**인지에 대한 정보가 명시되어 있지 않습니다. 문서에는 `angle` 프로퍼티의 설명이 단순히 "회전된 각도입니다."라고만 기재되어 있고, 생성자 `PolygonShape(Vector2 position, List<Vector2> points, float angle)`의 파라미터에 대한 단위 규정이 없습니다. 따라서 이 문서만으로는 각도 단위를 구별할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 관련 기능에 활용하는 다각형 모양을 나타냅니다. # Properties - **float Angle** 회전된 각도입니다. - **List<Vector2> Points** 다각형을 이루는 점들의 월드 좌표상 위치입니다. ##### inherited from Shape: - **Vector2 Position** 모양의 월드 좌표상 위치입니다. # Constructors - **PolygonShape(Vector2 position, List<Vector2> points, float angle)** 지정한
[task] | single_turn [pass] | ⏳ 미판정 [title] | string [question] | string.packsize()에서 가변 길이 옵션 's'와 'z'를 사용할 수 없다는 경고가 있는데, 이 두 옵션이 무엇이며 왜 mLua 환경에서는 제한되는가요? [answer] | 제공된 참고 문서에는 `string.packsize()` 함수에서 가변 길이 옵션 `'s'`와 `'z'`를 사용할 수 없다는 사실만 명시되어 있으며, 이 두 옵션의 구체적인 정의나 mLua 환경에서 제한되는 기술적인 이유에 대한 설명은 포함되어 있지 않습니다. 따라서 문서에 근거하여 답변할 수 있는 내용은 다음과 같습니다: * **`string.packsize()`의 기능:** 형식 문자열로 `string.pack`을 수행할 때 생성되는 바이너리 문자열의 크기를 반환합니다. * **제한 사항:** 이 함수를 사용할 때 형 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Functions - **string upper()** 문자열을 대문자로 변환하여 반환합니다. - **string lower()** 문자열을 소문자로 변환하여 반환합니다. - **string, integer gsub(string pattern, any repl, integer n)** 문자열에서 모든 pattern을 repl로 치환한 문자열과 총 치환 횟수를 반환합니다. n은 최대 치환 횟수입니다. 인덱스와 길이는 byte 단위이나, 문자열은 가변 길이 인코딩이므로 다국어 사용에 유의가 필요합니다. - **strin
[task] | code [pass] | ⏳ 미판정 [title] | math [question] | math.random() 함수와 _TimerService:SetTimerOnce 메서드를 사용하여 1초 간격으로 [0, 1) 범위의 실수를 생성하고 log 함수로 출력하는 스크립트를 작성해줘 [answer] | 요청하신 기능은 `math.random()`으로 [0, 1) 범위의 실수를 생성하고, `_TimerService:SetTimerRepeat`을 사용하여 1초 간격으로 반복 수행해야 합니다. 참고 문서에 따르면 `_TimerService`에는 `SetTimerOnce`만 명시되어 있고 `SetTimerRepeat`에 대한 설명은 없습니다. 그러나 제공된 **[실제 mLua 예제]** 코드에서 `_TimerService:SetTimerRepeat(callBack, 3, 2)` 호출이 정상적으로 사용되고 있음을 확인할 수 있습니다. 따 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # Properties - **integer mininteger [Static]** 정수 중 값이 가장 작은 정수입니다. - **integer maxinteger [Static]** 정수 중 값이 가장 큰 정수입니다. - **number pi [Static]** π 값입니다. - **number huge [Static]** 수가 가장 큰 실수 값입니다. # Functions - **integer ceil(number x) [Static]** x보다 크거나 같은 가장 작은 정수 값을 반환합니다. - **numb
[task] | single_turn [pass] | ⏳ 미판정 [title] | PolygonShape [question] | PolygonShape의 Points 리스트에 점을 추가하거나 제거하는 경우, 충돌 판정 영역이 즉시 갱신되나요? [answer] | 제공된 참고 문서에는 `PolygonShape`의 `Points` 프로퍼티가 "다각형을 이루는 점들의 월드 좌표상 위치"를 나타낸다는 정의와, `PolygonShape(Vector2 position, List<Vector2> points, float angle)` 생성자만 기술되어 있습니다. `Points` 리스트에 점을 추가하거나 제거하는 동작에 대한 구체적인 설명, 그리고 이를 수행했을 때 충돌 판정 영역이 즉시 갱신되는지 여부에 대한 정보는 문서에 포함되어 있지 않습니다. 따라서 해당 동작이 즉시 갱신되는지 여부는 문서 근거 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 충돌 관련 기능에 활용하는 다각형 모양을 나타냅니다. # Properties - **float Angle** 회전된 각도입니다. - **List<Vector2> Points** 다각형을 이루는 점들의 월드 좌표상 위치입니다. ##### inherited from Shape: - **Vector2 Position** 모양의 월드 좌표상 위치입니다. # Constructors - **PolygonShape(Vector2 position, List<Vector2> points, float angle)** 지정한