พื้นฐาน (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 นั่นหมายความว่ายังมีอักขระ 243 ตัวที่เหลืออยู่สำหรับตัวอย่าง 2-244 เริ่มต้นด้วย:
และREM
เพื่อหลีกเลี่ยงรหัสที่จะทำให้เกิดข้อผิดพลาดหรือทำสิ่งอื่น
มันทำงานอย่างไร
นี่คือเหตุผลที่ฉันไม่แน่ใจว่าคำตอบนี้เกิดจากหนังสือหรือไม่
23635 เป็นตำแหน่งหน่วยความจำสำหรับระบบตัวแปร 16 บิต PROG ซึ่งจัดเก็บเป็น LH (ค่าปกติคือ 23755 แต่นอกเหนือจากผลลัพธ์ที่ไม่ถูกต้องหากไม่เป็นเช่นนั้นให้ใช้หมายเลขนี้โดยตรงแม้ว่าจะทำให้รหัสสั้นลงจะทำให้ฉันต้องใช้อักขระพิเศษเป็นหลัก) ค่าของ PROG คือตำแหน่งหน่วยความจำ ที่เก็บโปรแกรมเอง สองไบต์แรกคือหมายเลขบรรทัดที่เก็บไว้เป็น HL สองไบต์ต่อไปนี้คือความยาวของบรรทัดที่เก็บเป็น LH นั่นคือวิธีที่โปรแกรมค้นหาความยาวของเส้นของตัวเองดังนั้นจึงจำเป็นต้องลบสิ่งที่เหมาะสม
การบันทึกอักขระ
เมื่อพิจารณาถึงวิธีการจัดเก็บตัวเลขบรรทัดอาจลงท้ายด้วย -114 ดังนั้นตัวอย่าง 1 จะสร้าง 1 แต่ฉันไม่ต้องการใช้ตัวเลขพิเศษดังนั้นฉันจึงเอาตัวเลข 2 หลักสองตัวออกไปซึ่งจะต้องเพิ่ม ถึง 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 snippets
แก้ไข:
นี่คือตัวอย่างใหม่ 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
ฉันจะได้รับข้อมูลโค้ดอื่นโดยการหลีกเลี่ยงและเพียงแค่ให้ทำอย่างไรกับ+
-
ฉันจะไม่ลองมันเป็นการทดสอบที่มากพอ