গড় বিট: গড় চ্যালেঞ্জ


30

একটি পূর্ণসংখ্যা N> = 1 দেওয়া, একটি পূর্ণসংখ্যার বিটগুলির গড় সংখ্যা 0 থেকে N - 1 এ আউটপুট করুন

সবিস্তার বিবরণী

  • আউটপুটটি N দ্বারা ভাগ করে প্রতিটি পূর্ণসংখ্যার বাইনারি উপস্থাপনায় বিটের সংখ্যার যোগফল হিসাবে গণনা করা যেতে পারে N
  • বাইনারিতে 0 হিসাবে প্রতিনিধিত্ব করা শূন্য ব্যতীত কোনও পূর্ণসংখ্যার বাইনারি উপস্থাপনার ক্ষেত্রে এই প্রসঙ্গে কোনও অগ্রণী শূন্য নেই has
  • কমপক্ষে 7 টি গুরুত্বপূর্ণ চিত্রের আউটপুট নির্ভুল হওয়া উচিত।

উদাহরণ

এন = 6

0: 0   : 1 bit
1: 1   : 1 bit
2: 10  : 2 bits
3: 11  : 2 bits
4: 100 : 3 bits
5: 101 : 3 bits

বিটগুলির গড় সংখ্যা = (1 + 1 + 2 + 2 + 3 + 3) / 6 = 2

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

ইনপুট => আউটপুট

1 => 1
2 => 1
3 => 1.3333333
4 => 1.5
5 => 1.8
6 => 2
7 => 2.1428571

লিডারবোর্ড স্নিপেট

(থেকে এখানে )

নোট করুন যে যোগফলটি (গড়টি আবিষ্কার করার আগে ভাগ করার আগে) এটি OEIS এর একটি ক্রম


6
সুন্দর নাম, খুব পেনি
Rɪᴋᴇʀ

3
যে কেউ জানেন না তাদের পক্ষে, আমি ব্যাখ্যা দিয়ে সমাধানগুলি আরও
বাড়িয়ে তুলতে পারি

4
পর্যাপ্ত পাংস নয়, পারফেক্ট হওয়ার জন্য আপনার আরও কিছুটা প্রয়োজন ।
ক্লিমেজিক

1
আমি ধরে নিচ্ছি যে "প্রতিটি সংখ্যার" দ্বারা আপনি "প্রতিটি পূর্ণসংখ্যা " বলতে চাচ্ছেন ?
সাইয়াস

@ কিয়েস হ্যাঁ, এটি উল্লেখ করার জন্য আপনাকে ধন্যবাদ - আমি পরিষ্কার করার জন্য সম্পাদনা করেছি।
ট্রাইকোপলাক্স

উত্তর:


13

পাইথ, 6 বাইট

.Oml.B

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

.Oml.BdUQ              Filling in implict vars

.O                     Average of list
 m   UQ                Map over [0..input)
  l                    Length of
   .B                  Binary string representation of int
    d                  Lambda var

যৌথ প্রথম স্থান তবে আপনি লিডারবোর্ডে প্রদর্শন করছেন না - এটি ঠিক করার জন্য আমি হেডারে একটি ছোটখাটো সম্পাদনা করেছি।
ট্রাইকোপলাক্স 25'16


7

অক্টাভা, 29 বাইট

@(n)1+sum(fix(log2(1:n-1)))/n

ব্যাখ্যা

              log2(1:n-1)       % log2 of numbers in range [1..n-1]
                                % why no 0? because log2(0) = -Inf  :/
          fix(           )      % floor (more or less, for positive numbers)
      sum(                )     % sum... wait, didn't we miss a +1 somewhere?
                                % and what about that missing 0?
                           /n   % divide by n for the mean
    1+                          % and add (1/n) for each of the n bit lengths 
                                % (including 0!)

আদর্শের উপর নমুনা রান করুন ।


6

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

def f(n):x=len(bin(n))-2;return(2-2**x)/n+x

OEIS পৃষ্ঠায় সূত্রটি ব্যবহার করে । আশ্চর্যজনকভাবে, একটি অ্যাসাইনমেন্টের কারণে একটি নামকৃত ফাংশনটি এখানে কোনওরকম সস্তা x

46 বাইট জন্য বিকল্প পদ্ধতি:

lambda n:-~sum(map(int.bit_length,range(n)))/n

দুর্ভাগ্যবশত, -~প্রয়োজনীয় যেহেতু (0).bit_length()হয় 0, কিন্তু তারপর এটি অত্যন্ত দীর্ঘ একটি বাইট হবেন।


6

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

n->endof(prod(bin,0:n-1))/n

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

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

যেহেতু *জুলিয়ায় স্ট্রিং কনটেনটেশন prod, তাই স্ট্রিংগুলির একটি অ্যারের সংমিশ্রণে ব্যবহার করা যেতে পারে। এটি যথাযথভাবে "পণ্য" নেওয়ার আগে এটি প্রথম যুক্তির হিসাবে একটি ফাংশন গ্রহণ করে, একইভাবে prod(bin,0:n-1)কাঙ্ক্ষিত পরিসরে সমস্ত সংখ্যার বাইনারি উপস্থাপনার স্ট্রিংও থাকে। দৈর্ঘ্যটি নিয়ে endofএবং n দিয়ে ভাগ করে গড় লাভ হয়।


5

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

n->mean(ceil(log2([2;2:n])))

যেহেতু binস্বয়ংক্রিয়ভাবে অ্যারেগুলিতে মানচিত্র তৈরি হয় না, তাই আমরা ceil(log2(n))বিটের সংখ্যা পেতে ব্যবহার করছি n-1। এটি দুর্দান্তভাবে কাজ করে কারণ জুলিয়ার a:bস্বরলিপি উভয় প্রান্তে অন্তর্ভুক্ত, তাই 2:n2 থেকে শুরু করে একটি পরিসীমাও nআমরা সত্যই পরিসরে সংখ্যাগুলির জন্য বিটের সংখ্যা গণনা করছি 1:n-1। দুর্ভাগ্যক্রমে যদিও, 20 হিসাবে অ্যাকাউন্টে আমাদের অতিরিক্ত মূল্য অর্জন করতে হবে।

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


5

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

q:ZlksG/Q

অনলাইনে চেষ্টা করে দেখুন!

সমস্ত পরীক্ষার ক্ষেত্রে সংশোধিত সংস্করণ

ব্যাখ্যা

    % Implicitly grab input (N)
q:  % Create array from 1:N-1
Zl  % Compute log2 for each element of the array
k   % Round down to the nearest integer
s   % Sum all values in the array
G   % Explicitly grab input again
/   % Divide by the input
Q   % Add 1 to account for 0 in [0, ... N - 1]
    % Implicitly display the result

স্ন্যাপ !! (ফিলার)
ডেভিড

@ ডেভিড প্রকৃতপক্ষে, আপনার সঠিক ছিল। শুরুতে ইনপুটটি সদৃশ করা অন্য মানগুলির জন্য কাজ করে না ... আপনার G/Qশেষে থাকা দরকার ।
বেকার


5

জেলি, 8 বাইট

খাটো নয়, তবে আকর্ষণীয় অ্যালগরিদম এবং আমার প্রথম জেলি জমা দেওয়া:

Rl2Ċ»1S÷

R         1 to n
 l2       log2
   Ċ      ceiling
    »1    max of 1 and...
      S   sum
       ÷  divided by n

4

জেলি, 10 বাইট

BL©2*2_÷+®

Sp3000 এর পরামর্শ থেকে।

এখানে চেষ্টা করুন।

জেলি, 11 বাইট

æḟ2’Ḥ÷_BL$N

খুব ছোট নয় তবে আমার কিছু টিপস দরকার।

এখানে চেষ্টা করুন।

Sp3000 এর উত্তরের মতো একই সূত্র ব্যবহার করা । (জ্যামিতিক অগ্রগতির পার্থক্য করে এটি নিজের পক্ষে পাওয়া খুব কঠিন নয়))


আমার জেলি উত্তর আপনার অবগতির জন্য।
লিকি নুন

@ ল্যাকিয়ুন এটি একটি ভিন্ন পদ্ধতির ব্যবহার করছে, যা আমি মনে করি না যে এটি আপনার চেয়ে কম কখনও হবে। তবে _BL$Nবেশ দীর্ঘ মনে হয়েছিল ...
জিমি 23013

সুতরাং মূলত, আপনার কোডটি "ফ্লোর থেকে নিকটতম পাওয়ার 2, বিয়োগ 1, ডাবল, ইনপুট দ্বারা বিভাজন, ইনপুট বিয়োগের বাইনারি দৈর্ঘ্য, নেতিবাচক"?
লিকি নুন

@ লিকিউন হ্যাঁ ..
জিমি 23013

3
কেবলমাত্র প্রান্তিকরূপে উন্নত:BL©2*2_÷+®
Sp3000

4

জাভা, 135 95 90 বাইট

float a(int n){int i=0,t=0;for(;i<n;)t+=Integer.toString(i++,2).length();return t/(n+0f);}

আমি মনে করি আপনি ইন্টারফেস থেকে মুক্তি পেতে পারেন এবং কেবল একটি ফাংশন বা ল্যাম্বদা তৈরি করতে পারেন। এছাড়াও আপনি
স্টাডাউটে

ঠিক আছে, আমি সেই নিয়মগুলি আবার প্রয়োগ করব।
শন ওয়াইল্ড

আমি মনে করি এটি অনুমতি দেওয়া উচিত। ওপি কোনও নির্দিষ্ট করে না বলে আমার ধারণা স্ট্যান্ডার্ড আই / ও বিধিগুলি প্রযোজ্য।
ফ্রিজড

হ্যাঁ একটি ফাংশন ঠিক আছে - আপনার একটি সম্পূর্ণ প্রোগ্রামের দরকার নেই। নোট যে প্রথম লাইনে স্কোর আপ লিডারবোর্ডে অকার্যকর, তাই আপনার স্কোর বর্তমানে শো হিসাবে 135 পরিবর্তে 95.
trichoplax

পছন্দ করুন আমি ব্যক্তিগতভাবে জাভাকে দোষ দিই ...
শন ওয়াইল্ড

3

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

lambda x:sum(len(bin(i))-2for i in range(x))/x

এটিকে কল করুন

f = lambda x: sum(len(bin(i))-2for i in range(x))/x
print(f(6))
# 2.0

আমাকে মানচিত্রের পুনর্বিবেচনাটি ফিরিয়ে আনতে হয়েছিল কারণ এটি 5 এর ইনপুটটির জন্য ব্যর্থ হয়েছিল


3

05AB1E, 9 7 বাইট

কোড:

L<bJg¹/

ব্যাখ্যা:

L<         # range from 0..input-1
  b        # convert numbers to binary
   J       # join list of binary numbers into a string
    g      # get length of string (number of bits)
     ¹/    # divide by input

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

সম্পাদনা: @ আদনানকে ধন্যবাদ 2 বাইট সংরক্ষণ


@ আদনান: ধন্যবাদ! জে সম্পর্কে ভুলে গেছেন
এমিগিনা

3

সি #, 87 বাইট

double f(int n){return Enumerable.Range(0,n).Average(i=>Convert.ToString(i,2).Length);}

আমি একটি সি # উত্তর লিখেছিলাম কারণ আমি একটিও দেখিনি। এটি এর মধ্যে একটিতে এটি আমার প্রথম পোস্ট, সুতরাং আমি কোনও ভুল করছি কিনা তা দয়া করে আমাকে জানান।


প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম। এটি একটি দুর্দান্ত প্রথম উত্তর, +1। আপনি একটি বাইট সংরক্ষণ করতে পরিবর্তন doubleকরতে floatপারেন, বা আপনার নির্ভুলতা প্রয়োজন?
wizzwizz4

2
@ wizzwizz4 ধন্যবাদ! আমারও একই চিন্তা ছিল, কিন্তু গড় () একটি দ্বিগুণ ফেরত দেয়। আমি যদি আমার রিটার্নের ধরনটি ফ্লোটে পরিবর্তন করি তবে আমাকে স্পষ্টভাবে ডাবলটি কাস্ট করতে হবে এবং তাতে 7 বাইট অর্জন করতে হবে।
রেইভ করুন

2

জাভাস্ক্রিপ্ট (ES7), 38 32 বাইট

n=>(l=-~Math.log2(n))-(2**l-2)/n

@ Sp3000 এর সূত্র ব্যবহার (পূর্ববর্তী সংস্করণটি পুনরাবৃত্ত সমাধান)) 34 বাইটের জন্য ES6 সংস্করণ:

n=>(l=-~Math.log2(n))-((1<<l)-2)/n

সূত্রের ব্যাখ্যা: এন = 55 এর ক্ষেত্রে বিবেচনা করুন। যদি আমরা বাইনারি সংখ্যাগুলি লিখি (স্থান সংরক্ষণের জন্য উল্লম্বভাবে), আমরা পাই:

                                11111111111111111111111
                111111111111111100000000000000001111111
        11111111000000001111111100000000111111110000000
    111100001111000011110000111100001111000011110000111
  11001100110011001100110011001100110011001100110011001
0101010101010101010101010101010101010101010101010101010

এই আয়তক্ষেত্রটির আকার nl তাই গড় মাত্র l তবে আমাদের খালিগুলি বাদ দিতে হবে। ফাঁকা প্রতিটি সারি পূর্ববর্তী দ্বিগুণ দীর্ঘ তাই মোট 2 + 4 + 8 + 16 + 32 = 64 - 2 = 2 l - 2।


2

জে, 21 17 15 বাইট

@ ডেনিসকে 17 বাইট থেকে 15 বাইট পর্যন্ত ধন্যবাদ।

+/@:%~#@#:"0@i.

কেউ আমাকে এই গল্ফ সাহায্য করতে পারেন? ...

উদার সংস্করণ

range        =: i.
length       =: #
binary       =: #:
sum          =: +/
divide       =: %
itself       =: ~
of           =: @
ofall        =: @:
binarylength =: length of binary "0
average      =: sum ofall divide itself
f            =: average binarylength of range

আমি একটি বিকল্প পদ্ধতির চেষ্টা করেছি, বাইনারি সংখ্যাসমূহ তালিকা stringifying দ্বারা, এবং 25 বাইট সঙ্গে বের হয়ে এল %~>:@#@([:":10#.[:#:i.)-]। আপনার সমাধানটি বরং সর্বোত্তম দেখাচ্ছে।
কনর ও'ব্রায়েন

2

পার্ল 6 ,  34  32 বাইট

{$_ R/[+] map *.base(2).chars,^$_}

{$_ R/[+] map {(.msb||0)+1},^$_}

ব্যাখ্যা:

{ 
  $_  # the input
  R/  # divides ( 「$a R/ $b」 is the same as 「$b / $a」 )
  [+] # the sum of:
  map
    {
      (
       .msb # the most significant digit (0 based)
       || 0 # which returns Nil for 「0.msb」 so use 0 instead
            # should be 「(.msb//0)」 but the highlighting gets it wrong
            # it still works because it has the same end result 
      ) 
      + 1   # make it 1 based
    },
    ^$_ # 「0 ..^ $_」 all the numbers up to the input, excluding the input
}

টেস্ট:

use v6.c;

# give it a name
my &mean-bits = {$_ R/[+] map {(.msb||0)+1},^$_}

for 1..7 {
  say .&mean-bits
}

say '';

say mean-bits(7).perl;
say mean-bits(7).base-repeating(10);
1
1
1.333333
1.5
1.8
2
2.142857

<15/7>
(2. 142857)


2

ক্লোজার, 71 64 63 বাইট

দেখে মনে হচ্ছে অনুপাত ঠিক আছে ঠিক আছে অনুসারে আউটপুটে কোন সংখ্যক ফর্ম্যাট গ্রহণযোগ্য?

(fn[n](/(inc(apply +(map #(.bitLength(bigint %))(range n))))n))

  • n = 1 => 1
  • n = 7 => 15/7

অরগোল্ফড (এবং ব্যাখ্যা সহজ করার জন্য কিছুটা নতুন করে লেখা)

(fn [n]
 (->
  (->>
   (range n)                      ;;Get numbers from 0 to N
   (map #(.bitLength (bigint %))) ;;Cast numbers to BigInt so bitLength can be used
   (apply +)                      ;;Sum the results of the mapping
   (inc))                         ;;Increment by 1 since bitLength of 0 is 0
  (/ n)))                         ;;Divide the sum by N

পুরানো উত্তর যা ব্যবহৃত হয়েছিল (ভাসা):

(fn[n](float(/(inc(apply +(map #(..(bigint %)bitLength)(range n))))n)))

আউটপুট যেমন:

  • n = 1 => 1.0
  • n = 7 => 2.142857

ভগ্নাংশ বা অনুপাত গ্রহণযোগ্য কিনা এই প্রশ্নটি আগে উত্থাপিত হয়নি। এই চ্যালেঞ্জের জন্য আমি ডিফল্টটি কী হওয়া উচিত সে বিষয়ে যা কিছু sensক্যমত্য হয়েছে তা মেনে নেব ।
ট্রাইকোপল্যাক্স

1

মিনকোলাং 0.15 , 23 বাইট

n$z1z[i1+2l$M$Y+]kz$:N.

এখানে চেষ্টা করুন!

ব্যাখ্যা

n$z                       Take number from input and store it in register (n)
   1                      Push 1 onto the stack
    z[                    For loop that repeats n times
      i1+                 Loop counter + 1
         2l$M             log_2
             $Y           Ceiling
               +          Add top two elements of stack
                ]         Close for loop
                 z$:      Float divide by n
                    N.    Output as number and stop.

বেশ সোজা কার্যকর বাস্তবায়ন।


1

জাভাস্ক্রিপ্ট ইএস 5, 55 বাইট

n=>eval(`for(o=0,p=n;n--;o+=n.toString(2).length/p);o`)

ব্যাখ্যা

n =>   // anonymous function w/ arg `n`
  for( // loop
      o=0,  // initalize bit counter to zero
      p=n   // copy the input
    ;n-- // will decrease input every iteration, will decrease until it's zero
    ;o+=    // add to the bitcounter
        n.toString(2)  // the binary representation of the current itearations's
                     .length // length
        /p   // divided by input copy (to avergage)
   );o       // return o variable  

1

হুন , 71 বাইট

|=
r/@
(^div (sun (roll (turn (gulf 0 (dec r)) xeb) add)) (sun r)):.^rq

... আমি পুরোপুরি নিশ্চিত যে এটি হুনের ভাসমান পয়েন্ট কোরগুলি আমিই প্রথম ব্যবহার করেছি। এটি হুনে লেখা একটি বাস্তবায়ন যা সফটফ্লোয়েট থেকে বেরিয়ে আসে, যেহেতু হুনের একমাত্র ডেটা টাইপগুলি পরমাণু এবং কোষ।

একটি ফাংশন তৈরি করুন যা পরমাণু লাগে r,। [0 .. (আর - 1)] থেকে একটি তালিকা তৈরি করুন, সংখ্যাটির বাইনারি লোগারিদম নিয়ে তালিকার উপরে মানচিত্র করুন, তারপরে সেই তালিকাটির সাথে ভাঁজ করুন ++add। ভাঁজ এবং উভয় আউটপুট রূপান্তর rকরতে @rqসঙ্গে (কোয়াড-স্পষ্টতা ফ্লোটিং পয়েন্ট নম্বর)++sun:rq , এবং তারপর অন্য এক ভাগ।

এই স্নিপেটের মধ্যে বিজোড় জিনিসটির :.^rqশেষে রয়েছে। a:bহুন মানে "খ এর প্রসঙ্গে একটিকে মূল্যায়ন করুন"। ++rqগ্রন্থাগারটির মতো পুরো কোয়াড-নির্ভুল বাস্তবায়নটি এমন কোরটি রয়েছে। তাই দৌড়াদৌড়ি (sun 5):rqকরা একই কাজ (sun:rq 5)

ভাগ্যক্রমে, হুনের কোরগুলি নীড়ের পুতুলের মতো; আপনি যখন ++rqকর্ণটি পেতে বাহুটি মূল্যায়ন করেন , এটি এটিতে পুরো স্টডিলিবও যুক্ত করে, তাই আপনি কেবল রক্ষিত বাহুতে আটকে থাকার পরিবর্তে রোল এবং টার্ন এবং গাল্ফ এবং সমস্ত মজাদার জিনিস রাখতে পারেন ++rq। দুর্ভাগ্যক্রমে, আরকিউ এর ++addপরিবর্তে ভাসমান-পয়েন্ট যুক্ত হওয়ার পরিবর্তে rএর প্রসঙ্গে না থাকার জন্য নতুন সংজ্ঞা দেয়। .(পুরো বর্তমান প্রেক্ষাপট) অবশ্য করে।

কোনও প্রসঙ্গে কোনও অভিব্যক্তি মূল্যায়ন করার সময়, সংকলকটি অঙ্গ-প্রত্যঙ্গ গভীরতার জন্য অনুসন্ধান করে। আমাদের ক্ষেত্রে a:[. rq]এটি সন্ধানের দিকে aএগিয়ে যাওয়ার আগে পুরো বর্তমান প্রসঙ্গে দেখা উচিত rq। সুতরাং addফ্লোটিং-পয়েন্ট সংখ্যাগুলির পরিবর্তে অণুগুলিতে কাজ করা ফাংশনটি সন্ধান করা হবে ... তবে তা হবে div। হুনের একটি বৈশিষ্ট্যও রয়েছে যেখানে ব্যবহারের ^nameফলে প্রথম পাওয়া রেফারেন্স উপেক্ষা করা হবে এবং দ্বিতীয়টির সন্ধান করা হবে।

সেখান থেকে, এটি কেবল আমাদের বর্তমান প্রসঙ্গ এবং কোয়াড-নির্ভুলতা ভাসমান গ্রন্থাগার উভয়ের সাথে আমাদের স্নিপেটকে মূল্যায়ন a^bকরতে সমান হওয়ার সিনট্যাটিক চিনি ব্যবহার করছে, তার পক্ষে পারমাণবিক ডিভ [a b]উপেক্ষা করে ++div:rq

> %.  7
  |=
  r/@
  (^div (sun (roll (turn (gulf 0 (dec r)) xeb) add)) (sun r)):.^rq
.~~~2.1428571428571428571428571428571428

1

আসলে, 7 বাইট:

;r♂├Σl/

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

ব্যাখ্যা:

;r♂├Σl/
;        duplicate input
 r       push range(0, n) ([0, n-1])
  ♂├     map binary representation
    Σ    sum (concatenate strings)
     l/  divide length of string (total # of bits) by n

আমি এটি সন্ধান করেছি এমন বাগের জন্য না হলে এই সমাধানটি 6 বাইটের জন্য কাজ করবে:

r♂├♂læ

æ হ'ল বিল্টিন মানে কমান্ড


এই 10 বাইট না? আমি bytesizematters.com এ চেক করেছি।
এম 654

1
@ m654 আসলে ইউটিএফ -8 ব্যবহার করে না, এটি সিপি 437 ব্যবহার করে (বা এর মতো কিছু)।
অ্যালেক্স এ।

@AlexA। ওহ, এটি জানতেন না।
এম 654

1
@ এম 654 বাইটসাইজমেটারগুলি সম্পূর্ণরূপে তৈরি আপ এনকোডিং ব্যবহার করে যা অনুশীলনে বিদ্যমান (এবং না ) থাকতে পারে। ইউটিএফ -8 এর জন্য, মোটেরেফ.ইন / বাইট- কাউন্টার ব্যবহার করুন
ডেনিস

@ ডেনিস এই তথ্যের জন্য ধন্যবাদ, আমি এটি মনে রাখব।
এম 654


1

পাওয়ারশেল ভি 2 +, 64 বাইট

param($n)0..($n-1)|%{$o+=[convert]::ToString($_,2).Length};$o/$n

অনুমানটির খুব সরল বাস্তবায়ন। থেকে loops 0করার $n-1সঙ্গে |%{...}। প্রতিটি পুনরাবৃত্তি, আমরা একটি স্ট্রিং বেস [convert]আমাদের ইনপুট নম্বর$_2 এবং এটি গ্রহণ length। আমরা যে জমে $o। লুপগুলির পরে, আমরা কেবল $o/$nপাইপলাইনে রেখে ভাগ করে দেই এবং আউটপুট অন্তর্ভুক্ত।

যতক্ষণ না এটি রয়েছে, এসপি এবং অন্যরা যে সূত্রটি ব্যবহার করছেন, তার থেকে এটি আসলে খাটো [math]::Ceiling()এবং [math]::Log()হাস্যকরভাবে শব্দযুক্ত। পাওয়ারশেলে বেস রূপান্তরটি ইয়্কি।



1

সিজেম, 13 12 11 বাইট

একটি বাইট @ Sp3000 কে এবং অন্য একটি ধন্যবাদ @ জিমি 23013 সংরক্ষণ করেছে

rd_,2fbs,\/

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

ব্যাখ্যা

সহজবোধ্য। সংজ্ঞা প্রয়োগ করে।

rd      e# read input and convert to double 
_       e# duplicate 
,       e# range from 0 to input minus 1
2fb     e# convert each element of the array to binary 
s       e# convert to string. This flattens the array
,       e# length of array 
\       e# swap 
/       e# divide 


1

সুইফট, 72 বাইট

func f(n:Double)->Double{return n<1 ?1:f(n-1)+1+floor(log2(n))}
f(N-1)/N

2
আপনাকে ফাংশনটি কল করার দরকার নেই, এটি একটি সংজ্ঞায়িত ফাংশন হিসাবে রেখে দেওয়া ঠিক আছে। সুন্দর প্রথম পোস্ট।
Rɪᴋᴇʀ

1

জে, 15 বাইট

%~[:+/#@#:"0@i.

এটি একটি monadic ক্রিয়া, নিম্নলিখিত হিসাবে ব্যবহৃত:

   f =: %~[:+/#@#:"0@i.
   f 7
2.14286

এখানে চেষ্টা করুন!

ব্যাখ্যা

আমি চ্যালেঞ্জটি বেশ কার্যকরভাবে আক্ষরিকভাবে প্রয়োগ করেছি। অন্যান্য পন্থাগুলি রয়েছে তবে সমস্তগুলি দীর্ঘতর হতে পারে।

%~[:+/#@#:"0@i.  Input is y
             i.  Range from 0 to y-1.
          "0@    For each number in this range:
      #@           Compute the length of
        #:         its base-2 representation.
  [:+/           Take the sum of the lengths, and
%~               divide by y.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.