เขียนGOLFโปรแกรมการชุมนุมว่าได้รับแบบ 64 บิตจำนวนเต็มไม่ได้ลงนามในการลงทะเบียนn
ทำให้ไม่เป็นศูนย์ค่าลงทะเบียนs
ถ้าn
เป็นตารางที่มิฉะนั้นเข้าไป0
s
GOLFไบนารี่ของคุณ(หลังการประกอบ) จะต้องมีขนาด 4096 ไบต์
โปรแกรมของคุณจะได้รับคะแนนโดยใช้โปรแกรม Python3 ต่อไปนี้ (ซึ่งจะต้องใส่ไว้ในไดเรกทอรี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)
ให้แน่ใจว่าจะปรับปรุงGOLFgit pull
ให้เป็นเวอร์ชั่นล่าสุด python3 score.py your_source.golf
เรียกใช้โปรแกรมโดยใช้คะแนน
มันใช้เมล็ดพันธุ์แบบคงที่เพื่อสร้างชุดของจำนวนที่ประมาณ 1/16 เป็นสี่เหลี่ยม การหาค่าเหมาะที่สุดกับตัวเลขชุดนี้ขัดต่อจิตวิญญาณของคำถามฉันอาจเปลี่ยนเมล็ดได้ทุกจุด โปรแกรมของคุณจะต้องใช้งานได้กับหมายเลขอินพุต 64 บิตที่ไม่เป็นลบใด ๆ
คะแนนต่ำสุดชนะ
เนื่องจากGOLFเป็นของใหม่ฉันจะใส่พอยน์เตอร์ไว้ที่นี่ คุณควรอ่าน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
ล่ามด้วย ฉันพบข้อผิดพลาดในตัวถูกดำเนินการ leftshift ที่มันห่อไม่ถูกต้อง