Kali ini di sekitar tujuan Anda adalah untuk menemukan maksimum 3 bilangan bulat (dari - (2 ^ 31) hingga 2 ^ 31 - 1 dalam komplemen biner 2) tanpa menggunakan percabangan atau loop.
Anda hanya diperbolehkan menggunakan
Ketidaksetaraan / Kesetaraan (
==
,>
,>=
,<
,<=
,!=
) count ini sebagai 2 token.Aritmatika (
+
,-
,*
,/
)Operator Logis (
!
bukan,&&
dan,||
atau)Bitwise Operator (
~
tidak,&
dan,|
atau,^
xor,<<
,>>
,>>>
aritmatika dan logis kiri dan pergeseran kanan)Konstanta. 0 token
Tugas variabel. 0 token
Masukkan 3 variabel sebagai a
, b
dan c
. Keluarkan jumlah maksimum.
Aturan golf-atom standar berlaku. Jika Anda memiliki pertanyaan, silakan tinggalkan di komentar. Satu token adalah salah satu di atas dengan aturan khusus.
Jawaban:
Javascript 10 token
Edit Menggunakan <dan * alih-alih mengutak-atik bit - seperti yang ditunjukkan dalam komentar, operasi bit mungkin gagal untuk input di dekat batas rentang (lebih dari 30 bit)
C 8 token
Bahasa agnostik sebenarnya, bahasa C seperti apa yang akan dilakukan. Untuk pilih-pilih, dalam standar C itu tidak portabel karena pergeseran yang tepat mungkin tidak memperpanjang tanda (tetapi dalam implementasi umum itu tidak).
Dalam C (dan C ++, C #, dan Java saya pikir) kita dapat dengan mudah menangani masalah overflow menggunakan nilai sementara yang lebih besar:
sumber
int
kode Anda tidak berfungsi untuk x = 2147483647, y = -2, z = 0. Pilihan Anda jika Anda ingin mengubahnyaJavascript
6 token
sumber
&&
dan||
kemungkinan merupakan kekhilafan, yang harus ditunjukkan, bukan dieksploitasi.&&
,<
dan>
. Ini=
digunakan sebagai tugas dan dihitung sebagai 0C: 10 token
Terinspirasi oleh jawaban @ openorclose, tetapi dikonversi menjadi C dan menjadikan branchless menggunakan multiplikasi daripada operator boolean hubung singkat.
sumber
Javascript
14 token
sumber
Banyak bahasa (Python) (10 token)
https://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
Oh, seseorang sudah mempostingnya :)
sumber
You are only allowed to have one function, the one that takes the 3 inputs and outputs.
Itulah yang dimiliki jawaban ini. 2 cetakan hanyalah kasus ujimax2(max2(x,y),z)
pada awalnya :)C ++ 11: 15 token
Hanya menggunakan operator aritmatika dan bitwise (karena operator logika kesetaraan dan boolean membuatnya terlalu mudah) ...
sumber
J (Tidak bersaing)
Saya hanya ingin tahu seperti apa solusi di J nantinya. Ini menggunakan a
,
dan a#
, jadi itu tidak akan bersaing.Ini akan bersaing, tetapi terlalu lama, dengan 9 token:
sumber
kami memiliki asumsi berikut:
maks (a; b) = (a + b + | ab |) / 2
maks (a; b; c) = maks (maks (a; b); c)
abs (a) = (a + (a >> 31)) ^ (a >> 31)
kita bisa menggunakan pseudo-code:
sumber
C # (percobaan ke-2)
Saya mendapatkannya ... Tidak ada fungsi terintegrasi ...
Tetapi apakah itu diperbolehkan untuk menggunakan tipe data terintegrasi lainnya atau hanya int? Jika diizinkan saya akan mengusulkan:
sumber
javascript 8 token
meskipun mirip dengan jawaban @ openorclose, saya benar-benar menggunakan operator logis untuk tugas itu sendiri.
biola
sumber
R (10 token)
sumber
Brainfuck (Tidak bersaing)
sumber
TIS-100, 8 operasi
Penyedia (UP) hanya melakukan MOV jadi tidak ditampilkan dalam kode. Mungkin tidak bekerja ketika terlalu dekat dengan tepi 999
sumber
VBA (6 token)
tidak yakin apakah ini tidak bercabang.
sumber
IIf
, Inline-If. Dalam sebagian besar bahasa, misalnyaa>=b ? a : b
,. Ini memang bercabang.JavaScript: 4 token (** berdasarkan interpretasi luas "penugasan"!)
Jelas skor saya 4 sangat murah hati / toleran!
Untuk mencapai skor itu, saya mengasumsikan "penugasan" (bernilai 0 token dalam pertanyaan) mencakup hal-hal seperti penugasan aditif, penugasan subtraktif, penugasan multiplikatif, dan penugasan XOR-ing (
^=
)Jika tugas-tugas itu benar-benar menghitung skornya adalah 14 :)
sumber
d -= b
sebenarnya sama dengand = d - b
, saya akan mengatakan bahwa Anda menggunakan aritmatika dan Anda harus menghitung ini sebagai token.