Deskripsi
Diberi nomor, cetak jumlah yang 1
dimilikinya dalam representasi biner.
Memasukkan
Angka >= 0
dalam basis 10 yang tidak akan melebihi angka tertinggi yang dapat ditangani oleh bahasa Anda.
Keluaran
Jumlah 1
s dalam representasi biner.
Kondisi menang
Kode terpendek menang.
Dilarang
- Operator bitwise. Operator lain, seperti penambahan dan perkalian, diizinkan.
- Fungsi konversi basis bawaan.
Contohnya
Input: Ouput:
56432 8
Input: Output:
45781254 11
Input: Output:
0 0
Jawaban:
APL,
912 karakterIni mengasumsikan bahwa interpreter menggunakan bilangan bulat 32-bit, dan itu
⎕IO
diatur ke 0 (artinya monadik⍳
dimulai dengan 0, bukan 1). Saya menggunakan Dyalog APL versi 32-bit .Penjelasan, dari kanan ke kiri:
⍳32
menghasilkan vektor32
bilangan bulat pertama (seperti yang dijelaskan sebelumnya, karena⎕IO
0, vektor ini dimulai dengan 0).*
adalah fungsi daya. Dalam hal ini, ia menghasilkan2
kekuatan setiap elemen dari vektor yang disediakan sebagai argumen yang tepat.÷
adalah fungsi dibagi-oleh. Ini memberi kita⎕
(input pengguna yang dievaluasi) dibagi dengan setiap elemen vektor di sebelah kanannya (masing-masing kekuatan dua).⌊
lantai setiap elemen argumen di sebelah kanannya.2|
memberi kita sisa dari setiap elemen ke kanan dibagi dengan2
./
mengurangi (melipat) argumen kanannya menggunakan fungsi ke kiri+
,.Tidak lagi 9 karakter. :(
Versi lama dan melanggar aturan:
sumber
Built-in base conversion functions
larangan?Brainbool , 2
Penafsiran yang paling masuk akal, menurut saya (dan apa yang sebagian besar jawaban gunakan) dari "angka tertinggi yang dapat ditangani oleh bahasa Anda" adalah "jumlah terbesar yang didukung bahasa Anda secara native ". Brainbool adalah turunan brainfuck yang menggunakan bit daripada byte, dan mengambil input dan output dalam biner (
0
dan1
karakter) daripada kode karakter. Karenanya1
, jumlah terbesar yang didukung secara0
alami adalah , dan yang terkecil adalah , yang masing1
-0
masing memiliki bobot Hamming .Brainbool dibuat pada 2010, menurut Esolang.
sumber
J, 13 karakter
(+ jumlah digit dalam angka)
Penggunaan: ganti
n
program dalam dengan nomor yang akan diuji.Contoh:
Mungkin ada cara menata ulang ini sehingga jumlahnya dapat ditempatkan di awal atau akhir, tetapi ini adalah entri J pertama saya dan kepala saya sedikit sakit sekarang.
Penjelasan (terutama agar saya memahaminya di masa depan)
i.32
- Membuat array angka 1 hingga 322^
- Mengubah daftar menjadi kekuatan dua 1 hingga 4294967296n%
- Membagi nomor input dengan masing-masing elemen dalam daftar<.
- bulatkan semua hasil divisi ke integer berikutnya2|
- sama seperti%2
di kebanyakan bahasa - mengembalikan 0 jika genap dan 1 jika ganjil+/
- total item dalam daftar (yang sekarang hanya 1s atau 0s)sumber
Brainfuck, 53 karakter
Ini tidak ada solusi Brainfuck yang wajib, jadi saya buat yang ini:
Mengambil angka dari sel 1 dan memasukkan hasilnya ke sel 6.
Versi tidak terdaftar dan dikomentari:
sumber
Python 2.6, 41 karakter
Catatan: Jawaban saya yang lain menggunakan lambda dan rekursi dan yang ini menggunakan loop sementara. Saya pikir mereka cukup berbeda untuk menjamin dua jawaban.
sumber
Ruby, 38 karakter
Solusi lain menggunakan ruby dan pendekatan rekursif yang sama dengan Steven.
sumber
GolfScript,
1716 karakterSunting: versi baru menyimpan 1 karakter dengan menggunakan operasi daftar alih-alih lipatan (versi aslinya adalah
~{.2%\2/.}do]{+}*
, versi hitung langsung:)~0\{.2%@+\2/.}do;
.sumber
C, 45
Tidak ada yang benar-benar istimewa di sini untuk bermain golf di C: tipe pengembalian implisit, tipe integer implisit untuk parameter.
sumber
Python 2.6, 45 karakter
sumber
def
bukan lambda.print b(input())
. Dapat diterima untuk mengembalikan nilai dan mengambil "input" sebagai argumen untuk fungsi.Perl,
454336 KarakterTerima kasih kepada Howard untuk 45-> 43, dan untuk User606723 untuk 43-> 36.
sumber
$n=int($n/2)
2 karakter yang lebih pendek.$n=<>;while($n){$_+=$n%2;$n/=2}print
Ini akan terus berulang sampai $ n / 2 akhirnya cukup dekat ke 0, tetapi apakah kita peduli? ;)Perl, 30 karakter
Berdasarkan solusi PhiNotPi , dengan beberapa golf tambahan. Jalankan dengan
perl -M5.010
untuk mengaktifkan fitur Perl 5.10say
.sumber
$=
variabel khusus melakukan sesuatu yang istimewa dalam program Anda, atau hanya variabel biasa?$=
hanya membutuhkan nilai integer, jadi menggunakannya menghemat sayaint
.Gangguan Umum, 12 karakter
(dengan asumsi nama variabel 1 char - yaitu: 11 + panjang angka)
Ini bukan fungsi konversi basis, jadi seharusnya berfungsi:
Contoh:
(Menggunakan GNU CLISP.)
sumber
C,
61 60 5753 karakterBadan fungsi hanya 38 karakter. Sunting : dihapus operator bitwise Sunting :
printf
keluar dari loop seperti yang disarankan dalam komentar Sunting : beralih ke deklarasi K&R; juga, ini tidak lagi khusus untuk C99sumber
dc - 26 karakter
Ini agak panjang, sebagian besar karena kurangnya loop konstruksi di
dc
.Terus menjumlahkan modulo 2 dari angka dan membaginya dengan hingga sampai mencapai nol. Dapat menangani bilangan bulat panjang yang sewenang-wenang.
Contoh:
sumber
C, 66 karakter
Catatan: membutuhkan kompiler yang kompatibel dengan gcc atau gcc (mis. ICC, dentang).
Untuk beberapa CPU
__builtin_popcount
mengkompilasi ke instruksi tunggal (misalnyaPOPCNT
pada x86).sumber
__builtin_popcount
sebenarnya hanya menerapkan penghitungan1
itu sendiri? Jika demikian, meskipun tidak sepenuhnya salah menurut aturan, saya jujur tidak berpikir ini adalah entri yang adil.printf
tanpa menyertakan sebelumnya.C++
JavaScript,
78 7271 karakterSaya akan memposting solusi awal saya yang saya buat sebelum memposting pertanyaan juga. Sudah ada jawaban JavaScript yang jauh lebih baik :)
http://jsfiddle.net/Mk8zd/1/
Idenya datang dari "kartu baca pikiran" tertentu yang memungkinkan Anda mendapatkan nomor yang ada dalam benak orang lain, dengan menunjukkan kartu-kartu itu dan membiarkan mereka mengatakan kartu-kartu mana nomor mereka jelas.
Ini berfungsi karena setiap angka adalah kombinasi unik dari
1
s /0
s dalam biner. Solusi saya memeriksa "kartu" mana nomor yang jelas untuk menentukan berapa banyak1
dimilikinya. Hanya saja tidak terlalu efisien, meskipun ...saya menemukan dokumen ini yang menguraikan teknik membaca pikiran.
sumber
Haskell (60 karakter)
sumber
PHP, 57
Ini mengasumsikan bahwa
$n
memegang nilai yang akan diuji.PHP, 55 (solusi alternatif)
Sekali lagi, ini mengasumsikan bahwa
$n
memegang nilai yang akan diuji. Ini adalah alternatif karena menggunakan operator atau untukfloor
input.Kedua solusi bekerja dan tidak menimbulkan pemberitahuan.
sumber
Ocaml, 45 karakter
Berdasarkan solusi @Leah Xue. Tiga spasi dapat dihapus dan ini lebih pendek (~ 3 karakter) untuk menggunakan fungsi alih-alih-jika-lain.
sumber
Mathematica 26
sumber
Scala, 86 karakter
Pemakaian:
scala O 56432
sumber
D (70 karakter)
sumber
R, 53 karakter
o=function(n){h=n%/%2;n%%2+if(h)o(h)else 0};o(scan())
Contoh:
Jika memasukkan nomor bukan bagian dari jumlah karakter, maka itu adalah 43 karakter:
o=function(n){h=n%/%2;n%%2+if(h)o(h)else 0}
dengan kasus uji
sumber
OCaml, 52 karakter
sumber
Skema
Saya sedikit memperbaiki aturan untuk menambah tantangan. Fungsi tidak peduli tentang basis angka karena menggunakan skala binernya sendiri. Saya terinspirasi oleh cara kerja konversi analog ke numerik. Saya hanya menggunakan rekursi sederhana untuk ini:
sumber
Tidakkah membaca angka menjadi biner atau mencetak angka dari biner sebagai "fungsi konversi basis bawaan", sehingga membatalkan setiap jawaban di atas yang
print
merupakan bilangan bulat? Jika Anda mengizinkan membaca dan mencetak bilangan bulat, seperti hampir semua jawaban di atas, maka saya akan membuat klaim menggunakan fungsi bawaanpopcount
:Haskell, 50
Ada
popCount
rutin yang ditambahkan keData.Bits
modul untuk GHC v7.2.1 / v7.4.1 musim panas ini (lihat tiket mengenai primop dan penjilidan ).Saya tidak bisa mengalahkan skor Python dan Perl di atas menggunakan modul mereka
GMPY
atauGMP::Mpz
untuk GMP sayangnya, meskipun GMP memang menawarkan fungsi popcount juga.sumber
JavaScript,
49474542 byteDemo: http://jsfiddle.net/hcYdx/4/
Sunting 1: hapus
q
dan gunakan~~
untuk pembulatan, simpan 2 karakter.Sunting 2: gunakan
|0
operator pembulatan alih-alih~~
untuk menyimpan tanda kurung (2 karakter).Edit 3: menyederhanakan
n>0
untukn
dan menggabungkan dengann=n/2|0
untuk membuat seluruh kondisi; sekarang telah menyia-nyiakan ruang pernyataan :(sumber
|0
operator bitwise?|
adalah operator bitwise ... tidak diizinkan. Saatnya melakukanMath.round
:-)Java 7, 36 byte
Karena tentu saja ini, dari semua hal, adalah sesuatu yang dimiliki Java untuk ...
sumber
bitCount
beroperasi di bawah tenda.TI-Basic (TI-84 Plus CE), 30 byte
TI-Dasar adalah bahasa tokenized, semua token tetapi
remainder(
adalah satu-byte , sisanya adalah duasumber
PHP, 36 byte
Asumsinya
$n
adalah angka yang akan diuji, menunjukkan Pemberitahuan PHP untuk$o
, dan tidak berfungsi dengan benar ketika$n
0 (tidak menghasilkan apa-apa).PHP, 53 byte
Menerima input baris perintah, tidak menampilkan Pemberitahuan PHP, dan menampilkan dengan benar untuk 0.
sumber