Hitung n
modulo 12
untuk integer 32 bit yang tidak ditandatangani.
Aturan:
- Harus berfungsi untuk semua
n
antara 0 dan 23. Nomor lainnya opsional. - Harus hanya menggunakan salah satu operator
+-*
,~&^|
atau<<
,>>
seperti yang biasa didefinisikan pada uints 32 bit. - Dapat menggunakan jumlah konstan konstanta
- Tidak boleh menggunakan bentuk pointer apa pun, termasuk array, atau
if
pernyataan apa pun , termasuk hal-hal yang dikompilasi jika pernyataan seperti operator ternary atau operator "lebih besar dari".
Skor:
- Operator
+ -
dan operator bitwise~ & ^ | << >>
(BUKAN, DAN, XOR, ATAU, pergeseran bit) memberikan skor1
,*
memberikan skor2
. - Total skor terendah menang.
math
number-theory
atomic-code-golf
nbubis
sumber
sumber
+-*
adalah menambah, mengurangi, memperbanyak;~&^|
TIDAK bitwise, DAN, XOR, ATAU; dan<< >>
bithift.for i in x:y:z, .dostuff
?n % 12
multiplikasi dan perubahan seperti dalam kegembiraan hacker, jadi ini sepele, cukup output perakitan dan lihatJawaban:
4
(Bahasa tidak relevan)
Merayu! Harus 4.
11-n
akan memastikan semua bit urutan tinggi diatur jika dan hanya jika n> = 12.48&(11-n)
== jika n> 11 maka 48 lainnya 0(48&(11-n))>>2
== jika n> 11 maka 12 lainnya 0n-((48&(11-n))>>2)
adalah jawabannyasumber
n - (((11 - n) & 0xC0000000) >> 28)
. Bagus, saya tidak berpikir itu bisa dilakukan dalam waktu kurang dari empat.4
Solusi dengan tabel pencarian (terlihat
i ^ (i % 12)
):4
Berikut solusi lain dengan 4 operasi:
Diasumsikan bahwa jumlah operan bithift secara implisit diambil mod 32, yaitu
x >> -1
sama denganx >> 31
.5
Pendekatan lain, menggunakan tabel pencarian:
sumber
bash - 1
misalnya
sumber
stdin
danstdout
sungai? Tentu, secara internal, mereka adalah pointer, tetapi kemudian kita mungkin mendiskualifikasi Java karena menggunakanInteger
kelas secara internal untuk banyak hal.C, little-endian - 2
Ini mungkin curang tapi saya pikir itu memenuhi aturan ...
sumber
= 0
bukan& 0x0
, yang seharusnya dihitung sebagai 2 operasi tambahan. Tapi +1 untuk kreativitas :)PHP - skor 0
Aku bertanya-tanya bagaimana mungkin tidak ada yang datang dengan ini sebelum aku !!!
sumber
C, skor 5
Bekerja hingga 23, tidak dijamin di atas itu.
((n+4)>>2)&4
mengembalikan 4 untuk n> = 12. Tambahkan ke n dan Anda mendapatkan jawaban yang benar dalam 4 bit paling tidak signifikan, kemudian potong bit lainnya.sumber
bahasa apa pun: 5
tidak akan menang, tetapi berpartisipasi karena bersenang-senang dan mungkin karena lebih mudah dipahami daripada yang lain:
ini setara dengan
ini sama karena ketika Anda menambahkan 20 hingga 12, Anda mendapatkan 32, sehingga bit 5 menjadi 1. Ini hanya ketika n> 1 karena 32 adalah angka terkecil di mana bit 5 menjadi 1.
juga perhatikan bahwa mudah diperluas untuk rentang yang lebih tinggi, seperti yang dapat Anda lakukan
untuk mencapai kisaran hingga 35
sumber
Python 2.x - 4
Apakah
=
seorang operator?Dalam hal ini nilainya adalah 6.
Solusi BTW @steveverrill dapat langsung digunakan dalam Python juga.
Bekerja untuk kisaran 0 .. 23
Jadi apa yang terjadi ? Kalikan dengan 357913942 dan bagi 2 ^ 32 (atau shift kanan 32)
sumber
C - 6
sumber
Cobra - 2 (atau 3)
Ini mungkin sedikit membengkokkan aturan, tapi saya sudah bertanya dan diizinkan untuk menggunakan ini.
Ini juga berfungsi untuk nomor apa pun.
sumber
Kona - 5
Mungkin tidak valid karena saya tidak yakin apakah operator lantai diizinkan, tapi saya punya dua
*
dan minus:Yang harus bekerja untuk bilangan bulat apa pun.
sumber