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


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.