অক্ষরের যুদ্ধ


9

আপনার টাস্কটি সহজ: চিঠিগুলির যুদ্ধে কে জিতবে তা আমাকে বলুন।

সেনা

এই টেবিল দ্বারা সংক্ষেপে এই যুদ্ধে তিনটি পৃথক "সেনা" রয়েছে।

name | health | damage
   A       25       25
   B      100        5
   C       10       50

সৈন্যদের প্রতিনিধিত্ব করতে আপনি কোনও তিনটি অনন্য অক্ষর ব্যবহার করতে পারেন, তবে সেগুলি অবশ্যই এই অক্ষরগুলি না হলে নির্দিষ্ট করতে হবে।

যুদ্ধ

মনে করুন আমাদের একটি নমুনা যুদ্ধ রয়েছে:

ABC # army 1
CBA # army 2

প্রতিটি সেনাবাহিনী বারবার বাম দিকের ইউনিটে গুলি চালায়, যতক্ষণ না এটি মারা যায়; তারপরে তারা ডান দিকে সৈন্যের দিকে চলে যায় এবং পুনরাবৃত্তি করে। সুতরাং সেনা 2 আক্রমণের Aজন্য সেনাবাহিনী 1 আক্রমণ না হওয়া অবধি A, তারপর যান B, তারপর C। সেনা 1 আক্রমণ করে Cপ্রথমে, তারপরে B, তারপরে A। ধরুন সেনাবাহিনী একই সাথে আক্রমণ করেছে এবং সুতরাং সৈন্যরা যদি চক্রের আগে বেঁচে থাকে এবং একই সাথে একে অপরকে হত্যা করতে পারে তবে তারা সর্বদা গুলি চালায়। তারা বাম থেকে ডানদিকে গুলি চালায়।

যুদ্ধটি এভাবে খেলবে:

ABC
CBA

BC # A (25 hp) killed by C (-50 hp), B (100 hp) attacked by B (-5 hp) and A (-25 hp), has 70 hp
BA # C (10 hp) killed by A (-25 hp), B (100 hp) attacked by B (-5 hp) and C (-50 hp), has 45 hp

BC # B (70 hp) attacked by B (-5 hp) and A (-25 hp), has 40 hp
A  # B (45 hp) killed by B (-5 hp) and C (-50 hp)

BC # B (40 hp) attacked by A (-25 hp), has 15 health
   # A (25 hp) killed by B (-5 hp) and C (-50 hp), army 2 dead

সুতরাং, সেনা 1 যুদ্ধে জিতেছে!

ইনপুট

দুটি স্ট্রিং, প্রথম প্রতিনিধিত্বকারী সেনাবাহিনী 1 এবং দ্বিতীয় সেনাবাহিনী ২। তারা অগত্যা একই আকার নয় (কারণ কে বলেছে এটি একটি সুষ্ঠু লড়াই হবে?)

আউটপুট

সেনাবাহিনী 1 বিজয়ী, সেনাবাহিনী 2 বিজয়ী, বা টাই হওয়ার সম্ভাবনাযুক্ত ইভেন্টের প্রতিনিধিত্ব করতে যে কোনও তিনটি অনন্য, ধ্রুবক মান। হ্যাঁ, শেষ সৈন্যদের পক্ষে একে অপরকে মেরে ফেলা সম্ভব, সমাপ্তির মধ্য দিয়ে।

যুদ্ধসমূহ

ABC
CBA
Army 1

CCCCC
CCCCC
Tie

CABCAB
ABBABBA
Army 2

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

এই , সংক্ষিপ্ততম সমাধান জয়।



এছাড়াও, Aমারধর Bএবং Cসম্পর্ক Bএবং Aসম্পর্ক CAযেকোন মানকে পরিবর্তন করে 20এটিকে টাই করে ফেলবে B
ক্যালকুলেটরফলাইন

2
আমাদের কি আলাদা ইনপুট উপস্থাপনা ব্যবহারের অনুমতি দেওয়া হচ্ছে? বলুন, এবিসির পরিবর্তে 012?
গ্রিমি

@ গ্রিমি: হ্যাঁ, আমি পোস্টটি সম্পাদনা করব।
নীল এ।

উত্তর:


3

পাইথ 145 97 বাইট

=Y.d[,\A,25 25,\B,*TT5,\C,T*5T)Km=G@YdzJm=H@YdwW&KJMX0hG_smedH gKJ gJKI<hhK0=tK)I<hhJ0=tJ;?K1?J2Z

আগের তুলনায় খানিকটা নিখুঁত।

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

ব্যাখ্যা:

প্রোগ্রামটি বিভিন্ন অংশে কাটা যাক।

=Y.d[,\A,25 25,\B,*TT5,\C,T*5T)

     ,\A,25 25                     Create this list: ['A', [25, 25]]
              ,\B,*TT5             Create this list: ['B', [100, 5]]
                      ,\C,T*5T     Create this list: ['C', [10, 50]]
  .d[                         )    From the three lists, create a dictionary whose keys are the letters, and values are the inner lists
=Y                                 Assign to the variable Y

অভিধান Yহল: {'A': [25, 25], 'C': [10, 50], 'B': [100, 5]}। তারপর:

Km=G@YdzJm=H@YdwMX0hG_smedH

 m=G@Ydz                           For all letters in first input string, make a copy of Y[letter]. Make a list of all those values...
K                                  ...and assign the list to the variable K
         m=H@Ydw                   For all letters in second input string, make a copy of Y[letter]. Make a list of all those values...
        J                          ...and assign the list to the variable J
                MX0hG_smedH        Create a function g which takes two lists of couples, and subtract the sum of the second elements of the couples of the second list from the first element of the first couple of the first list

এই মুহুর্তে, Kদম্পতিদের একটি তালিকা যা প্রথম সেনাবাহিনীকে উপস্থাপন করে। এই তালিকার প্রতিটি দম্পতি সেনাবাহিনীর একটি চিঠি, এবং (health, damage)সেই চিঠির জন্য। Jঠিক একই, তবে দ্বিতীয় সেনাবাহিনীর জন্য। gএটি একটি ফাংশন যা দুটি সেনাবাহিনী নেয় এবং দ্বিতীয় সেনাবাহিনীর দ্বারা তৈরি প্রথমটি ক্ষতি করে। এখন:

W&KJ gKJ gJKI<hhK0=tK)I<hhJ0=tJ;

W&KJ                               While K not empty and J not empty
     gKJ                           Call g(K,J). That computes the damages to first army
         gJK                       Call g(J,K). That computes the damages to second army
            I<hhK0=tK)             If the first army's first letter is dead, remove it
                      I<hhJ0=tJ    If the second army's first letter is dead, remove it
                               ;   End of while loop

যখন লুপটি শেষ হবে Kএবং Jতাদের চূড়ান্ত মান হবে। যদি তারা উভয় ফাঁকা থাকে তবে এটি একটি টাই; অন্যথায় খালি খালি সেনা জয়। এটি কোডের শেষ টুকরা দ্বারা পরিচালিত হয়:

?K1?J2Z

?K1                                If K non-empty, display 1. Else...
   ?J2                             ...if J non-empty, display 2. Else...
      Z                            ...display zero

এটাই!



0

সি #, 446 বাইট

using System.Linq;(c,d)=>{int z=c.Length,v=d.Length,j=0,k=0,l=0,m=0,q=0;int[]e=(c+d).Select(x=>x!='A'?x=='B'?100:10:25).ToArray(),f=e.Skip(z).ToArray();e=e.Take(z).ToArray();int[]g=(c+d).Select(x=>x!='A'?x=='B'?5:100:25).ToArray(),h=g.Skip(z).ToArray();g=g.Take(z).ToArray();try{for(;;){for(q=l;q<z;q++){if(e[j]<=0)j++;e[j]-=h[q];}for(q=k;q<v;q++){if(f[m]<=0)m++;f[m]-=g[q];}if(e[k]<=0)k++;if(f[l]<=0)l++;}}catch{}return k-z>=l-v?k-z>l-v?0:2:1;};

ফর্ম্যাট সংস্করণ:

         (c, d) => {
                int z = c.Length, v = d.Length, j = 0, k = 0, l = 0, m = 0, q = 0;

                int[] e = (c + d).Select(x => x != 'A' ? x == 'B' ? 100 : 10 : 25).ToArray(), f = e.Skip(z).ToArray();
                e = e.Take(z).ToArray();

                int[] g = (c + d).Select(x => x != 'A' ? x == 'B' ? 5 : 100 : 25).ToArray(), h = g.Skip(z).ToArray();
                g = g.Take(z).ToArray();

                try {
                    for (;;) {
                        for (q = l; q < z; q++) {
                            if (e[j] <= 0) j++; e[j] -= h[q];
                        }
                        for (q = k; q < v; q++) {
                            if (f[m] <= 0) m++; f[m] -= g[q];
                        }
                        if (e[k] <= 0) k++; if (f[l] <= 0) l++;
                    }
                }
                catch {
                }

                return k - z >= l - v ? k - z > l - v ? 0 : 2 : 1;
            };

আউটপুটস 1 যদি আর্মি 1 জেতে, 2 আর্মি 2 এবং 0 টাইয়ের জন্য


আপনি কি একটি বিন্যাসিত / প্রসারিত সংস্করণ যুক্ত করতে পারেন? 446 বাইট এমনকি সি এর জন্যও বেশি ... আমি নিশ্চিত যে এখানে কিছু উন্নতি হবে।
TheLethalCoder

আরম্ভকারীদের জন্য আপনার কাছে একাধিক লাইন ঘোষণা করে int[]আমি মনে করি আপনি সেগুলি একত্রিত করতে পারেন, `` <= 0` অবশ্যই ঠিক একই <1? আপনার কি দরকার try-catch?
TheLethalCoder

0

জাভাস্ক্রিপ্ট (ES6) - 316 269 ​​বাইট

আমি নিশ্চিত যে এটি জাহান্নামের মতো গল্ফ করা যেতে পারে তবে আমি এটি নিয়ে এসেছি :) যদিও আমি 47 বাইট ছাঁটাইতে পেরেছি!

টাইয়ের জন্য আউটপুট 0, টিমের জন্য 1 এবং 2 টিমের জন্য 2।

l=(d,f)=>{for(t=[d,f].map(g=>g.split``.map(k=>[[25,100,10],[25,5,50]].map(m=>m[k.charCodeAt()-65])));(w=t.map(g=>g.some(k=>0<k[0])))[0]&&w[1];)t.forEach((g,k,m)=>m[k].sort(o=>0>o[0])[0][0]-=m[+!k].filter(o=>0<o[0]).reduce((o,p)=>o+p[1],0));return w[0]||w[1]?w[0]?1:2:0}

পাঠযোগ্য :

function ltt(a,b){
    t=[a,b].map(x=>x.split``.map(c=>[[25,100,10],[25,5,50]].map(e=>e[c.charCodeAt()-65])))
    while((w=t.map(_=>_.some(x=>x[0]>0)))[0]&&w[1]){
        t.forEach((y,i,n)=>n[i].sort(j=>j[0]<0)[0][0]-=n[+!i].filter(x=>x[0]>0).reduce((h,v)=>h+v[1],0))
    }
    return(!w[0]&&!w[1])?0:(w[0])?1:2
}

ডেমো :

l=(d,f)=>{for(t=[d,f].map(g=>g.split``.map(k=>[[25,100,10],[25,5,50]].map(m=>m[k.charCodeAt()-65])));(w=t.map(g=>g.some(k=>0<k[0])))[0]&&w[1];)t.forEach((g,k,m)=>m[k].sort(o=>0>o[0])[0][0]-=m[+!k].filter(o=>0<o[0]).reduce((o,p)=>o+p[1],0));return w[0]||w[1]?w[0]?1:2:0}

var prnt=(g,h)=>{
  n=l(g,h);
  return(n==0)?"Tie!":`Team ${n} wins!`
}

console.log("ABCB - ABC: " + prnt("ABCB","ABC"));
console.log("BAAA - BBC: " + prnt("BAAA","BBC"));
console.log("AAAA - BBC: " + prnt("AAAA","BBC"));
console.log("ABC - BBC: " + prnt("ABC","BBC"));
console.log("ABC - CBA: " + prnt("ABC","CBA"));


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