সংখ্যাটি কি বাইনারি-ভারী?


58

অগ্রণী শূন্যগুলি উপেক্ষা করার সময় যদি এর বাইনারি উপস্থাপনায় 1s এর চেয়ে বেশি এস থাকে তবে একটি পূর্ণসংখ্যা বাইনারি-ভারী হয় 0। উদাহরণস্বরূপ 1 বাইনারি-ভারী, কারণ এর বাইনারি উপস্থাপনাটি সহজ 1, তবে 4 বাইনারি ভারী নয়, কারণ এর বাইনারি উপস্থাপনা 100। টাই হওয়ার ক্ষেত্রে (উদাহরণস্বরূপ 2, বাইনারি উপস্থাপন সহ 10) সংখ্যাটি বাইনারি-ভারী হিসাবে বিবেচিত হয় না।

ইনপুট হিসাবে ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে, এটি বাইনারি-ভারী হলে সত্যবাদী মান এবং যদি তা না হয় তবে একটি মিথ্যা মান value

Testcases

বিন্যাস: input -> binary -> output

1          ->                                1 -> True
2          ->                               10 -> False
4          ->                              100 -> False
5          ->                              101 -> True
60         ->                           111100 -> True
316        ->                        100111100 -> True
632        ->                       1001111000 -> False
2147483647 ->  1111111111111111111111111111111 -> True
2147483648 -> 10000000000000000000000000000000 -> False

স্কোরিং

এটি হ'ল প্রতিটি ভাষার জয়ে খুব কম বাইট


আমার ভাষা যদি সর্বশেষ পরীক্ষার কেস পরিচালনা করতে না পারে কারণ এটি ইতিবাচক পূর্ণসংখ্যার বিবেচনার সীমার বাইরে?
musicman523

1
@ musicman523 আফাইক স্ট্যান্ডার্ড আই / ও বিধিগুলি জানিয়েছে যে আপনাকে কেবল আপনার ভাষার সংখ্যা বিন্যাসের দ্বারা প্রতিনিধিত্বযোগ্য সংখ্যাগুলি গ্রহণ করতে হবে। নোট করুন যে বুলফাকের মতো কিছু ব্যবহার করে এটি "গেমিং" একটি স্ট্যান্ডার্ড লুফোল হিসাবে বিবেচিত হয়
স্কিডেদেব

কোন সত্যবাদী / মিথ্যা মান গণনা করে বা আমাদের দুটি স্বতন্ত্র মান প্রয়োজন?
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার কোনও মান
স্কিডেদেব

6
আকা A072600 , যদি এটি কাউকে সহায়তা করে।
dcsohl

উত্তর:


28

x86 মেশিন কোড, 15 14 বাইট

F3 0F B8 C1 0F BD D1 03 C0 42 2B D0 D6 C3

এটি মাইক্রোসফ্টের _ফেস্কল কল কলিং কনভেনশন ব্যবহার করে (একেক্সে প্রথম এবং একমাত্র প্যারামিটার, ইক্সে রিটার্ন মান, কলিটি ক্লোবার এডএক্সের অনুমতি দেওয়া হয়) যদিও এটি অন্যান্য কলিং কনভেনশনগুলির ক্ষেত্রে তুচ্ছভাবে সংশোধন করা যেতে পারে যা নিবন্ধগুলিতে আর্গুমেন্টগুলি পাস করে।

এটি সত্য হিসাবে 255, এবং 0 টি মিথ্যা হিসাবে প্রত্যাবর্তন করে।

এটি Undocumented (তবে ব্যাপকভাবে সমর্থিত) অপকোড ব্যবহার করে salc

বিচ্ছিন্ন নীচে:

;F3 0F B8 C1 
  popcnt eax, ecx ; Sets eax to number of bits set in ecx

;0F BD D1
  bsr edx, ecx    ; Sets edx to the index of the leading 1 bit of ecx

;03 C0
  add eax, eax

;42
  inc edx

;2B D0
  sub edx, eax

  ; At this point, 
  ;   edx = (index of highest bit set) + 1 - 2*(number of bits set)
  ; This is negative if and only if ecx was binary-heavy.

;D6
  salc           ; undocumented opcode. Sets al to 255 if carry flag 
                 ; is set, and to 0 otherwise. 

;C3
  ret

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

ধন্যবাদ পিটার Cordes প্রতিস্থাপন পরামর্শ জন্য lzcntসঙ্গে bsr


খুশী হলাম। popcntউত্তরগুলি দেখার জন্য নীচে স্ক্রোল করার আগে আমি যথাসম্ভব সুস্পষ্টভাবে পেয়েছি lzcntতবে প্রশ্নের দ্বারা প্রয়োজনীয় উল্লেখযোগ্য সংখ্যাগুলি নিয়ে কাজ করার কথা ভাবিও নি ।
পিটার

(ওরফে ) bsrপরিবর্তে নেট সঞ্চয় করার কোনও উপায় আছে কি ? এটি আপনাকে 32-lzcnt দেয় যেহেতু আপনাকে তার পরিবর্তে ব্যবহার করতে হবে । (অথবা ডিএসটি src = 0 জন্য অপরিবর্তিত সমস্ত বিদ্যমান Intel ও AMD হার্ডওয়্যারে ছেড়ে এএমডির এমনকি কাগজপত্র এই আচরণ, কিন্তু ইন্টেল অনির্ধারিত বলছে ... যাই হোক, অপ বলেন। ইতিবাচক যা আউট নিয়ম, ।)lzcntrep bsrsublea0
পিটার Cordes

1
আমি অবশ্যই পিটার হিসাবে একই লাইন ধরে ভাবছিলাম, যেহেতু চ্যালেঞ্জটি পরিষ্কারভাবে ইতিবাচক পূর্ণসংখ্যার মধ্যে ইনপুটগুলিকে সীমাবদ্ধ করে না। প্রকৃতপক্ষে, আমি একটি সমাধান ব্যবহার করে খসড়া তৈরি করেছি popcntএবং bsrএটি 17 বাইট ছিল। আমি ভাবছিলাম যে আমি প্রথম asm জবাব দেখেছি তার তুলনায় বেশ ভাল , তবে এই চতুর leaকৌতুকটি প্যান্টটিকে ছাড়ায়। আমি তুলনা তাকান bsfএবং popcnt। তবে আমি এই সমাধানটি কোনওভাবেই পরাজিত হতে পারে এমন কোনও উপায় দেখছি না, এমনকী আপনি যে 1 বাইটটিকে repউপসর্গটি ফেলে রেখে সঞ্চয় করতে পারেন তাও বিবেচনা করে নিচ্ছেন ।
কোডি গ্রে

1
salcনয় সমতুল্য করার setc al: আধুনিক সেট al1 থেকে সিএফ সেট হলে, না 255
রুসলান

1
প্রকৃত সমতুল্য salcহয় sbb al, al, কিন্তু আপনি এনকোড 1 বাইট একটি সেভিংস পেতে। উপায় দ্বারা, এটা হয় এএমডির দ্বারা নথিভুক্ত, এবং এটি ব্যাপকভাবে স্মৃতিসম্বন্ধীয় এমনকি ইন্টেলের P6 opcode মানচিত্র থেকে আসছে সঙ্গে, ইন্টেল দ্বারা সমর্থিত হয়। সুতরাং এটি ব্যবহার করার পক্ষে এটি বেশ নিরাপদ। এছাড়াও, সেই নির্দেশটি ব্যবহার করার জন্য ভাবতে এখানে দুর্দান্ত উন্নতি! এটিই মূলত আমার আসল খসড়াটি করেছিল, (1) আমি x86-64 কোডটি ব্যবহার করতাম, তাই এনকোডিংয়ের incদ্বিগুণ সময় ছিল এবং (২) আমি ভেবে salcদেখিনি, তাই আমি একই কাজটি একটিতে করছিলাম দীর্ঘ পথ খুব খারাপ আমি কেবল একবারে উপড়ে যেতে পারি।
কোডি ধূসর

17

জেলি , 5 বাইট

Bo-SR

ফলনগুলি খালি খালি আউটপুট (সত্যবাদী) বা খালি আউটপুট (মিথ্যা)।

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

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

Bo-SR  Main link. Argument: n

B      Binary; convert n to base 2.
 o-    Compute the logical OR with -1, mapping 1 -> 1 and 0 -> -1.
   S   Take the sum s. We need to check if the sum is strictly positive.
    R  Range; yield [1, ..., s], which is non-empty iff s > 0.

খুশী হলাম। আমার কাছে ছিল Bo-S, তবে আমি এমন কোনও 1 বাইট পরমাণু খুঁজে পাইনি যা ইতিবাচক / অ-ধনাত্মককে সত্য / মিথ্যাতে রূপান্তরিত করবে ...
ETH প্রোডাকশন

যৌক্তিক না −1 সহ, তাই না?
লিন

@ লিন হ্যাঁ, সত্যিই। ধন্যবাদ।
ডেনিস


ধন্যবাদ কায়ারডকোইনরিঙ্গিংহিং ধন্যবাদ, কিন্তু Æṃতখন আর ছিল না
ডেনিস

14

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

lambda n:max('10',key=bin(n).count)

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

পুরানো উত্তর, 38 বাইট

আউটপুট 0falsy এবং -2বা -1যেমন truthy

lambda n:~cmp(*map(bin(n).count,'10'))

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


2
প্রত্যাবর্তনের ক্ষেত্রে নেতৃস্থানীয় 0 কি binএই সমাধানের সমস্যার কারণ?
ছায়া

3
@ শ্যাডো কোনও সমস্যা নেই কারণ উপায়টি maxকাজ করে। টাই হওয়ার ক্ষেত্রে, সর্বোচ্চ পুনরাবৃত্তিতে প্রথম মানটি সর্বাধিক মান প্রদান করবে। এই কোডটি সেই সত্যটি নিশ্চিত করে নিশ্চিত করে যে টাই করার সময় 1টি ফিরে এসেছে, যার অর্থ আসলে শূন্যের চেয়ে আরও বেশি রয়েছে, যেহেতু অতিরিক্ত শূন্য যুক্ত করা হয়েছিল bin। অতিরিক্ত শূন্যের জন্য না হলে এইভাবে লেখা হলে এটি ভুল হবে।
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান এটি পুরানো উত্তরের ক্ষেত্রেও সত্য, যেখানে উভয়ই সমান হলে cmpফিরে আসে0
রড

11

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

@(n)mode(de2bi(n))

টিআইও কাজ করে না যেহেতু যোগাযোগ সরঞ্জাম বাক্সটি অন্তর্ভুক্ত নয়। এটি অক্টোভ-অনলাইনে পরীক্ষা করা যেতে পারে ।

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

de2biদশমিক সংখ্যাটিকে বাইনারি সংখ্যাসূচক ভেক্টরে রূপান্তর করে, স্ট্রিংয়ের মতো dec2binনয়।

modeভেক্টর মধ্যে সর্বাধিক ঘন অঙ্ক। টাইয়ের ক্ষেত্রে এটি সর্বনিম্নে ডিফল্ট হয়।

@(n)                % Anonymous function that takes a decimal number as input 'n'
    mode(        )  % Computes the most frequent digit in the vector inside the parentheses
         de2bi(n)   % Converts the number 'n' to a binary vector

যোগাযোগ সরঞ্জামদ্বারটি কি অষ্টাভের একটি আদর্শ অংশ, বা এটি অন্যান্য ভাষার কোনও লাইব্রেরির সাথে অনুরূপ?
ডিসিএসএইচএল

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

9

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

f=(n,x=0)=>n?f(n>>>1,x+n%2-.5):x>0

f=(n,x=0)=>n?f(n>>>1,x+=n%2-.5):x>035 বাইট জন্য।
ovs

বাইট সংরক্ষণ করার n>>1পরিবর্তে ব্যবহার করুন n>>>1যেহেতু ইনপুট কখনই নেতিবাচক নয়।
kamoroso94

@ কামোরসো94 ধন্যবাদ, তবে তা
2147483648 এ

@ ইথ প্রডাকশনগুলি ডার্ন করে এবং এর n/2|0চেয়ে ভাল আর কিছু হয় না: /
কামোরোসো৯৪

9

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

BXM

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

আমি সত্যিই এমএটিএলকে জানি না, আমি কেবল লক্ষ্য করেছি যে আলেফাল্ফের অক্টাভা উত্তরেmode কাজ করতে পারে এবং বুঝতে পারলাম এমএটিএল-তে কিছু সমতুল্য রয়েছে।

B   ' binary array from input
 XM ' value appearing most.  On ties, 0 wins

8

গণিত, 22 বাইট

@ মার্টিনএেন্ডার এবং @ জংহওয়ানমিনকে একটি বাইট সংরক্ষণ করা হয়েছে

#>#2&@@#~DigitCount~2&

2
আমি মনে করি ইনফিক্স নোটেশনের চেয়ে বেশি অগ্রাধিকার রয়েছে @@
মার্টিন ইন্ডার

1
-1 বাইট (@ মার্টিন ইন্ডার হিসাবে উল্লেখ করা হয়েছে):#>#2&@@#~DigitCount~2&
জংহওয়ান মিন

7

ব্র্যাচল্যাগ , 6 বাইট

ḃọtᵐ>₁

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

ব্যাখ্যা

Example input: 13

ḃ        Base (default: binary): [1,1,0,1]
 ọ       Occurences:             [[1,3],[0,1]]
  tᵐ     Map Tail:               [3,1]
    >₁   Strictly decreasing list

যেহেতু এর আউটপুট কখনই শীর্ষস্থানীয় শূন্যগুলির সাথে অঙ্কের তালিকার সাথে একীভূত হবে না, তাই আমরা জানি যে এর উপস্থিতি 1সর্বদা প্রথম হবে এবং এর উপস্থিতি 0সর্বদা পরে থাকবে



6

সি (জিসিসি) , 51 48 41 40 বাইট

i;f(n){for(i=0;n;n/=2)i+=n%2*2-1;n=i>0;}

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


ওপি'র স্পষ্টতার ভিত্তিতে, আপনি মুছে ফেলতে পারেনunsigned
সঙ্গীতকার 523

যেহেতু NNN ইতিবাচক হয়, তাহলে আপনি পরিবর্তন করতে পারেন n>>=1থেকে n/=2। আমিও মনে করি আপনি ব্যবহার করতে পারেন ~nপরিবর্তে n^-1, যা আপনি পরিবর্তন করতে অনুমতি থাকবে &&করার&
musicman523

অদ্ভুত ব্যাপার ঘটতে যখন আমি মন্তব্য সম্পাদনা - "NNN" অর্থ n, এবং পরিবর্তন সম্পর্কে কিছু মনে করবেন না &&করতে &, আমি মনে করি না কাজ করবে না। তবে এটিকে পরিবর্তন *করা কাজ বলে মনে হচ্ছে
musicman523

@ musicman523 &&কেবলমাত্র স্বাক্ষরবিহীন কেসটি হ্যান্ডেল করার জন্য ছিল তবে যেহেতু আমাকে কেবল ইতিবাচক পূর্ণসংখ্যার হ্যান্ডেল করা দরকার তাই আমি এগুলি সমস্ত একসাথে মুছে ফেলতে পারি। /=সংক্ষিপ্ত হওয়া সম্পর্কে ভাল pouint যে >>=যদিও, ধন্যবাদ!
ক্লাবল্যাঙ্ক

আপনি এক বাইট পরিবর্তন সংরক্ষণ করতে পারবেন n&1?++i:--1করার i+=n%2*2-1। আপনি >0ভারী এবং ননজারো ভারী নয় বলে শূন্য আউট দেবেন বলে উল্লেখ করে আপনি পরিত্রাণ পেতেও সক্ষম হতে পারেন
musicman523

6

আর , 54 53 51 বাইট

-১ বাইট ম্যাক্স লনবয়কে ধন্যবাদ

n=scan();d=floor(log2(n))+1;sum(n%/%2^(0:d)%%2)*2>d

স্টিডিন থেকে পড়া; TRUEবাইনারি ভারী সংখ্যার জন্য ফেরত দেয় । dবাইনারি অঙ্কের সংখ্যা; sum(n%/%2^(0:d)%%2অঙ্কের অঙ্কটি গণনা করে (অর্থাত্ তার সংখ্যার সংখ্যা)।

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


আমার পোস্ট করার পরে কেবল আপনার উত্তরটি দেখেছিল ... যাইহোক, আপনি 1 বাইট সংরক্ষণের log2(n)পরিবর্তে ব্যবহার করতে পারেনlog(n,2)
ম্যাক্সিম মিখায়লভ

@ ম্যাক্সলানবয় আহ অবশ্যই। ধন্যবাদ!
জিউসেপে

বন্ধ Golfed অন্য 12 বাইট: codegolf.stackexchange.com/a/132396/59530
JAD

6

x86_64 মেশিন কোড, 23 22 21 বাইট

31 c0 89 fa 83 e2 01 8d 44 50 ff d1 ef 75 f3 f7 d8 c1 e8 1f c3

অনেকত্রিত:

  # zero out eax
  xor  %eax, %eax
Loop:
  # copy input to edx
  mov  %edi, %edx
  # extract LSB(edx)
  and  $0x1, %edx
  # increment(1)/decrement(0) eax depending on that bit
  lea -1(%rax,%rdx,2), %eax
  # input >>= 1
  shr  %edi
  # if input != 0: repeat from Loop
  jnz  Loop

  # now `eax < 0` iff the input was not binary heavy,
  neg %eax
  # now `eax < 0` iff the input was binary heavy (which means the MSB is `1`)
  # set return value to MSB(eax)
  shr  $31, %eax
  ret

ধন্যবাদ @ রাস্লান, বাইটের জন্য @ পিটারকর্ডস -1!

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


এর 8d 1fপরিবর্তে আপনি ব্যবহার করার কোনও বিশেষ কারণ আছে কি 89 fb?
রুসলান

2
আসল প্রশ্নটি হল, আপনি যে জঘন্য AT&T সিনট্যাক্সটি ব্যবহার করছেন তার কোনও বিশেষ কারণ আছে?!? এছাড়াও, বিচ্ছিন্নতা এবং আপনার বিচ্ছিন্নতা উভয়ই আপনার add eax, 2++ এর সাথে সম্মত হন dec eaxতবে আপনার মন্তব্যগুলি আপনাকে বৃদ্ধি করতে চাইছে তা ebxনয় eax
কোডি গ্রে

1
আপনি প্রতিস্থাপন করতে পারেন jnz Next/ add/ decসঙ্গে (7 বাইটস) lea -1(%rax, %rbx, 2), %eax(4 বাইটস) করতে eax += 2*ebx - 1(মত অন্যান্য এক্স 86 মেশিন-কোড উত্তর )। তারপরে লুপের বাইরে, neg %eax(2 বাইট) সাইন বিটটি নীচে সরানোর আগে। 1 বাইটের নেট সাশ্রয়। অথবা test %eax,%eax/ setge %alএছাড়াও কাজ করবে, যদি আপনার ফেরতের মান হয় একটি boolবা int8_t
পিটার

1
@ পিটারকর্ডস আমি মনে করি আমি জানি কী হয়েছিল, তবে আমি নিশ্চিত নই: আমি সম্ভবত চেষ্টা না করে lea -1(%rax,rbx,2)কেবল lea -1(%eax,%eax,2)এবং এইভাবে বাইটগুলি নষ্ট করেছি .. যাইহোক, আপনি দুজনেই ঠিক ছিলেন, আমি এই জাতীয় একটি বাইট সংরক্ষণ করতে পারি। অনেক ধন্যবাদ (এর বিনিময়ে আমি যে পরিবর্তন করব leaএকটি থেকে movযখন আমি এটা আছি)!
01

1
@ moonheart08: আমি তার আগে জানতাম না, তবে কেউ একটি উত্তর পোস্ট করেছিলেন যা which বাইট সংরক্ষণ করেছিল।
ბიმო

5

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

{[>] .base(2).comb.Bag{qw<1 0>}}

এটা পরীক্ষা করো

{[>] .polymod(2 xx*).Bag{1,0}}

এটা পরীক্ষা করো

সম্প্রসারিত:

{      # bare block lambda with implicit parameter 「$_」

  [>]  # reduce the following with &infix:« > »

    .polymod(2 xx *) # turn into base 2 (reversed) (implicit method call on 「$_」)
    .Bag\            # put into a weighted Set
    { 1, 0 }         # key into that with 1 and 0
                     # (returns 2 element list that [>] will reduce)
}


5

হাস্কেল, 41 34

g 0=0
g n=g(div n 2)+(-1)^n
(<0).g

যদি nবিজোড়, একটি নিতে -1যদি এটা এমনকি, এক নিতে 1। এর সাথে একটি পুনরাবৃত্তি কল যুক্ত করুন n/2এবং যদি বন্ধ করুন n = 0। ফলাফলের 0সংখ্যা কম হলে বাইনারি-ভারী।

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

সম্পাদনা করুন: @ আরজান জোহানসেন কিছু শর্টকাট পেয়েছেন এবং 7 টি বাইট সংরক্ষণ করেছেন। ধন্যবাদ!


mod n 2ন্যায়সঙ্গত হতে পারে n, এবং এটি কোনও সঞ্চালক ছাড়াই একটি বাইট ছোট হয়। এটি অনলাইন চেষ্টা করুন!
janর্জন জোহানসেন

5

রেটিনা , 37 34 বাইট

.+
$*
+`(1+)\1
$1@
@1
1
+`.\b.

1+

এটি অনলাইন চেষ্টা করুন! লিঙ্কটিতে ছোট পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে (বৃহত্তরগুলি সম্ভবত মেমরির বাইরে চলে যাবে)। সম্পাদনা করুন: @ মার্টিনইেন্ডারকে ধন্যবাদ 3 টি বাইট সংরক্ষণ করা হয়েছে ব্যাখ্যা: প্রথম পর্যায়ে দশমিক থেকে আনারিতে রূপান্তরিত হয় এবং পরবর্তী দুটি স্তরটি ইউনারি থেকে বাইনারিতে রূপান্তরিত হয় (এটি রেটিনা উইকিতে অ্যানারি গাণিতিক পৃষ্ঠার থেকে প্রায় সোজা বাইরে, আমি এর @পরিবর্তে ব্যবহার করছি 0)। তৃতীয় পর্যায়ে জোড়াগুলি ভিন্ন ভিন্ন চরিত্রের সন্ধান করা হয়, যা হতে পারে @1বা হতে পারে 1@এবং এগুলি মুছে ফেলা হয় যতক্ষণ না কিছু না থাকে। শেষ পর্যায়ে তারপরে বাকি 1 টি পরীক্ষা করে।


${1}হতে পারে $+। অথবা আপনি এর !পরিবর্তে ব্যবহার করতে পারেন 0এবং তারপরে সংক্ষিপ্ত 01|10করে তুলতে পারেন .\b.
মার্টিন ইন্ডার

@ মার্টিনএেন্ডার হু, $+যখন প্যাটার্নটিতে একটি রয়েছে সঠিক জিনিসটি করেন |? আমি অবাক হয়েছি আমি আগে এটি ব্যবহার করতে পারতাম কিনা ...
নিল

2
না, $+দুর্দান্ত বোকা এবং এটি সবচেয়ে বেশি সংখ্যক গ্রুপটি ব্যবহার করা হয়েছে কিনা তা সহজেই ব্যবহার করে। এটি শুধুমাত্র গল্ফিংয়ের জন্য যখন আপনি নয়টিরও বেশি গ্রুপ পেয়েছেন বা যেমন এখানে একটির মতো পরিস্থিতি পেয়েছেন তখনই আমি কেবল জানি না কেন আমি কেন এটি কখনও প্রযোজনা রেজেক্সে ব্যবহার করব।
মার্টিন ইন্ডার

5

আর , 43 বাইট

max(which(B<-intToBits(scan())>0))/2<sum(B)

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

             intToBits(scan())              # converts to bits
          B<-                 >0            # make logical and assign to B
max(which(                      ))/2        # get the length of the trimmed binary and halve
                                    <sum(B) # test against the sum of bits

+1 ঝরঝরে সমাধান! এমনকি আমি জানতাম নাintToBits
জিউস্পে

বন্ধ Golfed অন্য 4 বাইট: codegolf.stackexchange.com/a/132396/59530
JAD

5

কোটলিন , 50 বাইট

{i:Int->i.toString(2).run{count{it>'0'}>length/2}}

অন্তর্নিহিত প্রকারের ল্যাম্বদা (Int) -> Boolean। সংস্করণ 1.1 এবং উচ্চতর শুধুমাত্র ব্যবহারের কারণে Int.toString(radix: Int)

দুর্ভাগ্যক্রমে টিআইও-র কোটলিন রানটাইমটি 1.0.x বলে মনে হচ্ছে, তাই এখানে টিআইও লিঙ্কের পরিবর্তে একটি দুঃখী কুকুর রয়েছে:


4

পাইথ, 9 7 বাইট

ehc2S.B

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

-2 FryAmTheEggman ধন্যবাদ ।


আর একটি 9 বাইট পদ্ধতির:>ysJjQ2lJ
কার্লকাস্টার

1
7 বাইট তবে আমার মনে হচ্ছে কিছুটা আরও ছোট হওয়া উচিত ...
FryAmTheEggman

@ ফ্রাইআম দ্য এজম্যান হুম ... এটি কেবলমাত্র একটি সম্পূর্ণ প্রোগ্রাম হিসাবে কাজ করতে পারে। (আমি জানতাম যে ব্যবহারের উপায় আছে .B!)
এরিক দ্য আউটগল্ফার

4

আর, 39 37 বাইট

sum(intToBits(x<-scan())>0)>2+log2(x)

এটি @ মিকিটি এবং @ জিউজ্পে ব্যবহার করা পদ্ধতিগুলির সংমিশ্রণ যা আরও কয়েকটি বাইট সংরক্ষণ করে।

sum(intToBits(x) > 0)1বিটের পরিমাণ গণনা করে , এবং 2+log2(x)/2বৃত্তাকার নিচে মোট বিটের পরিমাণের অর্ধেক। যখন দুটি মান সমান হয় তখন আমাদের আচরণের কারণে গোল হতে হয় না।


4

সি # (.নেট কোর) , 62 , 49 বাইট

লিনকিউ ছাড়াই।

সম্পাদনা করুন: ডানা -13 বাইট গল্ফের সাথে কিছুক্ষণের জন্য পুনরাবৃত্তির জন্য পরিবর্তন করে এবং পূর্ণসংখ্যার পরিবর্তে একটি বুল ফিরিয়ে দেয়।

x=>{int j=0;for(;x>0;x/=2)j+=x%2*2-1;return j>0;}

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


4

রেজেক্স (ইসিএমএসক্রিপ্ট), 85 73 71 বাইট

^((?=(x*?)\2(\2{4})+$|(x*?)(\4\4xx)*$)(\2\4|(x*)\5\7\7(?=\4\7$\2)\B))*$

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

ডেডকোড দ্বারা ব্যাখ্যা

আগের 73 বাইট সংস্করণটি নীচে ব্যাখ্যা করা হয়েছে।

^((?=(x*?)\2(\2{4})+$)\2|(?=(x*?)(\4\4xx)*$)(\4|\5(x*)\7\7(?=\4\7$)\B))+$

ইসমাস্ক্রিপ্ট রেজেেক্সের সীমাবদ্ধতার কারণে, কার্যকর পদক্ষেপটি প্রতিটি পদক্ষেপে প্রয়োজনীয় সম্পত্তি আক্রমণকারীকে ধরে রেখে একবারে এক নম্বর পদক্ষেপে রূপান্তর করা যায়। উদাহরণস্বরূপ, একটি নিখুঁত বর্গক্ষেত্র বা 2 পাওয়ারের জন্য পরীক্ষা করতে, প্রতিটি পদক্ষেপে 2 (যথাক্রমে) একটি বর্গক্ষেত্র বা পাওয়ার রাখার সময় আকারে সংখ্যা হ্রাস করুন।

এই সমাধানটি প্রতিটি পদক্ষেপে যা করে তা এখানে:

ডানদিকের বিটটি যদি একটি না হয় 1তবে ডানদিকের 1বিটটি (এটি যদি একমাত্র 1বিট না হয় , যেমন বর্তমান সংখ্যা 2 এর শক্তি না হয়) এক ধাপে ডানে সরানো হয়, কার্যকরভাবে একটিতে পরিবর্তিত 10হয় 01(উদাহরণস্বরূপ, 1101) 1 000 → 11010 1 00 → 110100 1 0 → 1101000 1 ), যা সংখ্যার বাইনারি- ভারাক্রমে কোনও প্রভাব ফেলে না। অন্যথায়, ডানদিকের 01মোছা মোছা হয় (উদাহরণস্বরূপ 101110 01 → 101110, বা 110 01 11 → 11011)। সংখ্যাটির ভারাক্রমেও এর কোনও প্রভাব নেই, কারণ সত্য বা মিথ্যাones>zeroes1

ones>zeroesones1>zeroes1

যখন এই পুনরাবৃত্তি পদক্ষেপগুলি আর যেতে না পারে, শেষ ফলাফলটি হয় 1বিটগুলির একটি সংক্ষিপ্ত স্ট্রিং , যা ভারী এবং এটি ইঙ্গিত করে যে আসল সংখ্যাটি ভারী ছিল, বা 2 এর শক্তি, এটি নির্দেশ করে যে আসল সংখ্যাটি ভারী ছিল না।

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

# For these comments, N = the number to the right of the "cursor", a.k.a. "tail",
# and "rightmost" refers to the big-endian binary representation of N.
^
(                          # if N is even and not a power of 2:
    (?=(x*?)\2(\2{4})+$)   # \2 = smallest divisor of N/2 such that the quotient is
                           # odd and greater than 1; as such, it is guaranteed to be
                           # the largest power of 2 that divides N/2, iff N is not
                           # itself a power of 2 (using "+" instead of "*" is what
                           # prevents a match if N is a power of 2).
    \2                     # N = N - \2. This changes the rightmost "10" to a "01".
|                          # else (N is odd or a power of 2)
    (?=(x*?)(\4\4xx)*$)    # \4+1 = smallest divisor of N+1 such that the quotient is
                           # odd; as such, \4+1 is guaranteed to be the largest power
                           # of 2 that divides N+1. So, iff N is even, \4 will be 0.
                           # Another way of saying this: \4 = the string of
                           # contiguous 1 bits from the rightmost part of N.
                           # \5 = (\4+1) * 2 iff N+1 is not a power of 2, else
                           # \5 = unset (NPCG) (iff N+1 is a power of 2), but since
                           #   N==\4 iff this is the case, the loop will exit
                           #   immediately anyway, so an unset \5 will never be used.
    (
        \4                 # N = N - \4. If N==\4 before this, it was all 1 bits and
                           # therefore heavy, so the loop will exit and match. This
                           # would work as "\4$", and leaving out the "$" is a golf
                           # optimization. It still works without the "$" because if
                           # N is no longer heavy after having \4 subtracted from it,
                           # this will eventually result in a non-match which will
                           # then backtrack to a point where N was still heavy, at
                           # which point the following alternative will be tried.
    |
        # N = (N + \4 - 2) / 4. This removes the rightmost "01". As such, it removes
        # an equal number of 0 bits and 1 bits (one of each) and the heaviness of N
        # is invariant before and after. This fails to match if N is a power of 2,
        # and in fact causes the loop to reach a dead end in that case.
        \5                 # N = N - (\4+1)*2
        (x*)\7\7(?=\4\7$)  # N = (N - \4) / 4 + \4
        \B                 # Assert N > 0 (this would be the same as asserting N > 2
                           # before the above N = (N + \4 - 2) / 4 operation).
    )
)+
$       # This can only be a match if the loop was exited due to N==\4.

2
এটি ড্যাডকোডের উত্তরে অনুপ্রাণিত হয়েও , অ্যালগরিদমটি যথেষ্ট আলাদা যে আমি অনুভব করেছি যে এটি মন্তব্য করার পরিবর্তে পৃথক উত্তর প্রাপ্য।
গ্রিমি

2
এটি অসাধারণ, এবং ঠিক আমি কী দেখতে চেয়েছিলাম (কেউ আমার রেজেক্সকে পানির বাইরে আরও বেশি সংক্ষিপ্ত অ্যালগরিদম দিয়ে ফুঁকছে)। তবে আপনার মন্তব্যগুলি এটিকে মোটেও ব্যাখ্যা করে না, এবং রেজেক্সের মন্তব্য করা 73৩-বাইট সংস্করণটিও কাজ করে না (পিছনে পিছনে পিছনে একসাথে \5বন্ধ রয়েছে)। আমি এটি অধ্যয়ন করেছি এবং আমার উত্তরে এটি ব্যাখ্যা করেছি এবং মন্তব্য করেছি (কারণ স্ট্যাক এক্সচেঞ্জ মাল্টলাইন উত্তরগুলির অনুমতি দেয় না)।
ডেডকোড

4

রেজেক্স (ইসিএমএসক্রিপ্ট), 183 বাইট

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

এই unary অ্যালগরিদম নিম্নলিখিত হিসাবে কাজ করে:

  1. 2 এর বৃহত্তম পাওয়ারের স্কোয়ার রুটটি এন এর সাথে ফিট করে এবং বর্গমূলটি নিখুঁত ছিল কিনা তা লক্ষ্য করুন এবং নীচে বৃত্তাকার করতে হবে। এটি পরে ব্যবহার করা হবে।
  2. একটি লুপে, প্রতিটি অতি-তাত্পর্যপূর্ণ 1বিটকে সর্বনিম্ন-তাত্পর্যপূর্ণ অবস্থানে নিয়ে যান যেখানে 0কিছুটা থাকে। এই পদক্ষেপগুলির প্রত্যেকটি একটি বিয়োগফল। লুপের শেষে, অবশিষ্ট সংখ্যা (যেমন এটি বাইনারি হিসাবে উপস্থাপিত হবে) 1কোনও 0s এর স্ট্রিং । এই অপারেশনগুলি বাস্তবে আনারিতে করা হয়; এটি কেবল ধারণাগত যে এগুলি বাইনারি করা হচ্ছে।
  3. 1পূর্বে প্রাপ্ত বর্গমূলের সাথে এই "বাইনারি স্ট্রিং" তুলনা করুন । বর্গমূলকে যদি গোল করে নিতে হয় তবে এর দ্বিগুণ সংস্করণ ব্যবহার করুন। এটি নিশ্চিত করে যে " 1s এর বাইনারি স্ট্রিং " এর চূড়ান্ত ম্যাচ হওয়ার জন্য N এর চেয়ে অর্ধেকের বেশি বাইনারি সংখ্যা থাকতে হবে।

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

আর কোনও অ্যাডো না দিয়ে রেজেক্স:

^(?=.*?(?!(x(xx)+)\1*$)(x)*?(x(x*))(?=(\4*)\5+$)\4*$\6)(?=(((?=(x(x+)(?=\10$))*(x*))(?!.*$\11)(?=(x*)(?=(x\12)*$)(?=\11+$)\11\12+$)(?=.*?(?!(x(xx)+)\14*$)\13(x*))\16)*))\7\4(.*$\3|\4)

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

# For the purposes of these comments, the input number = N.
^
# Take the floor square root of N
(?=
    .*?
    (?!(x(xx)+)\1*$)    # tail = the largest power of 2 less than tail
    (x)*?               # \3 = nonzero if we will need to round this square root
                        #      up to the next power of two
    (x(x*))             # \4 = potential square root; \5 = \4 - 1
    (?=
        (\4*)\5+$       # Iff \4*\4 == our number, then the first match here must result in \6==0
    )
    \4*$\6              # Test for divisibility by \4 and for \6==0 simultaneously
)
# Move all binary bits to be as least-significant as possible, e.g. 11001001 -> 1111
(?=
    (                                 # \7 = tool for making tail = the result of this move
        (
            (?=
                (x(x+)(?=\10$))*(x*)  # \11 = {divisor for getting the least-significant 0 bit}-1
            )
            (?!.*$\11)                # Exit the loop when \11==0
            (?=
                (x*)                  # \12 = floor((tail+1) / (\11+1)) - 1
                (?=(x\12)*$)          # \13 = \12+1
                (?=\11+$)
                \11\12+$
            )
            (?=
                .*?
                (?!(x(xx)+)\14*$)     # tail = the largest power of 2 less than tail
                \13                   # tail -= \13
                (x*)                  # \16 = tool to move the most-significant 1 bit to the
                                      # least-significant 0 bit available spot for it
            )
            \16
        )*
    )
)
\7                  # tail = the result of the move
\4                  # Assert that \4 is less than or equal to the result of the move
(
    .*$\3
|
    \4              # Double the value of \4 to compare against if \3 is non-empty,
                    # i.e. if we had an even number of total digits.
)


3


ইপি প্রডাকশনস হ্যাঁ, এখনও "ধনাত্মক" পরমাণু নেই there's
এরিক আউটগল্ফার

আপাতদৃষ্টিতে ভাল কাজ করে: পি
ইটিএইচ প্রোডাকশনগুলি

3

জে , 12 বাইট

(+/>-:@#)@#:

জে ডান থেকে বামে ক্রিয়াগুলি কার্যকর করে, তাই আসুন শুরু করা যাক এবং শুরুতে আমাদের পথে কাজ করি।

ব্যাখ্যা

         #:       NB. Convert input to list of bits
       -:@#       NB. Half (-:) the (@) length (#)
          >       NB. Greater than 
         +/       NB. Sum (really plus (+) reduce (/)

1
(#<2*+/)@#:1 টি সংরক্ষণ করা উচিত যদি না আমি কিছু মিস করছি।
ফ্রাউনফ্রোগ




2

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

f=lambda n,c=0:f(n/2,c+n%2*2-1)if n else c>0

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

পুরাতন উত্তর, 47 বাইট

c,n=0,input()
while n:c+=n%2*2-1;n/=2
print c>0

এটি কেবল @ ক্লাব্ল্যাঙ্কের সি উত্তরের একটি বন্দর । এটি অন্যান্য পাইথন উত্তরের চেয়ে দীর্ঘ তবে আমি অনুভব করেছি যে এটি পোস্ট করা উপযুক্ত কারণ এটি উত্তর খুঁজে পাওয়ার সম্পূর্ণ ভিন্ন পদ্ধতি।

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


2

সি #, 82 বাইট

n=>{var s=System.Convert.ToString(n,2);return s.Replace("0","").Length>s.Length/2}

আপনি স্ট্রিংটিকে একটি আইনেম্যুয়াল <চার> হিসাবে বিবেচনা করে আরও কিছু ছাঁটাই করতে পারেন। n=>{var s=Convert.ToString(n,2);return s.Count(c=>c=='1')>s.Length/2;}
গ্যালাকটিক

@ গ্যালাকটিক কাউবয় এতে 11 বাইট যুক্ত করেছে কারণ আপনাকে সম্পূর্ণরূপে যোগ্যতা অর্জন করতে হবে Convertএবং অন্তর্ভুক্ত করতে হবে using System.Linq;(হিসাবে সংক্ষিপ্ত লিখিত namespace System.Linq{})। এই ক্ষেত্রে সঞ্চয়টি ওয়ারেন্ট করার জন্য দুর্দান্ত ধারণাটি যথেষ্ট পরিমাণে শেভ করে না।
TheLethalCoder
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.