क्या मेरी पसंदीदा टीम अभी भी फुटबॉल चैंपियन बन सकती है?


10

सबसे अधिक सफल फुटबॉल बीई टीम के एक प्रशंसक के रूप में, सीजन के अंत में मैं अक्सर सोचता हूं कि क्या मेरी पसंदीदा टीम के पास अभी भी चैंपियन बनने का कोई सैद्धांतिक मौका बचा है। इस चुनौती में आपका काम मेरे लिए उस सवाल का जवाब देना है।

इनपुट

आप तीन इनपुट प्राप्त करेंगे: वर्तमान तालिका, शेष मैचों की सूची, और जिस टीम में हम रुचि रखते हैं उसकी वर्तमान स्थिति।

इनपुट 1: वर्तमान तालिका , संख्या का एक अनुक्रम थे मैं वें नंबर अंक टीम द्वारा प्राप्त कर रहे हैं मैं अब तक। उदाहरण के लिए, इनपुट [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 ) के लिए, तीन संभावित परिणाम हैं:

  • टीम i जीतती है: टीम I को 3 अंक मिलते हैं , टीम j को 0 अंक मिलते हैं
  • टीम j जीतती है: टीम I को 0 अंक मिलते हैं , टीम j को 3 अंक मिलते हैं
  • ड्रा: टीम i और j दोनों को 1 अंक मिलता है

यदि आप सभी शेष गेमों के लिए कुछ परिणाम हैं, तो आपको एक सत्य मान का उत्पादन करना चाहिए, जैसे कि किसी अन्य टीम के पास 3 इनपुट में निर्दिष्ट टीम से अधिक अंक नहीं हैं। अन्यथा, एक मिथ्या मूल्य का उत्पादन।

उदाहरण : उपरोक्त अनुभाग से अनुकरणीय इनपुट पर विचार करें:

इनपुट 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)) ड्रा है। तब अंतिम स्कोर होगा:

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

इसका मतलब है कि हमने पहले ही बचे हुए मैचों के लिए कुछ नतीजे पाए हैं, जैसे कि किसी भी अन्य टीम के पास टीम से अधिक अंक नहीं हैं 2, इसलिए इस इनपुट के लिए आउटपुट सत्य होना चाहिए।

विवरण

  • आप पहली बार इनपुट मान सकते हैं के लिए एक आदेश दिया अनुक्रम, यानी होना करने के लिए मैं < j , मैं मई के प्रवेश के बराबर या उससे अधिक है j वें प्रविष्टि। पहले इनपुट को एक सूची, एक स्ट्रिंग या पसंद के रूप में लिया जा सकता है।
  • आप एक स्ट्रिंग के रूप में दूसरा इनपुट ले सकते हैं, ट्यूपल्स की सूची या जैसे। वैकल्पिक रूप से, आप इसे दो-आयामी सरणी के रूप में ले सकते हैं 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
निष्पक्ष चेतावनी। हमारे पास एक बड़ी अमेरिकी आबादी है इसलिए शीर्षक में (सॉकर) जोड़ने से भ्रम से बचने में मदद मिल सकती है
क्रिस्टोफर

@ क्रिस्टोफर यह फुटबॉल है। अमेरिकियों को यह गलत है
caird coinheringaahing

चेल्सी भी जाओ!
caird coinheringaahing

@cairdcoinheringaahing अमेरिकी NEVR गलत हैं। लेकिन मेरी बात अब भी
क्रिस्टोफर

1
किसी को भी ऑस्ट्रेलियाई और कनाडाई याद नहीं है।
रॉबर्ट फ्रेजर

जवाबों:


4

हास्केल (लैंबडॉट) , 84 बाइट्स

मुझे बाइट बचाने के लिए @bartvelle का धन्यवाद।

लैम्बडाबोट के बिना, import Control.Lensएक नई रेखा के लिए 20 बाइट्स जोड़ें ।

फ़ंक्शन उसी क्रम में अपने तर्क लेता है जैसा कि ओपी में वर्णित है, 0-अनुक्रमित। इसका दूसरा तर्क (शेष माचिस की सूची) अनुक्रमित (जैसे [1,2,4,1]मेल खाती है) की एक फ्लैट सूची है [(Team 1 vs Team 2), (Team 4 vs Team 1)]

नियम थोड़े अस्पष्ट हैं कि क्या इसकी अनुमति है या नहीं। यदि इसकी अनुमति नहीं है, तो फ़ंक्शन उदाहरणों द्वारा प्रदान किए गए प्रारूप में इनपुट ले सकता है - ट्यूपल्स की एक सूची। उस स्थिति में, इस समाधान के स्कोर के a:b:rसाथ 2 बाइट्स जोड़ें, जिसके साथ प्रतिस्थापित किया जा सकता है (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

स्पष्टीकरण:

पहली पंक्ति !तीन प्रकार के एक infix फ़ंक्शन को परिभाषित करती है , प्रकार की (!) :: Int -> Int -> [Int] -> [Int], जो किसी सूची में दिए गए इंडेक्स पर मूल्य बढ़ाती है। चूंकि, अक्सर, शब्दों की तुलना में कोड को समझना आसान होता है (और चूंकि हास्केल सिंटैक्स अजीब हो सकता है), यहाँ एक पायथन अनुवाद है:

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

दूसरी पंक्ति एक अन्य infix फंक्शन को परिभाषित करती है ?, वह भी तीन चरों (चैलेंज इनपुट) की। मैं इसे और अधिक आसानी से यहाँ फिर से लिखूँगा:

(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))

इसे ऑनलाइन आज़माएं!

* अफसोस की बात है, TiO लेंस का समर्थन नहीं करता है, इसलिए यह लिंक वास्तव में नहीं चलेगा।


सूचकांकों की सपाट सूची को इनपुट प्रारूप के रूप में अनुमति दी गई है
9

ऐसा लगता है कि आप गार्ड का उपयोग न करके एक बाइट को बचा सकते हैं: इसे ऑनलाइन आज़माएं!
बर्तवेल्ले

@bartvelle अच्छा कॉल! धन्यवाद! मैं समारोह परिभाषाओं तो मैं बदल सकते के आदेश को स्वैप करके एक और बाइट बंद दाढ़ी बनाने के लिए प्रबंधित []के साथ _
टटलमैन

3

Microsoft SQL सर्वर, 792 बाइट्स

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);

इसे ऑनलाइन जांचें!


सभी भाषाओं में से यह xD
नूह क्रिस्टिनो

एक विविधता के लिए :)
आंद्रेई ओडेगो

यह कार्यक्रम के लिए मजेदार रहा होगा :)
नूह क्रिस्टिनो

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-आधारित अनुक्रमण के साथ इनपुट लेता है ; TIO में परीक्षण मामलों को फ़ंक्शन के माध्यम से इसके लिए समायोजित किया जाता है F

product([0,1,2],repeat=len(m))यात्रा टाई / जीत / जब तक टीम के- ब्याज (टाइम्स ऑफ इंडिया) प्रत्येक मैच के लिए नुकसान पर संभावित परिणामों का मूल्यांकन करता है (जिसमें, टाइम्स ऑफ इंडिया हमेशा जीतने के लिए माना जाता है) मैच का एक हिस्सा है।


1

जावास्क्रिप्ट (ईएस 6), 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-अनुक्रमित है।

टेस्ट स्निपेट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.