Orta düzeyde düşük seviyeli kod optimizasyonuna sahip olan herkes, if-ifadeleri, döngüler veya select-ifadeleri olarak uygulandığında, şube yanlış tahmin olasılığı korkunç bir saat kaybıdır.
Basit problemler basit aritmetik ile çok daha iyi çözülebilir, hadi bunu yapalım.
Aşağıdaki sorunlar için tüm değişkenler 32 bit işaretsiz tamsayılardır ve izin verilen tek kod, yalnızca aşağıdaki işleçleri içeren düz ayarlı deyimlerdir:
+ addition
- subtraction
* multiplication
/ integer division, rounds down, division by 0 not allowed
% modulo
& binary and
| binary or
^ binary exclusive or
>> bitshift right
<< bitshift left
Logic operators, return 1 if the expression is true and 0 if it is false.
== equal
!= not equal
< less than
<= less than or equal
> greater than
>= greater than or equal
Set operator
=
Her satır, değişken bir tanımlayıcı ve onu izleyen bir işleç ve ardından bir ifade içermelidir.
Bir ifade ek küme işleçleri içeremez, ancak değişken tanımlayıcıları, değişmez sayılar ve parantezler içerebilir.
Golf skoru sadece operatör sayısını sayar.
Misal:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
5 operatör puanı var.
Bir çözüm, yazarın uygun gördüğü kadar çok değişken içerebilir.
Ayarlanmamış değişkenlerin değeri vardır 0
.
Taşma ve taşmaya izin verilir, tüm negatif sayılar taşar, bu 3 - 5
da 4294967294
daha büyük bir ifadenin parçası olarak bile.
Görev 1: Maks.
İki değer A
ve B
kapsamda var olan RESULT
değişken, program sona erdiğinde bu değerlerin en büyüğünü içermesini sağlar.
Görev 2: Medyan
Üç değerleri A
, B
ve C
, kapsam var olmaları RESULT
değişken bu değerler zaman programı sonlandırıldığında ortancasını içerirler.
Görev 3: Karekök
A
Kapsamda var olan bir değer, RESULT
değişkenin A
program sona erdiğinde yuvarlatılmış kare kökünü içermesini sağlar .
Soruların yalnızca bir veya ikisine bir cevap göndermeniz uygundur, bazılarınıza sadece geçerli çözümler bulmak zor olacaktır.
0xFFFF_FFFF_FFFF_FFFF ^ x
ve 0 - x
. Nasıl unutmuş olabilirim?
!
da hayli abes: x == 0
.
Boole[a-b]
?
-
ama~
güzel olabilir (ne için olduğunu bilmesem bile).