মিয়া সেটসের অর্ডার


9

ডাইস গেম মিয়া দুটি আকারের সেটগুলির একটি খুব অ-তুচ্ছ ক্রম প্রবর্তন করে:

{3,1} < {3,2} < {4,1} < {4,2} < {4,3} < {5,1} < {5,4} < {6,1} < {6,5} < {1,1} < {2,2} < {6,6} < {1,2}

সাধারণভাবে, একটি টিউপলের মধ্যে অর্ডারটি গুরুত্বপূর্ণ নয় {x,y}={y,x}, {1,2}অন্য যে কোনও কিছুর চেয়ে বড়, জোড়গুলি অ জোড়ের চেয়ে বেশি এবং সংখ্যার মান টাইয়ের ক্ষেত্রে সিদ্ধান্ত নেয়।

এখন ধরুন আপনি nপাশা ব্যবহার করতে চান । এছাড়াও, পাশা mমুখ আছে।

উদাহরণ:

  • {1,5,3,4} < {1,2,6,3} 5431 থেকে <6321
  • {1,2,3,5} < {1,1,5,6} < {1,1,5,5}, {1,1,6,6} < {1,1,1,3} < {2,2,2,3} < {1,1,1,1} < {1,2,3,4}
  • {2,2,5} < {1,1,6} যেহেতু উভয় সেটগুলির প্রতিটি এক জোড়া এবং 611> 522 রয়েছে

সংক্ষেপে, {1, ..., n}অন্য যে কোনও কিছুর চেয়ে বড়। আসুন p > q, তাহলে পি-অফ-এ-টাইপ কি-অফ-এ-ধরণের চেয়ে বড়। টাই করার ক্ষেত্রে, দ্বিতীয় (, তৃতীয়, ...) - দীর্ঘতম-এক ধরণের জয় ins অবশেষে, যদি এখনও কোনও সিদ্ধান্ত নেওয়া না যায়, সর্বাধিক সংখ্যার মানটি জিততে পারে। একটি সংখ্যার মানটি হ'ল বৃহত্তম সংখ্যার পূর্ণসংখ্যা যা আপনি সেটটিতে উপলভ্য সংখ্যাগুলি থেকে কাঠামো ব্যবহার করে তৈরি করতে পারেন। উদাহরণ:

  • {2,5,4,3} 5432 হয়ে যায়
  • {4,11,3,4} বি 443 (> 6-মুখী ডাইস অনুমোদিত, বি = 11) হয়ে যায়

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

দ্রষ্টব্য: আপনি ধরে নিতে পারেন যে দুটি পাত্রে একই দৈর্ঘ্য রয়েছে এবং কেবলমাত্র ইতিবাচক পূর্ণসংখ্যা রয়েছে তবে অন্য কিছুই নয়। বিশেষত এগুলি বাছাই করা যায় না। রিটার্ন মান যে কোনও কিছু হতে পারে, যেমন {প্রথম জয়, টাই, দ্বিতীয় জয়} এর জন্য {-1, 0, 1}}


1
কোনটি জয়ী {1,1,6}, {2,2,5}? আপনি কি সবচেয়ে বড় পি-এর ধরণের সংখ্যার মান বা কোনও ডাইসের তুলনা করেন?
মার্টিন এন্ডার

1
ক্রমটি সম্পর্কে আমার বোঝাপড়াটি সঠিক কিনা তা আমাকে পরীক্ষা করতে দিন: প্রথমে, {1, ..., n। সর্বোচ্চ। প্রতিটি তালিকার জন্য, সর্বাধিক সাধারণ মানটি গ্রহণ করুন এবং সমানভাবে সাধারণ মানগুলিও সবচেয়ে বড় গ্রহণ করে। যদি একটি তালিকায় এর বেশি থাকে তবে এটি জিতবে। যদি সমানভাবে সাধারণ হয়, তবে যেটি বৃহত্তর জয়। সাধারণতা এবং মান উভয়ের ক্ষেত্রে সমান হলে, প্রতিটি তালিকা থেকে সেগুলি মুছে ফেলুন এবং আবার তুলনা করুন।
xnor

@ মার্টিন: দুর্দান্ত প্রশ্ন। আমি অনুমান করি যে এটি সম্পর্কে কোনও "প্রমানিক" সিদ্ধান্ত নেই, এবং যেহেতু আমার জুলিয়া প্রোগ্রামটি বলে {1,1,6} ২,২,৫,৫ over এর বেশি জিতেছে, তবে এটি ঠিক এটি that
পাসবি

@ এক্সনর: হ্যাঁ, তবে মার্টিনের মন্তব্য এবং আমার উত্তর বিবেচনা করুন।
পাসবি

@ ওভোভো ওহ হ্যাঁ, এটি আসলে আপনার উদাহরণ বিবেচনা করে বিবেচনা করে তোলে যেখানে আপনি সংখ্যাগুলি বৃহত্তর থেকে ক্ষুদ্রতম পর্যন্ত বাছাইয়ের পরে সংখ্যাসূচক মান অনুসারে বাছাই করেন।
মার্টিন ইন্ডার

উত্তর:


2

জেলি , 16 বাইট

ṢŒrUṢṚZ
Ṣ⁼J;ǵÐṀ

প্রতিটি তালিকার একটি তালিকা নেয় যার প্রত্যেকটি রোলকে প্রতিনিধিত্ব করে (তাই চাইলে দু'জনেরও বেশি হতে পারে) এবং বিজয়ীর তালিকা ফেরত দেয়।

এটি অনলাইন চেষ্টা করুন! ... বিকল্পভাবে এখানে এমন একটি সংস্করণ যা রোলগুলি দুর্বল থেকে শক্তিশালী পরিবর্তে সাজায়।

কিভাবে?

Ṣ⁼J;ǵÐṀ - Main link: list of list of dice rolls, L
     µÐṀ - filter keep maximal (i.e. sort L by the previous link as a key and keep maximums)
         -                                            e.g. [5,3,1,3]
Ṣ        -     sort roll                                   [1,3,3,5]
  J      -     range(length(roll))                         [1,2,3,4]
 ⁼       -     equal? [1,2,3,...n] beats everything        0
    Ç    -     call last link as a monad with input roll   [[2,1,1],[3,5,1]]
   ;     -     concatenate                                 [0,[2,1,1],[3,5,1]]

ṢŒrUṢṚZ - Link 1, rest of sort key: dice rolls        e.g. [5,3,1,3]
Ṣ       - sort the roll                                    [1,3,3,5]
 Œr     - run length encode                                [[1,1],[3,2],[5,1]]
   U    - upend (reverse each)                             [[1,1],[2,3],[1,5]]
    Ṣ   - sort                                             [[1,1],[1,5],[2,3]]
     Ṛ  - reverse                                          [[2,3],[1,5],[1,1]]
      Z - transpose                                        [[2,1,1],[3,5,1]]
        -     ...this is a list of: 1) the group sizes descending; and
                 2) the face values of each group, descending across equal group sizes

@oVooVo গলফ চেষ্টা করার সময় এটি আরো আমি যে লক্ষ্য 1,1,2এবং 1,2,2সমান বলিয়া গণ্য করা হয়, কিন্তু বৈশিষ্ট বর্তমানে তারাও পার্থক্য নেই।
জোনাথন অ্যালান

@oVooVo আরও পরিদর্শন উপর উদাহরণস্বরূপ হয়েছে {1,1,5,6} < {1,1,5,5}যেখানে 6 > 5। আপনি কি স্পষ্ট করতে পারেন?
জোনাথন অ্যালান

@oVooVo হয়তো এটা কেমন হওয়া উচিত এই - আমি "সর্বোচ্চ নির্বাচন", প্রতিস্থাপিত হয়েছে ÐṀ, কেমন সঙ্গে, Þউদাহরণস্বরূপ থেকে আইটেমগুলি ব্যবহার করে এটি তাদের একই আদেশ মধ্যে বাছাই করে - উদ্দেশ্যে পরীক্ষার জন্য। ব্যবহৃত ক্রমটি হ'ল: প্রথমে যদি এটি "শীর্ষ-কুকুর" হয়, তারপরে সমান মুখগুলি অবতরণ করে এবং অবশেষে অনন্য মুখগুলি অবতরণ করে।
জোনাথন অ্যালান

{1,1,5,5 এর দুটি "2-অফ-এ-টাইপ" রয়েছে: (1,1) এবং (5,5)। 1 1,1,5,6। এর মধ্যে কেবল একটি "2-অফ-এ-টাইপ" রয়েছে। অতএব {1,1,5,5। জয়। মান এখানে কিছু যায় আসে না। একইভাবে, {1,1,2,2}>, 4,5,6,6}}
পাসবি

{1,2,2}> {1,1,2}। কারণ উভয়েরই এক-ধরণের এক-সংখ্যা রয়েছে, সংখ্যার টাই-ব্রেকিং প্রযোজ্য। 2 1,2,2} => 221 এবং {1,1,2} => 211। স্পষ্টতই 221 211 এর চেয়ে বড় I
পাসবি

2

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

(a,b,g=a=>a.map(n=>e[n]=e[n]+1||1,e=[1])&&[[...e].every(n=>n==1),...e.filter(i=x=>x).sort(h=(a,b)=>b-a),...a.sort(h)],c=g(a),d=g(b))=>d.map((n,i)=>n-c[i]).find(i)

ব্যাখ্যা: প্যারামিটার হিসাবে দুটি অ্যারে নেয়। gপ্রতিটি অ্যারে গণনাগুলির তালিকায় রূপান্তর করে। তারপরে তালিকাটি এটি কোনও সেটের সাথে মিলে যায় কিনা তা পরীক্ষা করে দেখুন 1..n। গণনাগুলি বাছাই করা হয় এবং সাজানো মানগুলি সংক্ষেপিত হয়। দুটি ফলাফলের সাথে তখন তুলনা করা হয়। দ্বিতীয় অ্যারে জিতলে রিটার্ন মানটি ধনাত্মক পূর্ণসংখ্যা এবং প্রথম অ্যারে জিতলে negativeণাত্মক পূর্ণসংখ্যা হয়, অন্যথায় মিথ্যা জাভাস্ক্রিপ্ট মানটি undefinedফিরে আসে।


আপনার প্রোগ্রামটি {1,1,6 says <{2,2,5। বলছে, যা ভুল।
পাসবি

@ oVooVo দুঃখিত, আমি অবশ্যই নিয়মগুলি ভুল বুঝতে পেরেছি (আমি ভেবেছিলাম আপনি দীর্ঘতম এক ধরণের সংখ্যার মানের উপর ভিত্তি করে সম্পর্কগুলি ভেঙে দিয়েছেন)।
নীল

0

পিএইচপি 333 বাইট

আমি ধরে নিলাম যে রাস্তার কম 1 দিয়ে শুরু হয়ে সর্বাধিক মানটির জন্য মুখের কম রয়েছে ices

আমি আরও কিছু করা। ইনপুট হ'ল একটি অ্যারে যার পরে আরও দুটি মান থাকে। আউটপুটটি বাছাই করা অ্যারে।

<? $m=$_GET[m];foreach($m as$k=>$v){rsort($v);$m[$k]=$v;}function t($a,$b){if($a==$r=range($x=count($a),1))return 1;elseif($b==$r)return-1;$c=array_pad(array_values(array_count_values($a)),$x,0);$d=array_pad(array_values(array_count_values($b)),$x,0);rsort($c);rsort($d);if($e=$c<=>$d)return$e;return$a<=>$b;}usort($m,t);print_r($m);

ভাঙ্গন

$m=$_GET["m"]; # Array as Input
foreach($m as$k=>$v){
    rsort($v); # reverse sort of an item
    $m[$k]=$v; # replace the sort item
}
function t($a,$b){ #sorting algorithm
    if($a==$r=range($x=count($a),1))return 1; # $a is highest value
    elseif($b==$r)return-1; # $b is highest value
    $c=array_pad(array_values(array_count_values($a)),$x,0); 
# prepare check multiple values for fist value
    $d=array_pad(array_values(array_count_values($b)),$x,0); 
# prepare check multiple values for second value
    rsort($c);
    rsort($d);
    if($e=$c<=>$d)return$e; # compare first and second multiples
    return$a<=>$b; # compare dices
}
usort($m,"t"); # start sort
print_r($m); #print sorted array from low to high

0

জুলিয়া (489 বাইট)

function a(x,y)l=length;g=collect;s=sort;m=maximum;r=repmat;function b(z)w=sum(r(z,1,m(z)).==r(g(1:m(z))',l(z),1),1);u=zeros(m(w));map(i->if i>0 u[i]+=1;end,w);return u end;function c(x,y)if l(x)>l(y)return-1 elseif l(x)<l(y)return 1 else for i=l(x):-1:1 if x[i]>y[i] return-1 elseif x[i]<y[i] return 1 end end;return 0;end end;x=s(x);y=s(y);if x==y return 0;elseif x==g(1:l(x));return-1 elseif y==g(1:l(y))return 1 else d=c(b(x),b(y));if d==0 return c(x,y);else return d;end end end

রিডেবল:

  1 function a(ds1, ds2)
  2     function countNOfAKind(ds)
  3         # return array. n-th value is number of occurences of n-of-a-kind.
  4         # e.g. findNOfAKind([1, 1, 1, 2, 2, 3, 3]) == [0, 2, 1]
  5         ps = sum(repmat(ds, 1, maximum(ds)) .== repmat(collect(1:maximum(ds))', length(ds), 1), 1);
  6         ls = zeros(maximum(ps));
  7         map(i -> if i>0 ls[i] += 1 end, ps);
  8         return ls
  9     end
 10 
 11     function cmpLex(ds1, ds2)
 12         # compare ds1, ds2 reverse-lexicographically, i.e. compare last distinct value.
 13         if length(ds1) > length(ds2)
 14             return -1
 15         elseif length(ds1) < length(ds2)
 16             return 1
 17         else
 18             for i = length(ds1):-1:1
 19                 if ds1[i] > ds2[i]
 20                     return -1
 21                 elseif ds1[i] < ds2[i]
 22                     return 1
 23                 end
 24             end
 25             return 0;
 26         end
 27     end
 28     
 29     ds1=sort(ds1);
 30     ds2=sort(ds2);
 31     if ds1 == ds2
 32         return 0;
 33     elseif ds1 == collect(1:length(ds1))
 34         return -1
 35     elseif ds2 == collect(1:length(ds2))
 36         return 1
 37     else
 38         d = cmpLex(countNOfAKind(ds1), countNOfAKind(ds2))
 39         if d == 0
 40             return cmpLex(ds1, ds2);
 41         else
 42             return d;
 43         end
 44     end
 45 end

আপনি কেন দৈর্ঘ্যের তুলনা করছেন? নির্দেশাবলী "দুটি ধারক একই দৈর্ঘ্য আছে" বলে। আমি কিছু অনুপস্থিত করছি?
ডেভিডসি

আমি 31 লাইনে দৈর্ঘ্যের তুলনাটি সরিয়েছি It এটি প্রয়োজনীয় ছিল না তবে আঘাতও করেন নি। লাইন 15 এর সাথে তুলনা করা প্রয়োজনীয়, যেহেতু সিএমপিএলেক্স শুধুমাত্র কাঁচা ইনপুটগুলি তুলনা করতে লাইন 40-এ ব্যবহৃত হয় না, তবে গণনা নোফাকাইন্ডের ফলাফলের তুলনা করতে 38 লাইনেও ব্যবহার করা হয়। এই ফাংশনটি তবে সমান আকারের ইনপুটগুলির জন্য বিভিন্ন আকারের আউটপুট তৈরি করতে পারে: countNOfAKind ([3,2]) = [2] (কারণ এখানে দুটি নিঃসঙ্গ সংখ্যা (3 এবং 2)), গণনাএনওফাকিন্ড ([2,2]) = [0, 1] (কারণ কোনও একাকী সংখ্যা এবং একজোড়া নেই
পাসবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.