আমার প্রিয় দলটি কি এখনও ফুটবল চ্যাম্পিয়ন হতে পারে?


10

সবচেয়ে পরিমিতরূপে সফল ফুটবল বিই দলের অনুরাগী হিসাবে , মরসুমের শেষের দিকে আমি প্রায়শই ভাবছি যে আমার প্রিয় দলের চ্যাম্পিয়ন হওয়ার কোনও তাত্ত্বিক সুযোগ এখনও আছে কিনা। এই চ্যালেঞ্জের আপনার কাজটি আমার পক্ষে সেই প্রশ্নের উত্তর দেওয়া।

ইনপুট

আপনি তিনটি ইনপুট পাবেন: বর্তমান সারণী, অবশিষ্ট ম্যাচের তালিকা এবং আমাদের আগ্রহী দলের বর্তমান অবস্থান।

ইনপুট 1: বর্তমান টেবিল , সংখ্যা একটি ক্রম ছিল আমি -th সংখ্যা পয়েন্ট দল দ্বারা অর্জন হয় আমি এতদূর। উদাহরণস্বরূপ, ইনপুটটি [93, 86, 78, 76, 75]নিম্নলিখিত টেবিলটিকে এনকোড করে (কেবলমাত্র শেষ কলামটি গুরুত্ব দেয়):

প্রিমিয়ার লিগ টেবিল


ইনপুট 2 : বাকি ম্যাচগুলি , টিপলগুলির একটি অনুক্রম যেখানে প্রতিটি টিপল ( i , j ) টি দলের i এবং j এর মধ্যে একটি অবশিষ্ট ম্যাচ দাঁড়ায় । উপরের উদাহরণে, এর দ্বিতীয় ইনপুটটির [(1,2), (4,3), (2,3), (3,2), (1,2)]অর্থ হ'ল বাকী ম্যাচগুলি হ'ল:

Chelsea vs Tottenham, Liverpool vs Man. City, Tottenham vs Man. City, Man. City vs Tottenham, Chelsea vs Tottenham

ইনপুট 3: বর্তমান অবস্থান । দলের আমরা আগ্রহী এর উদাহরণস্বরূপ, এর একটি ইনপুট 2উপরে উদাহরণস্বরূপ অর্থ দাঁড়ায় এই যে আমরা জানতে টটেনহ্যাম এখনও রক্ষক হয়ে পারে কিনা চাই।

আউটপুট

ফর্মের প্রতিটি অবশিষ্ট ম্যাচের জন্য ( i , j ), তিনটি সম্ভাব্য ফলাফল রয়েছে:

  • টিম আমি ধিক্কার জানাই: টিম আমি পায় 3 পয়েন্ট , টিম পায় 0 পয়েন্ট
  • টিম জে জিতেছে: দল i পয়েন্ট পায় , দল জে 3 পয়েন্ট পেয়েছে
  • অঙ্কন: দল i এবং j উভয়ই 1 পয়েন্ট পান

আপনার যদি বাকি সমস্ত খেলাগুলির জন্য কিছু ফলাফল থাকে তবে আপনার তৃতীয় ইনপুটে উল্লিখিত দলের চেয়ে অন্য কোনও দলে বেশি পয়েন্ট না থাকলে আপনার অবশ্যই সত্যের মূল্য নির্ধারণ করতে হবে। অন্যথায়, একটি মিথ্যা মান আউটপুট।

উদাহরণ : উপরের অংশটি থেকে অনুকরণীয় ইনপুটটি বিবেচনা করুন:

ইনপুট 1 = [93, 86, 78, 76, 75], ইনপুট 2 = [(1,2), (4,3), (2,3), (3,2), (1,2)], ইনপুট 3 =2

যদি দলটি 2তার বাকি সমস্ত ম্যাচগুলি (যেমন (1,2), (2,3), (3,2), (1,2)) জিততে পারে তবে এটি 4 * 3 = 12 অতিরিক্ত পয়েন্ট পায়; অন্য ম্যাচের কোনও দলই এই ম্যাচগুলি থেকে কোনও পয়েন্ট পায় না। ধরা যাক অন্য বাকী ম্যাচটি (মানে (4,3)) একটি ড্র is তারপরে চূড়ান্ত স্কোরগুলি হ'ল:

 Team 1: 93, Team 2: 86 + 12 = 98, Team 3: 78 + 1 = 79, Team 4: 76 + 1 = 77, Team 5: 75

এর অর্থ হ'ল আমরা বাকি ম্যাচের জন্য ইতিমধ্যে কিছু ফলাফল খুঁজে পেয়েছি যেমন অন্য কোনও দলের দলের চেয়ে বেশি পয়েন্ট নেই 2, সুতরাং এই ইনপুটটির আউটপুট অবশ্যই সত্যবাদী হওয়া উচিত।

বিস্তারিত

  • আপনিই প্রথম ইনপুট অনুমান হতে পারে একটি আদেশ ক্রম, অর্থাত্ হতে আমি < , আমি -th এন্ট্রি সমান বা তার চেয়ে অনেক বেশী -th এন্ট্রি। প্রথম ইনপুটটি তালিকা, স্ট্রিং বা এর মতো হিসাবে নেওয়া যেতে পারে।
  • আপনি দ্বিতীয় ইনপুটটিকে স্ট্রিং, টিপলসের তালিকার মতো বা পছন্দ মতো নিতে পারেন। বিকল্পভাবে, আপনি এটি একটি দ্বি-মাত্রিক অ্যারে হিসাবে নিতে পারেন aযেখানে বাকী ম্যাচের তালিকায় a[i][j]ফর্মের প্রবেশের সংখ্যা রয়েছে (i,j)। উদাহরণস্বরূপ, এর a[1][2] = 2, a[2][3] = 1, a[3][2] = 1, a[4][3] = 1 সাথে সম্পর্কিত [(1,2), (4,3), (2,3), (3,2), (1,2)]
  • দ্বিতীয় এবং তৃতীয় ইনপুটটির জন্য, আপনি 1-সূচকের পরিবর্তে 0-সূচকে ধরে নিতে পারেন।
  • আপনি যে কোনও ক্রমে তিনটি ইনপুট নিতে পারেন।

আপনার উত্তরে আপনি যে সঠিক ইনপুট ফর্ম্যাটটি চয়ন করেছেন তা নির্দিষ্ট করুন।

পার্শ্ব নোড : " 3-পয়েন্ট-রুলের আওতায় ফুটবল নির্মূলকরণের পক্ষে কঠিন সিদ্ধান্ত নেওয়া " তে এই চ্যালেঞ্জটির অন্তর্গত সমস্যাটিকে এনপি-সম্পূর্ণ হিসাবে দেখানো হয়েছিল । মজার বিষয় হল, যদি একটি জয়ের জন্য মাত্র দুটি পয়েন্ট দেওয়া হয়, তবে সমস্যাটি বহুবর্ষের মধ্যে সমাধানযোগ্য হয়ে যায়।

পরীক্ষার কেস

সকল পরীক্ষার বিষয় ফরম্যাটে আছে Input1, Input2, Input3

Truthy:

  • [93, 86, 78, 76, 75], [(1,2), (4,3), (2,3), (3,2), (1,2)],2
  • [50], [],1
  • [10, 10, 10], [],3
  • [15, 10, 8], [(2,3), (1,3), (1,3), (3,1), (2,1)],2

Falsy:

  • [10, 9, 8], [],2
  • [10, 9, 9], [(2,3), (3,2)],1
  • [21, 12, 11], [(2,1), (1,2), (2,3), (1,3), (1,3), (3,1), (3,1)],2

বিজয়ী

এটি , তাই সংক্ষিপ্ত সঠিক উত্তর (বাইটে) জেতে। প্রথম সঠিক উত্তর পোস্ট হওয়ার এক সপ্তাহ পরে বিজয়ী নির্বাচন করা হবে।


1
ন্যায্য সতর্কতা. আমাদের প্রচুর আমেরিকান জনসংখ্যা রয়েছে সুতরাং শিরোনামে (সকার) যুক্ত করা বিভ্রান্তি এড়াতে সহায়তা করতে পারে
ক্রিস্টোফার

ক্রিস্টোফার এটি ফুটবল আমেরিকানদের এটি ভুল আছে
ইয়ার '11


নিবন্ধন করুন আমেরিকানরা NEVR ভুল। তবে আমার বক্তব্য এখনও দাঁড়িয়ে আছে
ক্রিস্টোফার

1
অস্ট্রেলিয়ান এবং কানাডিয়ানদের কেউ স্মরণ করে না।
রবার্ট ফ্রেজার 18

উত্তর:


4

হাস্কেল (ল্যাম্বডাবোট) , 84 বাইট

আমাকে একটি বাইট সংরক্ষণ করার জন্য @ বার্তাভেলিকে ধন্যবাদ

ল্যাম্বডাবোট ব্যতীত import Control.Lensএকটি নতুন লাইনের জন্য 20 বাইট যুক্ত করুন ।

ফাংশনটি ওপিতে বর্ণিত একই ক্রমে তার যুক্তিগুলি গ্রহণ করে, 0-সূচীযুক্ত। তার দ্বিতীয় যুক্তি (অবশিষ্ট matchups তালিকা) (যেমন ইনডেক্স একটি ফ্ল্যাট তালিকা [1,2,4,1]সাথে সঙ্গতিপূর্ণ [(Team 1 vs Team 2), (Team 4 vs Team 1)])।

এটি অনুমোদিত কি না সে সম্পর্কে নিয়মগুলি কিছুটা অস্পষ্ট। যদি এটি অনুমোদিত না হয় তবে ফাংশনটি উদাহরণগুলির দ্বারা প্রদত্ত ফর্ম্যাটটিতে ইনপুট নিতে পারে - টিউপসগুলির একটি তালিকা। সেক্ষেত্রে, কারণে প্রতিস্থাপন করতে, এই সমাধান স্কোর 2 বাইট যোগ a:b:rদিয়ে (a,b):r

(!)=(+~).element
(t?(a:b:r))s=any(t?r)[a!3$s,b!3$s,b!1$a!1$s]
(t?_)s=s!!t==maximum s

ব্যাখ্যা:

প্রথম লাইনটি !টাইপের তিনটি ভেরিয়েবলের একটি ইনফিক্স ফাংশন সংজ্ঞায়িত করে (!) :: Int -> Int -> [Int] -> [Int], যা একটি তালিকার প্রদত্ত সূচকে মান বাড়িয়ে তোলে । যেহেতু, প্রায়শই সময়, কোড শব্দের চেয়ে বোঝা সহজ (এবং যেহেতু হাসেল সিনট্যাক্সটি অদ্ভুত হতে পারে), তাই এখানে পাইথন অনুবাদ রয়েছে:

def add(index, amount, items):
    items[index] += amount
    return items

দ্বিতীয় লাইনটি ?তিনটি ভেরিয়েবল (চ্যালেঞ্জ ইনপুট) এর সাথে আরও একটি ইনফিক্স ফাংশন সংজ্ঞায়িত করে । আমি এটিকে এখানে আরও স্বাচ্ছন্দ্যে আবার লিখব:

(t ? a:b:r) s = any (t ? r) [a ! 3 $ s, b ! 3 $ s, (b ! 1 $ a) ! 1 $ s]
(t ? _) s = (s !! t) == maximum s

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

def can_still_win(standings, games_left, our_team):
    if games_left == []:
        return standings[our_team] == max(standings)
    team1, team2, other_games = games_left[0], games_left[1], games_left[2:]
    team1Wins, team2Wins, tie = standings.copy(), standings.copy(), standings.copy()
    team1Wins[team1] += 3
    team2Wins[team2] += 3
    tie[team1] += 1
    tie[team2] += 1
    return (can_still_win(team1Wins, other_games, our_team)
            or can_still_win(team2Wins, other_games, our_team)
            or can_still_win(tie, other_games, our_team))

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

* দুঃখের বিষয়, টিআইও লেন্সকে সমর্থন করে না, সুতরাং এই লিঙ্কটি আসলে চলবে না।


সূচকের ফ্ল্যাট তালিকা ইনপুট বিন্যাস যেমন :) অনুমতি দেওয়া হয়
vauge

দেখে মনে হচ্ছে আপনি প্রহরীদের ব্যবহার না করে একটি বাইট সংরক্ষণ করতে পারেন: এটি অনলাইনে চেষ্টা করুন!
বার্তাভেল

@ বার্তাওলে ভাল কল! ধন্যবাদ! আমি ফাংশন সংজ্ঞাগুলির ক্রমটি অদলবদল করে অন্য বাইটটি শেভ করতে পেরেছি যাতে আমি এটির []সাথে প্রতিস্থাপন করতে পারি _
টটলম্যান

3

মাইক্রোসফ্ট এসকিউএল সার্ভার, 2৯২ বাইট

CREATE FUNCTION my.f(@s XML,@m XML,@ INT)RETURNS TABLE RETURN
WITH s AS(SELECT s.value('@p','INT')p FROM @s.nodes('S')s(s)),
m AS(SELECT m.value('@i','INT')i,m.value('@j','INT')j FROM @m.nodes('M')m(m)),
a AS(SELECT ROW_NUMBER()OVER(ORDER BY-p)t,p FROM s),
b AS(SELECT p+3*(SELECT COUNT(*)FROM m WHERE t IN(i,j))o FROM a WHERE t=@),
c AS(SELECT i,j,ROW_NUMBER()OVER(ORDER BY 1/0)k FROM m WHERE @ NOT IN(i,j)),
d AS(SELECT COUNT(*)u,POWER(3,COUNT(*))-1 v FROM c UNION ALL SELECT u,v-1 FROM d WHERE v>0),
e AS(SELECT v,u,v/3 q,v%3 r FROM d UNION ALL SELECT v,u-1,q/3,q%3 FROM e WHERE u>1),
f AS(SELECT v,p+SUM(IIF(t=i,r,(2-r))%3*3/2)s FROM a,c,e WHERE t IN(i,j)AND k=u GROUP BY v,t,p),
g AS(SELECT MAX(s)x FROM f GROUP BY v)SELECT SUM(IIF(o<ISNULL(x,p),0,1))f FROM a,(b OUTER APPLY g)WHERE t=1;

ফাংশনটি একটি মিথ্যা ফলাফলের জন্য 0 এবং সত্যবাদীর পক্ষে 0 এর বেশি দেয়।

পুরো স্নিপেট:

SET NOCOUNT ON;
--USE tempdb;
USE rextester;
GO
IF SCHEMA_ID('my') IS NULL EXEC('CREATE SCHEMA my');
ELSE BEGIN
  IF OBJECT_ID('my.f', 'IF') IS NOT NULL DROP FUNCTION my.f;
  IF OBJECT_ID('my.s', 'U') IS NOT NULL DROP TABLE my.s;
  IF OBJECT_ID('my.m', 'U') IS NOT NULL DROP TABLE my.m;
  IF OBJECT_ID('my.c', 'U') IS NOT NULL DROP TABLE my.c;
END;
GO
CREATE TABLE my.c( -- Test cases
  c INT PRIMARY KEY CLUSTERED CHECK(c > 0), -- Test Case Id
  n INT CHECK(n > 0), -- Current position of the team of interest
);
CREATE TABLE my.s( -- Standings
  a INT FOREIGN KEY REFERENCES my.c(c) CHECK(a > 0), -- Test cAse Id
  p INT CHECK(p > 0) -- Team pts
);
CREATE TABLE my.m( -- Matches
  s INT FOREIGN KEY REFERENCES my.c(c) CHECK(s > 0), -- Test caSe Id
  i INT CHECK(i > 0), -- Team i
  j INT CHECK(j > 0), -- Team j
  CHECK(i != j)
);
GO
INSERT my.c(c, n) VALUES (1, 2), (2, 1), (3, 3), (4, 2), (5, 2), (6, 1), (7, 2);
INSERT my.s(a, p) VALUES (1, 93), (1, 86), (1, 78), (1, 76), (1, 75),
(2, 50), (3, 10), (3, 10), (3, 10), (4, 15), (4, 10), (4, 8),
(5, 10), (5, 9), (5, 8), (6, 10), (6, 9), (6, 9), (7, 21), (7, 12), (7, 11);
INSERT my.m(s, i, j) VALUES (1, 1, 2), (1, 4, 3), (1, 2, 3), (1, 3, 2), (1, 1, 2),
(4, 2, 3), (4, 1, 3), (4, 1, 3),(4, 3, 1), (4, 2, 1), (6, 2, 3), (6, 3, 2),
(7, 2, 1), (7, 1, 2), (7, 2, 3), (7, 1, 3), (7, 1, 3), (7, 3, 1), (7, 3, 1);
GO
CREATE FUNCTION my.f(@s XML,@m XML,@ INT)RETURNS TABLE RETURN
WITH s AS(SELECT s.value('@p','INT')p FROM @s.nodes('S')s(s)),
m AS(SELECT m.value('@i','INT')i,m.value('@j','INT')j FROM @m.nodes('M')m(m)),
a AS(SELECT ROW_NUMBER()OVER(ORDER BY-p)t,p FROM s),
b AS(SELECT p+3*(SELECT COUNT(*)FROM m WHERE t IN(i,j))o FROM a WHERE t=@),
c AS(SELECT i,j,ROW_NUMBER()OVER(ORDER BY 1/0)k FROM m WHERE @ NOT IN(i,j)),
d AS(SELECT COUNT(*)u,POWER(3,COUNT(*))-1 v FROM c UNION ALL SELECT u,v-1 FROM d WHERE v>0),
e AS(SELECT v,u,v/3 q,v%3 r FROM d UNION ALL SELECT v,u-1,q/3,q%3 FROM e WHERE u>1),
f AS(SELECT v,p+SUM(IIF(t=i,r,(2-r))%3*3/2)s FROM a,c,e WHERE t IN(i,j)AND k=u GROUP BY v,t,p),
g AS(SELECT MAX(s)x FROM f GROUP BY v)SELECT SUM(IIF(o<ISNULL(x,p),0,1))f FROM a,(b OUTER APPLY g)WHERE t=1;
GO
SELECT c, f
FROM my.c
OUTER APPLY(SELECT p FROM my.s S WHERE a = c FOR XML AUTO)S(s)
OUTER APPLY(SELECT i, j FROM my.m M WHERE s = c FOR XML AUTO)M(m)
OUTER APPLY my.f(s, m, n)
ORDER BY c
OPTION(MAXRECURSION 0);

এটি অনলাইন দেখুন!


এই এক্সডি কেন সমস্ত ভাষার বাইরে
নোহ ক্রিশ্চিনো

একটি বৈচিত্র্যের জন্য :)
আন্দ্রে ওদেগোভ

প্রোগ্রামটি অবশ্যই মজাদার হয়েছে :)
নোহ ক্রিশ্চিনো

1

পাইথন 2, 242 221 বাইট

from itertools import*
def u(S,M,t,O):
 for m,o in zip(M,O):
  if t in m:S[t]+=3
  else:S[m[0]]+=(1,3,0)[o];S[m[1]]+=(1,0,3)[o]
 return S[t]>=max(S)
f=lambda s,m,t:any(u(s[:],m,t,O)for O in product([0,1,2],repeat=len(m)))

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

বেসিক গল্ফ-চিন্তা দিয়ে প্রথম পাসের পরে। 0-ভিত্তিক সূচকের সাথে ইনপুট নেয় ; টিআইওতে পরীক্ষার কেসগুলি ফাংশনের মাধ্যমে এর জন্য সামঞ্জস্য করে F

product([0,1,2],repeat=len(m))পুনরাবৃত্তির টাই / win / যদি না দলের অফ সুদ (টিওআই) প্রতিটি ম্যাচের জন্য ক্ষতি ওভার সম্ভাব্য ফলাফল মূল্যায়ন করে (যেখানে, টিওআই সবসময় জয় অধিকৃত হয়) ম্যাচ একটি অংশ।


1

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

(s,d,t,o=[],g=(c=s,i=0)=>d[i]?[3,,0,3,1,1].map((a,j)=>(j%=2,r=j?r:[...c],r[d[i][j]]+=a,g(r,i+1))):o.push(c))=>o.some(r=>r[t]==Math.max(...r),g())

একটি অ্যারের ( [93,86,78,76,75]) হিসাবে স্কোর ইনপুট নেয় , আগত গেমগুলিকে 2-মানের অ্যারে ( [[0,1],[3,2],[1,2],[2,1],[0,1]]) হিসাবে এবং টিম সূচককে একটি পূর্ণসংখ্যা ( 1) হিসাবে গ্রহণ করে। সবকিছু 0-সূচীযুক্ত।

পরীক্ষার স্নিপেট

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