একটি বিশ্বকাপ অনুমান প্রোগ্রাম তৈরি করুন


13

আপনারা জানেন যে বিশ্বকাপের গ্রুপ পর্ব শেষ হয়ে গেছে, এবং আগামীকাল থেকে সেরা 16 টি দল নকআউট পর্ব শুরু করবে:

  • ব্রাজিল (বিআরএ)
  • মেক্সিকো (এমএক্স)
  • নেদারল্যান্ডস (এনইডি)
  • চিলি (সিএইচআই)
  • কলম্বিয়া (সিওএল)
  • গ্রীস (জিআরই)
  • কোস্টারিকা (সিআরসি)
  • উরুগুয়ে (ইউআরইউ)
  • ফ্রান্স (এফআরএ)
  • সুইজারল্যান্ড (এসইউআই)
  • আর্জেন্টিনা (এআরজি)
  • নাইজেরিয়া (এনজিএ)
  • জার্মানি (জিইআর)
  • মার্কিন যুক্তরাষ্ট্র (মার্কিন যুক্তরাষ্ট্র)
  • বেলজিয়াম (বিইএল)
  • আলজেরিয়া (ALG)

নকআউট পর্যায়ে, প্রতিটি ম্যাচের পরে বিজয়ী পরবর্তী রাউন্ডে পৌঁছে যায় এবং হেরে ঘরে চলে যায় (কোনও ড্র হয় না)। নক আউট পর্ব সম্পর্কে আরও জানতে এখানে ক্লিক করুন

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

আপনি যদি অনুমান করতে না চান তবে আপনি নিম্নলিখিত অনুমানগুলি ব্যবহার করতে পারেন:

BRA
        BRA
CHI
                BRA
COL
        COL
URU
                        GER
FRA
        FRA
NGA
                GER
GER
        GER
ALG
                                        GER
NED
        NED
MEX
                NED
CRC
        CRC
GRE
                        ARG
ARG
        ARG
SUI
                ARG
BEL
        BEL
USA
  1. প্রোগ্রামগুলির দলগুলির আদেশ নির্বিশেষে একই বিজয়ীকে আউটপুট দিতে হবে (বিআরএ-সিআইএইচ ম্যাচের বিজয়ী চি-বিআরএ ম্যাচের মতো হতে হবে)
  2. কোনও দল হেরে গেলে, এটি আর কোনও ম্যাচ খেলতে পারে না। এর অর্থ হ'ল ম্যাচগুলির জন্য যা আপনাকে সংঘটিত হয় না, আপনাকে এটি নির্দেশ করতে হবে। উদাহরণস্বরূপ, যদি আপনার প্রোগ্রাম ব্রাজিলকে বিআরএ-সিআই ম্যাচটি জিততে বলে অনুমান করে, তবে চি-জিইআর "কোনও ফলাফল নয়" ফিরিয়ে দিতে হবে, কারণ চিলি জার্মানির বিপক্ষে খেলবে না। তফসিলের জন্য উপরের লিঙ্কটি দেখুন।

সরলতার জন্য আপনাকে ব্রোঞ্জের ম্যাচটি মোকাবেলা করতে হবে না (তবে আপনি অবশ্যই এটি করতে পারেন)।

আপনার প্রোগ্রাম বা ফাংশনটি ইনপুট হিসাবে দুটি স্ট্রিং নেয়: দুটি দলের 3-বর্ণের দেশ কোড এবং বিজয়ী দলের দেশের কোড ফেরত দেয় (আপনি স্ট্যান্ডার্ড ইনপুট / আউটপুট, বা দুটি ফাংশন প্যারামিটার / রিটার্ন মান ব্যবহার করতে পারেন)। যদি প্রদত্ত দুটি দল আপনার অনুমান অনুসারে খেলতে না পারে তবে আপনাকে অবশ্যই অন্য কিছু ফেরত পাঠাতে হবে (এটি দেশের কোডগুলি ছাড়াও কিছু হতে পারে, যেমন খালি স্ট্রিং, নাল, ত্রুটি বার্তা)। আপনি ইনপুটটি সঠিক বলে ধরে নিতে পারেন (তালিকায় থাকা দুটি ভিন্ন ভিন্ন দেশ কোড)।

এটি মূলত একটি কোড-গল্ফ, তাই বাইট জেতে সংক্ষিপ্ততম প্রোগ্রাম। তবে সুন্দর ও কৌতুকপূর্ণ সমাধানও মূল্যবান।

উদাহরণ (অবশ্যই, আপনি নিজের অনুমান করতে পারেন):

ইনপুট: ব্রা চি আউটপুট: বিআরএ

ইনপুট: চি ব্রা আউটপুট: বিআরএ

ইনপুট: চি জিআর আউটপুট: ফলাফল নেই


এমন একটি [আন্ডারহ্যান্ডেড] হওয়া উচিত ছিল যা এলোমেলো
অনুমানকে ছাড়িয়ে যায়

@ ɐɔıʇǝɥʇuʎs কোড golf.stackexchange.com/Qestions/32092/… এটি এর সাথে খুব মিল
ডেভিড ফ্রাঙ্ক

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

1
অনুমান ইনপুট বৈধ হতে পারে অথবা would হবে হতে পারে BRA BRAএবং HAZ CHEEZBURGERসঠিকভাবে পরিচালনা করা হয়?
ডেনিস

@ ডেনিস আমার সম্পাদনাটি দেখুন - ইনপুটটি সর্বদা বৈধ
ডেভিড ফ্র্যাঙ্ক

উত্তর:


6

পাইথন 2.x - 368 283

আকর্ষণীয় চ্যালেঞ্জ। অবশ্যই আমাদের ফিফা থেকে বর্তমান র‌্যাঙ্কিং পাওয়া দরকার । ব্রাজিলের তথাকথিত "দ্বাদশ পুরুষ" রয়েছে কারণ তাদের বাড়ির সুবিধা রয়েছে তাই ওজন 12/11।

a='BRA CHI COL URU FRA NGA ALG GER MEX NED CRC GRE ARG SUI BEL USA'.split()
d=[1242*12/11,1026,1137,1147,913,640,858,1300,882,981,762,1064,1175,1149,1074,1035]
m={}
for n in[16,8,4,2]:
 j=0
 for k in range(0,n,2):
  s=a[k] if d[k]>d[k+1] else a[k+1]
  m[a[k]+' '+a[k+1]]=s
  a[j]=s    
  j+=1
def f(s): 
 try: print m[s] 
 except: print 'no result'   

উপরেরটি সংক্ষিপ্ত করার টিপস স্বাগত :-)।

@TheRare এবং @MrLemon ধন্যবাদ উন্নত

a='BRA CHI COL URU FRA NGA ALG GER MEX NED CRC GRE ARG SUI BEL USA'.split()
d=15,6,10,11,4,0,2,14,3,5,1,8,13,12,9,7
m={}
for n in 16,8,4,2:
 j=0
 for k in range(0,n,2):s=a[k]if d[k]>d[k+1]else a[k+1];m[a[k]+' '+a[k+1]]=s;a[j]=s;j+=1     
def f(s):print s in m and m[s]or'no result'

এটি নিম্নলিখিত ফলাফল বাড়ে:

BRA CHI: BRA
COL URU: URU
FRA NGA: FRA
ALG GER: GER
MEX NED: NED
CRC GRE: GRE
ARG SUI: ARG
BEL USA: BEL
------------
BRA URU: BRA
FRA GER: GER
NED GRE: GRE
ARG BEL: ARG
------------
BRA GER: BRA
GRE ARG: ARG
------------
BRA ARG: BRA

উদাহরণ কল:

f('BRA MEX')
no result
f('BRA CHI')
BRA

1. আপনি ব্যবহার করবেন না j(এটি সর্বদা শূন্য)। ২. ডিলিমিটার for kব্যবহার করে এক লাইনে লেখা যায় ;। 3. আপনি মত কীওয়ার্ড পরে জায়গা প্রয়োজন হবে না tryবা except4. আপনি বন্ধনী এবং কীওয়ার্ড (মধ্যে শূণ্যস্থান অপসারণ করতে পারেন a[k]if d[k]>d[k+1]else a[k+1]বৈধ) 5. for n in 16,8,4,26.def f(s):print s in m and m[s]or'no result'
seequ

@TheRare তিনি ব্যবহার করেন jতবে এর সাথে সামান্য বিন্যাসের ত্রুটি রয়েছে j+=1। এবং আপনি [15,6,10,11,4,0,2,14,3,5,1,8,13,12,9,7]অবশ্যই ফিফা ডেটা পুনরায় কোডিং করে প্রচুর অক্ষর সংরক্ষণ করতে পারেন ।
মিঃলিমন

@ মিঃ লিমন আহ, আমি কোডটি নিজে চেষ্টা করে দেখিনি, কেবল এটি দেখেছি।
seequ

5

সি, 182 178 133 (বা 126)

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

কোডটিতেও কিছু পরিবর্তন রয়েছে। মন্তব্যে ডেনিসের পরামর্শ ছাড়াও প্রোগ্রামটি একটি ফাংশনে রূপান্তরিত করা হয়েছে (নিয়মগুলি দ্বারা এটি পুনরায় পড়ার সাথে সাথে) এবং হ্যাশিং সংক্ষিপ্ত করা হয়েছে।

কোড, 133

f(char*a,char*b){
  char*p,*t=" HIAEAIH N?=R=?N ;@4S4@; 5BDGDB5 B@?I?@B",h[3]={*a-a[1]%16,*b-b[1]%16};
  (p=strstr(t,h))&&puts(p-t&2?a:b);
}

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

ইনপুটগুলি aএবং একটি একক চরিত্রের সাথে bঅভিব্যক্তি দ্বারা হ্যাশ করা হয় *a-a[1]%16( *aএটি একটি সংক্ষিপ্ত সমতুল্য a[0])। দলের জন্য হ্যাশ ফলাফল aএবং bসংরক্ষণ করা হয় h। উদাহরণস্বরূপ, বিআরএ চিআই হয়ে যায় @;। হ্যাশ মানগুলি নিম্নরূপ (নিশ্চিত সেমিফাইনালবিদ এবং আমার পূর্বাভাস চ্যাম্পিয়ন এর সাথে চিহ্নিত করা হয়েছে are *)

GRE E   CRC A   *NED I   MEX H
USA R   BEL =   *ARG ?   SUI N
URU S   COL 4  **BRA @   CHI ;
NGA G   FRA D   *GER B   ALG 5

t[]আমার ভবিষ্যদ্বাণী সঞ্চয় করে। রাউন্ডের 16 এবং কোয়ার্টার ফাইনালের ফলাফলগুলি এখন জানা গেছে। 4 টি দলের প্রতিটি গ্রুপকে এমন অর্ডার দেওয়া হয় যে 1 ম এবং চতুর্থটি বাদ পড়েছিল এবং তৃতীয়টি সেমিফাইনালিস্ট। সেমিফাইনালিস্টদের মতো, আমি ভবিষ্যদ্বাণী করছি যে 1 ম এবং চতুর্থ পরাজিত হবে এবং তৃতীয় সেমিফাইনালিস্ট সামগ্রিক বিজয়ী হবে। আপনি যদি আমার পূর্বাভাসের সাথে একমত নন, কেবল টেবিলটি পুনরায় অর্ডার করুন।

ভবিষ্যদ্বাণীগুলি পলিনড্রমিক ব্লকগুলিতে সংরক্ষিত হয় যাতে ব্যবহারকারীরা উভয়ই সম্ভাব্য ক্রমে দলগুলিতে প্রবেশের সম্ভাবনা মেটাতে পারে। অর্ডারটি 4 টির প্রতিটি জয়ের দলকে একত্রে তৃতীয় ম্যাচ খেলতে দেয়। এভাবে প্রথম গ্রুপে জিআরই Eসিআরসি-এর কাছে হেরেছিল এবং এমইএক্স এনইডের কাছে Hহেরে যায়। এটি টাইপিংয়ের পুনরাবৃত্তি না করে কোয়ার্টার ফাইনালে Aএনইডি খেলতে সিআরসি সেট আপ Iকরে। দলগুলি একে অপরের সাথে খেলবে না এমন কোনও আউটপুট নেই তা নিশ্চিত করতে সহায়তা করতে স্ট্রিংটি 4 টি দল / 7 টি অক্ষরের প্রতিটি গ্রুপের মধ্যে একটি স্পেস দিয়ে প্যাড করা হয়েছে।

8 অক্ষরের প্রতিটি দলের প্রতিটি সম্ভাব্য ম্যাচের বিজয়ী নিম্নরূপ: invalid,b,a,a,b,b,a,invalid। এভাবে বিজয়ী সঠিক পছন্দের অবস্থান গ্রহণ করে তৈরি করা যেতে পারে hযে t এবং 2 । দুর্ভাগ্যবশত strstrফাংশন সবচেয়ে straighforward যেমন একটি পয়েন্টার ফেরৎ নয় p, তাই আমরা বিয়োগ আবশ্যক pথেকে tপ্রকৃত অবস্থান পেতে t.পারেন ম্যাচ অবৈধ (ইন পাওয়া যাবে না t), pশূন্য এবং ফ্রেজ no resultছাপা হয়।

কিছু সন্দেহজনক উন্নতি, 126

উন্নত হ্যাশ অভিব্যক্তি দ্বারা 2 টি অক্ষর সংরক্ষণ করা হয়েছে। দুর্ভাগ্যবশত, এই দল যদি প্রয়োজন হিসাবে ফাংশন নিচে পরীক্ষা প্রোগ্রামে দেখানো হবে তা (যেমন Braপরিবর্তে BRAআমি নিজেকে সন্তুষ্ট থাকেন একটি একক অপারেটর সঙ্গে এই কাজ করার কোন উপায় নেই যে, উপরের হিসাবে প্রোগ্রামে ব্যবহৃত।), সুতরাং 2 জন অপারেটর এবং একটি একক-চরিত্রের ধ্রুবক হিসাবে এটি পায় তত ভাল। এটিও নোট করুন যে টিমকোডগুলির গোষ্ঠীগুলি পৃথক করতে বিকল্প চরিত্রের Uruমানচিত্রগুলির প্রয়োজন।space|

tভবিষ্যদ্বাণীটির স্ট্রিংকে আক্ষরিক হিসাবে বাদ দিয়ে এবং চিকিত্সা করে 5 টি অক্ষর সংরক্ষণ করা হয়েছে । এর অর্থ স্ট্রিংটি কোথায় সংরক্ষণ করা হয়েছে তা জানা অসম্ভব। তবে শর্তে এটি সংরক্ষণ না করা থাকলে আমরা কেবলমাত্র আগ্রহী p&2তাই কোডটি কাজ করবে যদি ঠিকানাটি 4 দ্বারা বিভাজ্য হয় (নোট করুন যে এটি পয়েন্টারটিকে pসরাসরি একটি পূর্ণসংখ্যা হিসাবে বিবেচনা করার অনুমতি দেয় না , এটি অবশ্যই অন্য পয়েন্টার থেকে বিয়োগ করতে হবে) । আমি পয়েন্টারটি ব্যবহার করি aতাই a4 দ্বারা বিভাজ্য হওয়া আবশ্যক)) 32 বা 64 বিট সংকলক / আর্কিটেকচার স্ট্রিংগুলিতে এইভাবে সংরক্ষণ করা যেতে পারে সে সম্পর্কে মোটামুটি আস্থা রাখা যায়। এটি আমার পক্ষে জিসিসি / সাইগউইন নিয়ে কাজ করছে, যদিও এটি ভিজ্যুয়াল স্টুডিও / উইন্ডোতে সংকলন করতে অস্বীকার করেছে।

g(char*a,char*b){
  char*p,h[3]={*a^a[1]+3,*b^b[1]+3};
  (p=strstr("|%&626&%|+4*#*4+|(71 17(|./3$3/.|/74&47/",h))&&puts(p-a&2?a:b);
}

main(){
  char team[16][4]={"Gre","Crc","Ned","Mex", "Usa","Bel","Arg","Sui", "Uru","Col","Bra","Chi", "Nga","Fra","Ger","Alg"}; 
  int i;
  for(i=1;i<16;i++){printf("%s %s \n",team[i-1],team[i]);g(team[i],team[i-1]);g(team[i-1],team[i]);}  
}

আকর্ষণীয় পদ্ধতির! আপনি মধ্যে স্থান সরিয়ে কয়েক বাইট সংরক্ষণ করতে পারবেন charএবং *pএবং প্রতিস্থাপন a[0], b[0]এবং h[0]সঙ্গে *a, b` কে এবং *h। এছাড়াও, প্রশ্নটি বলছে যে * যদি প্রদত্ত দুটি দল আপনার অনুমান অনুযায়ী খেলতে না পারে তবে আপনাকে অবশ্যই অন্য কোনও কিছু ফিরিয়ে দিতে হবে (এটি দেশের কোডগুলি ছাড়াও কিছু হতে পারে, যেমন খালি স্ট্রিং, নাল, ত্রুটির বার্তা) , সুতরাং মুদ্রণের কোনও ফলাফল হয় না না প্রয়োজন এবং আপনি প্রতিস্থাপন করতে পারে puts(...)সঙ্গে (p=strstr(t,h))&&puts(p-t&2?a:b)
ডেনিস

টিপসটির জন্য ধন্যবাদ, বিশেষত a[0]->*a! শীঘ্রই আপডেট হবে। শুধু ভাবছি, একক সংখ্যা সহ বহুমাত্রিক অ্যারে অ্যাক্সেস করার কোনও উপায় আছে কি? আমি অভিন্ন দৈর্ঘ্যের এই কমান্ড লাইন সংস্করণটি লিখেছি (একটি দিয়ে 1 বাইট সংরক্ষণ করতে পারি #define) এটি এবং এই জাতীয় ক্ষেত্রে ডাবল সাবস্ক্রিপ্টগুলি এড়ানো ভাল লাগবে:char *p,h[2],*t="-LgRrRgL bA9j9Ab hp535ph OKYtYKO KpAgApK";main(int c,char**v){h[0]=v[1][1]*3-v[1][0]*2;h[1]=v[2][1]*3-v[2][0]*2;puts((p=strstr(t,h))?v[1+!(p-t&2)]:"no result");}
স্তর নদী সেন্ট

1. আমি একটি ছোট বাগ খুঁজে পেয়েছি। hনাল-টার্মিনেট করা উচিত, তাই এটি হওয়া উচিত h[3]। ২. যদি আপনি সেট করেন তবে আপনি হিসাবে p=v[1]অ্যাক্সেস করতে পারেন । এটি আমার মেশিনে কাজ করে, তবে আমি জানি না এটি পোর্টেবল কিনা ... ৩. আপনি যদি এটি ভিতরে ঘোষণা করেন তবে আপনি আরম্ভ করতে সক্ষম হবেন :v[i][j]p[4*(i-1)+j]hmainmain(int c,char**v){char*t="-LgRrRgL bA9j9Ab hp535ph OKYtYKO KpAgApK",*p=v[1],h[3]={p[1]*3-*p*2,p[5]*3-p[4]*2};(p=strstr(t,h))&&puts(v[1+!(p-t&2)]);}
ডেনিস

@ ডেনিস আপনার কোডটি আমার মেশিনে জিসিসি / সাইগউইন এবং ভিএস / উইন্ডোজ উভয় ক্ষেত্রেই দুর্দান্ত কাজ করে। এছাড়াও for(int i=0;i<1000;i++)printf("%d %c ",i,i[*argv])ভিএস-তে কমান্ড লাইনের মুদ্রণযোগ্য অক্ষরটি প্রতিধ্বনিত করে তবে জিসিসিতে প্রোগ্রামটির নাম 0 হয়, প্রথম যুক্তি 40 এ থাকে এবং দ্বিতীয় যুক্তি কোথাও দেখা যায় না (আমি 1000 পর্যন্ত গিয়েছিলাম) কৌতূহল। যাইহোক, আমি আমার ভবিষ্যদ্বাণীগুলি আপডেট করার পাশাপাশি নিয়মের মধ্যে থাকা একটি ফাংশনে পরিবর্তিত হয়েছি (পোস্টের আগে তাদের নিশ্চিত করার জন্য আমি কেবল রাতের ফলাফলের অপেক্ষায় ছিলাম।) আবার ধন্যবাদ এবং মঙ্গলবার ব্রাজিলের বিপক্ষে শুভকামনা।
স্তরের নদী সেন্ট

3

জাভাস্ক্রিপ্ট 215 206 120 116

উন্নতির জন্য অনেক জায়গা:

ES5 - 215

a=prompt().split(' ');("BRACHI0COLURU0FRANGA0GERALG0NEDMEX0CRCGRE0ARGSUI0BELUSA0BRACOL0FRAGER0NEDCRC0ARGBEL0BRAGER0NEDARG0BRANED".split(0).filter(function(x){return x.match(a[0])&&x.match(a[1])})[0]||"").substr(0,3)


ES6 - 206

a=prompt().split(' ');("BRACHI0COLURU0FRANGA0GERALG0NEDMEX0CRCGRE0ARGSUI0BELUSA0BRACOL0FRAGER0NEDCRC0ARGBEL0BRAGER0NEDARG0BRANED".split(0).filter((x)=>{return x.match(a[0])&&x.match(a[1])})[0]||"").substr(0,3)

রেজেক্স অ্যাপ্রোচ - 116

এই লিঙ্কটি পোস্ট করার জন্য touʎs ধন্যবাদ , এটি আমাকে পুনরায় তৈরি করতে সহায়তা করেছে

a=prompt().split(' ').sort();a.join('').match(/LG(.R(A|G)|GE)|RG(S|BE|CR)|ELUS|AC(H|O)|OLUR|CGR|CM|FRANG|XNE/)&&a[0]

1
আপনি রূপান্তর দ্বারা আপনার সমাধানগুলি খাটো করতে পারেন split(' ')করতে split``এবং join('')করতে join``
অর্জুন

2

পাইথন ( 179 148 139 বর্গমাইল পথ দীর্ঘ)

f=lambda *l:sorted(l)[0]if"".join(sorted(l))in"BRACHI COLURU FRANGA ALGGER MEXNED CRCGRE ARGSUI BELUSA BRACOL ALGFRA CRCMEX ARGBEL BRAFRA CRCMEX ARGBEL BRAFRA ARGCRC ARGBRA"else 0

বর্ণমালায় প্রথম যে নামটি আসতে চলেছে সেই দেশটি প্রত্যেকেই জানে। (এই উত্তরটি শুরু করার জন্য উপস্থিত রয়েছে)

লোক (গুলি) বেশি দাতব্য ধন্যবাদ এখানে , আমি একটি বিট দ্বারা আমার উত্তর কমান পারে:

import re;f=lambda *l:sorted(l)[0]if re.match('RGB|CM|RGS|CGR|L.F|XNE|EL.S|O.UR|RGCR|B.AF|L.GE|^BRACHI$|^FRANGA$|^BRACOL$',"".join(sorted(l)))else 0

এটি বৈধ দলগুলি ধরে নিয়েছে, তবে একটি বৈধ লাইন-আপের দরকার নেই ( f('BRA','NED')০ (অবৈধ ম্যাচ) f('XNE')ফেরত আসবে return তবে 'XNE'আপনার প্রশ্ন থেকে আমি পেলাম না যে এটি যদিও সমস্যা। আপনি দেখতে উপযুক্ত হিসাবে এই রেজেক্স।

ধন্যবাদ @ ভেন্তোরো, আমি রেজিজেস সম্পর্কে কিছুই জানি না।

import re;f=lambda*l:sorted(l)[0]if re.match('RGB|CM|RGS|CGR|L.F|XNE|EL.S|O.UR|RGCR|B.AF|L.GE|BRACHI|FRANGA|BRACOL',"".join(sorted(l)))else 0

আপনি সম্ভবত re.searchগল্ফ সংস্করণ চান, না re.match। এছাড়াও, আপনি অ্যাঙ্কারগুলি ^এবং ড্রপ করতে সক্ষম হবেন $
ভেন্টোরো

2

স্কালা (150)

type s=String;var m=Map[s,s]();def f(x:(s,s))={var a=x._1;var b=x._2;if(b<a){b=a;a=x._1};if(m.getOrElse(a,a)=="")m.getOrElse(b,b)else{m=m+(b->"");a}}

এখানে "ফু" এবং "বার" এর মধ্যে ম্যাচগুলি সম্ভব, এছাড়াও প্রথম দফায় একে অপরের বিপক্ষে যে খেলাগুলি বাস্তব খেলবে না তার ফলাফল হবে ((উদাহরণস্বরূপ বিআরএ, এআরজি দিয়ে শুরু)

এটি খালি দলগুলি রেকর্ড করছে।

type s=String //just aliasing for saving characters
var m=Map[s,s]() //map for storing loosing teams, a set would do too
def f(x:(s,s))={
  var a=x._1 var b=x._2
  if(b<a){b=a;a=x._1};//swap if b<a lexographically
  if(m.getOrElse(a,a)=="")//if a has loosed previously
     m.getOrElse(b,b)// return b if b was not in the map else return ""
  else{
    m=m+(b->"") //add b to the map, because a will definitly win this amazing match
    a //and return a
  }
}

এর সাথে কল করা:

f(("GER","BRA"))

2

পাওয়ারশেল ( 261 221)

$a=Read-Host;$b=Read-Host;$x="CHIBRA","URUCOL","FRANGA","ALGGER","MEXNED","CRCGRE","SUIARG","BELUSA";0..($x.Length-2)|%{$x+=$x[2*$_].Substring(3)+$x[2*$_+1].Substring(3)};$x|?{"$a$b","$b$a"-eq$_}|%{$_.Substring(3);exit};0

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

নতুন সদস্য, কোড গল্ফে প্রথম প্রচেষ্টা!

কয়েকটি অক্ষর বাঁচাতে কোয়ার্টার ফাইনাল, সেমি এবং ফাইনালগুলি হার্ড-কোডড করতে পারত, তবে এটি মজাদার নয়।

ডিসিফার করার জন্য যথেষ্ট সহজ হওয়া উচিত, তবে এটি উভয় শর্ত পূরণ করে: একই বিজয়ী দেয়> প্রবেশের আদেশ নির্বিশেষে, এবং কেবলমাত্র> প্রাপ্ত স্থানের ম্যাচগুলির জন্য কেবল একজন বিজয়ীকে ফেরত দেয়!

উন্নতির জন্য কোনও পরামর্শ প্রশংসা হবে, ধন্যবাদ!

মূল

$a=Read-Host;$b=Read-Host;$x=("CHIBRA","URUCOL","FRANGA","ALGGER","MEXNED","CRCGRE","SUIARG","BELUSA");for($c=0;$c-lt$x.length-1;$c+=2){$x+=$x[$c].Substring(3)+$x[$c+1].Substring(3)}foreach($i in $x){if($i-match$a-and$i-match$b){return $i.Substring(3)}}return 0

1
কয়েকটি জিনিস (এটি পুরোপুরি ঠিক করতে আরও অনেক বেশি সময় লাগবে): পাওয়ারশেলটি এটি সি বা সি # হিসাবে লিখবেন না। এর অর্থ, returnবেশিরভাগ ক্ষেত্রে অপ্রয়োজনীয়। foreachএবং বেশিরভাগ স্পষ্ট লুপগুলি ওভাররেটেড এবং অকেজো। এর মতো পদ্ধতিগুলি .Substringকেবলমাত্র চরম পরিস্থিতিতে ব্যবহার করা উচিত (এবং ফুটবলের উপযোগিতা যখন বিতর্কিত হতে পারে তবে এটি চরম খেলা নয়)। সাধারণত আপনি যতটা সম্ভব পাইপলাইন ব্যবহার করতে চান।
জোয়

1
একটি দীর্ঘ বিরক্তিকর লেখার পরিবর্তে forলুপ মত for($c=0;$c-lt$x.length-1;$c+=2){$x+=$x[$c].Substring(3)+$x[$c+1].Substring(3)}আপনি শুধু একটি পরিসীমা সঙ্গে একটি পাইপলাইন ব্যবহার করুন এবং ForEach-Object(ওরফে %): 0..($x.Length/2)|%{$x+=$x[2*$_].Substring(3)+$x[2*$_+1].Substring(3)}। আপনার ডেটা কীভাবে উপস্থাপন করা হয়েছে তা সাবধানতার সাথে বিবেচনা করে আপনি সম্ভবত Substringকলগুলি থেকে মুক্তি পেতে পারেন । প্রাথমিক অ্যারের আশেপাশে প্রথম বন্ধনীগুলি বিনা শর্তে রয়েছে। বৃহত্তর অ্যারেগুলির জন্য এটি পৃথককারী চরিত্রটি ব্যবহার এবং ব্যবহার -split( -splitবিভাজক স্থান বা ট্যাব হওয়ার ক্ষেত্রে অখণ্ডতা ) বোধগম্য হতে পারে ।
জোয়

1
চূড়ান্ত foreachউদাহরণস্বরূপ লুপ একটি পাইপলাইন ভাল (যেমন হিসেবে লেখা যেতে পারে ?হয় Where-Object:) $x|?{$_-match$a-and$_-match$b}|%{$_;exit};0যা মূলত »প্রতিটি উপাদান ফিল্টার বলছেন $xকিনা এটি উভয় মিলে যায় জন্য $aএবং $bএবং আউটপুট প্রথম এক, পরে থেকে প্রস্থান। যদি কিছু পাওয়া না যায় তবে আউটপুট ০ «« যেহেতু আপনি আপনার স্ট্রিংগুলির ফর্ম্যাটটি জানেন কেবল আপনি এটি ব্যবহার করতে পারেন -match"$a$b|$b$a", আমার ধারণা। কারণ তাদের কেবল স্ট্রিংয়ে উভয় ক্রমে উপস্থিত থাকতে হবে। যার অর্থ হ'ল আমরা এখানে একটি সামান্য কৌশল ব্যবহার করতে পারি: "$a$b","$b$a"-eq$_গল্ফ করার জন্য আরও একটি বাইট।
জোয়

2

সিজেম, 64 58 বাইট

lS/$_0=\:+4b256b1>:ca"oM-YtM-mM-^@}gM-^VM-^U8tM-=nM-^MfM-]oM-xgM-)tM-|m@gim{g_"2/&,*

উপরের অংশটি ক্যারেট এবং এম-সূচনা ব্যবহার করে, যেহেতু কোডটিতে ছাপছাড়া অক্ষর রয়েছে।

ছয়টি অতিরিক্ত বাইট ব্যয়ে, এই অক্ষরগুলি এড়ানো যায়:

lS/$_0=\:+4b95b1>32f+:c"I8Vyv)2~N{VIEh1$IW32W)B82QBs2G"2/N*\#W>*

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

টেস্ট রান

$ base64 -d > worldcup.cjam <<< \
> bFMvJF8wPVw6KzRiMjU2YjE+OmNhIm/ZdO2AfWeWlTh0vW6NZt1v+GepdPxtQGdpbXtnXyIyLyYsKg==
$ wc -c worldcup.cjam
58 worldcup.cjam
$ for A in ALG ARG BEL BRA CHI COL CRC FRA GER GRE MEX NED NGA SUI URU USA; do
> for B in ALG ARG BEL BRA CHI COL CRC FRA GER GRE MEX NED NGA SUI URU USA; do
> [[ $A < $B ]] && echo $A - $B : $(LANG=en_US cjam worldcup.cjam <<< "$A $B")
> done; done | grep ': .'
ALG - ARG : ALG
ALG - BRA : ALG
ALG - FRA : ALG
ALG - GER : ALG
ARG - BEL : ARG
ARG - CRC : ARG
ARG - SUI : ARG
BEL - USA : BEL
BRA - CHI : BRA
BRA - COL : BRA
COL - URU : COL
CRC - GRE : CRC
CRC - MEX : CRC
FRA - NGA : FRA
MEX - NED : MEX

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

lS/$    " Read one line from STDIN, split at spaces and sort the resulting array.         ";
_0=\    " Extract the first element of a copy of the array and swap it with the array.    ";
:+      " Concatenate the strings.                                                        ";
4b      " Convert the resulting string into an integer by considering it a base 4 number. ";
256b    " Convert the integer into an array by considering it a base 256 number.          ";
1>:ca   " Drop the first element, convert into a string and create a singleton array.     ";
"…"     " Push a string of all matches encoded as explained above.                        ";
2/      " Split the string into an array of two-character strings.                        ";
&       " Intersect the two arrays. If the array is non-empty, the teams play.            ";
,*      " Multiply the string on the stack by the length of the array.                    ";

আপনার বাশ স্ক্রিপ্টের আকারটি সিজেএম প্রোগ্রামের আকারের সাথে ন্যায্য হতে হবে।
ডেভিড ফ্র্যাঙ্ক

1
@ ডেভিডফ্র্যাঙ্ক: আমার প্রোগ্রামটি অনুষ্ঠিত ১৫ টি ম্যাচের জন্য কেবলমাত্র আউটপুট সরবরাহ করে তা প্রমাণ করতে আমি বাশ স্ক্রিপ্টটি অন্তর্ভুক্ত করেছি। এটি নিজস্বভাবে কাজ করে এবং কোনও বাহ্যিক প্রোগ্রামের প্রয়োজন নেই।
ডেনিস

2

সিজেম, 49 48 বাইট

lS/$_0="^\16@&^^/+(^]^W^Y,>O?"{_2%+}3*@{2b91%c}%#1&!*

উপরের অংশটি ক্যারেট স্বরলিপি ব্যবহার করে, যেহেতু কোডটিতে ছাপিয়ে অক্ষর রয়েছে।

দুটি অতিরিক্ত বাইট ব্যয়ে, এই অক্ষরগুলি এড়ানো যায়:

lS/$_0="(=BL2*;74)#%8J[K"{_2%+}3*@{2b91%C+c}%#1&!*

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

টেস্ট রান

$ base64 -d > wc.cjam <<< bFMvJF8wPSIcMTZAJh4vKygdFxksPk8/IntfMiUrfTMqQHsyYjkxJWN9JSMxJiEq
$ wc -c wc.cjam
48 wc.cjam
$ for A in ALG ARG BEL BRA CHI COL CRC FRA GER GRE MEX NED NGA SUI URU USA; do
> for B in ALG ARG BEL BRA CHI COL CRC FRA GER GRE MEX NED NGA SUI URU USA; do
> [[ $A < $B ]] && echo $A - $B : $(cjam wc.cjam <<< "$A $B"); done; done | grep ': .'
ALG - ARG : ALG
ALG - BRA : ALG
ALG - FRA : ALG
ALG - GER : ALG
ARG - BEL : ARG
ARG - CRC : ARG
ARG - SUI : ARG
BEL - USA : BEL
BRA - CHI : BRA
BRA - COL : BRA
COL - URU : COL
CRC - GRE : CRC
CRC - MEX : CRC
FRA - NGA : FRA
MEX - NED : MEX

পটভূমি

আমরা প্রতিটি দলকে তার নামটিকে একটি বেস 2 নম্বর হিসাবে বিবেচনা করে ফলাফলটি পূর্ণসংখ্যার মডুলো 91 গ্রহণ করে 12 (অনিদ্রিত অক্ষর এড়াতে) যোগ করে এবং ফলাফলের ASCII কোডের সাথে সম্পর্কিত অক্ষরটি নির্বাচন করে শুরু করি। CJam কোড, এই করে এটা করা যায় 2b91%c

উদাহরণস্বরূপ, চরিত্র কোড ALGহয় 65 76 71। যেহেতু (4 × 65 + 2 × 76 + 71) = 483, 483 % 91 + 12 = 40এবং 40 এর চরিত্রের কোড হলে (

এটি নিম্নলিখিত ম্যাপিং দেয়:

ALG (    ARG 4    BEL #    BRA 2    CHI *    COL ;    CRC 8    FRA B
GER =    GRE J    MEX [    NED K    NGA L    SUI )    URU 7    USA %

এখন, আমরা 16 টি রাউন্ডের ম্যাচগুলিকে নীচে এনকোড করতে পারি:

(=BL2*;74)#%8J[K

যদি আমরা ধরে নিই যে বর্ণানুক্রমিক ক্রমে প্রথম দলটি সর্বদা জিততে থাকে তবে কোয়ার্টার ফাইনালের ম্যাচগুলি নিম্নরূপ:

(B2;4#8[

মনে রাখবেন যে প্রথম থেকে শুরু করে প্রতিটি দ্বিতীয় অক্ষর নির্বাচন করে এই স্ট্রিংটি প্রথম থেকে প্রাপ্ত করা যেতে পারে। CJam কোড, এই করে এটা করা যায় 2%

একই ধারণাটি ব্যবহার করে, সেমিফাইনালের ম্যাচগুলি এবং ফাইনাল ম্যাচগুলি নিম্নরূপ:

(248
(4

কোড

"(=BL2*;74)#%8J[K"{_2%+}3*

১ of এর রাউন্ডের ম্যাচগুলিতে স্ট্রিংটি পুশ করে, তারপরে নিম্নলিখিত তিনবার করে: স্ট্রিংটিকে নকল করুন, অনুলিপিটির প্রতিটি দ্বিতীয় অক্ষর বের করুন, একত্রিত করুন। ফলাফল স্ট্রিং হয়

(=BL2*;74)#%8J[K(B2;4#8[(B2;4#8[(248(B2;4#8[(248(248(4

এতে সমস্ত মিল রয়েছে (এর মধ্যে কয়েকটি একাধিকবার)।

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

lS/$        " Read one line from STDIN, split at spaces and sort the resulting array.     ";
_0=         " Extract the first element of a copy of the array.                           ";
"…"         " Push the string containing the matches of the round of 16.                  ";
{_2%+}3*    " Push the remaining matches.                                                 ";
@           " Rotate the input array on top of the stack.                                 ";
{2b91%C+c}% " Perform the mapping for each team in the input array.                       ";
#           " Push the index of the match in the array of all matches (-1 for not found). ";
1&!         " Push 1 if the index is even (valid match) and 0 if it is odd.               ";
,*          " Repeat the string on the stack that many times.                             ";

আপনি সিজামের সাথে কি করেন তা অবাক করা। যখনই আমি মনে করি আপনি আমার ধারণাগুলির কোনও ধার নিতে পারেন, আপনি আরও ভাল কিছু নিয়ে এসেছেন! আপনার ভবিষ্যদ্বাণী কোডটি "(=BL2*;74)#%8J[K"{_2%+}3*আমার পূর্বাভাসের স্ট্রিংয়ের ননপ্যালিন্ড্রেন্ডিক ফর্মের সমান দৈর্ঘ্য "rRgL j9Ab 35ph tYKO gApK"তবে পরিচালনা করা অনেক সহজ।
স্তর নদী সেন্ট

0

জাভাস্ক্রিপ্ট 271

t=prompt('Match?').split('-')
x=t[0],y=t[1],T='BRACHICOLURUFRANGAGERALGNEDMEXCRCGREARGSUIBELUSA'
v='\n',R='',W='No Game'
for(z=1;T!='USA';++z,T=n){R+=v+z+v,n='',r=/(...)(...)/g
while(m=r.exec(T))a=m[1],n+=b=m[2],R+=a+'-'+b+v,W=a==x&&b==y||a==y&&b==x?b:W
}
alert(W+'\n'+R)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.