একটি বাইট অ্যারের বিট অ্যারেতে বিভক্ত করুন


24

একটি ফাংশন লিখুন যখন কোনও বাফার দেওয়া হয় b(1 - 104857600 বাইট দীর্ঘ) এবং বেশ কয়েকটি বিট n(1 <= n <= 64), বাফারটিকে nবিটের অংশগুলিতে বিভক্ত করে । ডান-প্যাড গত খণ্ড 0থেকে গুলি আপ nবিট।

যেমন

বাফার দেওয়া হয়েছে b = "f0oBaR"বা সমতুল্য [102,48,111,66,97,82]এবং n = 5, ফিরে আসুন

[12, 24, 24, 6, 30, 16, 19, 1, 10, 8]

এটি কারণ কারণ উপরের বাফারটি বাইনারি হিসাবে প্রদর্শিত হয়:

01100110 00110000 01101111 01000010 01100001 01010010

এবং যখন 5-এর মধ্যে আবার গ্রুপ করা হয় তখন মনে হয়:

01100 11000 11000 00110 11110 10000 10011 00001 01010 010[00]

দশমিক রূপান্তরিত যখন উত্তর দেয়।

নোট

  • বাফার উপস্থাপনের জন্য আপনার ভাষায় যে কোনও ডেটা টাইপ সর্বাধিক বোধ তৈরি করে আপনি তা ব্যবহার করতে পারেন। পিএইচপি-তে আপনি সম্ভবত একটি স্ট্রিং ব্যবহার করবেন, নোডে আপনি কোনও বাফার ব্যবহার করতে পারেন
    • আপনি যদি বাফারকে উপস্থাপন করতে কোনও স্ট্রিং ব্যবহার করেন তবে ধরে নিন যে এটি চর -> ইন্ট রূপান্তরকরণের জন্য ASCII
    • আপনি যদি পছন্দ করেন তবে আপনি ইনপুটগুলির জন্য অ্যারে (0-255) ব্যবহার করতে পারেন
  • রিটার্ন মান অবশ্যই একটি অ্যারে বা ইনটগুলির তালিকা হতে হবে

পরীক্ষার মামলা

> 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

2
এটি কি n8 এর বেশি মানের জন্য কাজ করার কথা ? যদি তা হয় তবে 64৪ এর nবেশি মানের মানের কী , যা বেশিরভাগ ভাষার পূর্ণসংখ্যার নির্ভুলতার চেয়ে বড়।
গতিময় বিমান

2
কেন ফেরত মান হতে আছে একটি ints ?
wizzwizz4

2
@ wizzwizz4 আমার মনে হয় না। তারা বাইট হতে পারে না কারণ তাদের কাছে 8 টি বিট নেই। বিটওয়াইজ অপারেটররা সাধারণত ইনটগুলিতে কাজ করে এবং অন্য কিছু নয়। আপনার যদি আরও ভাল পরামর্শ থাকে তবে আমি শুনছি, তবে অন্যথায় এটি হ'ল।
এমপেন

3
@ wizzwizz4 কারণ আমি চাই না যে লোকেরা একটি পদক্ষেপ এড়াতে সক্ষম হবে। আমি "এই বাইটের প্রথম 5 টি বিটগুলির উত্তর থাকতে পারে" এর মতো উত্তরগুলি চাই না - ফলাফলটিতে কোনও অতিরিক্ত অতিরিক্ত তথ্য থাকা উচিত নয় এবং এটি সহজেই এএসসিআইআই বা কিছু চরিত্রের ম্যাপিংয়ে রূপান্তরিত হওয়া উচিত (বাস্তব জীবনের ব্যবহার- কেস)। এছাড়াও, এখনও পর্যন্ত উত্তরগুলির সংখ্যা দেওয়া, এটি কোনও সমস্যা বলে মনে হচ্ছে না।
এমপেন

1
@Pen আমি বিভ্রান্তি দেখছি charএকটি পূর্ণসংখ্যা যা এক বাইট দীর্ঘ হয়।
wizzwizz4

উত্তর:


15

পাইথ, 18 17 বাইট

iR2c.[t.B+C1z\0QQ

বাইটের জন্য @lirtosiast ধন্যবাদ !

            z      get input
         +C1       prepend a 0x01 to prevent leading zeroes from disappearing
       .B          convert to binary string
      t            remove the leading 1 from ^^
    .[       \0Q   pad right with zeroes to multiple of second input
   c            Q  get chunks/slices of length second input
iR2                map(x: int(x, 2))

13

জেলি, 13 বাইট

1;ḅ256æ«BḊsḄṖ

এটি পূর্ণসংখ্যার একটি তালিকা হিসাবে ইনপুট নেয়। এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

1;ḅ256æ«BḊsḄṖ  Main link. Arguments: A (list), n (integer)

1;             Prepend 1 to A.
  ḅ256         Convert from base 256 to integer.
      æ«       Bitshift the result n units to the left.
        B      Convert to binary.
         Ḋ     Discard the first binary digit (corresponds to prepended 1).
          s    Split into chunks of length n.
           Ḅ   Convert each chunk from binary to integer.
            Ṗ  Discard the last integer (corresponds to bitshift/padding).

5

জুলিয়া, 117 বাইট

f(x,n,b=join(map(i->bin(i,8),x)),d=endof,z=rpad(b,d(b)+d(b)%n,0))=map(i->parse(Int,i,2),[z[i:i+n-1]for i=1:n:d(z)-n])

এটি এমন একটি ফাংশন যা একটি পূর্ণসংখ্যা অ্যারে এবং একটি পূর্ণসংখ্যা গ্রহণ করে এবং একটি পূর্ণসংখ্যা অ্যারে প্রদান করে। এটি ফাংশন যুক্তির অপব্যবহারের একটি অনুশীলন।

Ungolfed:

function f(x::Array{Int,1},                  # Input array
           n::Int,                           # Input integer
           b = join(map(i -> bin(i, 8), x)), # `x` joined as a binary string
           d = endof,                        # Store the `endof` function
           z = rpad(b, d(b) + d(b) % n, 0))  # `b` padded to a multiple of n

    # Parse out the integers in base 2
    map(i -> parse(Int, i, 2), [z[i:i+n-1] for i = 1:n:d(z)-n])
end

আপনি কেন অস্থায়ীভাবে এটি মুছলেন?
ক্যালকুলেটরফ্লাইন

@ ক্যাটস আরেফ্ল্ফী আমি বুঝতে পেরেছিলাম প্রাথমিকভাবে আমি কিছু ভুল করেছি যে এটি পরীক্ষার ক্ষেত্রে কাজ করেছে তবে সাধারণভাবে প্রয়োজন হবে না। যদিও এখন সব ভাল হওয়া উচিত। :)
অ্যালেক্স এ।

5

জাভাস্ক্রিপ্ট (ES6), 120 বাইট

f=(a,n,b=0,t=0,r=[])=>b<n?a.length?f(a.slice(1),n,b+8,t*256+a[0],r):b?[...r,t<<n-b]:r:f(a,n,b-=n,t&(1<<b)-1,[...r,t>>b])

পূর্ণসংখ্যার অ্যারেগুলিতে পুনরাবৃত্ত বিট বিড়ম্বনা। Ungolfed:

function bits(array, nbits) {
    var count = 0;
    var total = 0;
    var result = [];
    for (;;) {
        if (nbits <= count) {
            // We have enough bits to be able to add to the result
            count -= nbits;
            result.push(total >> count);
            total &= (1 << count) - 1;
        } else if (array.length) {
            // Grab the next 8 bits from the array element
            count += 8;
            total <<= 8;
            total += array.shift();
        } else {
            // Deal with any leftover bits
            if (count) result.push(total << nbits - count);
            return result;
        }
    }
}

@ ওয়াশিংটনগুয়েডস আমি নিজের সমাধানের নিজস্ব গল্ফটি থেকে আরও 9 বাইট গল্ফ করতে পেরেছি, তবে এটি এখনও 129 বাইট, দুঃখিত:"(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
নীল

আপনি কি নিশ্চিত যে এই চালায়? অবরুদ্ধ সংস্করণ ক্রোম ক্রাশ করছে।
এমপেন

@mpen গল্ফযুক্ত সংস্করণটি অবশ্যই ফায়ারফক্সে চলে runs অবরুদ্ধ সংস্করণ এর মধ্যে ত্রুটি থাকতে পারে।
নীল

আহা! এবং তাই এটি। আমি ভেবেছিলাম ক্রোমের জেএস ইঞ্জিন এফএফ এর চেয়ে এগিয়ে তবে আমি অনুমান করি না।
এমপেন

1
@ এমপেন আপনার জন্য আমার অলগল্ড কোডে বেশ কয়েকটি সূক্ষ্ম বাগ সংশোধন করেছে।
নীল

5

পাইথন 3, 102 বাইট

j=''.join
lambda s,n:[int(j(k),2)for k in zip(*[iter(j([bin(i)[2:].zfill(8)for i in s+[0]]))]*n)][:-1]

গ্রুপ স্ট্রিংয়ের জন্য ইট ট্রিক ব্যবহার করুন

  • s: ইনপুট স্ট্রিং / বাফার
  • n: প্রতিটি বিভক্ত অংশে বিটের সংখ্যা

ফলাফল

>>> f([102,48,111,66,97,82],4)
[6, 6, 3, 0, 6, 15, 4, 2, 6, 1, 5, 2, 0]

>>> f([102,48,111,66,97,82],5)
[12, 24, 24, 6, 30, 16, 19, 1, 10, 8]

>>> f([102,48,111,66,97,82],6)
[25, 35, 1, 47, 16, 38, 5, 18]

>>> f([102,48,111,66,97,82],8)
[102, 48, 111, 66, 97, 82]

'এন' পরম কী করে তা বোঝানোর জন্য আপনার কোডটি নথিভুক্ত করা উচিত ছিল?
নাল্প্টার

@ নাল্প্টারের nপ্রশ্নের তুলনায় একই অর্থ রয়েছে:splits the buffer into chunks of n bits
ইরওয়ান

4

রুবি, 114 বাইট

->s,n{a=s.bytes.map{|b|b.to_s(2).rjust 8,?0}.join.split""
r=[]
r<<a.shift(n).join.ljust(n,?0).to_i(2)while a[0]
r}

কিছুটা ক্লিনার:

f = -> str, num {
    arr = str.bytes.map {|byte|
        byte.to_s(2).rjust(8, "0")
    }.join.split("")
    result = []
    while arr.size > 0
        result << arr.shift(num).join.ljust(num, "0").to_i(2)
    end
    result
}

puts f["f0oBaR", 5]

4

পার্ল 6, 93 68 বাইট

{@^a».&{sprintf "%08b",$_}.join.comb($^b)».&{:2($_~0 x$b-.chars)}}

3

পিএইচপি, 262 217 189 বাইট

function f($b,$n){$M='array_map';return$M('bindec',$M(function($x)use($n){return str_pad($x,$n,0);},str_split(implode('',$M(function($s){return str_pad($s,8,0,0);},$M('decbin',$b))),$n)));}

( ইসমাইল মিগুয়েলের টিপস সহ আপডেট করা হয়েছে )

পাঠযোগ্যতার জন্য ফর্ম্যাট করা:

function f($b, $n) {
    $M = 'array_map';
    return $M('bindec', $M(function ($x) use ($n) {
        return str_pad($x, $n, 0);
    }, str_split(implode('', $M(function ($s) {
        return str_pad($s, 8, 0, 0);
    }, $M('decbin', $b))), $n)));
}

উদাহরণ:

> implode(', ',f(array_map('ord',str_split('f0oBaR')),5));
"12, 24, 24, 6, 30, 16, 19, 1, 10, 8"

1
পরিবর্তে str_pad($s,8,'0',STR_PAD_LEFT), আপনি ব্যবহার করতে পারেন str_pad($s,8,0,0)। আপনি উদ্ধৃতিগুলি সরিয়ে bindecএবং decbin4 টি বাইট সংরক্ষণ করতে পারেন । আরও সংরক্ষণ করতে, আপনি array_mapএকটি পরিবর্তনশীল সঞ্চয় করতে পারেন এবং পরিবর্তে এটি পাস করতে পারেন । আপনি এখানে যান: 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 বাইট)
ইসমাইল মিগুয়েল

ধন্যবাদ @ ইসমাইল মিগুয়েল আমি মনে করি আপনি যদিও এর implodeসাথে প্রতিস্থাপন করেছেন $M
এমপেন

1
যদি আমি এটা করি, ভুল ছিল। আমি সত্যিই দুঃখিত। তবে আমি আনন্দিত যে আপনি আপনার কোডের আমার প্রকরণটি পছন্দ করেছেন।
ইসমাইল মিগুয়েল

3

সিজেম, 30 বাইট

{_@{2b8 0e[}%e_0a@*+/-1<{2b}%}

এটি অনলাইন চেষ্টা করুন!

এটি একটি নামবিহীন ব্লক যা ইনফ বাফার এবং স্ট্যাকের অংশগুলির পরিমাণ আশা করে এবং ফলাফলটি স্ট্যাকের উপরে ফেলে।

সিজেমকে একবার চেষ্টা করার সিদ্ধান্ত নিয়েছে। এটি সম্পন্ন করতে আমাকে কেবল 2 ঘন্টা সময় নিয়েছে ^^ এটি সম্ভবত খুব দীর্ঘ, পরামর্শগুলি খুব স্বাগত!

ব্যাখ্যা

_ ই # খণ্ড গণনার সদৃশ করুন
@ ই # ঘোরানো স্ট্যাক, উপরে এখন অ্যারে এবং নীচে অংশগুলি গণনা করা হবে
# ই # একটি নতুন ব্লক শুরু করুন
 2 বি ই # বাইনারি রূপান্তর
 8 0 ই [ই # বামে শূন্য যুক্ত করুন, সুতরাং বাইনারিটি 8 বিট হয়
# ই # শেষের ব্লক শেষ
% e # প্রতিটি অ্যারে-উপাদান (মানচিত্র) এ এই ব্লক প্রয়োগ
e_ ই # সমতল অ্যারে
0a ই # স্ট্যাকের একটি একক শূন্যের সাথে একটি অ্যারেতে চাপুন
@ ই # ঘোরানো স্ট্যাক, স্ট্যাকটিতে এখন এন [অ্যারে] [0] এন রয়েছে
* e # অ্যারে [0] n বার পুনরাবৃত্তি করুন
+ ই # কনটাক্ট দুটি অ্যারে
/ e # দৈর্ঘ্য n এর অংশে বিভক্ত, এখন স্ট্যাকগুলিতে কেবল অ্যারে থাকে
-1 <ই # শেষ অংশটি বাতিল করুন
B 2 বি}% ই # প্রতিটি খণ্ডকে দশমিক দশকে রূপান্তর করুন

1. আপনি লিখতে পারেন 2b8Tবদলে 2b8 0(পরিবর্তনশীল একটি বাইট সংরক্ষণ করতে Tকরতে preinitialized হয় 0) 2. খারিজ গত খণ্ড দিয়ে করা যাবে W<(পরিবর্তনশীল Wকরতে সক্রিয়া করা হয় -1) অথবা );(শেষ উপাদান গ্রহণ করা এবং এটি বাতিল)।
ফল এশোলং ফল

এটি নামিয়ে 25 এ পেয়েছে ।
এ্যাসোলং ফল

3

জাভাস্ক্রিপ্ট (ES6) 104

বিট ফিডলিং দ্বারা আইট্রেটিভ বিট,

5 বাইট সম্পাদনা করুন thx @ নীল সংরক্ষণ করুন

(s,g,c=g,t=0)=>(s.map(x=>{for(i=8;i--;--c||(s.push(t),c=g,t=0))t+=t+(x>>i)%2},s=[]),c-g&&s.push(t<<c),s)

কম গল্ফড

( 
 // parameters
 s, // byte source array
 g, // output bit group size
 // default parameters used as locals 
 c = g, // output bit counter
 t = 0  // temp bit accumulator
) => (
  s.map(x => 
    { // for each byte in s
      for(i = 8; // loop for 8 bits
        i--; 
        )
        // loop body
        t += t + (x>>i) % 2, // shift t to left and add next bit
        --c // decrement c,if c==0 add bit group to output and reset count and accumulator
          ||(s.push(t), c=g, t=0)
    }, 
    s=[] // init output, reusing s to avoid wasting another global
  ),
  c-g && s.push(t<<c), // add remaining bits, if any
  s // return result
)

পরীক্ষা

f=(s,g,c=g,t=0)=>(s.map(x=>{for(i=8;i--;--c||(s.push(t),c=g,t=0))t+=t+(x>>i)%2},s=[]),c-g&&s.push(t<<c),s)

function test()
{
  var a = A.value.match(/\d+/g)||[]
  var g = +G.value
  var r = f(a,g)
  
  O.textContent = r
  K.innerHTML = a.map(x=>`<i>${(256- -x).toString(2).slice(-8)}</i>`).join``
  + '\n'+ r.map(x=>`<i>${(256*256*256*256+x).toString(2).slice(-g)}</i>`).join``
}  

test()
#A { width: 50% }
#G { width: 5% }
i:nth-child(even) { color: #00c }
i:nth-child(odd) { color: #c00 }
Input array <input id=A value="102,48,111,66,97,82">
Group by bits <input id=G value=5> (up to 32)<br>
Output <button onclick="test()">-></button>
<span id=O></span>
<pre id=K></pre>


1
xপ্রতিবার দ্বিগুণ করার পরিবর্তে, xডান iবিটগুলি স্থানান্তরিত করবেন না কেন ?
নীল

@ নীল আহ ... কেন ... বোকা?
edc65

আমি কেবল লক্ষ্য করেছি যে এটি c-g?[...s,t<<c]:sআপনাকে আরও কয়েকটি বাইট সংরক্ষণ করতে পারে।
নীল

@ নিল এর জন্য কিছু চিন্তা দরকার
edc65

2

জে, 24 বাইট

[:#.-@[>\;@(_8:{."1#:@])

এটি একটি বেনাম ফাংশন, এটি nতার বাম আর্গুমেন্ট bহিসাবে এবং সংখ্যাটিকে তার ডান আর্গুমেন্ট হিসাবে গ্রহণ করে।

টেস্ট:

      5 ([:#.-@[>\;@(_8:{."1#:@])) 102 48 111 66 97 82
12 24 24 6 30 16 19 1 10 8

ব্যাখ্যা:

[:#.-@[>\;@(_8:{."1#:@])

                   #:@]   NB. Convert each number in `b` to bits
            _8:{."1       NB. Take the last 8 items for each
                          NB.    (padding with zeroes at the front)
         ;@               NB. Make a list of all the bits
    -@[                   NB. Negate `n` 
                          NB. (\ gives non-overlapping infixes if [<0)
       >\                 NB. Get non-overlapping n-sized infixes
 [:#.                     NB. Convert those back to decimal 

2

হাস্কেল, 112 109 বাইট

import Data.Digits
import Data.Lists
n#x=unDigits 2.take n.(++[0,0..])<$>chunksOf n(tail.digits 2.(+256)=<<x)

ব্যবহারের উদাহরণ: 5 # [102,48,111,66,97,82] -> [12,24,24,6,30,16,19,1,10,8]

কিভাবে এটা কাজ করে

import Data.Digits                  -- needed for base 2 conversion
import Data.Lists                   -- needed for "chunksOf", i.e. splitting in
                                    -- sublists of length n

           (                  =<<x) -- map over the input list and combine the
                                    -- results into a single list:
            tail.digits 2.(+256)    -- convert to base two with exactly 8 digits    
         chunksOf n                 -- split into chunks of length n    
       <$>                          -- convert every chunk (<$> is map)
    take n.(++[0,0..])              -- pad with 0s
unDigits 2                          -- convert from base 2   

2

জাভা, 313 306 322 বাইট

আমি আশা করি এই পিএইচপি মারবে ... এবং না। বোকা দীর্ঘ ফাংশন নাম।

-7 বিভাজনটি ঠিক যখন ত্রুটি ঠিক করা হয়েছিল তখন একটি ত্রুটি ঠিক করতে @quartata জনসাধারণের কাছ থেকে মুক্তি পাওয়ার জন্য ধন্যবাদ, @ দ্য কোডার এটি ধরার জন্য ধন্যবাদ

int[] f(String b,int s){int i=0,o[]=new int[(int)Math.ceil(b.length()*8.0/s)],a=0;String x="",t;for(char c:b.toCharArray()){t=Integer.toString(c,2);while(t.length()<8)t="0"+t;x+=t;a+=8;while(a>=s){o[i++]=Integer.parseInt(x.substring(0,s),2);x=x.substring(s,a);a-=s;}}while(a++<s)x+="0";o[i]=Integer.parseInt(x,2);return o;}

5
আমি মনে করি না আপনাকে ফাংশনটি সর্বজনীন করতে হবে।
একটি স্প্যাগেটো

আপনি এটি জাভার কোন সংস্করণে চালিত করেছেন? এটি সংকলিত
এমপেন

@ এমপেন আহ, ওহফ। আমি ভুলে গেছি, পোস্ট করার আগে আমি এটি আমার কম্পিউটারে পরিবর্তন করেছি। ঠিক করবে.
নীল

@ জ্যাকআ্যাম্মো হ্যাঁ, নিশ্চিত হয়ে গেছে। বোকা ছোট ফোন কীবোর্ড।
নীল

o[]=new int[b.length()*8/s+1]- এটি ভুল আকারটি বরাদ্দ করবে যদি(b.length()*8)%s==0
দ্য কোডার

2

রুবি , 66 বাইট

->s,n{(s.unpack('B*')[0]+?0*~-n).scan(/.{#{n}}/).map{|x|x.to_i 2}}

এটি অনলাইন চেষ্টা করুন!

ইনপুট বাফারটিকে একটি স্ট্রিং হিসাবে নিয়ে যায়, যাতে ছাপ ছাড়াই এড়ানোর জন্য কয়েকটি টেস্ট স্ট্রিং সরাসরি পাদচরণে তৈরি করা হয়েছিল।


2

এমএটিএল , 9 বাইট

8&B!we!XB

এটি অনলাইন চেষ্টা করুন!

ইনপুটটিকে স্ট্রিম bহিসাবে বিস্মৃত করে ''যেমন কমা-বিভাজিত মানগুলির অ্যারে হিসাবে [102, 48, 111]পরে নেয় n

8           # push 8
&B          # implicitly take input b, and use 2-element convert to binary
            # to push a binary matrix of 8 bits
!           # transpose, so each column represents an input
w           # implicitly take input n and swap it with binary matrix to top of stack
e           # reshape into n rows, padding with zeros at end
            # this matrix will have each column as an n-bit integer
!           # transpose, so each row is now the n-bit integer
XB          # convert each row to decimal
            # implicit output

2

পার্ল 5 -nl -MData::Dump=pp , 96 বাইট

$}=$_;pp map{$_=sprintf"%-$}s",$_;y/ /0/;oct"0b$_"}(join'',map{sprintf"%08b",$_}<>)=~m/.{1,$_}/g

এটি অনলাইন চেষ্টা করুন!

প্রয়োজন Data::Dumpমডিউল ।

nইনপুট প্রথম লাইন এবং তার পরে প্রতিটি লাইনে নম্বর নেয় ।

এসটিডিআরআর আউটপুট (টিআইওতে ডিবাগ ক্ষেত্র)।

বিচ্ছিন্ন এবং পরিপাটি:

BEGIN { $/ = "\n"; $\ = "\n"; }
use Data::Dump ( split( /,/, 'pp', 0 ) );
LINE: while ( defined( $_ = readline ARGV ) ) {
    chomp $_;
    $} = $_;
    pp(
        map( {
                $_ = sprintf( "%-$}s", $_ );
                tr/ /0/;
                oct "0b$_";
            } join( '', map( { sprintf '%08b', $_; } readline ARGV ) ) =~
              /.{1,$_}/g )
    );
}

1

পাওয়ারশেল 146 বাইট

param([int[]][char[]]$b,$n)-join($b|%{[convert]::ToString($_,2).PadLeft(8,"0")})-split"(.{$n})"|?{$_}|%{[convert]::ToInt32($_.PadRight($n,"0"),2)}

বাফারটি নিন এবং এটিকে একটি চর অ্যারে এবং তারপরে একটি পূর্ণসংখ্যার অ্যারে রূপান্তর করুন। যারা বাইনারি রূপান্তর করেন তাদের প্রত্যেকের জন্য, যেখানে প্রয়োজন সেখানে 0 টি দিয়ে এন্ট্রিগুলিকে প্যাড করুন এবং একটি বড় স্ট্রিং হিসাবে যোগদান করুন। সেই স্ট্রিংটিকে n টি অক্ষরে বিভক্ত করুন এবং তৈরি হওয়া ফাঁকা স্থানটি ড্রপ করুন। বিভাজন থেকে প্রতিটি উপাদান প্যাড করা হয় (কেবলমাত্র শেষ উপাদানটির এটির প্রয়োজন হবে) এবং পূর্বে পূর্ণসংখ্যায় রূপান্তরিত হয়। আউটপুট একটি অ্যারে হয়


1

পাইথন 3.5 - 312 292 বাইট:

def d(a, b):
    o=[];o+=([str(bin(g)).lstrip('0b')if str(type(g))=="<class 'int'>"else str(bin(ord(g))).lstrip('0b')for g in a]);n=[''.join(o)[i:i+b]for i in range(0,len(''.join(o)),b)];v=[]
    for t in n:
        if len(t)!=b:n[n.index(t)]=str(t)+'0'*(b-len(t))
    v+=([int(str(f),2)for f in n])
    return v

যদিও এটি দীর্ঘ হতে পারে, এটি আমার জ্ঞানের মতে, ত্রুটি ছাড়াই ফাংশন এবং অ্যারে উভয়ই গ্রহণ করার সংক্ষিপ্ততম উপায় এবং এখনও পাইথন 3.5 তে কিছুটা যথার্থতা ধরে রাখতে সক্ষম হওয়া ।


1

জাভা, 253 247 বাইট

Golfed

int i,l,a[];Integer I;String f="";int[]c(String s,int n){for(char c:s.toCharArray())f+=f.format("%08d",I.parseInt(I.toString(c, 2)));while(((l=f.length())%n)>0)f+="0";for(a=new int[l=l/n];i<l;)a[i]=I.parseInt(f.substring(i*n,i++*n+n),2);return a;}

UnGolfed

int i,l,a[];
Integer I;
String f="";
int[]c(String s,int n) {
    for(char c:s.toCharArray())
        f+=f.format("%08d",I.parseInt(I.toString(c,2)));
    while(((l=f.length())%n)>0)
        f+="0";
    for(a=new int[l=l/n];i<l;)
        a[i]=I.parseInt(f.substring(i*n,i++*n+n),2);
    return a;
}

c, 2=> c,2; ((l=f.length())%n)>0=> (l=f.length())%n>0;
জাকারি

1

জেলি , 13 বাইট

+256BḊ€Ẏsz0ZḄ

এটি অনলাইন চেষ্টা করুন!

ডেনিসের উত্তর থেকে আলাদা।

দ্রষ্টব্য: ইনপুটটি আসলে অ-নেতিবাচক পূর্ণসংখ্যার একটি তালিকা, তবে টিআইও লিঙ্কটি আপনার জন্য ব্যথা সহজ করে, এবং এই জাতীয় তালিকা বা স্ট্রিংকে গ্রহণ করে।


1

স্ট্যাক্স , 12 বাইট

è■àåk┘K¥xk└╣

এটি চালান এবং এটি ডিবাগ করুন

এটি চ্যালেঞ্জে উল্লিখিত কোনও ফাংশন নয়, তবে একটি প্রোগ্রাম, যেহেতু স্ট্যাক্স ফাংশন সমর্থন করে না। এটি স্ট্রিং বা অ্যারের লিটারালগুলির ইনপুট সমর্থন করে।




1

এলিক্সির , 63 60 বাইট

&(s=&2-1)&&for<<x::size(&2)<-<<"#{&1}",0::size(s)>> >>,do: x

এটি অনলাইন চেষ্টা করুন!

এলিক্সির বাইনারি হিসাবে ইনপুট নেয়, পূর্ণসংখ্যার একটি তালিকা আউটপুট করে।

এই কোডটি অ্যালিক্সার বিটস্ট্রিং জেনারেটর বোধগম্যতাটিকে &1যুক্তি হিসাবে সরবরাহ করা আকারের বিট ব্লকগুলিতে ইনপুট বাইনারি ছিন্ন করতে ব্যবহার করে &2। শেষে যে কোনও বাকী বিটের জন্য অ্যাকাউন্ট করতে, আমরা বাইনারি &2 - 1শূন্য বিট দিয়ে প্যাড করি । এখানে এমন কিছু জায়গা রয়েছে যেখানে কিছু অযাচিত ভার্বোসটি কিক দেয়: এলিক্সির অভিযোগ করে যদি আমরা স্পষ্টভাবে &1বিটস্ট্রিং হিসাবে ঘোষণা না করি এবং এটি এতে প্রকাশের পক্ষে সমর্থন করে নাsize(...) , সুতরাং অতিরিক্ত পরিবর্তনশীল অ্যাসাইনমেন্টের প্রয়োজন।

ইস্টার ডিম: ফুটার মধ্যে, প্রতিস্থাপন IO.inspectসঙ্গে IO.puts, এবং আমাদের ফাংশন জাদুর ল্যাটিন থেকে চীনা করতে আর্কাইভ "অনুবাদ" - অনলাইনে চেষ্টা করুন!


1

জাপট , 16 বাইট

দীর্ঘ দিন বৈঠকের পরে, মনে হয় আমি কীভাবে গল্ফ করতে ভুলে গেছি! পরে ট্রেনের বাড়িতে এই নিয়ে ঘুরে দেখব, দেখুন কি আমি এটিতে উন্নতি করতে পারি কিনা।

c_¤ùT8ÃòV úTV mÍ

চেষ্টা করে দেখুন


আপনি কি এটি 16 বাইট বলছেন যদি আপনি এটিকে এনকোড করে থাকেন IEC 8859-1? এটা কি আইনী? আপনি একটি ফাঁক খুঁজে পেয়েছেন? তারা কি এটি নির্দিষ্ট করে না যে এটি ইউটিএফ -8 হতে হবে? কারণ এটি ইউটিএফ -8 এর 22 বাইট।
mpen

@ এমপেন 1.প্রতিটি ভাষা তার নিজস্ব এনকোডিং / কোডপেজ ব্যবহারের জন্য বিনামূল্যে। 2.আইএসও -8859-1 হ'ল মোটামুটি মানক এনকোডিং যা বিভিন্ন ভাষায় ব্যবহৃত হয় এবং এটি জাপট বা এই নির্দিষ্ট সমাধানের জন্য নির্দিষ্ট নয়। 3.আপনার অনুমানের বিবরণ নেই যে আমাদের অবশ্যই ইউটিএফ -8 এ গণনা করতে হবে4.যদি এটি হয়ে থাকে তবে আপনি এ থেকে দৃ strongly়ভাবে নিরুৎসাহিত হতেন।
রোমশ

আমি কোনও কিছু চাপিয়ে দেওয়ার চেষ্টা করছি না, আমি কেবল এটি জানতে চেয়েছিলাম যে এটি সাধারণভাবে গৃহীত হয়েছিল কিনা, এবং এটি প্রদর্শিত হয় আপনি ঠিক ঠিক কোডগল্ফ.মেটা.স্ট্যাকেক্সেঞ্জের.com/a/17800/23090 টিআইও স্কোর একইভাবে স্কোর করেছেন, সম্ভবত এটা যোগ্যতা অর্জন করার জন্য একটি সহজ উপায় হতে tio.run/##y0osKPn/Pzn@0JLDO0MsDjcf3hSmcHhXSJhC7uHe//8B সম্পাদন করা 3: উহু আপনার লিঙ্ক প্রায় কাছাকাছি Tio হয়।
mpen

1

পিএইচপি ,135 129 124 বাইট

function($b,$n){foreach($b as$c)$a.=sprintf('%08b',$c);foreach(str_split($a,$n)as$s)$d[]=bindec(str_pad($s,$n,0));return$d;}

এটি অনলাইন চেষ্টা করুন!

একটি ফাংশন হিসাবে প্রয়োগ করা হয়েছে, ইনপুট বাফার ইনটসের একটি অ্যারে এবং ইনটসের অ্যারে প্রদান করে।

আউটপুট

> b = "f0oBaR", n = 5
[12,24,24,6,30,16,19,1,10,8]

> 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]

সমস্ত পরীক্ষার কেস যাচাই করুন


নিস! আমার থেকে বেশ খাটো।
এমপেন

0

এপিএল (এনএআরএস), 471 চর, 942 বাইট

TH←{v←↑⍴⍴⍵⋄v>2:64⋄v=2:32⋄(v=1)∧''≡0↑⍵:20⋄''≡0↑⍵:4⋄v=1:16⋄⍵≢+⍵:8⋄⍵=⌈⍵:2⋄1}
TV←{x←TH¨⍵⋄k←↑x⋄t←↑⍴⍵⋄t=+/x=2:2⋄t=+/x≤2:1⋄(k≤8)∧⍬≡x∼k:k⋄0}
T←{v←↑⍴⍴⍵⋄v>2:64+TV⍵⋄v=2:32+TV⍵⋄(v=1)∧''≡0↑⍵:20⋄''≡0↑⍵:4⋄v=1:16+TV⍵⋄⍵≢+⍵:8⋄⍵=⌈⍵:2⋄1}
RI←{t←T⍵⋄(t≠1)∧(t≠2)∧(t≠17)∧(t≠18):0⋄∧/((1⊃⍺)≤⍵)∧⍵≤(2⊃⍺)}
B←{(8⍴2)⊤⍵}⋄C←{¯1+⎕AV⍳⍵}⋄f←{t←T⍵⋄(0 255 RI⍵)∧18=t:∊B¨⍵⋄(0 255 RI x←C¨⍵)∧20=t:∊B¨x⋄,¯1}⋄W←{((↑⍴⍵)⍴2)⊥⍵}
q←{(∼1 64 RI,⍺)∨2≠T⍺:,¯1⋄x←f⍵⋄¯1=↑x:,¯1⋄t←↑⍴x⋄k←(⍺-m)×0≠m←⍺∣t⋄W⍉((t+k)÷⍺)⍺⍴(((t⍴1),k⍴0)\x)}

মন্তব্য কোড এবং পরীক্ষা:

  ⍝TH⍵ return type its argument
  TH←{v←↑⍴⍴⍵⋄v>2:64⋄v=2:32⋄(v=1)∧''≡0↑⍵:20⋄''≡0↑⍵:4⋄v=1:16⋄⍵≢+⍵:8⋄⍵=⌈⍵:2⋄1}
  ⍝ TV⍵ check if type each element of array ⍵ is the same and basic 
  ⍝ (float(int and float too),int,char,complex) and return its number (or 0 if it is not basic)
  TV←{x←TH¨⍵⋄k←↑x⋄t←↑⍴⍵⋄t=+/x=2:2⋄t=+/x≤2:1⋄(k≤8)∧⍬≡x∼k:k⋄0}
  ⍝ T⍵ return the type of ⍵ [it would be ok if ⍵ is not a function]
  ⍝|1 Float|2 Int|4 Char|8 Complex,Quaternion or Oction|16 List|32 Matrix|64 Tensor
  ⍝|17 List Float|18 List Int|20 List Char=string|etc
  T←{v←↑⍴⍴⍵⋄v>2:64+TV⍵⋄v=2:32+TV⍵⋄(v=1)∧''≡0↑⍵:20⋄''≡0↑⍵:4⋄v=1:16+TV⍵⋄⍵≢+⍵:8⋄⍵=⌈⍵:2⋄1}
  ⍝ ⍺RI⍵ check if the numeric array ⍵ has elements in [1⊃⍺ 2⊃⍺]; if type is not ok return 0(false)
  RI←{t←T⍵⋄(t≠1)∧(t≠2)∧(t≠17)∧(t≠18):0⋄∧/((1⊃⍺)≤⍵)∧⍵≤(2⊃⍺)}

  B←{(8⍴2)⊤⍵}   ⍝ from decimal to binary of element 0..255
  C←{¯1+⎕AV⍳⍵}   ⍝ return the number of char that is in array AV seems the ascii number
  ⍝ f⍵ with ⍵ List int element in 0..255 or String with numeric element 0..255 
  ⍝ return the corrispondence disclosed binary array 
  f←{t←T⍵⋄(0 255 RI⍵)∧18=t:∊B¨⍵⋄(0 255 RI x←C¨⍵)∧20=t:∊B¨x⋄,¯1}
  W←{((↑⍴⍵)⍴2)⊥⍵} ⍝ from list of binary digit to decimal
  ⍝ the function for the exercise
  q←{(∼1 64 RI,⍺)∨2≠T⍺:,¯1⋄x←f⍵⋄¯1=↑x:,¯1⋄t←↑⍴x⋄k←(⍺-m)×0≠m←⍺∣t⋄W⍉((t+k)÷⍺)⍺⍴(((t⍴1),k⍴0)\x)}


  5 q    'f0oBaR'
12 24 24 6 30 16 19 1 10 8 
  50 q "Hello World"
318401791769729 412278856237056 
  1  q 1 2 3 4 5
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 
  32 q "codegolf"
1668244581 1735355494 
  7 q "codegolf"
49 91 108 70 43 29 94 108 51 0 
  8 q 2 31 73 127 179 233
2 31 73 127 179 233 
  64 q 2 31 73 127 179 233
1.529217252E17 
  65 q 2 31 73 127 179 233
¯1 
  0 q 2 31 73 127 179 233
¯1 
  23 q '123'
1612057 4194304 
  23 q '123∞'
¯1 
  23 q '1' 2 3
¯1 
  23 q 2 3.3
¯1 
  23 q 2 
¯1 
  23 q '1'
¯1 
  23 q ,2 
65536 
  23 q ,'1'
1605632 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.