পরবর্তী 1-স্পার্স বাইনারি নম্বরটি সন্ধান করুন


27

একটি ধনাত্মক পূর্ণসংখ্যা N হ'ল কে- স্পর্শে যদি এর বাইনারি উপস্থাপনায় টানা 1s এর মধ্যে কমপক্ষে K 0s থাকে।

সুতরাং, 1010101 সংখ্যাটি 1-স্পারস যেখানে 101101 নয়।

আপনার টাস্কটি প্রদত্ত ইনপুট নম্বরটির জন্য পরবর্তী 1-স্পার সংখ্যা খুঁজে পাওয়া। উদাহরণস্বরূপ, যদি ইনপুটটি 12 ( 0b1100) হয় তবে আউটপুট 16 ( 0b10000) হওয়া উচিত এবং যদি ইনপুটটি 18 ( 0b10010) হয় তবে আউটপুট 20 ( 0b10100) হওয়া উচিত ।

সবচেয়ে ছোট প্রোগ্রাম বা ফাংশন (বাইটে) জয়! স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।


"পরবর্তী" হিসাবে "পরের সর্বোচ্চ" হিসাবে বা "সর্বনিম্ন পরম পার্থক্য সহ"?
FUZxxl

"পরের সর্বোচ্চ" হিসাবে "পরের"।
আর্টিকুনো

কোন ধরণের ইনপুট পরিচালনা করতে হবে?
mbomb007

আমি ধরে নেব যে নেতিবাচক সংখ্যা হবে না।
mbomb007

@ আর্টিকুনো আমরা কি কোনও ফাংশন তৈরি করতে পারি, বা এটি একটি সম্পূর্ণ প্রোগ্রাম হতে হবে? ফাংশনগুলি বেশ মানক।
mbomb007

উত্তর:


13

পাইথ, 9 বাইট

পাইথে আমার প্রথম প্রচেষ্টা:

f!.&TyThQ

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

               implicit: Q = input()            
f      hQ      find the first integer T >= Q + 1, 
               that satisfies the condition:
 !.&TyT        T & (T * 2) is 0

9

সিজেম, 14 11 বাইট

3 বাইট ডিজিটালট্রামার জন্য ধন্যবাদ সংরক্ষণ করা।

l~{)___+&}g

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

l~          "Read and eval input.";
  {      }g "Do while...";
   )_       "Increment and duplicate (call this x).";
     __+    "Get two more copies and add them to get x and 2x on the stack.";
        &   "Take their bitwise AND. This is non-zero is as long as x's base-2
             representation contains '11'.";

এটি স্ট্যাকের শেষ সংখ্যাটি ছেড়ে দেয় যা প্রোগ্রামের শেষে স্বয়ংক্রিয়ভাবে মুদ্রিত হয়।


8

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

এটি একটি সম্পূর্ণ অজগর প্রোগ্রাম যা এন পড়ে এবং উত্তরটি মুদ্রণ করে। আমি মনে করি এটি পাঠযোগ্যতা উপ-প্রতিযোগিতায় বেশ ভাল করেছে does

n=input()+1
while'11'in bin(n):n+=1
print n

পরীক্ষার ফলাফল:

$ echo 12 | python soln.py 
16
$ echo 18 | python soln.py 
20

6

পাইথ, 12 11 বাইট

f!}`11.BThQ

এটি অনলাইনে ব্যবহার করে দেখুন: পাইথ সংকলক / নির্বাহক

               implicit: Q = input()            
f        hQ    find the first integer T >= Q + 1, 
               that satisfies the condition:
 !}`11.BT         "11" is not in the binary representation of T

1
আপনি কোনও অক্ষরে পরিণত "11"হয়ে সংরক্ষণ করতে পারেন `11
orlp

@ আরপ্প ধন্যবাদ, এটি লক্ষ্য করা উচিত ছিল।
জাকুবে

5

গণিত, 41 30 বাইট

11 টি বাইট সংরক্ষণ করেছেন মার্টিন বাটনারকে ধন্যবাদ।

#+1//.i_/;BitAnd[i,2i]>0:>i+1&

3
আপনি একটি বিবরণ যোগ করতে পারেন, দয়া করে?
mbomb007

4

পার্ল, 31

#!perl -p
sprintf("%b",++$_)=~/11/&&redo

অথবা কমান্ড লাইন থেকে:

 perl -pe'sprintf("%b",++$_)=~/11/&&redo' <<<"18"

4

এপিএল, 18 বাইট

1∘+⍣{~∨/2∧/⍺⊤⍨⍺⍴2}

এটি একটি monadic ফাংশন মূল্যায়ন। এখানে চেষ্টা করুন। ব্যবহার:

   1∘+⍣{~∨/2∧/⍺⊤⍨⍺⍴2} 12
16

ব্যাখ্যা

1∘+                    ⍝ Increment the input ⍺
   ⍣{            }     ⍝ until
     ~∨/               ⍝ none of
        2∧/            ⍝ the adjacent coordinates contain 1 1 in
           ⍺⊤⍨⍺⍴2      ⍝ the length-⍺ binary representation of ⍺.

4

জে, 20 টি অক্ষর

একটি monadic ক্রিয়া। নিয়ম মানতে স্থির ed

(+1 1+./@E.#:)^:_@>:

ব্যাখ্যা

প্রথমত, এটি স্পেসগুলির সাথে ক্রিয়া এবং তারপরে কিছুটা কম গল্ফড:

(+ 1 1 +./@E. #:)^:_@>:
[: (] + [: +./ 1 1 E. #:)^:_ >:

পড়ুন:

    ]                             The argument
      +                           plus
        [: +./                    the or-reduction of
               1 1 E.             the 1 1 interval membership in
                      #:          the base-2 representation of the argument,
[: (                    )^:_      that to the power limit of
                             >:   the incremented argument

আর্গুমেন্টের 1 1ভিত্তি -২ উপস্থাপনার মধ্যে অন্তর্নিহিত সদস্যতার হার বা হ্রাস যুক্তিটি, বর্ধিত আর্গুমেন্টের জন্য প্রয়োগ করা পাওয়ার সীমাতে।

আমি ইনপুটটির 1 1বেস -২ উপস্থাপনায় মূলত গণনা করি । যদি এটি হয়, আমি ইনপুট বৃদ্ধি করি। এটি একটি পাওয়ার-সীমাতে রাখা হয়েছে যার অর্থ ফলাফল আর পরিবর্তন না হওয়া পর্যন্ত এটি প্রয়োগ করা হয়।


চমৎকার অ্যালগরিদম! এটা তোলে APL একই দৈর্ঘ্য আছে: {⍵+∨/2∧/⍵⊤⍨⍵⍴2}⍣=
জাগারব

@ আরন্দোমরা আহ, দেখছি।
FUZxxl

4

জাভাস্ক্রিপ্ট, 25 19

1-স্পার্স বাইনারি সংখ্যার জন্য, এই সত্যটি ব্যবহার করে x&2*x == 0:

f=x=>x++&2*x?f(x):x

3

জাভাস্ক্রিপ্ট (ES6), 39 43

কোনও রেজিপ্সপ, কোনও স্ট্রিং নেই, পুনরাবৃত্ত:

R=(n,x=3)=>x%4>2?R(++n,n):x?R(n,x>>1):n

Iterative সংস্করণ:

F=n=>{for(x=3;x%4>2?x=++n:x>>=1;);return n}

এটি খুব সহজ, কেবল ১১ এর ক্রম সন্ধান করতে ডান শিফট ব্যবহার করে যখন আমি এটি খুঁজে পাই তখন পরের সংখ্যাটিতে যান। পুনরাবৃত্ত সংস্করণ সরাসরি পুনরাবৃত্তি থেকে প্রাপ্ত is

অসম্পূর্ণ এবং আরও সুস্পষ্ট। গল্ফের জন্য, কৌতূহলোদ্দীপক অংশটি অভ্যন্তরীণ এবং বাহ্যিক লুপগুলিকে মার্জ করছে (শুরুতে এক্স থেকে 3 পর্যন্ত হওয়া)

F = n=>{
  do {
    ++n; // next number
    for(x = n; x != 0; x >>= 1) {
      // loop to find 11 in any position
      if ((x & 3) == 3) { // least 2 bits == 11
        break;
      }
    }
  } while (x != 0) // if 11 was found,early exit from inner loop and x != 0
  return n
}

এটি %4>2নম্বর থিওরি থেকে কিছু জাদু বলে মনে হচ্ছে, আপনি দয়া করে ব্যাখ্যা করতে পারেন || একটি লিঙ্ক প্রদান?
জ্যাকব 13

@ জ্যাকব (x% 4> 2) কেবল ((x এবং 3) == 3), তবে অপারেটরের সাথে জেএস আপনি 2 বন্ধনী এড়াতে পারবেন
edc65

আমি যা ভাবি তার চেয়ে সরল। এখন অসম্পূর্ণ সংস্করণটি দিয়ে এটি পরিষ্কার। ধন্যবাদ!
জ্যাকব

3

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

f=input()+1
while f&2*f:f+=1
print f

x & 2*x == 01-স্পার সংখ্যাটির জন্য যুক্তি ব্যবহার করুন।
@ নিক এবং @ কার্পেট পাইথনকে ধন্যবাদ।


ডাউনটা কেন? এটি পুরোপুরি সূক্ষ্মভাবে কাজ করে এবং পাশাপাশি গল্ফযুক্ত।
ইটিএইচ প্রডাকশনগুলি

পিপিসি, বিটিডব্লিউ, এবং প্রথম প্রথম উত্তরে স্বাগতম! আমি আপনাকে সাইটে চ্যালেঞ্জের উত্তর দেওয়া চালিয়ে যেতে উত্সাহিত করছি :-)
ইটিএইচ প্রডাকশনগুলি

2

জাভাস্ক্রিপ্ট, 75 66 62 বাইট

9 বাইট এবং 4 বাইটের জন্য Pietu1998 বাঁচানোর জন্য মার্টিন বাটনারকে ধন্যবাদ!

function n(a){for(a++;/11/.test(a.toString(2));a++);return a;}

এটি কীভাবে কাজ করে: বর্তমান সংখ্যাটি 1-স্পার্স না forহওয়া পর্যন্ত এটি শুরু করে একটি লুপ চালায় a + 1এবং যদি এটি হয় তবে লুপটি ব্যাহত হয় এবং এটি বর্তমান সংখ্যাটি দেয়। একটি সংখ্যা 1-স্পারস কিনা তা পরীক্ষা করতে, এটি এটিকে বাইনারি রূপান্তরিত করে এবং এটি ধারণ করে না কিনা তা পরীক্ষা করে 11

আন-গল্ফ কোড:

function nextOneSparseNumber(num) {
    for (num++; /11/.test(num.toString(2)); num++);
    return num;
}

2

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

n->(while contains(bin(n+=1),"11")end;n)

এটি একটি বেনামি ফাংশন তৈরি করে যা একটি একক পূর্ণসংখ্যাকে ইনপুট হিসাবে গ্রহণ করে এবং পরবর্তী সর্বোচ্চ 1-স্পারস পূর্ণসংখ্যাকে প্রদান করে। এটিকে কল করতে এটির একটি নাম দিন, উদাহরণস্বরূপ f=n->..., এবং করুন f(12)

অবহেলিত + ব্যাখ্যা:

function f(n)

    # While the string representation of n+1 in binary contains "11",
    # increment n. Once it doesn't, we've got the answer!

    while contains(bin(n += 1), "11")
    end

    return(n)
end

উদাহরণ:

julia> f(12)
16

julia> f(16)
20

পরামর্শ এবং / অথবা প্রশ্নগুলি বরাবরের মতো স্বাগত!


2

> <> (ফিশ) , 31 + 3 = 34 বাইট

1+:>:  4%:3(?v~~
;n~^?-1:,2-%2<

ব্যবহার:

>python fish.py onesparse.fish -v 12
16

-vপতাকার জন্য 3 বাইট যুক্ত করা হয়েছে ।


1

জাভাস্ক্রিপ্ট (ECMAScript 6), 40

পুনরাবৃত্তি দ্বারা:

g=x=>/11/.test((++x).toString(2))?g(x):x

জাভাস্ক্রিপ্ট, 56

তীর ফাংশন ছাড়া একই।

function f(x){return/11/.test((++x).toString(2))?f(x):x}

1

স্কালা, 65 বাইট

(n:Int)=>{var m=n+1;while(m.toBinaryString.contains("11"))m+=1;m}

(যদি কোনও নামকরণের ফাংশন প্রয়োজন হয় তবে সমাধানটি হবে 69 বাইট)


1

পাইথন, 39 33 বাইট

এটি এখানে চেষ্টা করুন: http://repl.it/gpu/2

ল্যাম্বদা ফর্মে (গল্ফিংয়ের জন্য xnor ধন্যবাদ):

f=lambda x:1+x&x/2and f(x+1)or-~x

স্ট্যান্ডার্ড ফাংশন সিনট্যাক্স একবারের জন্য ল্যাম্বডারের চেয়ে খাটো হয়ে গেছে!

def f(x):x+=1;return x*(x&x*2<1)or f(x)

আপনি 33 বাইট ল্যামডা এক কমান পারেন: f=lambda x:1+x&x/2and f(x+1)or-~x। এটি আপনার বাম পরিবর্তে ডানদিকে বিট শিফট করে দেখাবে, আপনি x/2পরিবর্তে ব্যবহার করতে পারবেন (x+1)/2কারণ পার্থক্যটি সর্বদা শূন্য বিটের মধ্যে থাকে x+1। অনুমান যদিও একটি প্রোগ্রাম জিজ্ঞাসা।
xnor

আমি জিজ্ঞাসা করেছি এবং তিনি বলেছিলেন আমরা ফাংশন করতে পারি। বেশিরভাগ উত্তর ইতিমধ্যে ইতিমধ্যে।
mbomb007


0

রুবি, 44

->(i){loop{i+=1;break if i.to_s(2)!~/11/};i}

খুব বেসিক। বাইনারি প্রতিনিধিত্ব পরীক্ষা করার জন্য একটি অসীম লুপ এবং একটি রেজিএক্সপ্যাক সহ একটি ল্যাম্বদা। আমি যে loopফলিত এবং সূচক নম্বর চান।


@ mbomb007 সম্পন্ন হয়েছে। ভকভগক.
সর্বোচ্চ

0

মতলব ( 77 74 বাইট)

m=input('');for N=m+1:2*m
if ~any(regexp(dec2bin(N),'11'))
break
end
end
N

নোট:

  • এটি পরীক্ষা নম্বরে যথেষ্ট m+1করার 2*m, যেখানে mইনপুট হয়।
  • ~any(x)হয় trueযদি xসব zeros রয়েছে বা যদি xখালি

0

সি (32 বাইট)

f(int x){return 2*++x&x?f(x):x;}

অন্যান্য অনেক উত্তর হিসাবে একই অ্যালগরিদমের পুনরাবৃত্তিমূলক বাস্তবায়ন।


0

পার্ল, 16 বাইট

মিশ্রন x&2*xবিভিন্ন উত্তর থেকে (আমার ধারণা নিক এর প্রথম) সঙ্গে nutki এর redo উৎপাদনের:

perl -pe'++$_&2*$_&&redo'

স্ট্রবেরি 5.26 এ পরীক্ষিত।



0

জেলি , 7 বাইট

‘&Ḥ¬Ɗ1#

একটি সম্পূর্ণ প্রোগ্রাম একটি একক, অ-নেতিবাচক পূর্ণসংখ্যাকে গ্রহণ করে যা ধনাত্মক পূর্ণসংখ্যাকে মুদ্রণ করে (একাকী লিঙ্ক হিসাবে এটি একটি একক ধনাত্মক পূর্ণসংখ্যা সহ একটি তালিকা দেয়)।

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

কিভাবে?

শুরু করে v=n+1এবং ইনক্রিমেন্টিং, vপ্রতিটি বিট আপ এক জায়গায় স্থানান্তরিত করতে এবং বিট বুদ্ধিমান এবং এর সাথে vডাবল করুন এবং তারপরে এই জাতীয় কোনও vনম্বর পাওয়া না পাওয়া পর্যন্ত 1-স্পার হয় কিনা তা পরীক্ষা করার জন্য যৌক্তিক নয় NOT

‘&Ḥ¬Ɗ1# - Main Link: n   e.g. 12
‘       - increment           13
     1# - 1-find (start with that as v and increment until 1 match is found) using:
    Ɗ   -   last three links as a dyad:
  Ḥ     -   double v
 &      -   (v) bit-wise AND (with that)
   ¬    -   logical NOT (0->1 else 1)
        - implicit print (a single item list prints as just the item would)

0

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

╦>ù╤x

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

এটি এই পদ্ধতিটি ব্যবহার করে কাজ করে। স্ট্যাকের উপরে ইনপুট শুরু হয়।

  • দুবার বৃদ্ধি এবং অনুলিপি।
  • স্ট্যাকের অর্ধেক শীর্ষে।
  • বিটওয়াইস এবং স্ট্যাকের শীর্ষ দুটি উপাদান।
  • ফলাফলটি সত্যবাদী হলে (শূন্য নয়) পুরো প্রোগ্রামটি পুনরাবৃত্তি করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.