টুর্নামেন্টের রাজা কে?


13

পটভূমি

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

ইনপুট এবং আউটপুট

আপনার ইনপুটটি একটি N × Nবুলিয়ান ম্যাট্রিক্স Tএবং allyচ্ছিকভাবে N ≥ 2প্রতিযোগীদের সংখ্যা । প্রতিটি এন্ট্রি T[i][j]প্রতিযোগীদের iএবং খেলাগুলির মধ্যে ফলাফলটির প্রতিনিধিত্ব করে এবং jমান 1 এর সাথে একটি জয় iএবং 0 টিতে একটি জয়ের প্রতিনিধিত্ব করে j। মনে রাখবেন যে T[i][j] == 1-T[j][i]যদি i != j। এর তির্যকটি T0 টি নিয়ে গঠিত।

আপনার আউটপুটটি T0-ভিত্তিক বা 1-ভিত্তিক সূচক ব্যবহার করে টুর্নামেন্টের বাদশাহদের তালিকা হবে । রাজাদের ক্রমটি অপ্রাসঙ্গিক, তবে সদৃশ হওয়া উচিত নয়।

ইনপুট এবং আউটপুট উভয়ই যুক্তিসঙ্গত বিন্যাসে নেওয়া যেতে পারে।

বিধি এবং স্কোরিং

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

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

এই পরীক্ষার কেসগুলি 0-ভিত্তিক সূচক ব্যবহার করে। 1-ভিত্তিক সূচকের জন্য, প্রতিটি আউটপুট মান বৃদ্ধি করুন।

 2 [[0,0],[1,0]] -> [1]
 3 [[0,1,0],[0,0,0],[1,1,0]] -> [2]
 3 [[0,1,0],[0,0,1],[1,0,0]] -> [0,1,2]
 4 [[0,1,1,1],[0,0,1,0],[0,0,0,0],[0,1,1,0]] -> [0]
 4 [[0,1,1,0],[0,0,1,0],[0,0,0,1],[1,1,0,0]] -> [0,2,3]
 5 [[0,1,0,0,1],[0,0,0,0,1],[1,1,0,0,0],[1,1,1,0,1],[0,0,1,0,0]] -> [3]
 5 [[0,1,0,1,0],[0,0,1,1,1],[1,0,0,0,0],[0,0,1,0,1],[1,0,1,0,0]] -> [0,1,4]
 5 [[0,0,0,0,0],[1,0,1,1,0],[1,0,0,0,1],[1,0,1,0,1],[1,1,0,0,0]] -> [1,3,4]
 6 [[0,0,0,0,0,0],[1,0,1,1,0,0],[1,0,0,1,1,0],[1,0,0,0,1,1],[1,1,0,0,0,1],[1,1,1,0,0,0]] -> [1,2,3,4,5]
 6 [[0,0,1,1,1,0],[1,0,0,1,1,1],[0,1,0,0,1,0],[0,0,1,0,0,1],[0,0,0,1,0,1],[1,0,1,0,0,0]] -> [0,1,2,3,5]
 6 [[0,1,1,0,0,1],[0,0,0,1,0,1],[0,1,0,1,1,0],[1,0,0,0,1,1],[1,1,0,0,0,0],[0,0,1,0,1,0]] -> [0,1,2,3,4,5]
 8 [[0,0,1,1,0,1,1,1],[1,0,1,0,1,1,0,0],[0,0,0,1,1,0,0,0],[0,1,0,0,0,1,0,0],[1,0,0,1,0,1,0,0],[0,0,1,0,0,0,1,0],[0,1,1,1,1,0,0,1],[0,1,1,1,1,1,0,0]] -> [0,1,4,6,7]
20 [[0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1],[1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1],[0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1],[0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1],[1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1],[0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,0,1],[0,0,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0],[1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0],[1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1],[1,0,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,1],[1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0],[0,1,1,0,0,1,1,0,0,1,0,0,1,1,1,1,1,0,1,1],[0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,1,1],[1,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1],[0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,1],[0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1],[0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1],[0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1],[1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0]] -> [0,1,3,4,5,7,8,11,15,17,18]

(কোন রান সময় বা মেমরি সীমা আছে?) কিছুই নয়। আমি অনুমানটি পুরোপুরি ভুল বুঝেছি।
ডেনিস

@ ডেনিস নোপ আপনার প্রোগ্রাম যতক্ষণ তাত্ত্বিকভাবে সীমাহীন সময় এবং মেমরির দ্বারা কাজ করবে, আপনি ভাল আছেন।
জাগারব

কেবল স্পষ্ট করে বলার জন্য: টি [এ] [বি] টি টি একই সাথে মিল রয়েছে [বি] [ক] তবে বিপরীত কোণ থেকে দেখা হয়েছে, তাই টি [এ] [বি] ==! টি [বি] [এ]
এডসি Mar65

@ edc65 এটি একটি ভাল পর্যবেক্ষণ। আমি এটিকে চ্যালেঞ্জ হিসাবে সম্পাদনা করেছি into
জাগারব

উত্তর:


9

মতলব, 36 35 29 বাইট

@(T,N)find(sum(T*T>-T,2)>N-2)

আসুন আমরা iরাজা কিনা তা খুঁজে বের করি । তারপরে প্রতিটি jমানের জন্য T[i][j]==1 OR there is a k such that T[i][k] * T[k][l] == 1। তবে দ্বিতীয় শর্তটিও প্রতিস্থাপন করা যেতে পারে sum_over_k(T[i][k] * T[k][l])>0তবে এটি কেবল ম্যাট্রিক্সের প্রবেশ T*T(যদি আপনি Tম্যাট্রিক্স হিসাবে বিবেচনা করেন)। ORতারপর যোগ করে গুলোতে যেতে পারে T, যে ফলাফল তাই আমরা চেক করতে যদি আছে n-1সারির মান iএর T*T+Tকিনা দেখতে শূন্য তার চেয়ে অনেক বেশী হয়, iরাজা। এটি আমার ফাংশনটি ঠিক তাই করে।

(এটি ম্যাটল্যাব, সুতরাং সূচকগুলি 1-ভিত্তিক)

ম্যাটল্যাব ম্যাট্রিকগুলি সেমিকোলনগুলিকে লাইন ডেলিফিটর হিসাবে এনকোড করা উচিত:

[[0,0,0,0,0];[1,0,1,1,0];[1,0,0,0,1];[1,0,1,0,1];[1,1,0,0,0]] 

আপনি সম্ভবত প্রতিযোগীদের সংখ্যা ইনপুট হিসাবে গ্রহণের পরিবর্তে কয়েকটি বাইট সংরক্ষণ করতে পারেনsize(T,1)
লুইস মেন্ডো

7

জেলি, 13 12 11 বাইট

a"€¹o/€oḅ1M

আউটপুট 1-ভিত্তিক। এটি অনলাইন চেষ্টা করুন!

বিকল্পভাবে, অ্যারে হেরফেরের পরিবর্তে বিটওয়াইজ অপারেটরগুলি ব্যবহার করা:

×Ḅ|/€|ḄBS€M

আবার আউটপুটটি 1-ভিত্তিক। এটি অনলাইন চেষ্টা করুন!

পটভূমি

প্রতিযোগী জন্য একটি , আমরা সব জানতে পারেন বি যেমন যে একটি বীট সি বীট বি সব সারি করে একটি মিলা গ্রহণ করে সি যেমন যে সি একটি বীট । Ifr বি তম প্রবেশ সি তম হয় 1 , আমরা যে আছে সি বি বীট

যদি আমরা নির্বাচিত কলামগুলির সাথে সম্পর্কিত সমস্ত এন্ট্রিগুলির লজিকাল ওআরগুলি গণনা করি, তবে আমরা এএ সিঙ্গেল ভেক্টর পেয়েছি যে এটিকে বিসিত করে ট্রানজিটিভিটি দ্বারা বিট করে কিনা । অবশেষে, ইনপুট ম্যাট্রিক্সের সংশ্লিষ্ট সারিটির সাথে ফলাফলযুক্ত ভেক্টরকে ORing দিলে Booleans হয় A বি বি হয়, তা ট্রানজিটিভিটি দ্বারা বা সরাসরি হয়।

প্রত্যেক সারিতে এই পুনরাবৃত্ত, আমরা সংখ্যা গণনা 1 প্রতিটি ভেক্টর 's, অতএব প্রতিযোগী পরিমাণ প্রতিটি কম্পিউটিং একটি বীট। সর্বাধিক গণনা টুর্নামেন্টের রাজাদের সাথে সম্পর্কিত।

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

a"€¹o/€oḅ1M  Main link. Argument: M (matrix)

   ¹         Yield M.
  €          For each row of M:
a"           Take the logical AND of each entry of that row and the corr. row of M.
    o/€      Reduce each resulting matrix by logical OR.
       o     Take the logical OR of the entries of the resulting maxtrix and the
             corr. entries of M.
        ḅ1   Convert each row from base 1 to integer, i.e. sum its elements.
          M  Get all indices of maximal sums.
×Ḅ|/€|ḄBS€M  Main link. Argument: M (matrix)

 Ḅ           Convert each row of M from base 2 to integer. Result: R
×            Multiply the entries of each column of M by the corr. integer.
  |/€        Reduce each row fo the resulting matrix by bitwise OR.
     |Ḅ      Bitwise OR the results with R.
       BS€   Convert to binary and reduce by sum.
             This counts the number of set bits for each integer.
          M  Get all indices of maximal popcounts.

1
আপনি কি জানেন যে লোকেরা এগুলি পোস্ট করে এবং এক্স "বাইটস" বলে চলেছে, তবে "ḅ" আসলেই কোনও মানক এনকোডিংয়ে 1 বাইটে এনকোড হয়? দুঃখিত, তবে আমি এই হাইপার-কনডেন্সড স্ট্যাক-ভিত্তিক ভাষাগুলিকে সম্পূর্ণরূপে উদ্বেগজনক বলে মনে করি কারণ এটি কেবল একটি ইউনিকোড চরিত্রের জন্য প্রতিটি অনুমেয় ফাংশন নির্ধারণের জন্য প্রতারণার মতো বলে মনে হয়।
ম্যাটপুটনাম

2
@ ম্যাটপুটনাম জেলি নিজস্ব কাস্টম এনকোডিং ব্যবহার করে। (এছাড়াও এটি স্ট্যাক-ভিত্তিক নয়)
একটি স্প্যাগেটো

2
@ ম্যাটপুটনামের আমারও একইরকম অনুভূতি রয়েছে তবে তারা traditionalতিহ্যবাহী গল্ফ থেকে মোটেই বিরক্ত হন না। এগুলি বিদ্যমান বলেই কেউ traditionalতিহ্যবাহী ভাষাগুলি তাকায় না এবং অন্য এসই সাইটের তুলনায়, এর ঠিক এই উত্তরটি 'উত্তরটির চেয়ে অবজেক্টিকভাবে ভাল' হয় না। এছাড়াও, প্রযুক্তিগতভাবে অনুমোদিত না হলেও, তারা কোনও প্রশ্নের সমর্থনের জন্য ভাষা পরিবর্তন করে না (যদিও তারা সত্যিকার অর্থে ভবিষ্যতের প্রশ্নের জন্য একটি দরকারী শর্টকাট বুঝতে পারে এবং এটি একটি ক্রিয়াকলাপ করতে পারে)।
কর্সিকা

কেন এই অ্যালগরিদমগুলি রাজাকে আউটপুট দেয়?
xnor

@ ডেনিস আমি এখন দেখতে পাচ্ছি, এর মূলত বুলিয়ান ম্যাট্রিক্সের গুণটি যুক্তি বা বিট পাটিগণ্যের মাধ্যমে করা হয়েছে। আসল ম্যাট্রিক্সের গুণটি আরও ছোট হবে না?
xnor

2

পাইথন নম্পি, 54 বাইট ব্যবহার করে

import numpy
lambda M:(M**0+M+M*M).all(1).nonzero()[0]

একটি নপি ম্যাট্রিক্স গ্রহণ করে, 0-ভিত্তিক সূচকগুলির একটি অদ্ভুত সারির ম্যাট্রিক্সকে আউটপুট করে।

রাজার কথা চিন্তা করার আর একটি উপায় হ'ল প্রতিযোগী হিসাবে, যার জন্য সমস্ত প্রতিযোগী রাজার মিলনে থাকে, রাজা লোকদের মারধর করে এবং people লোকরা যে লোকদের মারধর করে। অন্য কথায়, প্রতিটি প্রতিযোগীর জন্য, "বিট" সম্পর্কের মধ্যে রাজা থেকে তাদের কাছে কমপক্ষে 2 দৈর্ঘ্যের পথ রয়েছে।

ম্যাট্রিক্স I + M + M*Mপ্রতিটি উত্স থেকে প্রতিটি লক্ষ্য পর্যন্ত 0, 1, বা 2 পদক্ষেপের সংখ্যাকে এনকোড করে। খেলোয়াড় একজন রাজা হন যদি তাদের ম্যাট্রিক্সের সারিটিতে কেবল ইতিবাচক প্রবেশিকা থাকে। যেহেতু 0 টি ফালসি, allএকটি সারিটি সব ননজারো কিনা তা আমাদের জানান। আমরা এটি প্রতিটি সারিতে প্রয়োগ করি এবং ননজারো ফলাফলের সূচকগুলি আউটপুট করি।


দেখতে আমার পদ্ধতির মতো দেখতে তবে একটি ভিন্ন ব্যাখ্যা সহ, আকর্ষণীয় =)
ফ্লোয়ার

2

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

a=>a.map((b,i)=>b.every((c,j)=>c|i==j|b.some((d,k)=>d&a[k][j]))&&r.push(i),r=[])&&r

আপনি a => a.map ((b, i) => b.Every ((c, j) => c | i == j | b.some ((d, k) => d & a এর সাহায্যে 1 টি সংরক্ষণ করতে পারেন [ কে] [জে])) এবং & আমি + ১) ফিল্টার (এ => এ) তবে এর অর্থ হল আপনাকে 1-সূচকযুক্ত আউটপুট দিতে হবে যা একটি মারাত্মক ঝাঁকুনি
চার্লি উইন

2

এমএটিএল , 12 10 9 বাইট

Xy+HY^!Af

ইনপুটটি হ'ল: প্রথম প্রতিযোগীর সংখ্যা এবং পৃথক লাইনে একটি ম্যাট্রিক্স সেমিকোলন দ্বারা পৃথক পৃথক সারিতে। আউটপুট 1-ভিত্তিক।

উদাহরণস্বরূপ, পঞ্চম পরীক্ষার ক্ষেত্রে ইনপুট রয়েছে

4
[0,1,1,0; 0,0,1,0; 0,0,0,1; 1,1,0,0]

এবং শেষ পরীক্ষার ক্ষেত্রে ইনপুট রয়েছে has

20
[0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1; 1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1; 0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1; 0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1; 1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1; 0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,0,1; 0,0,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0; 1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0; 1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1; 1,0,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,1; 1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0; 0,1,1,0,0,1,1,0,0,1,0,0,1,1,1,1,1,0,1,1; 0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,1,1; 1,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1; 0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,1; 0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1; 0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1; 0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1; 1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0; 0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0]

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

ব্যাখ্যা

Xy    % Implicitly take input: number. Push identity matrix with that size
+     % Implicitly take input: matrix. Add to identity matrix
HY^   % Matrix square
!     % Transpose
A     % Row vector with true entries for columns that contain all nonzero values
f     % Indices of nonzero values

1
এমএটিএল <জেলি \ এম /
ফ্লাওয়ার

1

জাভাস্ক্রিপ্ট 136 131 121 112 বাইট

(n,m)=>m.map((a,k)=>eval(a.map((o,i)=>o||eval(a.map((p,j)=>p&&m[j][i]).join`|`)).join`+`)>n-2&&k+1).filter(a=>a)

কল করে:

f=(n,m)=>m.map((a,k)=>eval(a.map((o,i)=>o||eval(a.map((p,j)=>p&&m[j][i]).join`|`)).join`+`)>n-2&&k+1).filter(a=>a)

f(20,[[0,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,0,1],
     [1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1],
     [0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,1,1],         
     [0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1],
     [1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,0,1],         
     [0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,0,1],
     [0,0,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,1,0],         
     [1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0],
     [1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1],         
     [1,0,1,0,1,0,1,1,0,0,1,0,0,0,0,1,0,1,1,1],
     [1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0],         
     [0,1,1,0,0,1,1,0,0,1,0,0,1,1,1,1,1,0,1,1],
     [0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,1,1,1],         
     [1,0,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1],
     [0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,1],         
     [0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1],
     [0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1],         
     [0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1],
     [1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0],             
     [0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0]])

ওয়াচআউট কারণ আউটপুটটি 1-ইনডেক্সড (কয়েক বাইট সংরক্ষণ করা যায় না যা 0 সে বনাম ফলসগুলি ফিল্টার করার চেষ্টা করে)

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