Tulis fungsi yang ketika diberi buffer b
(panjang 1 - 104857600 byte) dan sejumlah bit n
(1 <= n <= 64), pisahkan buffer menjadi potongan-potongan n
bit. Pad kanan potongan terakhir dengan 0
s hingga n
bit.
misalnya
Diberi buffer b = "f0oBaR"
atau setara [102,48,111,66,97,82]
dan n = 5
, kembali
[12, 24, 24, 6, 30, 16, 19, 1, 10, 8]
Ini karena buffer di atas, ketika direpresentasikan sebagai biner terlihat seperti:
01100110 00110000 01101111 01000010 01100001 01010010
Dan ketika dikelompokkan ulang menjadi 5s terlihat seperti:
01100 11000 11000 00110 11110 10000 10011 00001 01010 010[00]
Yang ketika dikonversi kembali menjadi desimal memberikan jawabannya.
Catatan
- Anda dapat menggunakan tipe data apa pun yang paling masuk akal dalam bahasa Anda untuk mewakili buffer. Di PHP Anda mungkin akan menggunakan string, di Node Anda mungkin ingin menggunakan Buffer
- Jika Anda menggunakan string untuk mewakili buffer, anggap itu ASCII untuk konversi char -> int
- Anda dapat menggunakan array int (0-255) untuk input jika Anda mau
- Nilai pengembalian harus berupa array atau daftar int
Uji Kasus
> b = "Hello World", n = 50
318401791769729, 412278856237056
> b = [1,2,3,4,5], n = 1
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1
> b = "codegolf", n = 32
1668244581, 1735355494
> b = "codegolf" n = 64
7165055918859578470
> b = "codegolf" n = 7
49, 91, 108, 70, 43, 29, 94, 108, 51, 0
> b = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vel est eu velit lacinia iaculis. Nulla facilisi. Mauris vitae elit sapien. Nullam odio nulla, laoreet at lorem eu, elementum ultricies libero. Praesent orci elit, sodales consectetur magna eget, pulvinar eleifend mi. Ut euismod leo ut tortor ultrices blandit. Praesent dapibus tincidunt velit vitae viverra. Nam posuere dui quis ipsum iaculis, quis tristique nisl tincidunt. Aliquam ac ligula a diam congue tempus sit amet quis nisl. Nam lacinia ante vitae leo efficitur, eu tincidunt metus condimentum. Cras euismod quis quam vitae imperdiet. Ut at est turpis.", n = 16
19567, 29285, 27936, 26992, 29557, 27936, 25711, 27759, 29216, 29545, 29728, 24941, 25972, 11296, 25455, 28275, 25955, 29797, 29813, 29216, 24932, 26992, 26995, 25449, 28263, 8293, 27753, 29742, 8272, 25964, 27749, 28276, 25971, 29045, 25888, 30309, 27680, 25971, 29728, 25973, 8310, 25964, 26996, 8300, 24931, 26990, 26977, 8297, 24931, 30060, 26995, 11808, 20085, 27756, 24864, 26209, 25449, 27753, 29545, 11808, 19809, 30066, 26995, 8310, 26996, 24933, 8293, 27753, 29728, 29537, 28777, 25966, 11808, 20085, 27756, 24941, 8303, 25705, 28448, 28277, 27756, 24876, 8300, 24943, 29285, 25972, 8289, 29728, 27759, 29285, 27936, 25973, 11296, 25964, 25965, 25966, 29813, 27936, 30060, 29810, 26979, 26981, 29472, 27753, 25189, 29295, 11808, 20594, 24933, 29541, 28276, 8303, 29283, 26912, 25964, 26996, 11296, 29551, 25697, 27749, 29472, 25455, 28275, 25955, 29797, 29813, 29216, 28001, 26478, 24864, 25959, 25972, 11296, 28789, 27766, 26990, 24946, 8293, 27749, 26982, 25966, 25632, 28009, 11808, 21876, 8293, 30057, 29549, 28516, 8300, 25967, 8309, 29728, 29807, 29300, 28530, 8309, 27764, 29289, 25445, 29472, 25196, 24942, 25705, 29742, 8272, 29281, 25971, 25966, 29728, 25697, 28777, 25205, 29472, 29801, 28259, 26980, 30062, 29728, 30309, 27753, 29728, 30313, 29793, 25888, 30313, 30309, 29298, 24878, 8270, 24941, 8304, 28531, 30053, 29285, 8292, 30057, 8305, 30057, 29472, 26992, 29557, 27936, 26977, 25461, 27753, 29484, 8305, 30057, 29472, 29810, 26995, 29801, 29045, 25888, 28265, 29548, 8308, 26990, 25449, 25717, 28276, 11808, 16748, 26993, 30049, 27936, 24931, 8300, 26983, 30060, 24864, 24864, 25705, 24941, 8291, 28526, 26485, 25888, 29797, 28016, 30067, 8307, 26996, 8289, 28005, 29728, 29045, 26995, 8302, 26995, 27694, 8270, 24941, 8300, 24931, 26990, 26977, 8289, 28276, 25888, 30313, 29793, 25888, 27749, 28448, 25958, 26217, 25449, 29813, 29228, 8293, 29984, 29801, 28259, 26980, 30062, 29728, 28005, 29813, 29472, 25455, 28260, 26989, 25966, 29813, 27950, 8259, 29281, 29472, 25973, 26995, 28015, 25632, 29045, 26995, 8305, 30049, 27936, 30313, 29793, 25888, 26989, 28773, 29284, 26981, 29742, 8277, 29728, 24948, 8293, 29556, 8308, 30066, 28777, 29486
> b = [2,31,73,127,179,233], n = 8
2, 31, 73, 127, 179, 233
n
lebih dari 8? Jika demikian, bagaimana dengan nilain
lebih dari 64, yang lebih besar dari presisi integer kebanyakan bahasa.char
adalah bilangan bulat yang panjangnya satu byte.Jawaban:
Pyth,
1817 byteTerima kasih kepada @ lirtosiast untuk satu byte!
sumber
Jelly, 13 byte
Ini mengambil input sebagai daftar bilangan bulat. Cobalah online!
Bagaimana itu bekerja
sumber
Julia, 117 byte
Ini adalah fungsi yang menerima array integer dan integer dan mengembalikan array integer. Ini merupakan latihan dalam penyalahgunaan argumen fungsi.
Tidak Disatukan:
sumber
JavaScript (ES6), 120 byte
Memutar-mutar bit rekursif pada array integer. Tidak Disatukan:
sumber
"(s,n)=>(s.replace(/./g,x=>(256+x.charCodeAt()).toString(2).slice(1))+'0'.repeat(n-1)).match(eval(`/.{${n}}/g`)).map(x=>+`0b${x}`)".length
Python 3, 102 byte
gunakan trik iter untuk mengelompokkan string
s
: string input / buffern
: jumlah bit di setiap potonganHasil
sumber
n
memiliki arti yang sama dengan pertanyaan:splits the buffer into chunks of n bits
Ruby, 114 byte
Pembersih sedikit:
sumber
Perl 6,
9368 bytesumber
PHP,
262217189 byte(diperbarui dengan tips dari Ismael Miguel )
Diformat agar mudah dibaca:
Contoh:
sumber
str_pad($s,8,'0',STR_PAD_LEFT)
, Anda bisa menggunakanstr_pad($s,8,0,0)
. Anda dapat menghapus tanda kutipbindec
dandecbin
menyimpan 4 byte. Untuk menyimpan lebih banyak, Anda dapat menyimpanarray_map
dalam variabel dan meneruskannya. Ini dia:function f($b,$n){$M=array_map;return$M(bindec,$M(function($x)use($n){return str_pad($x,$n,0);},str_split($M('',array_map(function($s){return str_pad($s,8,0,0);},$M(decbin,$b))),5)));}
(184 bytes).implode
dengan$M
terlalu sekalipun.CJam, 30 byte
Cobalah online!
Ini adalah blok tanpa nama yang mengharapkan buffer int dan jumlah potongan pada stack dan meninggalkan hasilnya pada stack.
Memutuskan untuk mencoba CJam. Hanya butuh saya 2 jam untuk menyelesaikannya ^^ Ini mungkin terlalu lama, saran sangat diterima!
Penjelasan
sumber
2b8T
daripada2b8 0
menyimpan byte (variabelT
diinisialisasi ke0
) 2. Membuang potongan terakhir dapat dilakukan denganW<
(variabelW
diinisialisasi ke-1
) atau);
(mengambil elemen terakhir dan membuangnya).JavaScript (ES6) 104
Sedikit demi sedikit bermain-main,
Edit 5 byte, simpan thx @Neil
Kurang golf
Uji
sumber
x
setiap kali, mengapa tidak menggeser bit yangx
benari
?c-g?[...s,t<<c]:s
mungkin menghemat beberapa byte lagi.J, 24 byte
Ini adalah fungsi anonim, yang mengambil
n
argumen kiri danb
sebagai angka sebagai argumen kanannya.Uji:
Penjelasan:
sumber
Haskell,
112109 byteContoh penggunaan:
5 # [102,48,111,66,97,82]
->[12,24,24,6,30,16,19,1,10,8]
.Bagaimana itu bekerja
sumber
Java,
313306322 byteSaya harap ini mengalahkan PHP ... Dan tidak. Nama fungsi panjang yang bodoh.
-7 terima kasih kepada @quartata untuk menyingkirkan publik +16 untuk memperbaiki kesalahan ketika perpecahan terjadi, terima kasih kepada @TheCoder untuk menangkapnya
sumber
o[]=new int[b.length()*8/s+1]
- Ini akan menetapkan ukuran yang salah Jika(b.length()*8)%s==0
Ruby , 66 byte
Cobalah online!
Mengambil buffer input sebagai string, sehingga beberapa string uji dibangun langsung di footer untuk menghindari yang tidak diinginkan.
sumber
MATL , 9 byte
Cobalah online!
Mengambil input
b
sebagai string yang dibatasi oleh''
atau sebagai larik nilai yang dipisahkan koma seperti[102, 48, 111]
, kemudiann
.sumber
Perl 5
-nl -MData::Dump=pp
, 96 byteCobalah online!
Membutuhkan
Data::Dump
modul.Mengambil
n
baris input pertama dan angka pada setiap baris setelah itu.Output ke STDERR (bidang Debug pada TIO).
Diuraikan dan dirapikan:
sumber
Powershell 146 byte
Ambil buffer dan konversikan ke char array dan kemudian array integer. Untuk masing-masing konversi ke biner, pad entri dengan 0 di mana diperlukan, dan bergabung sebagai satu string besar. Pisahkan string itu pada n karakter dan letakkan blank yang sudah dibuat. Setiap elemen dari split diisi (hanya elemen terakhir yang benar-benar membutuhkannya) dan dikonversi kembali menjadi integer. Output adalah sebuah array
sumber
Python 3.5 -
312292 byte:Meskipun ini mungkin lama, ini, dalam pengetahuan saya, adalah jalan terpendek untuk menerima kedua fungsi dan array tanpa kesalahan, dan masih mampu mempertahankan beberapa akurasi di Python 3.5.
sumber
Java,
253247 byteGolf
Tidak disatukan
sumber
c, 2
=>c,2
;((l=f.length())%n)>0
=>(l=f.length())%n>0
;Jelly , 13 byte
Cobalah online!
Berbeda dengan jawaban Dennis.
Catatan: Input sebenarnya adalah daftar bilangan bulat non-negatif, tetapi tautan TIO memudahkan Anda, dan menerima daftar atau string semacam itu.
sumber
Stax , 12 byte
Jalankan dan debug itu
Ini bukan fungsi seperti yang ditentukan dalam tantangan, tetapi sebuah program, karena stax tidak mendukung fungsi. Ini mendukung input string atau array literal.
sumber
Python 2 , 101 byte
Cobalah online!
sumber
Dyalog APL , 36 byte
Cobalah online!
Ini mungkin bisa diturunkan lebih banyak.
sumber
Elixir ,
6360 byteCobalah online!
Mengambil input sebagai biner Elixir, menampilkan daftar bilangan bulat.
Kode ini memanfaatkan pemahaman generator bitstring Elixir untuk memotong input biner
&1
menjadi bit blok dengan ukuran yang disediakan sebagai argumen&2
. Untuk menjelaskan bit sisa di akhir, kami mengisi biner dengan&2 - 1
nol bit. Di sini juga ada tempat di mana beberapa verbositas yang tidak diinginkan muncul: Elixir mengeluh jika kita tidak secara eksplisit menyatakan&1
sebagai bitstring, dan itu juga tidak mendukung ekspresisize(...)
, maka diperlukan penugasan variabel tambahan.Telur Paskah: di footer, ganti
IO.inspect
denganIO.puts
, dan fungsi kita secara ajaib "menerjemahkan" Lorem ipsum dari bahasa Latin ke bahasa Mandarin - Cobalah secara online!sumber
PHP ,
135129124 byteCobalah online!
Diimplementasikan sebagai fungsi, buffer input adalah array int dan mengembalikan array int.
Keluaran
Verifikasi semua kasus uji
sumber
APL (NARS), 471 karakter, 942 byte
kode dan tes yang dikomentari:
sumber
Japt , 16 byte
Setelah seharian rapat, rasanya saya sudah lupa bagaimana cara bermain golf! Akan bermain-main dengan ini di kereta pulang nanti, lihat apakah aku bisa memperbaikinya.
Cobalah
sumber
IEC 8859-1
? Apakah itu sah? Apakah Anda menemukan celah? Apakah mereka tidak menentukan bahwa itu harus UTF-8? Karena itu adalah 22 byte dari UTF-8.1.
Setiap bahasa bebas untuk digunakan encoding / codepage sendiri.2.
ISO-8859-1 adalah penyandian standar yang digunakan oleh banyak bahasa dan tidak khusus untuk Japt, atau solusi khusus ini.3.
Spec Anda tidak menyatakan bahwa kami harus menghitung dalam UTF-8.4.
Jika ya, Anda akan sangat tidak disarankan untuk melakukannya.