একটি 64-বিট পূর্ণসংখ্যায় শীর্ষস্থানীয় শূন্যগুলির সংখ্যাটি সন্ধান করুন


18

সমস্যা:

64-বিট স্বাক্ষরিত পূর্ণসংখ্যায় শীর্ষস্থানীয় শূন্যগুলির সংখ্যাটি সন্ধান করুন

নিয়মাবলী:

  • ইনপুটটিকে স্ট্রিং হিসাবে গণ্য করা যায় না; এটি গণিত এবং বিটওয়াইজ অপারেশনগুলি অ্যালগরিদমকে চালিত করে এমন কিছু হতে পারে
  • আউটপুটটি ভাষা নির্বিশেষে of৪-বিট স্বাক্ষরিত পূর্ণসংখ্যার উপস্থাপনার বিরুদ্ধে বৈধ হওয়া উচিত
  • ডিফল্ট কোড গল্ফ বিধি প্রযোজ্য
  • বাইটস মধ্যে সংক্ষিপ্ত কোড

পরীক্ষার কেস:

এই পরীক্ষাগুলি দুটির পরিপূরক স্বাক্ষরিত পূর্ণসংখ্যাগুলি ধরে নিয়েছে। যদি আপনার ভাষা / সমাধানে স্বাক্ষরিত পূর্ণসংখ্যার আলাদা উপস্থাপনা না থাকে বা ব্যবহার করে, দয়া করে এটিকে কল করুন এবং প্রাসঙ্গিক হতে পারে এমন অতিরিক্ত পরীক্ষার কেস সরবরাহ করুন। আমি এমন কয়েকটি পরীক্ষার কেস অন্তর্ভুক্ত করেছি যা ডাবল নির্ভুলতার জন্য সম্বোধন করে, তবে দয়া করে নিখরচায় যে কোনও তালিকা দেওয়া উচিত suggest

input                output   64-bit binary representation of input (2's complement)
-1                   0        1111111111111111111111111111111111111111111111111111111111111111
-9223372036854775808 0        1000000000000000000000000000000000000000000000000000000000000000
9223372036854775807  1        0111111111111111111111111111111111111111111111111111111111111111
4611686018427387903  2        0011111111111111111111111111111111111111111111111111111111111111
1224979098644774911  3        0001000011111111111111111111111111111111111111111111111111111111
9007199254740992     10       0000000000100000000000000000000000000000000000000000000000000000
4503599627370496     11       0000000000010000000000000000000000000000000000000000000000000000
4503599627370495     12       0000000000001111111111111111111111111111111111111111111111111111
2147483648           32       0000000000000000000000000000000010000000000000000000000000000000
2147483647           33       0000000000000000000000000000000001111111111111111111111111111111
2                    62       0000000000000000000000000000000000000000000000000000000000000010
1                    63       0000000000000000000000000000000000000000000000000000000000000001
0                    64       0000000000000000000000000000000000000000000000000000000000000000

13
পিপিসিজিতে আপনাকে স্বাগতম! "ইনপুটটিকে স্ট্রিং হিসাবে গণ্য করা যায় না" এর পিছনে কারণ কী ? এটি এমন সমস্ত ভাষা অযোগ্য করে তোলে যা 64৪-বিট পূর্ণসংখ্যার সাথে পরিচালনা করতে পারে না এবং আরও উত্তর দেয় যা কোনও পূর্ণসংখ্যার দিকে নিয়ে যায়, কারণ এটি যেহেতু সহজলভ্য when
আর্নাউল্ড

1
আমরা কি Falseপরিবর্তে ফিরতে পারি 0?
জো কিং

4
@ আর্নল্ড এখানে এবং অন্যান্য সাইটগুলিতে ইতিমধ্যে একই ধরণের প্রশ্ন রয়েছে যা স্ট্রিং-ভিত্তিক সমাধানের জন্য বিশেষভাবে আহ্বান জানিয়েছে, তবে এমন কিছু নয় যা প্রশ্নটি গণিত এবং যৌক্তিক ক্রিয়াকলাপগুলিতে খোলে না। আমার আশা এই সমস্যার জন্য বিভিন্ন পদ্ধতির একগুচ্ছ দেখতে পাবে যা ইতিমধ্যে অন্য কোথাও উত্তর দেওয়া হয়নি। এগুলি কি স্ট্রিং সলিউশনগুলির জন্য উন্মুক্ত করা উচিত সর্বাত্মক?
ডেভ

4
X86 এবং এআরএম সহ বেশ কয়েকটি সিপিইউগুলির এর জন্য নির্দিষ্ট নির্দেশাবলী রয়েছে (x86 আসলে বেশ কয়েকটি রয়েছে)। আমি সবসময়ই ভাবছিলাম যে প্রোগ্রামিং ভাষাগুলি কেন এই বৈশিষ্ট্যটি প্রকাশ করে না কেন আজকের বেশিরভাগ প্রোগ্রামিং ভাষায় আপনি সমাবেশের নির্দেশাবলী প্রার্থনা করতে পারেন না।
slebetman

1
@ ব্যবহারকারী202729 আমি মনে করি আমি এটি খারাপভাবে বলেছি: 'ভাষা নির্বিশেষে সংখ্যার 64-বিট স্বাক্ষরিত পূর্ণসংখ্যার উপস্থাপনার বিরুদ্ধে আউটপুটটি বৈধ হওয়া উচিত' এর অর্থ আমি কী বলতে চাইছি তা হ'ল এই প্রশ্নটি শূন্যের সংখ্যাকে শূন্যের সংখ্যার হিসাবে সংজ্ঞায়িত করে একটি 64-বিট স্বাক্ষরিত পূর্ণসংখ্যায়। আমি অনুমান করি আমি স্বাক্ষরিত বনাম স্বাক্ষরযুক্ত পূর্ণসংখ্যার অপসারণের জন্য এই সীমাবদ্ধতা তৈরি করেছি।
ডেভ

উত্তর:


41

লিনাক্সে x86_64 মেশিনের ভাষা, 6 বাইট

0:       f3 48 0f bd c7          lzcnt  %rdi,%rax
5:       c3                      ret

lzcntনির্দেশের সাথে হাসওয়েল বা কে 10 বা উচ্চতর প্রসেসরের প্রয়োজন ।

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


20
বিল্টিনগুলি আবার / গুলি
হ'ল লোজার্ন

1
আমি ব্যবহৃত কলিং কনভেনশন নির্দিষ্ট করার প্রস্তাব দিই (যদিও আপনি লিনাক্সে বলেছেন)
qwr

@qwr দেখে মনে হচ্ছে এসআইএসভি কলিং কনভেনশন কারণ প্যারামিটারটি% rdi তে পাস হয়ে গেছে এবং এটি% র্যাকসে ফিরে আসে।
লগইন

24

হেক্সাগনি , 78 70 বাইট

2"1"\.}/{}A=<\?>(<$\*}[_(A\".{}."&.'\&=/.."!=\2'%<..(@.>._.\=\{}:"<><$

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

ব্যবহারিক ভাষার জন্য এই চ্যালেঞ্জটি কি খুব তুচ্ছ নয়? ;)

পাশের দৈর্ঘ্য I. আমি এটিকে পার্শ্ব দৈর্ঘ্য 5 ষড়ভুজের সাথে ফিট করতে পারি না।

ব্যাখ্যা


3
"ব্যাখ্যা" শুনে আমি সত্যিই হার্ড হেসেছিলাম। : ডি
এরিক ডুমিনিল

1
আমি মনে করি আপনার কাছে হ্যান্ডলিং নেতিবাচক সংখ্যা / শূন্যের অতিরিক্ত জটিলতা থাকতে পারে। আমি বিশাল 2 ^ 64 গণনা না করে পাশের দৈর্ঘ্য 5 এ একই জাতীয় প্রোগ্রাম ফিট করতে সক্ষম হয়েছি । এটি স্পষ্টভাবে এখনও গল্ফ করা হয়নি, যদিও!
FryAmTheEggman

@ ফ্রাই আহ ডান, নেতিবাচক সংখ্যায় সর্বদা 0 টি শীর্ষ শূন্য থাকে ... যা অবশ্যই কম প্রোগ্রামে পরিচালিত করে কারণ 2 ^ 64 দীর্ঘ হয়।
ব্যবহারকারী 202729

12

পাইথন , 31 বাইট

lambda n:67-len(bin(-n))&~n>>64

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

এক্সপ্রেশনটি &দুটি অংশের বিটওয়াইজ :

67-len(bin(-n)) & ~n>>64

67-len(bin(-n))অ নেতিবাচক ইনপুট জন্য সঠিক উত্তর দেয়। এটি বিট দৈর্ঘ্য নেয় এবং 67 থেকে বিয়োগ করে, যা -0bউপসর্গটির জন্য ক্ষতিপূরণ দিতে 64 এর চেয়ে 3 বেশি 3 অবহেলা হ'ল n==0এটি ব্যবহার করার জন্য সামঞ্জস্য করার কৌশল যা এটিকে উপেক্ষা করে -সামনের দিকে কোনও চিহ্ন তৈরি করে না ।

& ~n>>64উত্তর পরিবর্তে হতে তোলে 0নেতিবাচক জন্য n। যখন n<0, ~n>>64সমান 0 (-৪-বিট পূর্ণসংখ্যার উপর), তাই এটি-এর সাথে এটি দেয় 0। কখন n>=0, ~n>>64মূল্যায়ন করে -1এবং করার &-1কোনও প্রভাব নেই।


পাইথন 2 , 36 বাইট

f=lambda n:n>0and~-f(n/2)or(n==0)*64

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

পাটিগণিত বিকল্প।


9

জাভা 8, 32 26 বাইট।

Long::numberOfLeadingZeros

বিল্টিনস এফটিডাব্লু।

-6 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ

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


আহ, সম্পূর্ণরূপে ভুলে গেছেন numberOfLeadingZeros.. আপনি এটি 28 বাইট n->n.numberOfLeadingZeros(n)
বিটিডব্লিউতে

2
আসলে Long::numberOfLeadingZerosএটি আরও খাটো (26 বাইট)।
কেভিন ক্রুইজসেন

6
বাহ, জাভা পাইথনকে মারধর করে এমনটি প্রায়শই ঘটে না। অভিনন্দন!
এরিক ডুমিনিল

9

সি (জিসিসি) , 14 বাইট

__builtin_clzl

টিও উপর সূক্ষ্ম কাজ করে

সি (জিসিসি) , 35 29 বাইট

f(long n){n=n<0?0:f(n-~n)+1;}

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

ডেনিসের চেয়ে 6 বাইটের জন্য

সি (জিসিসি) সংকলক পতাকা, ডেভিড ফোস্টার দ্বারা 29 বাইট

-Df(n)=n?__builtin_clzl(n):64

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


3
উল্লেখযোগ্য যে এটি কেবলমাত্র 64৪-বিট মেশিনের জন্য (বা এলপি /৪ / আইএলপি A৪ / ইত্যাদি এবিআই সহ অন্য কোনও)
রুসলান

1
গীজ, এটি জিসিসি অন্তর্নির্মিত__builtin_clzl যে কোনও ব্যবহারের সাথে আমি আসতে পারি তার চেয়েও ছোট ।
ডেভিড ফোস্টার

@ রুসলান: long32 টি বিট (উইন্ডোজ এক্স 64 সহ) এমন সিস্টেমে আপনার পক্ষে দরকার __builtin_clzll(স্বাক্ষরিত দীর্ঘ দীর্ঘ)। Godbolt.org/z/MACCKf । (ইন্টেল intrinsics মতো গনুহ সি builtins অপারেশন এক মেশিন নির্দেশ দিয়ে করা সম্ভব হচ্ছে নির্বিশেষে সমর্থিত 32 বিট x86, একটি শাখা বা cmov করার clzll প্রনয়ন না। lzcnt(low half)+32বা lzcnt(high half)অথবা। bsrযদি lzcntপাওয়া যায় না।
পিটার Cordes

পরীক্ষার ক্ষেত্রে "0" অন্তর্ভুক্ত থাকে তবে __builtin_clz(l)(l)শূন্যের জন্য এটি অপরিবর্তিত আচরণ: "x যদি 0 হয় তবে ফলাফলটি অপরিজ্ঞাত হয়।"
এমসিসিএস

1
@ এমসিসিএস যদি এটি কাজ করে তবে তা গণনা করা হবে। এই কারণেই আমি শেষ উত্তরটি
রেখেছি

6

পার্ল 6 , 35 28 26 বাইট

-২ বাইটস নোহেলহোফকে ধন্যবাদ

{to .fmt("%064b")~~/^0*/:}

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

নামবিহীন কোড ব্লক যা একটি সংখ্যা নেয় এবং একটি নম্বর দেয়। এটি সংখ্যাটিকে একটি বাইনারি স্ট্রিংয়ে রূপান্তর করে এবং নেতৃস্থানীয় শূন্যগুলি গণনা করে। এটি নেতিবাচক সংখ্যার জন্য কাজ করে কারণ প্রথম চরিত্রটি -উদাহরণস্বরূপ -00000101, তাই কোনও শীর্ষস্থানীয় শূন্য নেই।

ব্যাখ্যা:

{                        }  # Anonymous code block
    .fmt("%064b")           # Format as a binary string with 64 digits
                 ~~         # Smartmatch against
                   /^0*/    # A regex counting leading zeroes
 to                     :   # Return the index of the end of the match

6

জাভাস্ক্রিপ্ট (নোড.জেএস) , 25 বাইট

বিগআইন্ট আক্ষরিক হিসাবে ইনপুট নেয়।

f=x=>x<0?0:x?f(x/2n)-1:64

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

0


n=>n<1?0:n.toString(2)-64একই অভিনয় করবেন না ?
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল আমি মনে করি আপনি বোঝাতে চেয়েছিলেন n=>n<1?0:n.toString(2).length-64তবে তা কোনওভাবেই কাজ করবে না। এই , আমি মনে করি।
আর্নল্ড

1
@ ইসমাইল মিগুয়েল কোন উদ্বেগ নেই। :) .toString()পদ্ধতির কাজ করা সত্যিই সম্ভব , তবে ইনপুট হিসাবে আমাদের এখনও একটি বিগইন্ট আক্ষরিক প্রয়োজন। অন্যথায়, আমাদের কাছে কেবল ম্যান্টিসার 52 বিট রয়েছে, যা নির্ভুলতা হারিয়ে গেলে অবৈধ ফলাফলের দিকে পরিচালিত করে
আর্নল্ড

1
আপনার পরামিতিটি বিগইন্ট প্রত্যয়টি একই চরিত্রের সত্য যে খুব বিভ্রান্তিকর ...
নীল

1
পিপিসি-তে @ নীল অপঠনযোগ্য কোড ?? এটা হতে পারে না! সংশোধন করা হয়েছে! : পি
আর্নল্ড


5

জে , 18 বাইট

0{[:I.1,~(64$2)#:]

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

জে , 19 বাইট

1#.[:*/\0=(64$2)#:]

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

ব্যাখ্যা:

                #:  - convert 
                  ] - the input to
          (64$2)    - 64 binary digits
         =          - check if each digit equals 
        0           - zero
   [:*/\            - find the running product
1#.                 - sum

1
1#.[:*/\1-_64{.#:(17) কাছাকাছি থাকলেও নেতিবাচক সংখ্যার জন্য কাজ করে না :(
কনার ও'ব্রায়েন

@ কনর ও'ব্রায়ানও ভাল লাগছে!
গ্যালেন ইভানভ



4

05 এ বি 1 ই , 10 9 বাইট

·bg65αsd*

I / O উভয়ই পূর্ণসংখ্যা

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

·         # Double the (implicit) input
          #  i.e. -1 → -2
          #  i.e. 4503599627370496 → 9007199254740992
 b        # Convert it to binary
          #  i.e. -2 → "ÿ0"
          #  i.e. 9007199254740992 → 100000000000000000000000000000000000000000000000000000
  g       # Take its length
          #  i.e. "ÿ0" → 2
          #  i.e. 100000000000000000000000000000000000000000000000000000 → 54
   65α    # Take the absolute different with 65
          #  i.e. 65 and 2 → 63
          #  i.e. 65 and 54 → 11
      s   # Swap to take the (implicit) input again
       d  # Check if it's non-negative (>= 0): 0 if negative; 1 if 0 or positive
          #  i.e. -1 → 0
          #  i.e. 4503599627370496 → 1
        * # Multiply them (and output implicitly)
          #  i.e. 63 and 0 → 0
          #  i.e. 11 and 1 → 11

4

হাস্কেল , 56 বাইট

একটি ভুল চিহ্নিত করার জন্য ধন্যবাদ xnor !

f n|n<0=0|1>0=sum.fst.span(>0)$mapM(pure[1,0])[1..64]!!n

মেমরি প্রচুর বরাদ্দ হতে পারে, এটি অনলাইন চেষ্টা করুন!

সম্ভবত আপনি এটি একটি ছোট ধ্রুবক দিয়ে পরীক্ষা করতে চান: 8-বিট চেষ্টা করুন!

ব্যাখ্যা

mapM(pure[0,1])[1..64]mapM(pure[1,0])[1..64]{0,1}641sum.fst.span(>0)


3

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

param([long]$n)for(;$n-shl$i++-gt0){}($i,65)[!$n]-1

পরীক্ষার স্ক্রিপ্ট:

$f = {

param([long]$n)for(;$n-shl$i++-gt0){}($i,65)[!$n]-1

}

@(
    ,(-1                   ,0 )
    ,(-9223372036854775808 ,0 )
    ,(9223372036854775807  ,1 )
    ,(4611686018427387903  ,2 )
    ,(1224979098644774911  ,3 )
    ,(9007199254740992     ,10)
    ,(4503599627370496     ,11)
    ,(4503599627370495     ,12)
    ,(2147483648           ,32)
    ,(2147483647           ,33)
    ,(2                    ,62)
    ,(1                    ,63)
    ,(0                    ,64)
) | % {
    $n,$expected = $_
    $result = &$f $n
    "$($result-eq$expected): $result"
}

আউটপুট:

True: 0
True: 0
True: 1
True: 2
True: 3
True: 10
True: 11
True: 12
True: 32
True: 33
True: 62
True: 63
True: 64

3

জাভা 8, 38 বাইট

int f(long n){return n<0?0:f(n-~n)+1;}

long(-৪-বিট পূর্ণসংখ্যার) হিসাবে ইনপুট , আউটপুট int(32-বিট পূর্ণসংখ্যা)।

@ L4m2 এর সি ( জিসিসি ) উত্তরের পোর্ট ।

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

ব্যাখ্যা:

 int f(long n){       // Recursive method with long parameter and integer return-type
   return n<0?        //  If the input is negative:
           0          //   Return 0
          :           //  Else:
           f(n-~n)    //   Do a recursive call with n+n+1
                  +1  //   And add 1

সম্পাদনা: @ ব্লুকের জাভা 8 উত্তরে প্রদর্শিত বিল্টিনটি ব্যবহার করে 26 বাইট থাকতে পারে ।Long::numberOfLeadingZeros


3

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

+/×\0=(0>n),(63⍴2)⊤((2*63)××n)+n←⎕

ব্যাখ্যা:

n←⎕ Prompts for input of number as integer

((2*63)××n) If n is negative add 2 to power 63

(63⍴2)⊤ Convert to 63 bit binary

(0>n), Concatinate 1 to front of binary vector if n negative, 0 if positive

+/×\0= Identify zeros, isolate first contiguous group and sum if first element is zero

3

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 42 বাইট

x=>x!=0?64-Convert.ToString(x,2).Length:64

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

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 31 বাইট

int c(long x)=>x<0?0:c(x-~x)+1;

এমনকি আরও ছোট, @ l4m2 এর সি (জিসিসি) উত্তরের ভিত্তিতে আপনি জানেন না যে আপনি এর মতো ফাংশনগুলি ঘোষণা করতে পারেন, ধন্যবাদ @ দানা!

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


1
আমি মনে করি এটি বৈধ? tio.run/##ZZA/…
ডানা

3

জেলি ,  10  9 বাইট

-1 এরিক দ্য আউটগোল্ফারের একটি ঝরঝরে কৌতুকের জন্য ধন্যবাদ (হ'ল-অ-নেতিবাচক এখন কেবল সহজ )

ḤBL65_×AƑ

একটি পূর্ণসংখ্যার লিঙ্ক একটি পূর্ণসংখ্যা গ্রহণ করে (পরিসীমা মধ্যে) যা একটি পূর্ণসংখ্যা দেয়।

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন


10 ছিল ḤBL65_ɓ>-×

এখানে আরও 10 বাইট সমাধান রয়েছে, যা আমি পছন্দ করি কারণ এটি "বসস" ...

BoṠS»-~%65

টেস্ট স্যুট এখানে

... BoṠS63r0¤i,, BoṠS63ŻṚ¤iবা BoṠS64ḶṚ¤iকাজ করবে।


আর একটি 10 ​​বাইটার (ডেনিস থেকে) হ'ল æ»64ḶṚ¤Äċ0(আবার æ»63r0¤Äċ0এবং æ»63ŻṚ¤Äċ0এটিও কাজ করবে)



@ এরিকথ আউটগল্ফার আমি নিজের কাছে ভেবেছিলাম "isNonegative দ্বারা গুণ করার জন্য কোনও গল্ফিয়ার উপায় থাকতে হবে" এবং Ƒখুব তাড়াতাড়ি খুব সুন্দর কাজ করার কথা ভাবেন নি !
জোনাথন অ্যালান

1
আসলে, আমি বেশ কিছুদিন ধরে থিওরিজ করছি । সতর্ক হোন যে এটি ভেক্টরাইজ হয় না! ;-) এটি আসলে "সমতল এবং তারপরে সমস্ত উপাদান ননজেগটিভ কিনা তা পরীক্ষা করুন"।
এরিক আউটগল্ফার

2

পার্ল 5 , 37 বাইট

sub{sprintf("%064b",@_)=~/^0*/;$+[0]}

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

অথবা এই 46 বাইট যদি "স্ট্রিংফিকেশন" অনুমোদিত না হয়: সাব জেড

sub{my$i=0;$_[0]>>64-$_?last:$i++for 1..64;$i}

s/length$&/$+[0]/(-3 বাইট);)
দাদা

আইএমও, subপার্ল 5 ফাংশন সম্বলিত উত্তরগুলি থেকে আপনাকে কীওয়ার্ডটি সরানোর অনুমতি নেই ।
nwellnhof

subঅন্যান্য ভাষা, পেরিল,, পাওয়ারশেল এবং আরও অনেক কিছুর জবাব মুছে ফেলার মতো কি আমি দেখেছি ।
কেজেটিল এস

পার্ল 6-এ, আমি মনে করি আপনাকে sub{}কোনও (বেনামে?) উপ তৈরি করার দরকার নেই , যা ব্যাখ্যা করে কেন এটি পার্ল 6 উত্তর থেকে বাদ দেওয়া হয়েছে। আমি @ নলহ্নহোফের সাথে একমত যে আপনাকে অপসারণের অনুমতি দেওয়া উচিত নয় sub। (যখন আমি তখনও সক্রিয় ছিলাম, এক বছর আগে বা তার মতোই, নিয়মটি ছিল)
দাদা

এখন বদলে গেছে। এবং অন্তর্ভুক্ত $+[0]
কেজেটিল এস।

2

সুইফট (64৪-বিট প্ল্যাটফর্মে), ৪১ বাইট

এমন এক ক্লোজার ঘোষণা করে fযা গ্রহণ করে এবং ফেরত দেয় Int। এই সমাধান শুধুমাত্র সঠিকভাবে 64-বিট প্ল্যাটফর্মের, যেখানে কাজ করে Intকরা হয় typealiasকরতে ed Int64। (32-বিট প্ল্যাটফর্মে, Int642 বাইট যুক্ত করে ক্লোজারের প্যারামিটার ধরণের জন্য স্পষ্টভাবে ব্যবহার করা যেতে পারে))

let f:(Int)->Int={$0.leadingZeroBitCount}

সুইফটে, এমনকি মৌলিক পূর্ণসংখ্যার প্রকারটি স্ট্যান্ডার্ড লাইব্রেরিতে ঘোষিত একটি সাধারণ অবজেক্ট। এর অর্থ Intপদ্ধতি এবং বৈশিষ্ট্য থাকতে পারে যেমন leadingZeroBitCount(যা স্ট্যান্ডার্ড লাইব্রেরির FixedWidthIntegerপ্রোটোকল অনুসারে সমস্ত ধরণের প্রয়োজন )।


মজাদার. জং এর কথা মনে করিয়ে দেয় আমি মনে করি এটি 20 বাইট হিসাবে গণনা করা উচিত, লেলিং জিরোবিটকাউন্ট
উজ্জ্বল করুন don

2

হাস্কেল , 24 বাইট

f n|n<0=0
f n=1+f(2*n+1)

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

এটি মূলত কেভিন ক্রুইজসেনের জাভা সমাধানের মতো, তবে আমি এটি স্বাধীনভাবে খুঁজে পেয়েছি।

যুক্তিটির Intএকটি 64-বিট বিল্ড বা Int64কোনও কিছুর জন্য টাইপ থাকা উচিত ।

ব্যাখ্যা

যদি যুক্তিটি নেতিবাচক হয় তবে ফলাফলটি অবিলম্বে 0 হয় Otherwise অন্যথায়, আমরা বামে স্থানান্তরিত করি, একটিগুলি পূরণ করে নেতিবাচক সংখ্যায় না পৌঁছানো অবধি আমরাএই ফিলিংটি আমাদের 0 এর জন্য একটি বিশেষ কেস এড়াতে দেয়।

কেবল রেফারেন্সের জন্য, এখানে সুস্পষ্ট / দক্ষ উপায়:

34 বাইট

import Data.Bits
countLeadingZeros

1

পরিষ্কার , 103 বাইট

সিলিংক্যাটের উত্তর হিসাবে একই " বিল্টিন " ব্যবহার করে ।

f::!Int->Int
f _=code {
instruction 243
instruction 72
instruction 15
instruction 189
instruction 192
}

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

পরিষ্কার , 58 বাইট

import StdEnv
$0=64
$i=until(\e=(2^63>>e)bitand i<>0)inc 0

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



1

পার্ল 5 -p , 42 বাইট

1while$_>0&&2**++$a-1<$_;$_=0|$_>=0&&64-$a

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

বিটস্ট্রিং ভিত্তিক সমাধানের চেয়ে দীর্ঘ, তবে একটি শালীন গণিত ভিত্তিক সমাধান।



@ দাদা আমি দেখতে পাচ্ছি যে কয়েকটি ক্ষেত্রে ভাসমান পয়েন্ট বিভাগ সঠিকভাবে কাজ করে না out আমি একটি intকল দিয়েছি যাতে সমস্যার সমাধান হওয়া উচিত।
এক্সকালি

দুঃখিত, আমি আমার অনুলিপিটি ব্যর্থ করেছি মনে হবে। এটিই আমি পাঠাতে চেয়েছিলাম;)
দাদা

1

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

{¯1+1⍳⍨⍵⊤⍨64⍴2}

কীভাবে ব্যবহার করবেন তা দেখতে কয়েকটি সংখ্যার জন্য পরীক্ষা করুন:

  f←{¯1+1⍳⍨⍵⊤⍨64⍴2}
  f ¯9223372036854775808
0
  f 9223372036854775807
1


1

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

64-#2\

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

2\ বাইনারি মধ্যে আর্গুমেন্ট এনকোড

# লম্বা

64- 64 থেকে বিয়োগ করুন


# = length... স্ট্রিং ভিত্তিক দেখায়
তিতাস

2
@ টিটাস 2\ পূর্ণসংখ্যার একটি তালিকা দেয় এবং #তার দৈর্ঘ্য সন্ধান করে। এখানে কোন স্ট্রিং জড়িত নেই।
এনজিএন


1

ওল্ফ্রাম ভাষা (গণিত) , 41 বাইট

ধনাত্মক সংখ্যার সূত্রটি ঠিক 63-Floor@Log2@#&। প্রতিস্থাপনের নিয়মগুলি শূন্য এবং নেতিবাচক ইনপুটের বিশেষ ক্ষেত্রে ব্যবহৃত হয়।

ইনপুটটি কোনও 64-বিট স্বাক্ষরিত পূর্ণসংখ্যার হওয়া উচিত নয়। এটি কার্যকরভাবে ইনপুটের মেঝেটিকে পূর্ণসংখ্যায় পরিণত করতে গ্রহণ করবে। যদি আপনি 64৪-বিট পূর্ণসংখ্যার জন্য সাধারণ গণ্ডির বাইরে কোনও সংখ্যাকে ইনপুট করেন তবে এটি একটি নেতিবাচক সংখ্যাটি দেখায় যেটি বোঝায় যে এই পূর্ণসংখ্যাটি সংরক্ষণ করতে আরও কত বিট লাগবে।

63-Floor@Log2[#/.{_?(#<0&):>2^63,0:>.5}]&

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

@ লেজিমনম্যামাল 978 এর সমাধানটি 28 বাইটে বেশ খানিকটা খাটো। ইনপুট অবশ্যই একটি পূর্ণসংখ্যা হতে হবে। ডকুমেন্টেশন অনুযায়ী: " BitLength[n]কার্যকরভাবে একটি দক্ষ সংস্করণ Floor[Log[2,n]]+1।" এটি স্বয়ংক্রিয়ভাবে শূন্যের ক্ষেত্রে সঠিকভাবে রিপোর্টিংয়ের 0পরিবর্তে পরিচালনা করে -∞

ওল্ফ্রাম ভাষা (গণিত) , ২৮ বাইট a

Boole[#>=0](64-BitLength@#)&

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


1
Boole[#>=0](64-BitLength@#)&28 বাইটে ভাল বিট সংক্ষিপ্ত। এটি আপনার মতো একই বেসিক ধারণাটি ব্যবহার করে তবে প্রয়োগ হয় BitLengthএবং Boole
LegionMammal978

আমি পুরোপুরি বিটলেংথ সম্পর্কে ভুলে গেছি!
কেলি লোডার

1

বিট নাম্বার - ম্যাথ.সিল (ম্যাথ.লগ (সংখ্যা) / ম্যাথ.লগ (2))

যেমন bit৪ বিট নম্বর: 9223372036854775807 গণিত.সিল (গণিত.লগ (9223372036854775807) / গণিত.লগ (2)) এএনএস: 63


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