Terinspirasi oleh masalah keempat dari BMO2 2009 .
Dengan bilangan bulat positif n sebagai input atau parameter, kembalikan jumlah bilangan bulat positif yang representasi binernya terjadi sebagai blok dalam ekspansi biner dari n .
Misalnya, 13 -> 6 karena 13 dalam biner adalah 1101 dan memiliki substring 1101, 110, 101, 11, 10, 1
. Kami tidak menghitung angka biner yang dimulai dengan nol dan kami tidak menghitung nol itu sendiri.
Uji Kasus
13 -> 6
2008 -> 39
63 -> 6
65 -> 7
850 -> 24
459 -> 23
716 -> 22
425 -> 20
327 -> 16
Anda dapat menerima n sebagai berikut:
- bilangan bulat
- daftar nilai kebenaran / kepalsuan untuk representasi biner
- string untuk representasi biner
- string 10 basis (meskipun saya tidak yakin mengapa ada orang yang melakukan ini)
Buat kode Anda sesingkat mungkin.
Jawaban:
Python 3,
5450 byteTerima kasih kepada Rod dan Jonathan Allan karena telah menghemat empat byte.
sumber
+1
dari rentang kebin(i)
n
sendiri dan selalu mengecualikan0
dari hitungan kita, kita bisa selalu mengecualikann
dan selalu menghitung0
(bin (n) dimulai'0b...'
), maka kita dapat menghapus1,
dan+1
sepenuhnya dan meninggalkanbin(i)
apa pun untuk menyimpan empat byte Cobalah online!Jelly , 4 byte
Cobalah online!
Mengambil input sebagai daftar
0
s dan1
s.Cobalah online dengan angka!
Penjelasan:
Bukti kerjanya:
Program ini mendapat nomor input, N . Hal pertama yang dilakukan produk ini adalah, tentu saja, mengambil substring N 2 ( N dalam basis 2 ). Ini termasuk duplikat substring dimulai dengan 0 atau 1 .
Setelah itu, kita cukup mengambil substring unik dengan hanya mempertahankan kemunculan pertama dari setiap nilai dalam daftar substring.
Kemudian, program ini merangkum elemen pertama dari daftar bersama-sama, lalu elemen kedua, lalu yang ketiga, keempat, dll. Dan jika salah satu daftar tidak memiliki elemen seperti
0
itu diasumsikan. Apa tantangannya ditanyakan secara efektif. Berapa banyak substring unik yang dimulai dengan 1 yang angka ini miliki dalam bentuk binernya? . Karena setiap elemen pertama yang akan dihitung adalah1
, kita bisa menjumlahkan alih-alih memfilter untuk substring yang sesuai.Sekarang, elemen pertama dari daftar yang dihasilkan dari penjumlahan yang dijelaskan di atas memegang hitungan bit pertama dari substring, jadi kita cukup pop dan akhirnya mengembalikannya.
sumber
Oktaf ,
6261 byteCobalah online!
Penjelasan
Untuk input
n
, kode menguji semua angka dari1
untukn
melihat apakah representasi biner mereka adalah substring dari representasi biner input.sumber
05AB1E , 5 byte
Mengambil input sebagai string biner.
Header mengubah input integer ke biner untuk kemudahan pengujian.
Cobalah online!
Penjelasan
sumber
bŒʒć}Ùg
tapi tidak, itu lebih baik.Perl 5 , 36 +1 (
-p
) = 37 byteCobalah online!
Mengambil input sebagai string biner.
sumber
PowerShell ,
1039282 byteCobalah online!
Mengambil input sebagai larik
1
dan0
(truey and falsey di PowerShell). Loop melalui$s
(yaitu, berapa banyak elemen dalam array input). Di dalam loop, kami loop dari nomor saat ini (disimpan sebagai$i
) hingga$s.count
. Setiap loop bagian dalam, kita-join
larik array menjadi string. Kami kemudiansort
dengan-u
bendera nique (yang lebih pendek dariselect
dengan-u
bendera nique dan kami tidak peduli apakah mereka diurutkan atau tidak), ambil yang tidak memulai0
, dan ambil keseluruhan.count
. Yang tersisa pada pipa dan output tersirat.sumber
JavaScript (ES6), 55 byte
Mengambil input sebagai string biner.
Berikut ini adalah upaya menyedihkan untuk melakukannya dengan angka dan fungsi rekursif:
Pendekatan lama, 74 byte
Juga mengambil input sebagai string biner.
sumber
Python 2 ,
11881 byteTerima kasih kepada @Rod karena telah menghemat 37 byte!
Mengambil input sebagai string biner.
Cobalah online!
Python 2 , 81 byte
Terima kasih kepada @Rod!
Mengambil input sebagai string biner.
Cobalah online!
sumber
set(...)
dengan{...}
danxrange
denganrange
+1
dari rentang ke irisan, dan beralihs.startswith
keint(s,2)
seperti iniJelly , 5 byte
Cobalah online!
Mengambil input sebagai daftar 1s dan 0s. Footer di tautan menerapkan fungsi ke masing-masing contoh dalam posting.
Jonathan Allan menunjukkan bahwa
ẆḄQTL
ada alternatif 5 byte yang menggunakanT
atom yang menemukan indeks semua elemen kebenaran.Penjelasan
Ambil bin (13) = 1101 sebagai contoh. Masukan adalah
[1,1,0,1]
Mengambil ide "benarkan" (masuk dalam kasus ini) dari jawaban 05AB1E
sumber
T
,, denganẆḄQTL
R ,
8877 byteCobalah online!
Mengambil input sebagai string biner.
menggunakan
mapply
, menghasilkan array dari semua substring dari input.strtoi
mengonversinya sebagai2
bilangan bulat basis , dan saya mengambil jumlah dari konversi logis (!!
) dari entri dalam hasilnya.sumber
Retina ,
3729 byteCobalah online! Saya hanya perlu mencoba
w
modifier Retina 1.0 . Sunting: Disimpan 8 byte berkat @MartinEnder. Penjelasan:Konversi dari desimal ke unary.
Konversi dari unary ke binary, gunakan
#
untuk0
dan_
untuk 1.Hasilkan substring yang dimulai dengan
1
, maksud saya_
,. Thew
pengubah kemudian cocok dengan semua substring, bukan hanya satu terpanjang di setiap awal_
, sedangkanp
deduplicates pengubah pertandingan. Akhirnya karena ini adalah tahap terakhir, hitungan pertandingan dikembalikan secara implisit.sumber
q
(ataup
) sebagai tambahanw
. Anda juga tidak perlu menentukanC
secara eksplisit, karena ini adalah jenis tahap default jika hanya ada satu sumber yang tersisa.M
tipe stage default!C
agaknyaM
dulu. :)Pyth , 8 byte
Coba di sini!
Mengambil input sebagai string biner.
.:
menghasilkan semua substring,vM
mengevaluasi masing-masing (yaitu, itu mengkonversi masing-masing dari biner),{
deduplicate,<space>#
filter berdasarkan identitas danl
mendapatkan panjangnya.sumber
Bahasa Wolfram (Mathematica) , 35 byte
Menghitung urutan unik dari representasi biner yang dimulai dengan satu, meskipun saya tidak yakin kode ini bahkan perlu penjelasan.
Cobalah online!
sumber
___
harus dilakukanPerl 6 , 47 byte
Cobalah online!
sumber
Julia 0,6 , 37 byte
Cobalah online!
Juliafikasi jawaban Python oleh J843136028 digunakan
.
untuk aplikasi fungsi elemen-bijaksana dengan penyiaran. ( tautan )sumber
Java, 232 byte
Di mana n adalah input, b adalah representasi biner dan l adalah daftar semua substring. Pertama kali memposting di sini, pasti perlu ditingkatkan, dan jangan ragu untuk menunjukkan kesalahan! Diedit sedikit agar mudah dibaca.
sumber
String b=...,t
danint i=...,j,k
untuk menyimpan karakter untuk deklarasi berulang dari tipe yang sama. Kode Anda juga tidak akan memenuhi syarat sebagai entri karena merupakan cuplikan, bukan program lengkap atau fragmen fungsional, Anda harus menulis fungsi atau membungkus kode Anda dalam bentuk lambdaAttache , 35 byte
Cobalah online!
Setara:
Penjelasan
Saya akan menjelaskan versi kedua, karena lebih mudah untuk mengikuti (secara eksplisit):
sumber
Ruby
41 3627 byteMengambil string biner sebagai input
Sangat tidak efisien
Sebagian terinspirasi oleh jawaban python 3 ini
Cobalah online!
sumber
Java 8,
160159158 byteInput sebagai biner-String.
Harus ada cara yang lebih singkat ..>.>
Penjelasan:
Cobalah online.
sumber
C ++, 110 byte
Ini adalah fungsi rekursif. Kami menggunakan a
std::set
untuk menghitung nilai, mengabaikan duplikat. Dua panggilan rekursif menutupi bit dari kiri (f(n&i)
) dan dari kanan (f(n/2)
), akhirnya menghasilkan semua substring sebagai bilangan bulat.Perhatikan bahwa jika Anda ingin memanggilnya lagi,
s
harus dihapus di antara panggilan.Program uji
Hasil
sumber
J , 34 byte
Cobalah online!
sumber
J , 15 byte
Input adalah daftar biner. Cobalah online!
sumber
Perl 6 , 34 byte
Menguji
Diperluas:
sumber