শারকোস্ক্কির অদ্ভুত অর্ডার


33

ভূমিকা

এই চ্যালেঞ্জে আমরা ইতিবাচক পূর্ণসংখ্যার একটি নির্দিষ্ট ক্রম নিয়ে কাজ করব। অর্ডারটি এরকম হয়:

   3,    5,    7,    9,    11, ...
 2*3,  2*5,  2*7,  2*9,  2*11, ...
 4*3,  4*5,  4*7,  4*9,  4*11, ...
 8*3,  8*5,  8*7,  8*9,  8*11, ...
16*3, 16*5, 16*7, 16*9, 16*11, ...
 ...
... 64, 32, 16, 8, 4, 2, 1

আমরা প্রথমে সমস্ত বিজোড় পূর্ণসংখ্যা 1 টিরও বেশি উপরে আরোহণের ক্রমের তালিকায় রাখি। তারপরে আমরা 1 টির চেয়ে 2 গুণ বেশি বেস্ট পূর্ণসংখ্যার তালিকা তৈরি করব, তারপরে 4 বার, তারপরে 8 বার এবং আরও কিছুর জন্য: সমস্ত কে জন্য , আমরা 2 কে -বেটের বেদ সংখ্যাটিকে 1 টিরও বেশি উপরে ক্রম হিসাবে তালিকাভুক্ত করি । অবশেষে, আমরা 2 টির উত্থানের ক্রমে তালিকাবদ্ধ করে 1 টিতে সমাপ্ত হব । প্রতিটি ইতিবাচক পূর্ণসংখ্যা এই "তালিকায়" ঠিক একবার হয় occurs

আরও সুস্পষ্টভাবে, দুটি স্বতন্ত্র ধনাত্মক পূর্ণসংখ্যার A = n · 2 p এবং B = m · 2 q বিবেচনা করুন , যেখানে n, m ≥ 1 বিজোড় এবং p, q q 0 হয় । তারপর একজন সামনে আসে বি যদি নিম্নলিখিত শর্ত এক ঝুলিতে, ক্রম মধ্যে:

  • n> 1 , এম> 1 এবং পি <কিউ
  • 1 <এন <এম এবং পি = কিউ
  • n> মি = 1
  • n = m = 1 এবং p> কিউ

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

কাজটি

এই চ্যালেঞ্জটিতে আপনার কাজটি উপরের ক্রমটি গণনা করা। আপনার ইনপুটগুলি দুটি ধনাত্মক পূর্ণসংখ্যা এ এবং বি হয় , যা সমান হতে পারে। আপনার আউটপুট একটি truthy মান যদি একটি সামনে আসে বি ক্রম মধ্যে, এবং একটি falsy মান অন্যথায়। যদি এ = বি হয় তবে আপনার আউটপুট সত্য হওয়া উচিত। আপনি যতক্ষণ না সামঞ্জস্য থাকেন ততক্ষণ আপনি উভয় ক্রমে A এবং B নিতে পারেন ।

আপনাকে পূর্ণসংখ্যার ওভারফ্লো সম্পর্কে চিন্তা করার দরকার নেই, তবে আপনার অ্যালগোরিদম তাত্ত্বিকভাবে ইচ্ছামত বৃহত ইনপুটগুলির জন্য কাজ করা উচিত।

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

সত্য ঘটনা

3 11
9 6
48 112
49 112
158 158
36 24
14 28
144 32
32 32
32 8
3 1
1 1

মিথ্যা উদাহরণ

1 2
1 5
11 5
20 25
2 8
256 255
256 257
72 52
2176 1216
2176 2496

উত্তর:


6

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

f=(a,b)=>b<2||a>1&&(a&b&1?a<=b:a&1|~b&f(a/2,b/2))

ব্যাখ্যা:

  • খ যদি 1 হয়, তবে পূর্ববর্তী (বা সমান) খ
  • অন্যথায়, যদি a 1 হয় তবে a এর পূর্বে বি হয় না
  • অন্যথায়, ক এবং খ উভয়ই যদি অদ্ভুত হয় তবে নিয়মিত অসমতার চেক ব্যবহার করুন
  • অন্যথায়, যদি কোনও বিজোড় হয় তবে এর আগে খ
  • অন্যথায়, বি যদি বিজোড় হয় তবে ক এর আগে খ হয় না
  • অন্যথায়, a এবং b উভয়কে 2 দ্বারা ভাগ করুন এবং আবার চেষ্টা করুন।

সম্পাদনা করুন: @ আর্নল্ডকে 2 বাইট সংরক্ষণ করা হয়েছে


খুশী হলাম। আমি এখানে পুনরাবৃত্তির ব্যবহার সম্পর্কে ভাবি নি। চান a&1|~b&1&f(a/2,b/2)কাজ করে?
— আর্নৌল্ড

@ আরনাউল্ড আমি নিশ্চিত নই, আমি আশঙ্কা করেছিলাম যে এটি অনির্দিষ্টকালের জন্য লুপ হয়ে যাবে।
— নিল

এটি b<2শেষ পর্যন্ত সত্য হতে পারে কারণ । এখন, আরেকটি সমস্যা হ'ল আপনি প্রয়োজনের চেয়ে আরও বেশি পুনরাবৃত্তি প্রক্রিয়া করবেন এবং ভাসমান পয়েন্টের মান পাবেন। তবে আমি এমন কোনও কাউন্টারিকাম নমুনা পাই না যা প্রত্যাশার মতো কাজ করবে না।
— আর্নৌল্ড

@ আরনাউল্ড আহ, ঠিক আছে, আমি b<2মূলত ব্যবহার করছিলাম না তবে আমার ধারণা এখন এটি কার্যকর হবে।
— নিল

@Arnauld আরও ভালো হয়, যেহেতু f(a/2,b/2)শুধুমাত্র আয় 0, 1, falseবা true, আমি প্রয়োজন হবে না &1।
— নিল

5

পাইথন 2, 87 71 বাইট

k=lambda n:[n&~-n<1,(n&-n)*cmp(n&~-n,1),n/(n&-n)]
lambda a,b:k(a)<=k(b)

এটি সম্ভবত কোনও আকারের পুরষ্কার জিততে পারে না, তবে এই উত্তরটি পূর্ণসংখ্যার থেকে 3 টি এক্সপ্রেশন ব্যবহার করে 3-টুপল তৈরি করে কাজ করে যা ডিক্সিকোগ্রাফিকভাবে অর্ডার করা হলে সঠিক ক্রম হয়।

পঠনযোগ্য পদগুলিতে, টিপলটি A = n · 2 পি এর জন্য :

[n == 0, p * (1 - 2*(n == 0)), n]

5

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

lambda*l:cmp(*[([-n][n&n-1:],n&-n,n)for n in l])<1

প্রতিটি নম্বর একটি ট্রিপল ম্যাপ করা হয় যার সাজানো ক্রম পছন্দসই আদেশ।

  • প্রাথমিক মান হ'ল [-n][n&n-1:], যা শেষে 2 এর শক্তি পরিচালনা করে। বিটওয়াইজ "এবং" n&n-1শূন্য হুবহু যখন nএকটি পাওয়ার হয় 2। যদি তা হয় তবে আমরা তালিকাটি পাই [-n]এবং অন্যথায় খালি তালিকা []। এটি ক্রমকে ক্রমহ্রাসমানের অর্ডার শেষে 2 এর সমস্ত ক্ষমতা রাখে।
  • গৌণ মানটি n&-n2 এর পাওয়ার-অফ ফ্যাক্টরটি বের করে n।
  • চূড়ান্ত মান nটাইব্রেকস বৃহত্তর সংখ্যার পক্ষে 2 সমান শক্তি।

cmpসেই তুলনা কিনা তা দেখার জন্য সংশ্লিষ্ট টিপলগুলি পাস করা হয়েছে <=0। পাইথন 3 ট্রিপলের (n&n-1<1)/nপ্রথম মানটির জন্য ভাসমান বিভাগের সাথে একটি বাইট সংরক্ষণ করবে , তবে অভাব রয়েছে cmp।


cmp(...)<=0সমান নয় কি cmp(...)<1?
— ম্যাথমান্ডন

@ মঠমন্ডন হ্যাঁ :)
— xnor

আমি মনে করি ইন্টিজারগুলি বিপরীত ক্রমে নেওয়া এবং তার ~পরিবর্তে ব্যবহার করা জায়েজ আছে<1
— মিচ শোয়ার্টজ

4

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

সম্ভবত আরও কিছু গল্ফ করা যেতে পারে তবে প্রথম প্রচেষ্টা হিসাবে:

x=>y=>(a=x&-x,x/=a,b=y&-y,y/=b,y<2?x>1|b<=a:x>1&(b>a|b==a&y>=x))

কারিটিং সিনট্যাক্সের সাথে ইনপুট নেয় (x)(y)। রিটার্ন 0/ 1।

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


আপনি চারপাশে এবং ভিতরে বন্ধনীগুলি বের করতে পারেন b>a||(b==a&&y>=x), কার্যকর করতে কোনও পার্থক্য তৈরি করবে না।
— XavCo7

@ জাভকো 7 ভিতরে বন্ধনীগুলি সরিয়ে ফেলা ঠিক আছে তবে কাছাকাছি নয়। সমস্ত বিদ্যমান পরীক্ষার কেসগুলি এখনও পাস হবে তবে কোনও ইনপুট যেমন [1, 5]ভুলভাবে সত্য হিসাবে চিহ্নিত হবে।
— আর্নৌল্ড

1
@ আরনাউল্ড আমি এটি ভবিষ্যতের জন্য একটি নতুন পরীক্ষার কেস হিসাবে যুক্ত করব।
— Zgarb

3

পার্ল 6 , 89 84 বাইট

->\a,\b{my \u=*>max a,b;a==first a|b,flat [1,2,4...u].&{(3*$_,5*$_...u for $_),.reverse}}

{my \u=*>@_.max;@_[0]==first @_.any,flat [1,2,4...u].&{.map(*X*(3,5...u)),.reverse}}

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

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

উদাহরণ স্বরূপ:

  • ইনপুট জন্য 2, 3এটি উত্পন্ন:

    3 5
    6
    12
    4 2 1
    ... এবং তারপরে এটি 3প্রদর্শিত হবে 2।

  • ইনপুট জন্য 9, 6এটি উত্পন্ন:

    3 5 7 9 11
    6 10
    12
    24
    48
    16 8 4 2 1
    ... এবং তারপরে এটি 9প্রদর্শিত হবে 6।

এটি স্মার্ট হতে পারে এবং আরও কম ক্রম উত্পন্ন করতে পারে তবে কোডের আরও বাইট লাগবে।


2

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

f=lambda a,b:b<2or[f(a/2,b/2),a>1,0,1<a<=b][a%2+b%2*2]

নীল এর অনুরূপ একটি পুনরাবৃত্ত সমাধান।


এটি মনে হচ্ছে কিছু পরীক্ষার কেস কেটে গেছে। এটি f(158,158)মিথ্যা এবং f(2,8)সত্য বলে।
— xnor

@ এক্সনর ওফস, এখনই ঠিক করা উচিত।
— orlp

এটি f(1,5)মিথ্যা বলে ।
— xnor

আমার খারাপ, আমি বোঝাতে চাইছি f(1,5)এটি মিথ্যা হওয়া উচিত তবে কোডটি সত্য দেয়।
— xnor

@ এক্সনর আহ, আমি বাগটি ঠিক করেছি, এখনই ঠিক করা হয়েছে (ভালোর জন্য আমি আশা করি)। আমি কিছুটা আলগাভাবে নীলের বর্ণনা অনুসরণ করতে গিয়েছিলাম।
— orlp

1

গণিত, 65 বাইট

OrderedQ[{1,#}&/@#//.{a_,b_/;EvenQ@b}->{2a,b/2}/.{a_,1}->{∞,-a}]&

নামহীন ক্রিয়াকলাপটি ইতিবাচক পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে এবং Trueযদি তালিকাটি Falseঅন্যথায় শরকভস্কি ক্রমটিতে একটি আরোহণের ক্রম তৈরি করে তবে ফিরে আসা । (বিশেষত, ইনপুট তালিকায় কেবলমাত্র দুটি উপাদান থাকতে হবে না — আমরা বিনামূল্যে সংযোজন কার্যকারিতা পাই))

অ্যালগরিদমের হৃদয় হ'ল ফাংশন {1,#}&/@#//.{a_,b_/;EvenQ@b}->{2a,b/2}, যা বারবার 2 এর কারণকে ফর্মের পূর্ণসংখ্যাকে বিজোড় m*2^kসহ mআদেশযুক্ত জোড়ায় রূপান্তরিত {2^k,m}করে (এবং ইনপুট তালিকার প্রতিটি উপাদানকে করে) moves OrderedQতারপরে সিদ্ধান্ত নেওয়া হয়েছে যে অর্ডারযুক্ত জোড়ার ফলাফলের তালিকাটি ইতিমধ্যে বাছাই করা হয়েছে; ডিফল্টরূপে, এর অর্থ প্রথম উপাদান দ্বারা ক্রম বাড়ানো, তারপরে দ্বিতীয় উপাদান দ্বারা ক্রম বাড়ানো।

এটি হ'ল আমরা যা চাই, 2 টির সংখ্যাগুলি বাদ দিয়ে বিভিন্ন বিধি অনুসরণ করে। তাই সঙ্গে যাচাই আগে OrderingQ, আমরা এক শেষ নিয়ম প্রযোজ্য /.{a_,1}->{∞,-a}, যা পরিবর্তিত (উদাহরণস্বরূপ) {64,1}থেকে {∞,-64}; যে ক্রম 2 সঠিক স্থানে শক্তি রাখে।


0

হাস্কেল, 143 138 বাইট

মূলত মানদণ্ডের তুলনামূলকভাবে সরল বাস্তবায়ন:

e n=head[k-1|k<-[0..],n`mod`(2^k)>0]   -- exponent of 2
f n=n`div`2^e n                        -- odd part
a#b|n<-f a,p<-e a,m<-f b,q<-e b=n>1&&(m>1&&p<q||n<m&&p==q||m<2)||n<2&&m<2&&p>q||a==b  

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


0

পাইথন, 159 158 153 144 142 141 বাইট

সংরক্ষিত একটি 2 Kritixi Lithos ধন্যবাদ বাইট!

এটি মূলত আমার পাইথনের গল্ফিং অনুশীলন করার জন্য!
সমস্ত চালক উত্তরের পদ্ধতির চেয়ে ওপি প্রদত্ত সূত্রটি ব্যবহার করুন

f=lambda a,p=0:(a&1)*(a,p)or f(a>>1,p+1)
t=lambda(n,p),(m,q):(n==1)*(m==1)&(p>=q)or (m>1)&(p<=q)|(n<=m)&(p==q)or m==1
lambda a,b:t(f(a),f(b))

অপ্রয়োজনীয় স্পেসগুলি সরিয়ে আপনি এটি গল্ফ করতে পারেন: উদাহরণস্বরূপ (a, b)দ্বিতীয় লাইনে যেখানে আপনি কমা এবং এর মধ্যে স্থান সরাতে পারেন b।
— ক্রিটিকি লিথোস

0

এপিএল (ডায়ালগ প্রসারিত) , 27 বাইট

1⊃∘⍋⍮⍥{p⍵⍮⍨-⍵⍴⍨⍵=2*p←⊥⍨~⊤⍵}

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

একটি সূক্ষ্ম ডায়াডিক ফাংশন যার বাম আর্গুমেন্ট aএবং ডানদিকেb ।

এক্সনোর পাইথন 2 সমাধানের জন্য পদ্ধতির প্রায় একইরকম , আমরা প্রতিটি সংখ্যাকে একটি নেস্টেড অ্যারেতে রূপান্তর করি এবং তাদের মধ্যে শব্দকোষ তুলনা করি।

পর্ব 1: সংখ্যাটিকে নেস্টেড অ্যারেতে রূপান্তর করুন

{p⍵⍮⍨-⍵⍴⍨⍵=2*p←⊥⍨~⊤⍵}  ⍝ Input: positive integer N
                  ⊤⍵   ⍝ Convert N to binary digits
                 ~     ⍝ Flip all the bits (1 to 0, 0 to 1)
             p←⊥⍨      ⍝ Count trailing ones and assign it to p
                       ⍝ (maximum power of 2 that divides N)
         ⍵=2*          ⍝ Test if N itself is equal to 2^p
     -⍵⍴⍨              ⍝ If true, create 1-element array containing -N;
                       ⍝ otherwise, an empty array
 p⍵⍮⍨                  ⍝ Form a 2-element nested array;
                       ⍝ 1st element is the above, 2nd is [p, N]

পার্ট 2: দুটি নেস্টেড অ্যারে তুলনা করুন

1⊃∘⍋⍮⍥f  ⍝ Input: A (left) and B (right)
     ⍥f  ⍝ Evaluate f A and f B
    ⍮    ⍝ Create a 2-element nested array [f A, f B]
   ⍋     ⍝ Grade up; indexes of array elements to make it sorted
         ⍝ Here, the result is [0 1] if A ≤ B, [1 0] otherwise
1⊃∘      ⍝ Take the element at index 1 (0-based)

ডিএফএন সিনট্যাক্স শর্তযুক্ত বিবৃতি যেমন {a:x ⋄ b:y ⋄ z}অর্থের সমর্থন করে if a then x else if b then y else z, তবে এটি এই ক্ষেত্রে ব্যবহারের পক্ষে খুব ভার্জোজ ।


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