이 프로그램은 한 쌍의 [학생 답변, 정답]을 입력으로 취하고 공백을 사용하여 누락 된 답변을 나타냅니다.
이 프로그램은 기괴한 내부 입력 형식을 사용하여 진행 상황을 추적하므로 한 번에 한 단계 씩 진행합니다.
Z
이것은 입력을 바꿉니다. 그래서 우리는 각 질문에 대해 하나씩 25 개의 요소 목록으로 끝날 것입니다. 각 요소는 [학생 답변, 정답] 형식입니다. 이 양식의 요소를 대문자로 표시합니다. A1 번 문제, B2 번 문제 등이 있습니다. 따라서 답변은 현재 다음과 같이 저장됩니다.
ABCDEFGHIJKLMNOPQRSTUVWXY
m0
이것은 "더 큰 회문"작업입니다. 현재 값의 역을 값 자체에 추가하여 다음을 생성합니다.
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ṁ135
ṁ(금형) 연산자는 여러 가지 작업을 수행하지만, 이런 맥락에서 효과적으로 반복 자체에 현재 값을 추가하여 생성되는 무한리스트의 첫 번째 엘리먼트 (135)가 걸린다. 그것은 우리에게 다음을 제공합니다 (편의를 위해 50 개의 요소 그룹으로 나;습니다. 이것은 내부적으로 135 쌍의 목록입니다).
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
µ;
µ현재 값을 누락 된 피연산자의 새 기본값으로 설정합니다. 그러면 피연산자가없는 내장이 즉시 나타납니다. ;추가하지만 추가 할 항목을 지정하지 않았습니다. 결과적으로 현재 값이 마지막 값 µ(현재 값이기도 함)에 값에 추가되어 다음과 같은 270 요소의 현재 값을 제공합니다.
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQP
t€⁶
위의 모든 대문자는 [학생 답변, 정답] 쌍을 나타냅니다. t€⁶조작 각 (상에서 동작 €) 쌍 및 삭제 ( t) 공간 ( ⁶한 쌍의 양측으로부터) (즉, 모든 공간이 상기 한 쌍의 나타남). 그래서 우리는 여전히 똑같은 반복되는 많은 270 개의 질문 목록을 가지고 있지만 [정답] (학생이 답변하지 않음) 또는 [학생의 답변, 정답] (학생이 답변 함) 형식입니다.
E€’
이 E€’작업은 또한 각 ( €) 요소 에 대해 작동하며을 사용하여 E모든 요소가 같으면 (예 : 학생이 대답하지 않았거나 질문에 올바르게 대답 한 경우) 요소를 1로 바꿉니다. 요소가 동일합니다 (예 : 학생이 답변했지만 질문이 잘못되었습니다). 의 사용 ’여기에 우리가 지금 각각 사용 -1 또는 0 것을 의미하는 번호를 변경합니다. 이 새로운 종류의 요소에는 소문자를 사용합니다.이 요소는 페널티 자격이있는 질문에 처한 경우 답변에 -1을 사용하거나 누락되거나 정답에 0을 사용합니다.
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqp
;E€
우리는 이전 E€과 ;이전을 모두 보았습니다 . 우리는 현재 값에 무언가를 추가하고 있으며 모든 요소가 같으면 1의 형식을 사용하고 일부가 다르면 0입니다 ( ’이번에는 없습니다 !). 여기에 누락 된 피연산자가 있으므로 마지막 값을 사용합니다 µ(예 : 3 단계의 출력). 3 단계로 돌아가서 요소에서 공백을 삭제하지 않았으므로 정답은 1, 틀리거나 누락 된 답은 0이됩니다 (공백이 정답과 일치하지 않기 때문에). 이제부터이 1 = 정확한, 0 = 정확하지 않은 / 누락 형식에 대문자를 사용하고 0 = 정확한 / 누락, -1 = 정확하지 않은 소문자를 계속 사용합니다. 결과 값은 405 개의 요소를 가지며 다음과 같습니다.
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQP
ṫ⁹
앞서 언급 한 놀라운 우연의 일치가 여기 있습니다. 이 코드에 대해 이야기하기 전에 우리가 가야 할 곳을 재고하고 싶습니다.
각 대문자는 정답에 +1을 나타냅니다. 첫 15 개의 문항 ( A~ O)은 문자열에서 5 번씩 나타나고 마지막 10 개의 문항 ( P~ Y)은 6 번씩 나타납니다. 그 비트는 정말 마법이 아닙니다. 프로그램에서 이전에 135를 선택했을 때 (5 × 15 + 6 × 10) 그렇게 설계했습니다. 여기서 운이 좋은 것은 5가 홀수입니다 (그래서 마지막 10입니다) 처음 10 개가 아닌 추가 시간이 나타나는 질문). 바로이 앞에 15 개 문자가 포함 p통해 t한 번 (-1 페널티 질문에), 그리고 u를 통해 y(-2 페널티 질문) 두 번. 그것은 또한 우연의 일치가 아닙니다. 우리가 사용했기 때문에m0이전에는 질문의 추가 사본이 순서대로 나열 PQRSTUVWXYYXWVUTSRQP되어 있으며, 이후 질문은 자연스럽게 해당 문자열의 중간 부근에서 발생합니다 (따라서 "추가"질문 중 마지막 15 개를 선택하면 가장자리 근처에있는 질문에 대한 반복 횟수가 줄어 듭니다. 물론 "추가"질문이 마지막에 온다는 것은 놀라운 일이 아닙니다.
각 소문자가 틀린 답답하지 않은 답에 대한 점수에서 1을 빼고 각 대문자가 정답에 대한 점수에 1을 더하기 때문에 간단히 135 + 15 = 150 요소를 가져와야합니다. 각 종류의 요소는 올바른 횟수입니다. 목록 끝에 부분 문자열을 가져 오는 Jelly의 명령은ṫ ; 그러나 원하는 요소 수를 지정하지 않고 원하는 첫 번째 요소의 색인을 지정합니다. 이 시점에서 405 개의 요소가 있고 150을 원하므로 인덱스 (405-150 + 1) 또는 256에서 시작해야합니다. 놀라운 우연의 일치로 256은 존재하는 별개의 옥텟 수입니다. 젤리의 짧은 표현 (⁹). 이런 일을하기 위해 내가 할 수있는 일은 거의 없었습니다. 4 단계는 라운드 번호를 맞추기 위해 목록의 시작 부분에 또 다른 135 요소를 추가했지만 135 요소라는 사실 (프로그램의 시점에서 쉽게 사용할 수있는 값)이 실제로 편리했습니다. 이 상황에서 기본적으로 다른 숫자는 완전히 도움이되지 않습니다.
내부 가치가 지금 보이는 방식은 다음과 같습니다.
uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
S
마지막으로, 이제 우리는 질문에서 점수에 대한 수정 목록을 얻었습니다. 우리가해야 할 일은를 사용하여 합계를 계산하는 S것입니다.