ঝাল প্রাচীর


18

ঐতিহাসিক পটভূমি

ঝাল প্রাচীর হ'ল কৌশলগত যুদ্ধের গঠন যা খ্রিস্টপূর্ব কমপক্ষে 2500 অবধি চলে। এটিতে 'দেওয়াল' গঠনের জন্য যোদ্ধারা তাদের সহকর্মীদের সাথে তাদের shালগুলি ওভারল্যাপ করে নিয়ে গঠিত। কৌশলটির আবেদন এই সত্য থেকে আসে যে সর্বাধিক দক্ষ নয় এমন যোদ্ধা যতক্ষণ না তাদের ieldাল এবং অস্ত্র ছিল ততক্ষণ প্রাচীরের সাথে লড়াই করতে পারে। দেয়ালগুলির সান্নিধ্যের কারণে, চারপাশে ঘোরাফেরা করার খুব কম জায়গা ছিল এবং যুদ্ধটি সাধারণত ধারালো অস্ত্রের সাথে লড়াই করা এক মাতাল ম্যাচে পরিণত হয়।

চ্যালেঞ্জ

আপনার কাজটি এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা যোদ্ধাদের দুটি অ্যারে / তালিকা / ভেক্টরকে ইনপুট হিসাবে দেওয়া হলে যুদ্ধের ফলাফল সিদ্ধান্ত নেয় dec তালিকাগুলি singleালগুলির একক-লাইন প্রাচীরের প্রতিনিধিত্ব করবে এবং তারা একটি নির্দিষ্ট স্বরলিপি অনুসরণ করবে:

ভাইকিং:

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

  • দ্য JArl: সাধারণত প্রাচীর কেন্দ্র থেকে তার দল নেতৃস্থানীয় পাওয়া যায় নি, jarls ভাইকিং দলবল নেতা। মারা যাওয়ার জন্য 15 টি ক্ষতি করে এবং প্রতি রাউন্ডে 2 টি ক্ষতি করে।
  • দ্য BErserker: যদিও কল্পনা ব্যাপকভাবে berserkers ভাবমূর্তি পাক করেছে, এই যোদ্ধারা তাদের ঢাল ছাড়া অন্য সুরক্ষা যে কোন ধরণের ছাড়া একটি উন্মত্ততা সমাধি মত যুদ্ধ বলে জানা যায়। মরতে 6 টি ক্ষতি করে এবং প্রতি রাউন্ডে 3 টি ক্ষতি করে।
  • দ্য CHieftain: সর্দার ধনী লোকেরা যারা তাদের সেবা এ স্বাধীন মানুষ ছিল। তারা সাধারণত যুদ্ধে দুর্দান্ত গৌরব এবং ধন অর্জন করেছিল। মারা যাওয়ার জন্য 10 টি ক্ষতি করে এবং প্রতি রাউন্ডে 2 টি ক্ষতি করে।
  • দ্য ফ্রি Mএন: যোদ্ধারা একজন প্রধানের দায়িত্ব পালন করেছিলেন। তারা মৃত্যুর আগ পর্যন্ত তাদের প্রভুর পক্ষে লড়াই করার শপথ করেছিল। মারা যাওয়ার জন্য 8 টি ক্ষতি করে এবং প্রতি রাউন্ডে 1 টি ক্ষতি করে।
  • SKald: Skalds, সাধারণত bards হিসাবে অনুবাদ, মুক্ত পুরুষ যারা কবিতা, দীর্ঘদেহ যোদ্ধারা মহান আমল সম্পর্কে গল্প বা গান লিখতে ভাড়াটে ছিল। মারা যাওয়ার জন্য 8 টি ক্ষতি করে এবং প্রতিটি সংলগ্ন যোদ্ধাকে 1 বোনাস ক্ষতি দেয়। স্কাল্ডস কোনও ক্ষতি করে না। যোদ্ধারা এভাবে 1 টির বেশি বোনাসের ক্ষতি অর্জন করতে পারে না

স্যাক্সন:

স্যাক্সনরা 5 ম শতাব্দীতে রোমান সাম্রাজ্যের পতনের পরে মহাদেশীয় ইউরোপ থেকে ব্রিটেনে বসতি স্থাপন করেছিল। এই চ্যালেঞ্জের উদ্দেশ্যে, স্যাক্সনদের যোদ্ধা রয়েছে:

  • EArl: Ealdormen , সাধারণভাবে আপনি Earls বলা হয়, উচ্চতর আভিজাত্য সদস্য। তারা সাধারণত জমির বিশাল প্রান্ত ধরে রেখেছিল এবং শত বা এমনকি হাজারো শপথিত পুরুষ ছিল। মরতে 20 টি ক্ষতি করে এবং প্রতি রাউন্ডে 1 টি ক্ষতি করে।
  • Kরাত: একটি ভাল শব্দ অভাবের জন্য, নাইটদের ছোটখাট সম্ভ্রান্ত যারা কিছু জমি মালিকানাধীন ছিল। বেশিরভাগ ক্ষেত্রে, নাইটরা আর্লের কাছে শপথ করা হত। মারা যাওয়ার জন্য 10 টি ক্ষতি করে এবং প্রতি রাউন্ডে 2 টি ক্ষতি করে।
  • WArrior: প্রচলিত পুরুষ, ভূমি বা কৃষক এমন একজন নাইট পরিবেশিত ছাড়া সাধারণত ছোটখাট সম্ভ্রান্ত। যখন নাইট বা আর্ল সংলগ্ন থাকে, যোদ্ধাদের একটি +1 ক্ষতি বোনাস থাকে। মারা যাওয়ার জন্য 8 টি ক্ষতি করে এবং প্রতি রাউন্ডে 2 টি ক্ষতি করে।
  • দ্য Fইয়ার্ড: দ্য ফার্ড একটি মিলিশিয়া-জাতীয় গ্রুপ ছিল মুক্ত পুরুষ, সাধারণত দরিদ্র কৃষক, যারা প্রাচীরের সাথে লড়াইয়ের জন্য যে কোনও অস্ত্র (বা অস্ত্রের মতো কৃষিক্ষেত্র প্রয়োগ করে) নিয়ে যেত। মরতে 5 টি ক্ষতি করে এবং প্রতি রাউন্ডে 1 টি ক্ষতি করে।
  • PRiest: পুরোহিত অত্যন্ত তাড়াতাড়ি স্যাক্সন সংস্কৃতিতে মূল্যবান ছিল, ঈশ্বরের শব্দের ঘোষক হচ্ছে। পুরোহিতরা মারা যাওয়ার জন্য 15 টি ক্ষতি করে এবং প্রতিটি সংলগ্ন যোদ্ধাকে মোকাবেলা করা হবে এবং 1 টির ক্ষতি পর্যন্ত আটকাতে হবে। যাজকরা কোনও ক্ষতি করেন না। যাজকরা যোদ্ধার 1 টির বেশি ক্ষতি রোধ করতে পারে না

প্রাচীর

দেয়ালগুলি তাদের কেন্দ্রগুলিতে একে অপরের সাথে দেখা করে। প্রতিটি রাউন্ডে প্রতিটি যোদ্ধা সরাসরি যোদ্ধার সামনে সরাসরি ক্ষতি সাধন করে বা এর সামনে যদি কোন জীবন্ত যোদ্ধা না থাকে তবে ত্রিভুজ সংলগ্ন জীবন্ত যোদ্ধা কমপক্ষে স্বাস্থ্য বাকি রয়েছে। যদি টাই থাকে তবে প্রাচীরের প্রান্তের কাছাকাছি যোদ্ধাকে বেছে নিন।

উদাহরণ:

Vikings
[M,M,M,B,B,C,J,C,B,B,M,M,M]
[F,F,F,W,W,K,E,K,W,W,F,F,F]
Saxons

To make matters easier, let's convert these walls into numbers:
Round 0:
 M M M B B C  J  C  B B M M M
[8,8,8,6,6,10,15,10,6,6,8,8,8]
[5,5,5,8,8,10,20,10,8,8,5,5,5]
 F F F W W K  E  K  W W F F F

Round 1: Notice that 2 of the Saxons' warriors are adjacent to Knights, so they have a +1 damage bonus.
 M M M B B C J  C B B M M M
[7,7,7,4,3,8,14,8,3,4,7,7,7]
 | | | | | | || | | | | | |
[4,4,4,5,5,8,18,8,5,5,4,4,4]
 F F F W W K E  K W W F F F

Round 2: 
 M M M B B C J  C B B M M M
[6,6,6,2,0,6,13,6,0,2,6,6,6]
 | | | | | | || | | | | | |
[3,3,3,2,2,6,16,6,2,2,3,3,3]
 F F F W W K E  K W W F F F

Round 3: Remember to collapse the arrays to account for dead warriors. Also, notice that the 2 outermost Fyrd are now attacking the diagonally adjacent viking. 
   M M M B C J  C B M M M
  [4,5,4,0,4,12,4,0,4,5,4]
  /| | | | | || | | | | |\
[2,2,2,1,0,4,14,4,0,1,2,2,2]
 F F F W W K E  K W W F F F

Round 4: Notice once again the saxon Warriors next to the Knights dealing 3 damage:
   M M M C J  C M M M
  [2,4,1,2,11,2,1,4,2]
  /| | | | || | | | |\
[2,1,1,0,2,12,2,0,1,1,2]
 F F F W K E  K W F F F
Round 5:
 M M M C J  C M M M
[1,3,0,0,10,0,0,3,1]
 | | | | || | | | |
[1,0,0,0,10,0,0,0,1]
 F F F K E  K F F F

Round 6: 
    M M J M M
   [1,2,9,2,1]
     \| | |/   
     [0,8,0]
      F E F
Rounds 7 and 8:
      M M J M M         M M J M M
     [1,2,8,2,1]       [1,2,8,2,1]
         \|/               \|/ 
         [4]               [0]
          E                 E  

Output: Viking victory.

নিয়মাবলী:

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

      [M,M,M,J,M,M,M]
        [K,E,K,W];
    
          [B,B,B,J]    
    [K,K,W,W,K,E,K,W,W,K,K]
    
  • পরীক্ষার ক্ষেত্রে কেবলমাত্র কোডগুলি নয়, যেকোন দেয়ালের সেটআপ দিয়ে আপনার কোডটি নির্দ্বিধায় দেখতে এবং পরীক্ষা করার চেষ্টা করুন।

পরীক্ষার কেস:

V: [M,M,B,C,B,C,J,C,B,C,B,M,M]
S: [F,F,W,K,W,K,E,K,W,K,W,F,F]
O: Viking victory.
------------------------------
V: [M,M,M,M,M,M,M,M,M,M]
S: [W,W,W,W,W,W,W,W,W,W]
O: Saxon victory.
------------------------------
V: [B,C,M,B,C,M,M,C,B,M,C,B,M]
S:   [W,F,W,F,E,E,E,F,W,F,W]
O: Viking victory.
------------------------------
V:         [B,B,B,J,B,B,B]
S: [W,W,W,W,K,K,K,E,K,K,K,W,W,W,W]
O: Saxon victory.
------------------------------
V: [J]
S: [E]
O: Viking victory.
------------------------------
V: [C,C,C,C,B,B,M,M,M,M,J,J,J,M,M,M,M,B,B,C,C,C,C]
S: [K,K,K,K,K,K,K,K,K,K,W,E,W,K,K,K,K,K,K,K,K,K,K]
O: Saxon victory.
------------------------------
V: [M,M,S,C,B,J,B,C,S,M,M]
S: [F,K,P,W,K,E,K,W,P,K,F]
O: Saxon victory.
------------------------------
V: [S,S,S,...,S]
S: [P,P,P,...,P]
O: UNDEFINED (since both priests and skalds deal no damage, you can output anything here.)
------------------------------

কিছু historicalতিহাসিক ভুল রয়েছে। এগুলিকে নির্দ্বিধায় নির্ধারণ করুন এবং আমি এগুলি ঠিক করার জন্য যথাসাধ্য চেষ্টা করব।



আমরা নামের প্রথম অক্ষরের পরিবর্তে অন্যান্য চিহ্নগুলি সংজ্ঞায়িত করতে পারি, উদাহরণস্বরূপ 0-9?
নিডজেজেকোব

পছন্দ করুন কোনটি যোদ্ধার জন্য কোন চিহ্নগুলি ব্যবহৃত হয়েছিল তা আপনি নিজের উত্তরে উল্লেখ করেছেন তা নিশ্চিত করুন।
জে.সাল্ল

3
চিঠির চেয়ে ইনপুটটিকে তাদের সম্পত্তি হিসাবে গ্রহণ করা প্রতারণা বলে বিবেচিত হবে? (উদাহরণস্বরূপ (health, damage, damagebonus, protbonus))
হাইপার নিউট্রিনো

@ হাইপারনিট্রিনো আমি ঠিক নিশ্চিত নই, তবে আমার ধারণা এটি ঠিক হয়ে যাবে? আমি আপনাকে দেখতে পাচ্ছি না কীভাবে এটি আপনাকে একটি বড় সুবিধা দিতে পারে। আমি যেমন নিডজেজকোবকে বলেছি, যতক্ষণ আপনি প্রতিটি উত্তরের যোদ্ধার প্রতিনিধিত্ব করছেন তা আপনার উত্তরে যতক্ষণ নির্দিষ্ট করা যায় ততক্ষণ এর জন্য যান।
জে.সাল্ল

উত্তর:


3

পাইথন 2 , 576 573 565 554 540 549 বাইট

O=[(0,0)]
g=lambda D,W,i:D[i-1]*(W[i-1]<1)+D[i]+D[i+1]*(W[i+1]<1)
h=lambda*V:[v for v in zip(*V)if v[1]>0]
def f(v,s):
 l,L=len(v),len(s);m=max(l,L);a,b=(L-l)/2,(l-L)/2;V,U=zip(*O+O*a+v+O*a+O+O);S,T=zip(*O+O*b+s+O*b+O+O);z=[0]*(m+2);w=z[:];r=range(1,m+1);U=list(U);T=list(T)
 for i in r:w[i]=[0,2,3,2,1,0][V[i]]+(5in V[i-1:i+2:2])*(V[i]<5);z[i]=[0,1,2,2+({1,2}&set(S[i-1:i+2:2])>set()),1,0][S[i]]
 for i in r:U[i]-=g(z,V,i);d=g(w,S,i);T[i]-=d-(d>0)*(5in S[i-1:i+2:2])
 V=h(V,U);S=h(S,T)
 if([],[])<(V,S)!=(v,s):return(f(V,S)if S else'V')if V else'S'

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


আমি যদি সঠিকভাবে বুঝতে পারি তবে এই বিটটি (5in V[i-1:i+2:2])বোঝায় যে সংলগ্ন স্কাল্ডস ক্ষতি করতে পারে। আপনার ...*(V[i]!=5)সেখানে একটি প্রয়োজন হতে পারে । পরীক্ষা:print f([S,S],[P]) # says V but should be a Draw
এনজিএন

@ngn এর জন্য ধন্যবাদ :)
টিফিল্ড

2

এপিএল (ডায়ালগ ক্লাসিক) , 128 বাইট

{t l d b p←(-⌊2÷⍨+/0=⊃⍵)∘⌽¨⍵⋄l+←e+3+/0,0,⍨(0=te←(×≢¨p∩¨h)-⊖d+×≢¨b∩¨h3,/0,t,0⋄⍵≡a←↑¨(⊂↓l>0)/¨¨↓¨t l d b p:00s←+/l>0:×-/s⋄∇a}

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

টিআইও লিঙ্কে দুটি ফাংশন রয়েছে: g উপরের গল্ফড ফাংশন এবং fএটি একটি অব্যক্ত ফাংশন যা একজোড়া স্ট্রিং গ্রহণ করে, তাদের উপযুক্ত উপস্থাপনায় রূপান্তর করে এবং গল্ফড ফাংশনটিকে কল করে।

ইনপুটটি পাঁচটি ম্যাট্রিক্স: tইনট হিসাবে যোদ্ধার প্রকার; lজীবন; dক্ষতি; bসংলগ্ন যখন কোন যোদ্ধা বোনাস দেয়; pসুরক্ষার জন্য একই। ম্যাট্রিকগুলিতে দুটি সারি রয়েছে - ভাইকিংস এবং স্যাক্সনস। যদি তাদের যোদ্ধারা একই সংখ্যা না হয় তবে ম্যাট্রিকগুলি অবশ্যই 0-প্যাডড হওয়া উচিত, যদিও অগত্যা কেন্দ্রিক নয়। ফলাফলটি 1/ ¯1ভাইকিং / স্যাকসনের জয়ের 0জন্য বা একটি ড্রয়ের জন্য।

{
  t l d b p←(-⌊2÷⍨+/0=⊃⍵)∘⌽¨⍵  centre the matrices
   (-⌊2÷⍨+/0=⊃⍵) is a pair of numbers - by how much we should rotate (⌽) the rows
         +/0=⊃⍵  how many dead? (⊃⍵ is the types, dead warriors have type 0)
    -⌊2÷⍨        negated floor of half

  l+←e+3+/0,0,⍨(0=t)×e←(×≢¨p∩¨h)-⊖d+×≢¨b∩¨h←3,/0,t,0  compute and apply effective damage
   h3,/0,t,0  are triples of types - self and the two neighbours
   b∩¨h        for each warrior intersect (∩) h with his bonus-giving set b
   ×≢¨         non-empty? 0 or 1
   d+          add to the damage normally inflicted
              reverse vertically (harm the enemy, not self)
   (×≢¨p∩¨h)   same technique for protections (neighbouring priests)
   e          remember as "e" for "effective damage"; we still need to do the diagonal attacks
   (0=t      zero out the attacks on living warriors
   3+/0,0,⍨    sum triples - each warrior suffers the damage intended for his dead neigbours
   e+          add that to the effective damage
   l+←         decrease life ("e" is actually negative)

  ⍵≡a←↑¨(⊂↓l>0)/¨¨↓¨t l d b p:0  remove dead; if no data changed, it's a draw
  ⍝ ↓¨          split each matrix into two row-vectors
  ⍝ (⊂↓l>0)     boolean mask of warrios with any life left, split in two and enclosed
  ⍝ /¨¨         keep only the survivors
  ⍝ ↑¨          mix the pairs of rows into matrices again, implicitly padding with 0-s
  ⍝ a←          call that "a" - our new arguments
  ⍝ ⍵≡a ... :0  is "a" the same as our original arguments? - nothing's changed, it's a draw

  0∊s←+/l>0:×-/s ⍝ if one team has no members left, they lost
  ⍝ l>0         bitmask of survivors
  ⍝ s←+/l>0     how many in each camp
  ⍝ 0∊          has any of the two armies been annihilated?
  ⍝ :×-/s       if yes, which one? return sign of the difference: ¯1 or 1, or maybe 0

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