অনুমানের সমতা


14

পটভূমি

একটি বিন্যাস এর সমতা , যেমন উইকিপিডিয়া দ্বারা সংজ্ঞায়িত , নিম্নরূপ:

একটি অনুগামের স্বাক্ষর বা স্বাক্ষর s sgn (σ) হিসাবে চিহ্নিত করা হয় এবং +1 সমান হলে +1 এবং σ1 বিজোড় হলে defined1 হিসাবে সংজ্ঞায়িত করা হয়।

একটি আদেশের চিহ্নটি স্পষ্টভাবে হিসাবে প্রকাশ করা যেতে পারে

sgn (σ) = (−1) ^ N (σ)

যেখানে এন (σ) হ'ল ইনভার্সনের সংখ্যা σ।

বিকল্পভাবে, একটি ক্রমবর্ধনের চিহ্ন transp এর ক্ষয় থেকে সংক্রমণ হিসাবে পণ্য হিসাবে সংজ্ঞা দেওয়া যেতে পারে σ

sgn (σ) = (−1) ^ মি

যেখানে মিটি পচনতে সংক্রমণের সংখ্যা।

আপনারা যারা তাদের গণিতে গ্রীক বর্ণমালা স্যুপকে পছন্দ করেন না তাদের জন্য আমি উদাহরণ দিয়ে কিছুটা সংজ্ঞাটি আরও সহজ করে তুলব (উইকিপিডিয়া থেকেও চুরি হয়েছে)।

উদাহরণ

ইনপুট অ্যারে {1, 2, 3, 4, 5}, এবং এর একটি ক্রম বিবেচনা করুন , আসুন বলা যাক {3, 4, 5, 2, 1}। আসল অ্যারে থেকে এর ক্রম ছাড়তে যাওয়ার জন্য আপনাকে অবশ্যই সূচকগুলিকে অদলবদল করতে হবে 0এবং 2, 1এবং 3তারপর 2এবং 4। যদিও এটি কোনও অনন্য সমাধান নয়, সমতাটি সুস্পষ্টভাবে সংজ্ঞায়িত হয়েছে সুতরাং এটি সমস্ত ক্ষেত্রেই কাজ করে।

যেহেতু এটির জন্য 3 টি অদলবদল প্রয়োজন, আমরা এই oddপ্যারিটিটি একটি প্যারিটির সাথে লেবেল করি । যেমনটি আপনি প্রত্যাশা করতে পারেন, এমন এক ক্রমশক্তি যা সমান পরিমাণে অদলবদলের প্রয়োজন তার একটি evenসমতা থাকার কথা বলা হয় ।

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি হ'ল একটি ক্রমের অনুপাত নির্ধারণ করার জন্য যতটা সম্ভব কম বাইটে একটি প্রোগ্রাম লিখুন। আপনার প্রোগ্রাম বা ফাংশন অবশ্যই:

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

পরীক্ষার কেস

ধরে নিচ্ছি আপনি নামের একটি ফাংশন ঘোষণা করেছেন f:

f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"

এটি , বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রাম!


4
লোকেরা কঠোর আউটপুট ফর্ম্যাট পছন্দ করবে না। এমনকি সত্যের পক্ষে এবং বিজোড়ের পক্ষে মিথ্যা কীভাবে? (বা অন্য উপায়ে)
ক্যালকুলেটরফলাইন

আমি প্রকৃতপক্ষে নির্ধারিত আউটপুট ফর্ম্যাটটি ধরে রাখার প্রত্যাশা করছিলাম যদি না অন্য কেউ এর দ্বারা সত্যই বিরক্ত হয়। সম্পাদনা করুন, আমি আপস করব।
প্যাট্রিক রবার্টস


ঠিক আছে, আমি অনুমান করি আমরা দেখতে পাব!
ক্যালকুলেটরলাইন

শুভ রাত্রি! আপনি কখন এটিতে ফিরে আসবেন সে জন্য এখানে কয়েকটি পরামর্শ দেওয়া হয়েছে (তবে দয়া করে নিজেকে পরীক্ষা করুন): [10], [10] -> e(শূন্য স্থানান্তর)। [10 30 20], [30 20 10] -> e(দুটি স্থানান্তর) [10 30 20 40], [30 20 40 10] -> o(তিনটি স্থানান্তর)
লুইস মেন্ডো

উত্তর:


5

জেলি, 13 12 বাইট

żṗ2</€⁺Sị“oe

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

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

żṗ2</€⁺Sị“oe  Main link. Arguments: A, B (lists)

ż             Zip A with B. Yields an array of pairs [x, σ(x)].
 ṗ2           Generate all pairs [[x, σ(x)], [y, σ(y)]].
   </€        Reduce each pair by </€.
              This maps [[x, σ(x)], [y, σ(y)]] to [x < y, σ(x) < σ(y)].
      ⁺       Repeat the previous link, i.e., execute </€ once more.
              This maps [x < y, σ(x) < σ(y)] to ((x < y) < (σ(x) < σ(y))), which is
              true if and only if x > y and σ(x) < σ(y).
       S      Sum. This counts the number of inversions.
        ị“oe  Retrieve the letter at the corresponding index.
              Indexing is 1-based and modular, so an odd sum retrieves the first
              letter, an even sum the second.

1
এটি চিত্তাকর্ষকভাবে ছোট। যশ!
প্যাট্রিক রবার্টস

6

এমএটিএল , 17 16 বাইট

ডেনিসের পরামর্শের জন্য 1 বাইট সরানো হয়েছে

2$St!<Rz2\'oe'w)

এটি ভাষার বর্তমান সংস্করণে (15.0.0) কাজ করে।

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

ব্যাখ্যা

এটি বিপর্যয়ের ক্ষেত্রে সমতার সংজ্ঞা ব্যবহার করে। বিপর্যয় হ'ল দ্বিতীয় অ্যারেতে এমন এক জোড়া উপাদান যা প্রথম অ্যারের সাথে তুলনা করে "ভুল" ক্রমে থাকে। যেহেতু প্রথম অ্যারেটি বাছাই করা দরকার না, তাই আমরা প্রথমে এটি বাছাই করি এবং সেই বাছাইয়ের জন্য প্রয়োজনীয় একই পুনর্বিন্যাসটি দ্বিতীয় অ্যারেতে প্রয়োগ করা হয়। তারপরে একটি বিবর্তন এক জোড়া উপাদানগুলির সাথে সামঞ্জস্য করে যা দ্বিতীয় অ্যারেতে বৃদ্ধি পাচ্ছে না।

দুটি ইনপুট অ্যারে অদলবদল করা যেতে পারে এবং ফলাফল একই। সুতরাং কোন অ্যারেটিকে "আসল" এবং কোনটি "অনুমোদিত" হিসাবে বিবেচিত হবে তা গুরুত্বপূর্ণ নয়।

2$S     % implicitly take two row vectors. Sort second and apply the indices
        % of that sorting to the first
t!      % duplicate. Transpose into column vector
<       % true for elements of the column vector that exceed those of the 
        % row vector. Gives a 2D array with all pairs of comparisons
R       % keep only upper triangular part of that array
z       % number of nonzero elements. This is the number of inversions
2\      % parity of that number: gives 0 or 1
'oe'w   % push string 'eo' below the top of the stack
)       % apply index to produce 'e' or 'o'. An index 1 refers to the first
        % element, whereas 0 refers to the last. Implicitly display 

1
এটি সত্যিই চতুর সমাধান!
অ্যালেক্স এ।

@AlexA। ধন্যবাদ! প্রাক অর্ডারিং অংশটি কী করে তা স্পষ্ট করতে আমি উত্তর সম্পাদনা করেছি: আমরা একটি অ্যারে বাছাই করি এবং তারপরে সেই সাজানোর জন্য প্রয়োজনীয় পুনরায় সাজানোটি অন্য অ্যারেতে প্রয়োগ করা হয়।
লুইস মেন্ডো

1
আপনার এমএটিএলতে মডুলার ইনডেক্সিং যুক্ত করা উচিত। এখানে 3 বাইট সাশ্রয় হবে।
ডেনিস

@ ডেনিস হ্যাঁ, আমি প্রায়শই সে সম্পর্কে ভেবেছিলাম ... তবে বর্তমানে এটি এমন একটি বিন্যাস ব্যবহার করেছে যেখানে নেতিবাচক মানগুলির আলাদা অর্থ রয়েছে। আমি যে অর্ডার ফর্ম সূচকের আছে বেছে নেওয়া হয়েছে x(1:end-2)স্পষ্টভাবে আকার ইঙ্গিত ছাড়া ইত্যাদি x। এটি একটি ভাল পছন্দ ছিল কিনা তা নিশ্চিত নন তবে আমার ধারণা এখনই পরিবর্তিত হতে অনেক দেরি হয়েছে :-) সম্ভবত আমি মডুলার ইনডেক্সিং যুক্ত করার একটি উপযুক্ত উপায় খুঁজে পাব
লুইস মেন্ডো

... এবং বর্তমান দৈর্ঘ্য অতিক্রম সূচকগুলি নতুন মান নির্ধারণ করতে ব্যবহৃত হয়। তবে সূচকটির 0"শেষ এন্ট্রি" এর অর্থ রয়েছে, তাই আমি একটি বাইট সংরক্ষণ করতে পারি (বৃদ্ধিটি সরিয়ে ফেলতে পারি)। ধারণার জন্য ধন্যবাদ!
লুইস মেন্ডো

5

অক্টাভ, 56 52 বাইট

দেখে মনে হচ্ছে যে কেউ এখন পর্যন্ত এই পদ্ধতিকে ব্যবহার করছে না: মূলত আমি কেবলমাত্র এইরকম ক্রমান্বয়ে ম্যাট্রিকের নির্ধারকগুলি ব্যবহার করছি। এক্সপ্রেশন det(eye(nnz(a))(a,:))ভেক্টর দ্বারা সংজ্ঞায়িত ক্রমানুসারণ ম্যাট্রিক্সের নির্ধারককে প্রদান করে a। তারপরে এটি ফলাফলের উপর নির্ভর করে স্ট্রিং থেকে সঠিক চরিত্রটি বের করার বিষয়।

p=@(v)eye(nnz(v))(v,:);@(a,b)'ole'(det(p(a)*p(b))+2)

2
নির্ধারকগুলি ব্যবহার করার জন্য ভাল ধারণা। ওলে!
লুইস মেন্ডো

5

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

k%l|m<-zip k l=cycle"eo"!!sum[1|(a,b)<-m,(c,d)<-m,a<c,b>d]

ব্যবহার:

*Main> [8,3,5]%[5,3,8]
'o'

আমার পাইথন উত্তর হিসাবে একই পদ্ধতি । গর্বিত হাসেলেলার সাথে একটি বাইট সংরক্ষণ করেছেন cycle


1
এর cycle"eo"!!...পরিবর্তে আপনি "eo"!!mod(...)2একটি বাইট সংরক্ষণ করে লিখতে পারেন ।
গর্বিত হাসেল্লার

4

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

lambda*M:"eo"[sum(a<b<M>A>B for a,A in zip(*M)for b,B in zip(*M))%2]

ব্যবহার:

>>> f=lambda*M:"eo"[sum(a<b<M>A>B for a,A in zip(*M)for b,B in zip(*M))%2]
>>> f([8,3,5],[5,3,8])
'o'

দুটি জিপড তালিকার বিপরীত সংখ্যার সংখ্যা গণনা করে, i, e। মান (a,A)এবং (b,B)সঙ্গে একই সূচিতে প্রতিটি তালিকা থেকে a<bএবং A>B। এই তুলনাগুলি সংযুক্ত হিসাবে a<b<M>A>B, সম্পত্তিটি ব্যবহার করে যে তালিকাটি Mকোনও সংখ্যার চেয়ে বেশি। সমষ্টি তারপর মডিউল 2 তোলা পরিণত হয় eবা o


3

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

(a,b)=>"eo"[r=0,g=a=>a.map((e,i)=>a.slice(i).map(d=>r^=d<e)),g(a),g(b),r]

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


1
কমা জন্য আকর্ষণীয় জায়গা .. আপনি কি করতে পারেন তা জানেন না। -1 বাইটের জন্য কারি করার বিষয়ে ভুলবেন না
প্যাট্রিক রবার্টস

2

গণিত, 77 বাইট

If[Mod[Plus@@Length/@(Join[{0},#]&)/@PermutationCycles[#][[1]],2]==0,"e","o"]&

আমি রাজী!


হ্যান্ড ফাংশন, দুর্ভাগ্যক্রমে দীর্ঘ নাম!
প্যাট্রিক রবার্টস

বিরক্তিকর, তাই না? আমি ঘ্রিনা করি Cycles। এটি PermutationCycles'র নামের আকারটিকে বাধা দেয় এবং এমনকি PermutationCyclesনির্বোধ, কোনও Cyclesবস্তু ফিরিয়ে দেয় ! `
ক্যালকুলেটরফলাইন

2

গণিত, 31 বাইট

If[Tr[Signature/@{##}]==0,o,e]&

স্বাক্ষর [তালিকা] তালিকার উপাদানগুলি ক্যানোনিকাল ক্রমে রাখার জন্য প্রয়োজনীয় ক্রমের স্বাক্ষর দেয়

আমরা প্রথমে কোনও তালিকাতে একটি তালিকা পুনরায় অর্ডার করে (অন্যথায় একটি তালিকাটিকে এই নিয়ম অনুসারে) পুনঃক্রম করতে পারি এবং এই তালিকাটিকে চূড়ান্ত তালিকায় পুনরায় অর্ডার করতে পারি। উভয় উপ-অনুমানের চিহ্ন সমান হলে সামগ্রিক ক্রম ছাড়ার চিহ্নটি সমান।

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