Viết chương trình lắp ráp GOLF có số nguyên không dấu 64 bit trong thanh ghi n
sẽ đặt giá trị khác không vào thanh ghi s
nếu n
là hình vuông, nếu không thì 0
vào s
.
Nhị phân GOLF của bạn (sau khi lắp ráp) phải vừa với 4096 byte.
Chương trình của bạn sẽ được ghi bằng chương trình Python3 sau (phải được đặt trong thư mục 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)
Đảm bảo cập nhật GOLF lên phiên bản mới nhất với git pull
. Chạy chương trình điểm số bằng cách sử dụng python3 score.py your_source.golf
.
Nó sử dụng một hạt giống tĩnh để tạo ra một tập hợp các số trong đó khoảng 1/16 là hình vuông. Tối ưu hóa cho bộ số này là trái với tinh thần của câu hỏi, tôi có thể thay đổi hạt giống bất cứ lúc nào. Chương trình của bạn phải hoạt động với mọi số đầu vào 64 bit không âm, không chỉ các số này.
Điểm số thấp nhất chiến thắng.
Bởi vì GOLF rất mới, tôi sẽ bao gồm một số gợi ý ở đây. Bạn nên đọc các GOLF đặc điểm kỹ thuật với tất cả các hướng dẫn và các chi phí chu kỳ . Trong kho chương trình ví dụ kho lưu trữ Github có thể được tìm thấy.
Để kiểm tra thủ công, biên dịch chương trình của bạn thành nhị phân bằng cách chạy python3 assemble.py your_source.golf
. Sau đó chạy chương trình của bạn bằng cách sử dụng python3 golf.py -p s your_source.bin n=42
, điều này sẽ khởi động chương trình với n
thiết lập là 42, và in thanh ghi s
và số chu kỳ sau khi thoát. Xem tất cả các giá trị của nội dung đăng ký khi thoát chương trình bằng -d
cờ - sử dụng --help
để xem tất cả các cờ.
git pull
. Tôi đã tìm thấy một lỗi trong toán hạng leftshift nơi nó không được bọc đúng cách.