एक लिखें गोल्फ़ विधानसभा प्रोग्राम है जो रजिस्टर में एक 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
। मुझे लेफ़्टशफ्ट ऑपरेंड में एक बग मिला जहां यह ठीक से नहीं लिपटा था।