Siapa pun yang sedang dalam optimalisasi kode tingkat rendah tahu tentang bahaya percabangan, baik itu diimplementasikan sebagai jika-pernyataan, loop atau pilih-pernyataan kemungkinan salah prediksi cabang adalah hal yang membuang-buang waktu yang mengerikan.
Masalah sederhana dapat diselesaikan lebih baik dengan aritmatika sederhana, jadi mari kita lakukan itu.
Untuk masalah-masalah berikut, semua variabel adalah bilangan bulat 32 bit yang tidak ditandai dan satu-satunya kode yang diperbolehkan adalah pernyataan himpunan sederhana yang hanya melibatkan operator berikut:
+ 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
=
Setiap baris harus terdiri dari pengenal variabel diikuti oleh operator yang ditetapkan, diikuti oleh ekspresi.
Ekspresi mungkin tidak mengandung operator set tambahan, tetapi dapat berisi pengidentifikasi variabel, angka literal dan tanda kurung.
Skor golf hanya akan menghitung jumlah operator.
Contoh:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
Memiliki skor 5 operator.
Suatu solusi dapat mencakup banyak variabel sesuai keinginan penulis.
Variabel yang belum disetel memiliki nilai 0
.
Overflow dan underflow diperbolehkan, semua angka negatif underflow, demikian 3 - 5
juga 4294967294
, bahkan sebagai bagian dari pernyataan yang lebih besar.
Tugas 1: Maks
Dua nilai, A
dan B
, ada dalam ruang lingkup, membuat RESULT
variabel berisi nilai-nilai terbesar saat program berakhir.
Tugas 2: Median
Tiga nilai, A
, B
dan C
, ada di ruang lingkup, membuat RESULT
variabel mengandung median dari nilai-nilai ketika program berakhir.
Tugas 3: Root kuadrat
Satu nilai,, A
ada dalam lingkup, membuat RESULT
variabel berisi akar kuadrat A
, dibulatkan ke bawah, ketika program berakhir.
Tidak apa-apa untuk mengirim jawaban hanya satu atau dua pertanyaan, bagi sebagian dari Anda hanya menemukan solusi yang valid akan menjadi tantangan.
0xFFFF_FFFF_FFFF_FFFF ^ x
dan 0 - x
. Bagaimana saya bisa lupa?
!
juga cukup sepele: x == 0
.
Boole[a-b]
?
-
tetapi~
bisa bersikap baik (bahkan jika saya tidak tahu untuk apa).