জয়, পরাজয়ের এবং ড্রয়ের একটি সারণী দেওয়া, একটি ক্রীড়া টুর্নামেন্টে প্রতিটি ম্যাচের ফলাফল আউটপুট


11

এই প্রশ্নটি চলমান টুর্নামেন্ট দ্বারা অনুপ্রাণিত হয়েছে "ভদ্রলোকদের দ্বারা চালিত গুন্ডা খেলা", রাগবি বিশ্বকাপ , যা সবেমাত্র পুলের মঞ্চটি শেষ করেছে। টুর্নামেন্টে 20 টি দল রয়েছে এবং তাদের 5 টি টির 4 টি পুলে বিভক্ত। পুলের পর্যায়ে প্রতিটি দল তাদের পুলের অন্য সমস্ত দলের বিপক্ষে খেলবে (পুল প্রতি মোট 10 টি ম্যাচ) এবং প্রতিটি পুলের শীর্ষ 2 টি দল নকআউট পর্যায়ে অগ্রসর হয়।

পুলের পর্যায়ে শেষে প্রতিটি পুলের জন্য একটি টেবিল রয়েছে যা প্রতিটি দলের জন্য জয়ের সংখ্যা, ক্ষতির পরিমাণ এবং ড্র দেখায়। এই প্রশ্নের চ্যালেঞ্জটি হ'ল এমন একটি প্রোগ্রাম লিখুন যা একটি পুলে প্রতিটি দলের জন্য জয়, লোকসানের গণনা এবং অঙ্কন করে এবং সেই তথ্য থেকে 10 ম্যাচের প্রত্যেকটির পৃথক ফলাফল (কে জিতল, হেরেছিল বা কার বিপক্ষে ড্র করেছিল) ) সম্ভব হলে বা যদি না হয় তবে একটি ত্রুটি বার্তা আউটপুট করে।

উদাহরণস্বরূপ, এই বছরের টুর্নামেন্টের পুল ডি এর টেবিলটি এখানে:

            Win    Loss    Draw
Canada        0       4       0
France        3       1       0
Ireland       4       0       0
Italy         2       2       0
Romania       1       3       0

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

         Canada  France Ireland   Italy Romania
Canada        -       L       L       L       L
France        W       -       L       W       W
Ireland       W       W       -       W       W
Italy         W       L       L       -       W
Romania       W       L       L       L       -

এখানে আরও জটিল (কাল্পনিক) উদাহরণ:

            Win    Loss    Draw
Canada        3       1       0
France        1       2       1
Ireland       0       3       1
Italy         0       2       2
Romania       4       0       0

এই ক্ষেত্রে, আমরা অনুমান করতে পারি যে রোমানিয়া কানাডা, ফ্রান্স, ইতালি এবং আয়ারল্যান্ডের বিপক্ষে জিতেছে, কারণ তারা তাদের সমস্ত গেম জিতেছে। কানাডা অবশ্যই আয়ারল্যান্ড, ইতালি এবং ফ্রান্সের বিপক্ষে জিতেছে তবে রোমানিয়ার কাছে হেরেছে। আমরা সবেমাত্র কাজ করেছি যে ইতালি রোমানিয়া এবং কানাডার কাছে হেরেছে, সুতরাং তারা অবশ্যই ফ্রান্স এবং আয়ারল্যান্ডের বিপক্ষে ড্র করেছে। তার মানে আয়ারল্যান্ড ইতালির সাথে ড্র করেছে এবং অন্য সবার কাছে হেরেছে এবং তাই ফ্রান্স অবশ্যই আয়ারল্যান্ডকে পরাস্ত করেছে, ইতালির সাথে ড্র করেছে এবং কানাডা ও রোমানিয়ার কাছে হেরেছে।

         Canada  France Ireland   Italy Romania
Canada        -       W       W       W       L
France        L       -       W       D       L
Ireland       L       L       -       D       L
Italy         L       D       D       -       L
Romania       W       W       W       W       -

কিছু টেবিল অবিশ্বাস্য, উদাহরণস্বরূপ এই বছরের পুল বি, যেখানে 3 টি দল একই ডাব্লু / এল / ডি মোট পেয়েছিল:

            Win    Loss    Draw
Japan         3       1       0
Samoa         1       3       0
Scotland      3       1       0
South Africa  3       1       0
United States 0       4       0

তবে সদৃশ সারি সহ কয়েকটি সারণী দ্রবণযোগ্য, এইগুলির মতো (কাল্পনিক):

            Win    Loss    Draw
Japan         4       0       0
Samoa         0       3       1
Scotland      2       2       0
South Africa  0       3       1
United States 3       1       0

ইনপুট

আপনার প্রোগ্রাম বা ফাংশনটিতে 5 টি দলের প্রত্যেকের জন্য জয়, হার এবং মোট অঙ্কন উল্লেখ করে 15 নম্বর গ্রহণ করা উচিত। আপনি যে কোনও ডিলিমিটারটি চান তা ব্যবহার করতে পারেন, সারি বা কলামের বড় ক্রমে নম্বরগুলি ইনপুট করতে পারেন, এবং স্টিডিনের মাধ্যমে নম্বরগুলি গ্রহণ করুন বা কোনও ফাংশনে অ্যারের মাধ্যমে দিয়ে যেতে পারেন।

যেহেতু জয় + লোকসান + ড্র করে = ৪, আপনি চাইলে মানগুলির মধ্যে একটি বাদ দিতে পারেন এবং অন্যের কাছ থেকে এটি কাজ করে নিতে পারেন, এর অর্থ হ'ল আপনাকে কেবল 10 নম্বর ইনপুট করতে হবে।

আপনার কোনও দলের নাম ইনপুট করার দরকার নেই।

নমুনা ইনপুট:

3 1 0
1 2 1
0 3 1
0 2 2
4 0 0

আউটপুট

আপনার প্রোগ্রাম বা ফাংশনটির আউটপুট স্টাডআউটে মুদ্রিত 5 x 5 গ্রিড আকারে হওয়া উচিত, বা কোনও ক্রিয়াকলাপ থেকে অ্যারে ফিরে আসা উচিত। প্রতিটি উপাদানের সারি পজিশনে দেওয়া দলটি কলাম পজিশনে দলের বিপক্ষে জিতেছে, হারেছে বা ড্র করেছে কিনা তা নির্দিষ্ট করা উচিত। আউটপুট জন্য সারি ক্রম ক্রম ইনপুট মেলে উচিত। আপনি কোনটি জয়, পরাজয় বা অঙ্কন বোঝায় তা সংজ্ঞায়িত করতে পারেন, তাই ডাব্লু, এল, ডি বা অঙ্ক 0 1 2 বা আপনি যা চান অক্ষরগুলি যতক্ষণ সেগুলি স্পষ্টভাবে সংজ্ঞায়িত হয় এবং একে অপরের থেকে পৃথক করা যায় তা ব্যবহার করা যেতে পারে। তির্যক উপাদানগুলি অপরিবর্তিত, আপনি যে কোনও কিছু আউটপুট করতে পারেন, তবে প্রতিটি ক্ষেত্রে এটি একই হওয়া উচিত। মানগুলি কমা, ফাঁকা জায়গা বা আপনার পছন্দ মতো চরিত্রের সাথে আলাদা করা যেতে পারে, বা চরিত্র নয়। চাইলে ইনপুট এবং আউটপুট উভয়ই একক লাইনে সমস্ত মান সহ ফর্ম্যাট করা যায়।

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

নমুনা আউটপুট:

- W W W L
L - W D L
L L - D L
L D D - L
W W W W -

অবিশ্বাস্য টেবিলের জন্য নমুনা আউটপুট:

dunno mate

এটি কোড গল্ফ তাই বাইটের মধ্যে সবচেয়ে সংক্ষিপ্ত প্রোগ্রাম।

পিক সম্পর্কিত (জাপান বনাম দক্ষিণ আফ্রিকা):

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


4

সিজেম, 57 49 47 45 বাইট

{JZb:af{.*e_1+e!}:m*:e_5f/{_z2\ff-=},_,(0@?~}

এটি একটি বেনাম ফাংশন যা স্ট্যাক থেকে দ্বিমাত্রিক অ্যারে পপ করে এবং বিনিময়ে একটি ছেড়ে দেয়। এটি 2জয়, 1ড্র এবং 0ক্ষতির জন্য রয়েছে। এটিতে 1তির্যক উপাদানগুলির জন্য রয়েছে , যার জন্য আপনি যে কোনও কিছু আউটপুট করতে পারেন । সমস্যা সমাধানযোগ্য না হলে, ফাংশনটি ফিরে আসে -1

কোডটি অনলাইনে কাজ করবে তবে এতে কিছুটা সময় লাগবে। সিজেএম ইন্টারপ্রেটারে এটি ব্যবহার করে দেখুন ।

টেস্ট রান

$ cat input
3 1 0
1 2 1
0 3 1
0 2 2
4 0 0
$ time cjam results.cjam < input
[1 2 2 2 0]
[0 1 2 1 0]
[0 0 1 1 0]
[0 1 1 1 0]
[2 2 2 2 1]

real    0m1.584s
user    0m4.020s
sys     0m0.146s

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

JZb:a e# Push 19 in base 3; wrap each digit in an array. Pushes [[2] [0] [1]].
f{    e# For each row of the input, push it and [[2] [0] [1]]; then:
  .*  e# Repeat 2, 0 and 1 (win, loss, draw) the specified number of times.
  e_  e# Flatten the resulting array.
  1+  e# Append a 1 for the diagonal.
  e!  e# Push all possible permutations.
}     e#
:m*   e# Cartesian product; push all possible combinations of permutations.
:e_   e# Flatten the results.
5f/   e# Split into rows of length 5.
{     e# Filter:
  _z  e#   Push a transposed copy of the array.
  2\  e#   Swap the result with 2.
  ff- e#   Subtract all elements from 2.
  =   e#   Check for equality.
},    e# Keep the element if `=' pushed 1.
_,(   e# Get the length of the array of solutions and subtract 1.
0@?   e# Keep the array for length 1, push 0 otherwise.
~     e# Either dump the singleton array or turn 0 into -1.

4

হাস্কেল, 180 177 বাইট

import Data.List
z=zipWith
m=map
a#b|(c,d)<-splitAt a b=c++[0]++d
f t=take 1[x|x<-m(z(#)[0..])$sequence$m(permutations.concat.z(flip replicate)[1,-1,0])t,transpose x==m(m(0-))x]

একটি জয় হিসাবে দেখানো হয় 1, হিসাবে একটি ক্ষতি -1এবং একটি ড্র হিসাবে 0। তির্যক উপাদানগুলিও 0। অসমাধানযোগ্য টেবিল খালি তালিকা, অর্থাত হয় []

ব্যবহারের উদাহরণ: f [[3,1,0],[1,2,1],[0,3,1],[0,2,2],[4,0,0]]-> [[[0,1,1,1,-1],[-1,0,1,0,-1],[-1,-1,0,0,-1],[-1,0,0,0,-1],[1,1,1,1,0]]]

এটি কীভাবে কাজ করে: নিষ্ঠুর শক্তি! ইনপুট অনুসারে বিজয় / ক্ষতির / অঙ্কনের একটি তালিকা তৈরি করুন, যেমন [3,1,0]-> [1,1,1,-1], অনুমতি দিন, সমস্ত সংমিশ্রণ তৈরি করুন , ডায়াগোনগুলি সন্নিবেশ করুন এবং সমস্ত টেবিলগুলি স্থানান্তরিত করুন যা সমস্ত উপাদানকে উপেক্ষিত রাখে। প্রথমটি নিন।

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