BASIC (ZX Spectrum), 244 점 (새로운 점수 247) [이것은 부정 행위입니까?]
스 니펫 1 :
2356 PRINT PEEK (PEEK 23635+256*PEEK 23636+2)+256*PEEK (PEEK 23635+256*PEEK 23636+3)-56-66
스 니펫 2 : :
스 니펫 3 : REM
스 니펫 4-244 : 스 니펫 1, 2 및 3에없는 모든 문자를 사용하는 단일 문자 스 니펫
설명
캐릭터
스펙트럼에서 PRINT
단일 문자 (코드 245)입니다. 코드 조각 (1 개) 사용하는 11 개 개의 문자 : 2
, 3
, 5
, 6
, +
, -
, *
, (
, )
, PRINT
그리고 PEEK
당신이 공간으로 볼 무엇 문자의 일부 PRINT
와PEEK
공간 자체가 사용하지 않은, 그래서. 코드에 존재하는 유일한 숫자이기 때문에 줄 번호 2356을 지정하기로 결정했습니다.
문자 13과 14는 허용되지 않습니다. 즉, 코드 스 니펫 2-244에는 243자가 남아 있으며 오류를 발생 시키거나 다른 작업을 수행하는 코드로 시작 :
하고 REM
피해야합니다.
작동 원리
이것이이 답변이 책에 의한 것인지 확실하지 않은 이유입니다.
23635는 LH로 저장된 16 비트 시스템 변수 PROG의 메모리 위치입니다. (값은 일반적으로 23755입니다. 그러나 코드가 짧아 지더라도이 숫자를 직접 사용하는 경우가 아니라면 잘못된 결과와 별도로이 숫자를 사용하면 추가 자릿수가 필요합니다.) PROG 값은 메모리 위치입니다. 프로그램 자체가 저장된 곳. 처음 2 바이트는 HL로 저장된 행 번호이고 다음 2 바이트는 LH로 저장된 행의 길이입니다. 이것이 프로그램이 자신의 라인 길이를 찾는 방법이므로 적절한 것을 빼야합니다.
문자 저장
숫자가 저장되는 방식을 고려할 때 코드 조각 1이 1을 생성하도록 행이 -114로 끝날 수 있었지만 추가 숫자를 사용하고 싶지 않았기 때문에 대신 두 자리 숫자 두 개를 가져 와서 더했습니다. 122; 56과 66은 훌륭하게 해냈습니다.
이 코드는 모든 중첩 및 계산 값 PROG ( PEEK 23635+256*PEEK 23636
)가 두 번 으로 약간 추악 합니다. 그러나 저장 한 다음 저장된 값을 사용하면 추가 문자 / 발췌 문장이 필요합니다. 라인은 다음과 같이 시작할 수 있습니다
2356 LET p=PEEK 23635+256*PEEK 23636: PRINT PEEK (s+2)...
4 개 개의 추가 문자를 사용하는 것이다 : LET
, p
, =
와 :
.
어쩌면이 숫자를 사용하여 모든 숫자가 1 자리만을 사용하고 3 개의 스 니펫을 얻는 숫자에서 계산되도록 할 것입니다.
편집하다:
다음은 새로운 스 니펫 1입니다 (스펙트럼에 긴 줄이 줄 바꿈 표시되는 방식이므로 코드를 테스트하려면 올바르게 입력했는지 확인하는 데 도움이됩니다).
1111 PRINT +PEEK (PEEK (11111+11
111+1111+(1+1+1)*(111-11)+1+1)+(
111+111+11+11+11+1)*PEEK (11111+
11111+1111+(1+1+1)*(111+1-11))+1
+1)+(111+111+11+11+11+1)*PEEK (P
EEK (11111+11111+1111+(1+1+1)*(1
11-11)+1+1)+(111+111+11+11+11+1)
*PEEK (11111+11111+1111+(1+1+1)*
(111+1-11))+1+1+1)-111-111-111-1
11-111-111
를 피함으로써 또 다른 발췌 문장을 얻을 +
수 있습니다 -
. 나는 그것을 시도하지 않을 것입니다, 이것은 시련으로 충분했습니다.