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中的所有字符。
说明
性格
在Spectrum上,PRINT
是一个字符(代码245)。该片段1只使用11个不同的角色:2
,3
,5
,6
,+
,-
,*
,(
,)
,PRINT
和PEEK
你看到的是空间是字符的一部分PRINT
和PEEK
,因此空间本身并没有被使用。我决定给行号2356,因为这些是代码中出现的唯一数字。
不允许使用字符13和14。这意味着代码段2-244还剩243个字符,以开头:
并REM
避免了会产生错误或执行其他操作的代码。
怎么运行的
这就是为什么我不确定这个答案是否是本书所依据的原因。
23635是16位系统变量PROG的存储位置,存储为LH。(该值通常为23755。但是,如果不是这样的话,除了会导致错误的结果,直接使用该数字,即使它会缩短代码,也会花费我额外的数字字符。)PROG的值是内存位置程序本身存储的位置。前两个字节是存储为HL的行号,后两个字节是存储为LH的行的长度。这就是程序查找自己行长的方式,因此需要减去一些适当的值
保存字符
考虑到数字的存储方式,该行可能以-114结尾,因此代码段1会产生1。但是我不想使用多余的数字,所以我取走了两个2位数字,然后将它们加起来至122; 56和66表现不错。
该代码有点丑陋,所有嵌套和PEEK 23635+256*PEEK 23636
两次计算PROG()的值。但是,如果我存储它,然后使用存储的值,它将花费额外的字符/代码片段-该行可能会像
2356 LET p=PEEK 23635+256*PEEK 23636: PRINT PEEK (s+2)...
这将使用4个附加的字符:LET
,p
,=
和:
。
也许我会对此进行设计,以便所有数字都是从仅使用1位数字并获得3个摘要的数字计算得出的。
编辑:
这是新的代码段1(这是将长的单行换行显示在Spectrum上的方式,因此,如果您要测试代码,这将有助于您正确键入代码):
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
我可以避免使用+
,从而获得另一个摘要-
。我不会尝试,这是一个磨难。