Bilangan bulat positif N adalah K- sparse jika setidaknya ada K 0 antara dua 1 berturut-turut dalam representasi binernya.
Jadi, angka 1010101 adalah 1-jarang sedangkan 101101 tidak.
Tugas Anda adalah menemukan nomor 1-sparse berikutnya untuk nomor input yang diberikan. Misalnya, jika inputnya 12 ( 0b1100
) output harus 16 ( 0b10000
) dan jika inputnya 18 ( 0b10010
) outputnya harus 20 ( 0b10100
).
Program atau fungsi terkecil (dalam byte) menang! Celah standar tidak diijinkan.
code-golf
number
arithmetic
base-conversion
binary
articuno
sumber
sumber
Jawaban:
Pyth, 9 byte
x & (x*2) != 0
algoritma dari @alephalphaUpaya pertama saya di Pyth:
Coba di sini
sumber
CJam,
1411 byte3 byte disimpan berkat DigitalTrauma.
Uji di sini.
Penjelasan
Ini meninggalkan nomor terakhir pada tumpukan yang dicetak secara otomatis di akhir program.
sumber
Python 2, 44 byte
Ini adalah program python lengkap yang bertuliskan n, dan mencetak jawabannya. Saya pikir itu cukup baik dalam sub-kompetisi keterbacaan.
Hasil tes:
sumber
Pyth,
1211 byteCobalah secara online: Pyth Compiler / Executor .
sumber
"11"
menjadi`11
.Mathematica,
4130 byteDisimpan 11 byte berkat Martin Büttner.
sumber
Perl, 31
Atau dari baris perintah:
sumber
APL, 18 byte
Ini mengevaluasi ke fungsi monadik. Coba di sini. Pemakaian:
Penjelasan
sumber
J, 20 karakter
Kata kerja monadik. Tetap mematuhi aturan.
Penjelasan
Pertama, ini adalah kata kerja dengan spasi dan kemudian sedikit kurang golf:
Baca baca:
Saya pada dasarnya menghitung jika
1 1
terjadi dalam representasi basis-2 dari input. Jika ya, saya menambah input. Ini diletakkan di bawah batas daya, yang berarti diterapkan hingga hasilnya tidak berubah lagi.sumber
{⍵+∨/2∧/⍵⊤⍨⍵⍴2}⍣=
.Javascript,
2519Menggunakan fakta bahwa, untuk bilangan biner 1-jarang,
x&2*x == 0
:sumber
JavaScript (ES6), 39
43Tanpa regexp, tanpa string, rekursif:
Versi berulang:
Ini sangat sederhana, hanya menggunakan shift kanan untuk menemukan urutan 11. Ketika saya menemukannya, lewati ke nomor berikutnya. Versi rekursif langsung berasal dari versi berulang.
Tidak terseret dan lebih jelas. Untuk bermain golf, bagian tersulit adalah menggabungkan loop bagian dalam dan bagian luar (harus init x ke 3 di awal)
sumber
%4>2
terlihat seperti sihir dari Number Theory, bisakah kamu jelaskan || berikan tautan?Python 2, 37 byte
Digunakan logika
x & 2*x == 0
untuk angka 1-jarang.Terima kasih kepada @Nick dan @CarpetPython.
sumber
JavaScript,
756662 byteTerima kasih kepada Martin Büttner karena telah menghemat 9 byte dan Pietu1998 untuk 4 byte!
Cara kerjanya: menjalankan
for
loop mulai daria + 1
selama jumlah saat ini tidak 1-jarang, dan jika ya, loop terputus dan mengembalikan nomor saat ini. Untuk memeriksa apakah angka 1-jarang, itu mengubahnya menjadi biner dan memeriksa apakah tidak mengandung11
.Hapus kode golf:
sumber
Julia, 40 byte
Ini menciptakan fungsi anonim yang menerima integer tunggal sebagai input dan mengembalikan integer 1-sparse tertinggi berikutnya. Untuk menyebutnya, berikan nama, misalnya
f=n->...
, dan lakukanf(12)
.Penjelasan + tidak dikumpulkan:
Contoh:
Saran dan / atau pertanyaan diterima seperti biasa!
sumber
> <> (Ikan) , 31 + 3 = 34 byte
Pemakaian:
3 byte ditambahkan untuk
-v
bendera.sumber
JavaScript (ECMAScript 6), 40
Dengan rekursi:
JavaScript, 56
Sama tanpa fungsi panah.
sumber
Scala, 65 byte
(jika fungsi bernama diperlukan, solusi akan menjadi 69 byte)
sumber
Python,
3933 byteCobalah di sini: http://repl.it/gpu/2
Dalam bentuk lambda (terima kasih kepada xnor untuk bermain golf):
Sintaks fungsi standar
ternyata lebih pendek dari lambda untuk sekali!sumber
f=lambda x:1+x&x/2and f(x+1)or-~x
. Ternyata Anda menggeser sedikit ke kanan daripada ke kiri, Anda dapat menggunakanx/2
alih-alih(x+1)/2
karena perbedaan selalu dalam nol bitx+1
. Namun spec meminta program.Java, 33 byte.
Menggunakan metode dalam jawaban ini
TIO
sumber
Ruby, 44
Cukup mendasar. Lambda dengan infinite loop dan regexp untuk menguji representasi biner. Saya berharap itu
loop
menghasilkan dan nomor indeks.sumber
Matlab (
7774 bytes)Catatan:
m+1
untuk2*m
, di manam
adalah input.~any(x)
adalahtrue
jikax
berisi semua nol atau jikax
kosongsumber
C (32 byte)
Implementasi rekursif dari algoritma yang sama dengan jawaban lainnya.
sumber
Perl, 16 byte
Menggabungkan
x&2*x
dari berbagai jawaban (saya pikir yang pertama Nick ) dengan hasil nutkiredo
:Diuji dalam Strawberry 5.26.
sumber
Japt, 8 byte
Jalankan secara online.
sumber
Jelly , 7 byte
Program lengkap yang menerima bilangan bulat tunggal, non-negatif yang mencetak bilangan bulat positif (sebagai tautan monadik ia menghasilkan daftar yang berisi bilangan bulat positif tunggal).
Cobalah online!
Bagaimana?
Mulai dari
v=n+1
, dan bertambah, dobelv
untuk menggeser setiap bit ke atas satu tempat dan sedikit bijaksana DAN denganv
dan kemudian lakukan logika TIDAK untuk menguji apakahv
1-jarang hingga satu angka tersebut ditemukan.sumber
Stax , 5 byte
Jalankan dan debug itu
Ini bekerja menggunakan prosedur ini. Input dimulai di atas tumpukan.
sumber