बेसिक (ZX स्पेक्ट्रम), स्कोर 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 16-बिट सिस्टम चर PROG के लिए स्मृति स्थान है, जिसे LH के रूप में संग्रहीत किया जाता है। (मान आमतौर पर 23755 है। लेकिन गलत परिणाम के अलावा अगर ऐसा नहीं होता है, तो इस संख्या का सीधे उपयोग करते हुए, भले ही यह कोड को छोटा कर दे, मुझे अतिरिक्त अंकों के पात्रों का खर्च करना होगा।) PROG का मान स्मृति स्थान है। जहां कार्यक्रम ही संग्रहीत है। पहले दो बाइट्स एचएल के रूप में संग्रहीत लाइन नंबर हैं, निम्नलिखित दो बाइट्स एलएच के रूप में संग्रहीत लाइन की लंबाई हैं। इस तरह से यह कार्यक्रम अपनी स्वयं की रेखा की लंबाई को देखता है, इसलिए कुछ उपयुक्त होने की जरूरत है
पात्रों को सहेजना
यह देखते हुए कि संख्याओं को कैसे संग्रहीत किया जाता है, -114 के साथ लाइन समाप्त हो सकती थी ताकि स्निपेट 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 स्निपेट प्राप्त करते हैं।
संपादित करें:
यहां नया स्निपेट 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
मैं से बचने के द्वारा एक और स्निपेट हासिल कर सकता था +
और बस कर सकता था -
। मैं इसे आज़माने नहीं जा रहा हूँ, यह एक परीक्षा के लिए पर्याप्त था।