একটি লিখুন গলফ সমাবেশ প্রোগ্রাম যা রেজিস্টার একটি 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা দেওয়া nরাখে রেজিস্টার মধ্যে একটি অ শূন্য মান sযদি nএকটি বর্গক্ষেত্র, অন্যথায় নয় 0মধ্যে s।
আপনার জিএলএফ বাইনারি (একত্রিত হওয়ার পরে) অবশ্যই 4096 বাইটে মাপসই করা উচিত
তোমার প্রোগ্রাম নিম্নলিখিত Python3 প্রোগ্রাম (যা ভিতরে রাখা হতে হবে ব্যবহার স্কোর করা হবে গলফ ডিরেক্টরি):
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)
এর সাথে সর্বশেষ সংস্করণে জিওএলএফ আপডেট করার বিষয়টি নিশ্চিত করুন git pull। স্কোর প্রোগ্রাম ব্যবহার করে চালান python3 score.py your_source.golf।
এটি সংখ্যার একটি সেট তৈরি করতে স্থির বীজ ব্যবহার করে যার প্রায় ১/১16 বর্গক্ষেত্র। এই সংখ্যার সংখ্যার প্রতি অনুকূলিতকরণ প্রশ্নের চেতনাবিরোধী, আমি যে কোনও সময়ে বীজ পরিবর্তন করতে পারি। আপনার প্রোগ্রামটি অবশ্যই এইগুলি নয়, কোনও অ-নেতিবাচক -৪-বিট ইনপুট সংখ্যার জন্য কাজ করবে।
সর্বনিম্ন স্কোর জয়।
কারণ জিএলএফ খুব নতুন আমি এখানে কিছু পয়েন্টার অন্তর্ভুক্ত করব। আপনি পড়া উচিত গলফ সব নির্দেশাবলী এবং চক্র খরচ স্পেসিফিকেশন । গিথুব সংগ্রহস্থলের উদাহরণস্বরূপ প্রোগ্রামগুলি পাওয়া যাবে।
ম্যানুয়াল পরীক্ষার জন্য, চালিয়ে আপনার বাইনারি থেকে আপনার প্রোগ্রামটি সংকলন করুন python3 assemble.py your_source.golf। তারপরে আপনার প্রোগ্রামটি ব্যবহার করে চালান python3 golf.py -p s your_source.bin n=42, এটি n42 টি সেট সহ প্রোগ্রামটি শুরু করা উচিত এবং প্রিন্ট রেজিস্টার sএবং প্রস্থানের পরে চক্র গণনা শুরু করা উচিত। -dপতাকাটি সহ প্রোগ্রামের প্রস্থানে নিবন্ধক সামগ্রীর সমস্ত মান দেখুন - --helpসমস্ত পতাকা দেখতে ব্যবহার করুন ।
git pull। আমি লেফিশিফ্ট অপারেণ্ডে একটি বাগ পেয়েছি যেখানে এটি সঠিকভাবে মোড়েনি।