| ── 인코딩 규칙 (Self-Modifying) ── |
| 동적 오프셋 복호화 | n번째 문자의 오프셋 = n + floor(|lastResult| % 94) + floor(|in?space| % 94) + floor(elapsed % 94). 실행 중 변수 값이 바뀔 때마다, 그리고 경과 시간(ms)이 바뀔 때마다 복호화 키도 달라짐. 정적 분석 불가. |
| lastResult | 가장 최근에 실행된 연산(in?space 또는 ASC?space)의 결과값. |
| elapsed | 프로그램 실행 시작 후 경과 시간 (밀리초 단위 정수). 0.001초라도 계산이 늦어지면 복호화 키가 바뀌어 전혀 다른 문자가 출력됨. 코드 작성 시 실행 타이밍을 고려해야 함. |
| ── 변수 ── |
| in?space | 일반 변수 (숫자 저장) |
| ASC?space | ASCII 출력 변수 (연산 후 문자 출력) |
| ── 선언 / 연산 ── |
| in?space ASCIN 49,50; | ASCII 코드 목록 → 숫자 변환 후 저장 (49,50 → "12" → 12) |
| in?space ==buh(buc(l)) to N; | in?space 초기값 N, 더하기 연산자 등록 (l = 0~2) |
| in?space buc(l) to N; | in?space에 N을 더함 |
| in?space ==buh(!@=@) to N; | in?space 초기값 N, 곱하기 연산자 등록 |
| in?space ==buh(!@=_!) to N; | in?space 초기값 N, 빼기 연산자 등록 |
| ASC?space ==buh(buc(l)) to N; | ASC?space 초기값 N, 더하기 연산자 등록 (출력 없음) |
| ASC?space buc(l) to N; | ASC?space에 N을 더한 후 ASCII 문자 출력 |
| ── 연산자 기호 ── |
| buc(l) | 더하기. l = (round(lineNo/2×3) + floor((opCallCount+1)^1.5) + (lineNo XOR opCallCount) + 10) % 3. 줄번호와 연산 호출 횟수가 동시에 영향. |
| !@=@ | 곱하기 |
| !@=_! | 빼기 |
| #%% / !@=)>% | 나누기 (홀수번째 호출 / 짝수번째 호출) |
| ── 강제 연산 규칙 ── |
| N번째 연산 호출 (12배수) | 강제로 더하기(+)로 실행 |
| N번째 연산 호출 (6배수, 12 제외) | 강제로 곱하기(×)로 실행 |
| N번째 연산 호출 (4배수, 12 제외) | 강제로 빼기(−)로 실행 |
| ── 제어 ── |
| skelo?n?in:N; | N초 대기 (소수점 가능, 예: skelo?n?in:1.5;) |
| clr?space{; | 지금까지 출력한 모든 내용 초기화 |