পরিসীমা গণনা


20

চ্যালেঞ্জ:

1একটি পরিসরের মধ্যে সমস্ত সংখ্যার বাইনারি উপস্থাপনায় এর সংখ্যা গণনা করুন ।


ইনপুট :

দুটি অ দশমিক ধনাত্মক পূর্ণসংখ্যা


আউটপুট:

1দুটি সংখ্যার মধ্যে ব্যাপ্তির মধ্যে সমস্ত গুলির যোগফল ।


উদাহরণ:

4 , 7        ---> 8
4  = 100 (adds one)   = 1
5  = 101 (adds two)   = 3
6  = 110 (adds two)   = 5
7  = 111 (adds three) = 8

10 , 20     ---> 27
100 , 200   ---> 419
1 , 3       ---> 4
1 , 2       ---> 2
1000, 2000  ---> 5938

আমি কেবল প্রথম উদাহরণটি ব্যাখ্যা করেছি অন্যথায় যদি আমি তাদের সবার জন্য ব্যাখ্যা করার চেষ্টা করি তবে এটি বিশাল পরিমাণ স্থান গ্রহণ করতে পারে।


বিঃদ্রঃ :

  • সংখ্যাগুলি 1000 এরও বেশি আলাদা হতে পারে
  • সমস্ত ইনপুট বৈধ হবে।
  • সর্বনিম্ন আউটপুট এক হবে।
  • আপনি দুটি উপাদানের অ্যারে হিসাবে নম্বর গ্রহণ করতে পারেন।
  • নম্বরগুলি অর্ডার করা হয় তা আপনি চয়ন করতে পারেন।

জয়ের মানদণ্ড:

এটি তাই প্রতিটি ভাষার জয়ের জন্য বাইটের মধ্যে সংক্ষিপ্ততম কোড।



1
আমরা কি IntRangeইনপুটটিকে কিছু ধরণের রেঞ্জের ধরণের হিসাবে নিতে পারি ( কোটলিনে, Rangeরুবিতে)?
শামুক_

মজার বিষয়: কেস 1000 - 2000উৎপাদ 5938 কিন্তু 1000 দ্বারা কেস নীচু, ফলে এছাড়াও 1000 দ্বারা ড্রপ: 0-1000 = 4938প্রুফ
স্টেইনবার্গ

উত্তর:


9

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

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (a)(b)

a=>b=>(g=c=>a>b?0:1+g(c^c&-c||++a))(a)

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

মন্তব্য

a => b => (         // given the input values a and b
  g = c =>          // g = recursive function taking c = current value
    a > b ?         // if a is greater than b:
      0             //   stop recursion and return 0
    :               // else:
      1 +           //   add 1 to the final result
      g(            //   and do a recursive call to g() with:
        c ^ c & -c  //     the current value with the least significant bit thrown away
        || ++a      //     or the next value in the range if the above result is 0
      )             //   end of recursive call
)(a)                // initial call to g() with c = a


5

জাভা (জেডিকে 10) , 55 বাইট

a->b->{int c=0;for(;a<=b;)c+=a.bitCount(b--);return c;}

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


IntStream.range(a,b+1).map(Integer::bitCount).sum()
saka1029

@ saka1029 আমদানিগুলি বাধ্যতামূলক। সুতরাং এটি আসলে a->b->java.util.stream.IntStream.range(a,b+1).map(Integer::bitCount).sum()74৪ বাইটের জন্য। আমদানি বাধ্যতামূলক না হলেও, প্যারামিটারগুলি হ'ল, তাই আমাদের লিখতে হবে a->b->IntStream.range(a,b+1).map(Integer::bitCount).sum(), যা 57 বাইট হিসাবে গণনা করা হয়েছে
অলিভিয়ার গ্রাগোয়ার

আপনার a->b->IntStream.range(a,b+1).map(Long::bitCount).sum()1 বাইট উন্নতিও হতে পারে । প্রান্তিক, কিন্তু এখনও একটি।
নোটবাল

@ নটবয়াল উপরের মন্তব্যে অলিভিয়ার যেমন উল্লেখ করেছেন, আমদানি বাধ্যতামূলক, সুতরাং এটি হওয়া উচিত a->b->java.util.stream.IntStream.range(a,b+1).map(Long::bitCount).sum()( by১ বাইট)।
কেভিন ক্রুইজসেন




4

আর , 41 34 বাইট

function(a,b)sum(intToBits(a:b)>0)

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

এনজিএম দ্বারা অন্য আর সমাধান দ্বারা ভারীভাবে অনুপ্রাণিত । এটি বিটগুলিতে রূপান্তরের পরে একটি ভিন্ন পদ্ধতির ব্যবহার করে। সম্ভাব্য 34 বাইট সমাধানে ইঙ্গিত দেওয়ার জন্য জিউস্প্পিকে প্রচুর ধন্যবাদ।


34 বাইট সম্ভব! আমি ভুলে গিয়েছি যেখানে আমি কৌতুকটি দেখেছি (আমি জানি আমি sumএটিটি নিয়ে আসিনি) তবে একটি মার্বেল ভেক্টরটিতে একটি ট্রিকায়ার রূপান্তর রয়েছে - আপনি / এনজিএম এটি না পেলে আমি পোস্ট করব।
জিউসেপে

@ জিউসপ্পে আসলেই!
জয়সি

2
আমি এটি একটি কৌশল ব্যবহার করে এটি 37 বাইটে নামিয়েছি যা অন্যথায় কার্যকর হতে পারে। এটি এটি আবিষ্কার করেছে sdএবং varদ্বিগুণ করতে তারা যে কোনও কিছু করতে বাধ্য করে।
এনজিএম

আপনি pryr::f4 টি বাইট সংরক্ষণ করতে ব্যবহার করতে পারেন : tio.run/##K/qfZvu/…
pajonk

@ পাজোনক ভালো পয়েন্ট! তবে আমি আর + পিএসআর এর পরিবর্তে বেস আর প্যাকেজগুলিতে লেগে থাকার চেষ্টা করছি। আমি কী "খাঁটি আর" হিসাবে বিবেচনা করা যেতে পারে তা মেটাতে অনুসন্ধান করতে যাচ্ছি।
জয়সি

3

জেলি , 4 বাইট

rBFS

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

ব্যাখ্যা

আরবিএফএস - সম্পূর্ণ প্রোগ্রাম। কমান্ড লাইন আর্গুমেন্ট থেকে দুটি ইনপুট নেয়।
r - ব্যাপ্তি।
 বি - প্রতিটি জন্য, বাইনারি রূপান্তর।
  এফএস - সমতল এবং যোগফল।

ও_ও, তাড়াতাড়ি ছিল?
মুহাম্মদ সালমান

@ মুহাম্মাদসালমন ভাল, চ্যালেঞ্জটিও একধরনের তুচ্ছ আইএমও।
মিঃ এক্সকোডার

এটি হতে পারে তবে পোস্ট করার এক মিনিট পরে উত্তর।
মুহাম্মদ সালমান

1
@ মুহাম্মাদসালমান হ্যাঁ, এটি এর মতো তুচ্ছ চ্যালেঞ্জের পক্ষে সত্যই দ্রুত নয়; জেলি জ্ঞান এছাড়াও নিশ্চিত। আসল প্রচেষ্টাটি যেমন এই মাসের ভাষা, কিউব্যাসিক। ;-)
এরিক দি আউটগল্ফার

@ এরিকথ আউটগলফার: কিউ বেসিক / ব্রেইনএফ ** কে আপনি উত্তর দিতে পারবেন?
মুহাম্মদ সালমান





2

বাশ + সাধারণ ইউটিলিটিস, 50

jot -w%o - $@|tr 247356 1132|fold -1|paste -sd+|bc

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

বাইনারি স্ট্রিংগুলিতে পূর্ণসংখ্যাকে রূপান্তর করা ব্যাশে সবসময় কিছুটা ব্যথা হয়। এখানে দৃষ্টিভঙ্গিটি কিছুটা আলাদা - পূর্ণসংখ্যকে অক্টালে রূপান্তর করুন, তারপরে প্রতিটি অষ্টাল অঙ্কটি এতে থাকা বাইনারি 1 এর সংখ্যার সাথে প্রতিস্থাপন করুন। তারপরে আমরা সমস্ত রূপান্তরিত অঙ্কগুলি যোগ করতে পারি


2

এপিএল + উইন, 33 26 বাইট

পূর্ণসংখ্যার ভেক্টরের জন্য অনুরোধ:

+/,((↑v)⍴2)⊤(1↓v)+0,⍳-/v←⎕

এটি অনলাইন চেষ্টা করুন! সৌজন্যে ডালগ ক্লাসিক

ব্যাখ্যা:

v←⎕ prompt for input of a vector of two integers max first

(v←1↓v)+0,⍳-/ create a vector of integers from min to max

(↑v)⍴2 set max power of 2 to max 

⊤ convert integers to a matrix of binaries

+/, convert matrix to a vector and sum


2

যোগাযোগ সরঞ্জামবক্স, 21 বাইট সহ অক্টেভ

@(a,b)nnz(de2bi(a:b))

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

কোডটি মোটামুটি সুস্পষ্ট হওয়া উচিত। পরিসরের প্রতিটি সংখ্যার বাইনারি উপস্থাপনায় ননজারো উপাদানগুলির সংখ্যা।

এটি @(a,b)nnz(dec2bin(a:b)-48)যোগাযোগ সরঞ্জামবক্স ছাড়াই হবে ।




1

পিএইচপি, 97 বাইট

(নিশ্চিত যে এটি সংক্ষিপ্ত করা যেতে পারে, তবে ফাংশনগুলি ব্যবহার করতে চেয়েছিল)

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

কোড

<?=substr_count(implode(array_map(function($v){return decbin($v);},
 range($argv[0],$argv[1]))),1);

ব্যাখ্যা

<?=
 substr_count(   //Implode the array and count every "1"
  implode(
    array_map(function($v){return decbin($v);}, //Transform every decimal to bin
          range($argv[0],$argv[1])   //generate a range between the arguments
     )
),1);   //count "1"'s

এটা আপনি ঠিক কি করতে পারেন বলে মনে হয় এই
dzaima

এক সেকেন্ডের জন্য আমি একেবারে ভুলে গেছি যে আপনি পিএইচপি ফাংশনের নামটি সরাসরি প্যারামিটার হিসাবে সেট করতে পারেন :-(
ফ্রান্সিসকো হান

$argv[0]প্রোগ্রামের নাম বা "-"; আপনার সাথে কাজ করা উচিত $argv[1]এবং $argv[2]। এবং আপনি এর joinপরিবর্তে এটি implode68 বাইটে সংক্ষেপে ব্যবহার করতে পারেন :<?=substr_count(join(array_map(decbin,range($argv[1],$argv[2]))),1);
টাইটাস

1

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

param($x,$y)$x..$y|%{$o+=([convert]::ToString($_,2)-replace0).length};$o

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

বাইনারি রূপান্তর [convert]::ToString($_,2)এবং জিরো থেকে মুক্তি পাওয়ার কারণে দীর্ঘ -replace0। অন্যথায় আমরা কেবল ইনপুট নম্বরগুলি নিয়ে যাই, একটি পরিসীমা তৈরি করি $x..$yএবং পরিসরের প্রতিটি সংখ্যার জন্য এটি বাইনারিতে রূপান্তরিত করে, শূন্যগুলি সরিয়ে ফেলুন, এর .length(যেমন, $oঅবশিষ্টগুলির সংখ্যা) নিয়ে যান এবং আমাদের উতপুটে যুক্ত করুন।


countপরিবর্তে ব্যবহার করার চেষ্টা করুন length:)
mazzy

1
@ ম্যামজি countসর্বদা থাকবে 1কারণ আমরা lengthএকটি অ্যারের নয়, একটি স্ট্রিংয়ের গণনা করছি ।
অ্যাডমবর্কবার্ক

স্ট্রিং! তুমি ঠিক. ধন্যবাদ। -replace0স্মার্ট.
mazzy






1

বাশ + কোর্টিলস, 38 32 বাইট

seq -f2o%.fn $*|dc|tr -d 0|wc -c

6 বাইট বন্ধ করার জন্য @ কউসকেউকে ধন্যবাদ!

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


ভাল পদ্ধতির, আপনি 6 বাইট শেভ করতে ডিসি ব্যবহার করতে পারেন, seq -f2o%fp $*|dc|tr -cd 1|wc -c
ক্রিটসি লিথোস

1

কে (এনএনজি / কে) , 19 13 বাইট

{+//2\x_!1+y}

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

{ }আর্গুমেন্ট xএবং সঙ্গে একটি ফাংশনy

!1+y তালিকাটি 0 1 ... y

x_ প্রথম এক্স উপাদানগুলি ড্রপ করে

2\ একই দৈর্ঘ্যের বাইনারি অঙ্কের তালিকা হিসাবে প্রতিটি int এনকোড করে (এটি এনএনজি / কে-তে নির্দিষ্ট)

+/ সমষ্টি

+//একত্রিত হওয়া অবধি; এই ক্ষেত্রে সমস্ত বাইনারি সংখ্যা তালিকার যোগফলের যোগফল


1

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

-1 বাইট ব্র্যাড গিলবার্টকে ধন্যবাদ

{[…](@_)>>.base(2).comb.sum}

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

ব্যাখ্যা:

[…](@_)    #Range of parameter 1 to parameter 2
       >>    #Map each number to
                      .sum  #The sum of
                 .comb      #The string of
         .base(2)    #The binary form of the number

1
আপনি যদি এর [...](@_)পরিবর্তে ব্যবহার করেন তবে এটি একটি বাইট দ্বারা হ্রাস করতে পারবেন($^a..$^b)
ব্র্যাড গিলবার্ট বি

1

জে , 16, 15 14 বাইট

ফ্রাউনফ্রোগের জন্য 1 বাইট সংরক্ষণ করা হয়েছে!

+/@,@#:@}.i.,]

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

ব্যাখ্যা:

একটি ডায়াডিক ক্রিয়া, বাম আর্গুমেন্টটি mরেঞ্জের নীচের সীমানা , ডান এক - উপরের n

            ,    append                      
             ]   n to the
          i.     list 0..n-1
         }.      drop m elements from the beginning of that list 
      #:@        and convert each element to binary 
    ,@           and flatten the table
 +/@             and find the sum

আপনি 14 করতে পারেন?
ফ্রাউনফ্রগ

@ ফ্রাউনফ্রোগ আমি আজ পরে চেষ্টা করব (সম্ভবত এটি সম্ভব, যেহেতু আপনি জিজ্ঞাসা করছেন :))
গ্যালেন ইভানভ

@ ফ্রভনিফ্রাগ আপাতত 15 , আমি এখনও চেষ্টা করছি ...
গ্যালেন ইভানোভ


পছন্দ করুন আমি ভাবছিলাম }.তবে সবসময় কাঁটাচামচে থাকি না একটি হুকের উপরে। ধন্যবাদ!
গ্যালেন ইভানভ

1

কিউবাসিক, 95 93 83 82 বাইট

@DLosc আমাকে কিছু বাঁচিয়েছে বাইট !

এই কৌশলটি ব্যবহার করে অন্য একটি বাইট সংরক্ষণ করেছেন !

INPUT a,b
FOR i=a TO b
k=i
FOR j=i TO 0STEP-1
x=k>=2^j
s=s-x
k=k+x*2^j
NEXT j,i
?s

এফটিডাব্লু মাসের ভাষা!

ব্যাখ্যা

INPUT a,b           Ask user for lower and upper bound
FOR i=a TO b        Loop through that range
k=i                 we need a copy of i to not break the FOR loop
FOR j=i TO 0STEP-1  We're gonna loop through exponents of 2 from high to low.
                    Setting the first test up for 4 to 2^4 (etc) we know we're overshooting, but that 's OK
x=k>=2^j            Test if the current power of 2 is equal to or smaller than k 
                    (yields 0 for false and -1 for true)
s=s-x               If k is bigger than 2^j, we found a 1, so add 1 to our running total s
                    (or sub -1 from the total s...)
k=k+x*2^j           Lower k by that factor of 2 if the test is true, else by 0
NEXT                Test the next exponent of 2
NEXT                process the next number in range
?s                  print the total

ডসবক্সে চলমান কিউ বেসিক ৪.৫-তে 1000 থেকে 2000 এর শেষ টেস্টকেস আসলে কাজ করে: হিজ দোত হেতে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.