Kayıt defterinde 64 bit işaretsiz tam sayı verilen bir GOLF derleme programı yazın , kare ise n
sıfırdan farklı bir değer koyar , aksi takdirde içine .s
n
0
s
Kişisel GOLF (montaj sonrası) ikili 4096 bayt sığması gerekir.
Programınız aşağıdaki Python3 programı ( GOLF dizininin içine konmalıdır) kullanılarak puanlanacaktır :
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)
İle GOLF'i en son sürüme güncellediğinizden emin olun git pull
. Kullanarak skor programını çalıştırın python3 score.py your_source.golf
.
Kabaca 1/16 kare olan bir dizi sayı üretmek için statik bir tohum kullanır. Bu sayı kümesine doğru optimizasyon sorunun ruhuna aykırıdır, herhangi bir noktada tohumu değiştirebilirim. Programınız yalnızca bunlar için değil, negatif olmayan 64 bit giriş sayıları için de çalışmalıdır.
En düşük puan kazanır.
Çünkü GOLF çok yeni Burada bazı işaretçiler dahil edeceğiz. Sen okumalı GOLF tüm talimatlara ve döngü maliyetleri ile şartname . Github deposunda örnek programlar bulunabilir.
Manuel test için, programınızı çalıştırarak bir ikili dosyaya derleyin python3 assemble.py your_source.golf
. Daha sonra programınızı kullanarak çalıştırın python3 golf.py -p s your_source.bin n=42
, bu program n
42'ye ayarlanmış olarak başlamalı ve s
çıktıktan sonra kayıt ve döngü sayısını yazdırmalıdır . Program çıkışında -d
bayrakla birlikte kayıt içeriğinin tüm değerlerini görün - --help
tüm bayrakları görmek için kullanın .
git pull
. Ben sol kaydırma operand düzgün düzgün sarma yoktu bir hata buldum.