एक लिखें गोल्फ़ विधानसभा प्रोग्राम है जो रजिस्टर में एक 64-बिट अहस्ताक्षरित पूर्णांक दिया nडालता रजिस्टर में एक गैर शून्य मान sअगर nएक वर्ग, अन्यथा है 0में s।
आपका GOLF बाइनरी (कोडांतरण के बाद) 4096 बाइट्स में फिट होना चाहिए।
आपका कार्यक्रम निम्नलिखित पायथन 3 प्रोग्राम (जो GOLF निर्देशिका के अंदर रखा जाना चाहिए ) का उपयोग करके बनाया जाएगा :
import random, sys, assemble, golf, decimal
def is_square(n):
nd = decimal.Decimal(n)
with decimal.localcontext() as ctx:
ctx.prec = n.bit_length() + 1
i = int(nd.sqrt())
return i*i == n
with open(sys.argv[1]) as in_file:
binary, debug = assemble.assemble(in_file)
score = 0
random.seed(0)
for i in range(1000):
cpu = golf.GolfCPU(binary)
if random.randrange(16) == 0: n = random.randrange(2**32)**2
else: n = random.randrange(2**64)
cpu.regs["n"] = n
cpu.run()
if bool(cpu.regs["s"]) != is_square(n):
raise RuntimeError("Incorrect result for: {}".format(n))
score += cpu.cycle_count
print("Score so far ({}/1000): {}".format(i+1, score))
print("Score: ", score)
GOLF को नवीनतम संस्करण के साथ अपडेट करना सुनिश्चित करें git pull। रन प्रोग्राम स्कोर का उपयोग करें python3 score.py your_source.golf।
यह संख्या का एक सेट उत्पन्न करने के लिए एक स्थिर बीज का उपयोग करता है जिसमें से लगभग 1/16 वर्ग है। इस संख्या के सेट के प्रति अनुकूलन प्रश्न की भावना के खिलाफ है, मैं किसी भी बिंदु पर बीज को बदल सकता हूं। आपका कार्यक्रम किसी भी गैर-नकारात्मक 64-बिट इनपुट नंबर के लिए काम करना चाहिए, न कि केवल इन।
सबसे कम स्कोर जीतता है।
क्योंकि GOLF बहुत नया है, मैं यहाँ कुछ संकेत शामिल करूँगा। आप पढ़ना चाहिए गोल्फ़ सभी निर्देशों और चक्र लागत के साथ विनिर्देश । Github रिपॉजिटरी में उदाहरण कार्यक्रम मिल सकते हैं।
मैन्युअल परीक्षण के लिए, अपने प्रोग्राम को चलाकर बाइनरी में संकलित करें python3 assemble.py your_source.golf। फिर अपने प्रोग्राम का उपयोग करके चलाएं python3 golf.py -p s your_source.bin n=42, यह प्रोग्राम nको 42 के सेट के साथ शुरू करना चाहिए , और प्रिंट्स रजिस्टर sऔर बाहर निकलने के बाद साइकिल की गिनती। -dझंडे के साथ कार्यक्रम से बाहर निकलने पर रजिस्टर सामग्री के सभी मूल्यों --helpको देखें - सभी झंडे को देखने के लिए उपयोग करें।
git pull। मुझे लेफ़्टशफ्ट ऑपरेंड में एक बग मिला जहां यह ठीक से नहीं लिपटा था।