একটি লিখুন গলফ সমাবেশ প্রোগ্রাম যা রেজিস্টার একটি 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
, এটি n
42 টি সেট সহ প্রোগ্রামটি শুরু করা উচিত এবং প্রিন্ট রেজিস্টার s
এবং প্রস্থানের পরে চক্র গণনা শুরু করা উচিত। -d
পতাকাটি সহ প্রোগ্রামের প্রস্থানে নিবন্ধক সামগ্রীর সমস্ত মান দেখুন - --help
সমস্ত পতাকা দেখতে ব্যবহার করুন ।
git pull
। আমি লেফিশিফ্ট অপারেণ্ডে একটি বাগ পেয়েছি যেখানে এটি সঠিকভাবে মোড়েনি।