ভাইরাস বনাম অ্যান্টিডোটেস কোড গল্ফ [বন্ধ]


12

এখানে একটি আয়তক্ষেত্রাকার 2D অ্যারে রয়েছে যা 'ভি' দ্বারা চিহ্নিত ভাইরাসযুক্ত, অ্যান্টিডোট 1 দ্বারা 'এ' দ্বারা চিহ্নিত করা হয়, এবং এন্টিডোট 2 টি 'বি' দ্বারা চিহ্নিত হয় ('ভি', 'এ' এবং 'বি' ব্যতীত কোনও মান নেই)।

প্রতিষেধক 1 কেবল পার্শ্ববর্তী ভাইরাসগুলিকে অনুভূমিক এবং উল্লম্ব দিকগুলিতে হত্যা করতে পারে তবে প্রতিষেধক 2 অনুভূমিক, উল্লম্ব এবং তির্যক দিকগুলিতে প্রতিবেশী (যদি থাকে) ভাইরাসগুলিকে হত্যা করতে পারে।

প্রতিষেধকগুলি সক্রিয় হয়ে গেলে, শেষ পর্যন্ত কতগুলি ভাইরাস থাকবে?

উদাহরণ:

ইনপুট:

vv
vv

আউটপুট: 4

ইনপুট:

av
vv

আউটপুট: 1

ইনপুট:

vvv
vbv
vvv

আউটপুট: 0

ইনপুট:

bvb
bav
vab
vvv
vvb
vvv
vvv
bva
vav

আউটপুট: 3


2
আমি @ গ্রিমি আপনার সম্পাদনার প্রশংসা করি - এছাড়াও দুর্দান্ত চ্যালেঞ্জ :)
pixma140

2
@ কেভিন ক্রুজসেন, এটি অনিয়মিত আকারের নয়।
কিয়ারা ড্যান

4
আমরা কি "ভি", "ক" এবং "বি" এর পরিবর্তে 3 (স্বতন্ত্র) স্বেচ্ছাসেবী মান নিতে পারি?
attinat

2
অ্যান্টি-ভাইরাসগুলি কীভাবে চারপাশে মোড়ানো থাকে (যেমন নীচের সারিতে "একটি" শীর্ষ সারিতে একটি "ভি" সরিয়ে ফেলবে)?
ব্রায়ান

2
@ কিয়ারা ড্যান আমি পরামর্শ দিচ্ছি যে কোনও তিনটি স্বতন্ত্র মান না রাখার কারণ এটি চ্যালেঞ্জটিতে কিছু চরিত্র রাখে, পাশাপাশি চিঠিগুলির কোড পয়েন্ট সহ সম্ভাব্য চতুরতাও রাখে।
lirtosiast

উত্তর:


8

পাইথন 3 , 135 বাইট

j=''.join
p='j(s)'+4*'.replace("%s%s","%s%s")'%(*'vbbbbvbbavacvaca',)
f=lambda x:j(eval(2*'(eval(p)for s in zip(*'+'x))))')).count('v')

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

-2 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ

ব্যাখ্যা

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


আরও পঠনযোগ্য পুনরাবৃত্তি ফাংশন হিসাবে (155 বাইট)


3
আপনি পরে স্থানটি মুছে ফেলতে পারেন y>1else। ভাল পন্থা যদিও। প্রথমে আমি নিশ্চিত ছিলাম না যে এটি কীভাবে তির্যকটি bনিয়ে কাজ করে তবে আপনার প্রতিস্থাপনের কারণে এটি ঠিক কাজ করে। :) আমার কাছ থেকে
কেভিন ক্রুইজসেন

ধন্যবাদ কেভিন ক্রুজসেন! ত্রিভুজগুলি 'ভি' এর পরিবর্তে 'এ' এর পরিবর্তে 'ভি' এর পরিবর্তে যত্ন নেওয়া হয়। দ্বিতীয় পুনরাবৃত্তিতে, সংলগ্ন 'v's' সরিয়ে ফেলা হবে।
জিতস

3
নিম্নলিখিত ইনপুটটির জন্য, আউটপুট 3 হওয়া উচিত, তবে তার প্রত্যাবর্তন 4: বিভিবি বাভ ভাব ভিভিভি ভিভিভি ভিভিভি বিভা ভাই
কিয়ারা ড্যান


1
@ কেভিন ক্রুজসেন একটি ছোট এমনকি একটি খুঁজে পেয়েছেন, তবে আপনার পরামর্শটি অন্য একটি বাইট সংরক্ষণ করে!
জিৎসে

5

জাভাস্ক্রিপ্ট (ES7), 108 বাইট

অক্ষরের ম্যাট্রিক্স হিসাবে ইনপুট নেয়।

f=m=>(g=(y,X,V)=>m.map(r=>r.map((v,x)=>V?v>f&V>'a'>(x-X)**2+y*y-2?r[x]=n--:0:v<f?g(-y,x,v):n++)|y++))(n=0)|n

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

আমার মূল উত্তরের মতো, তবে V>'a'>(x-X)**2+y*y-2করণটি নীচে বর্ণিত হেক্সা ট্রিকটি ব্যবহার করার চেয়ে 1 বাইট কম খাটো। ¯ \: _ (ツ): _ / ¯


জাভাস্ক্রিপ্ট (ES7), 109 বাইট

অক্ষরের ম্যাট্রিক্স হিসাবে ইনপুট নেয়।

f=m=>(g=(y,X,V)=>m.map(r=>r.map((v,x)=>V?v>f&(x-X)**2+y*y<V-8?r[x]=n--:0:v<f?g(-y,x,'0x'+v):n++)|y++))(n=0)|n

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

কিভাবে?

Quadrance দুই পয়েন্ট এবং হিসাবে সংজ্ঞায়িত করা হয়:A1=(x1,y1)A2=(x2,y2)

Q(A1,A2)=(x2x1)2+(y2y1)2

পূর্ণসংখ্যা স্থানাঙ্ক বিবেচনা করে, এটি নিম্নলিখিত হিসাবে দেখায়:

854585212541145212585458

অতএব:

  • এ অবস্থিত একটি প্রকারের প্রতিষেধক হলে এ অবস্থিত একটি ভাইরাসকে হত্যা করতে সক্ষম হয়A1A2Q(A1,A2)<2
  • এ অবস্থিত একটি টাইপ বি প্রতিষেধক যদি থাকে তবে এ অবস্থিত একটি ভাইরাসকে মেরে ফেলতে সক্ষমA1A2Q(A1,A2)<3

সুবিধামতভাবে, এই একচেটিয়া উপরের বাউন্ড ( বা ) হেক্সাডেসিমাল থেকে অ্যান্টিডোট চরিত্রটিকে দশমিক এবং রূপান্তর দ্বারা প্রাপ্ত করা যেতে পারে :238

  • A16810=210
  • B16810=310

মন্তব্য

f =                      // named function, because we use it to test if a character
                         // is below or above 'm'
m => (                   // m[] = input matrix
  g = (                  // g is a recursive function taking:
    y,                   //   y = offset between the reference row and the current row
    X,                   //   X = reference column
    V                    //   V = reference value, prefixed with '0x'
  ) =>                   //
    m.map(r =>           // for each row r[] in m[]:
      r.map((v, x) =>    //   for each value v at position x in r[]:
        V ?              //     if V is defined:
          v > f &        //       if v is equal to 'v'
          (x - X) ** 2 + //       and the quadrance between the reference point and
          y * y          //       the current point
          < V - 8 ?      //       is less than the reference value read as hexa minus 8:
            r[x] = n--   //         decrement n and invalidate the current cell
          :              //       else:
            0            //         do nothing
        :                //     else:
          v < f ?        //       if v is either 'a' or 'b':
            g(           //         do a recursive call:
              -y,        //           pass the opposite of y
              x,         //           pass x unchanged
              '0x' + v   //           pass v prefixed with '0x'
            )            //         end of recursive call
          :              //       else:
            n++          //         increment n
      ) | y++            //   end of inner map(); increment y
    )                    // end of outer map()
  )(n = 0)               // initial call to g with y = n = 0
  | n                    // return n

ধন্যবাদ @ আরনাউল্ড, আপনি কি কোডটি ব্যাখ্যা করতে পারেন?
কিয়ারা ড্যান

3
@ কিয়ারাডান সম্পন্ন হয়েছে
আর্নৌল্ড

3

05 এ বি 1 ই , 33 30 29 বাইট

2F.•s¯}˜?•2ô€Â2ä`.:S¶¡øJ»}'v¢

এটি অনলাইনে চেষ্টা করুন বা আরও কয়েকটি পরীক্ষার কেস যাচাই করুন

@ জিতস এর পাইথন 3 উত্তর বন্দর , তাই তাকে upvote নিশ্চিত করুন!
-১ বাইট @ জিটসকে ধন্যবাদ ।

ব্যাখ্যা:

লিগ্যাসি সংস্করণটিতে স্ট্রিং-তালিকাটি জিপ / ট্রান্সপোস করতে সক্ষম হওয়ার সুবিধা রয়েছে, যেখানে নতুন সংস্করণটির একটি স্পষ্ট প্রয়োজন হবে Sএবং Jএটি কেবল অক্ষর-তালিকার সাথে কাজ করে। তবে, একটি নতুন সংক্ষিপ্ত €Âসংক্ষিপ্ত স্ট্রিংয়ের সংমিশ্রণে নতুন সংস্করণটি 3 বাইট সংক্ষিপ্ততর । উত্তরাধিকার সংস্করণে কেবল মানচিত্রের অভ্যন্তরে থাকা স্ট্যাকের সর্বশেষ মানটি রাখে তবে নতুন সংস্করণে এটি মানচিত্রের অভ্যন্তরে স্ট্যাকের সমস্ত মান রাখবে।

2F                  # Loop 2 times:
  .•s¯}˜?•          #  Push compressed string "vbvabbca"
   2ô               #  Split it into parts of size 2: ["vb","va","bb","ca"]
     €Â             #  Bifurcate (short for duplicate & reverse copy) each:
                    #   ["vb","bv","va","av","bb","bb","ca","ac"]
       2ä           #  Split it into two parts:
                    #   [["vb","bv","va","av"],["bb","bb","ca","ac"]]
         `          #  Push both those lists separated to the stack
          .:        #  Replace all strings once one by one in the (implicit) input-string
            S       #  Then split the entire modified input to a list of characters
             ¶¡     #  Split that list by newlines into sublists of characters
               ø    #  Zip/transpose; swapping rows/columns
                J   #  Join each inner character-list back together to a string again
                 »  #  And join it back together by newlines
}'v¢               '# After the loop: count how many "v" remain

আমার এই 05AB1E টিপটি দেখুন (বিভাগটি কীভাবে স্ট্রিংগুলি সংকোচিত করবেন? ) কেন .•s¯}˜?•তা বোঝার জন্য "vbvabbca"


আপনার bc=> প্রয়োজন নেই baযদি আপনি bv=> এর baআগে av=> প্রয়োগ করেন ac। সুতরাং .•6øнãI•(v "bvavbaac" এর সংকীর্ণ ফর্ম) 2 বাইট সংরক্ষণ করা যথেষ্ট।
15-22 এ গ্রিমি

এটা তোলে 1 পরিবর্তে 3 ফলাফল @Grimy শেষ টেস্ট কেস তবে।
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন তিনটির পরিবর্তে দুটি প্রতিস্থাপনের পদক্ষেপের পরে সমস্ত কৌশলটি মনে করছেন
জিতস

@ জিতস ধন্যবাদ সংক্ষেপণের স্ট্রিংটি 2 বাইট সংক্ষিপ্ত, তবে এখন আমার প্রয়োজন .:(সমস্ত একবারে প্রতিস্থাপন করুন) এর পরিবর্তে :(এটি আর উপস্থিত না হওয়া পর্যন্ত সমস্ত প্রতিস্থাপন করুন)। এখনও -১, যদিও। :) আমাকে জানতে দেওয়ার জন্য ধন্যবাদ.
কেভিন ক্রুইজসেন

2

জাভা 10, 211 209 বাইট

m->{int i=m.length,j,c=0,f,t,I,J;for(;i-->0;)for(j=m[i].length;j-->0;c+=m[i][j]>98?f/9:0)for(f=t=9;t-->0;)try{f-=m[I=i+t/3-1][J=j+t%3-1]==98||Math.abs(I-i+J-j)==1&m[I][J]<98?1:0;}catch(Exception e){}return c;}

সমস্ত একক আটটি চ্যালেঞ্জের জন্য আমার উত্তরটির পরিবর্তন ।
-২ বাইটস @ সিলিংক্যাটকে ধন্যবাদ ।

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

ব্যাখ্যা:

m->{                           // Method with char-matrix parameter & int return-type
  int i=m.length,              //  Amount of rows
      j,                       //  Amount of columns
      c=0,                     //  Virus-counter, starting at 0
      f,                       //  Flag-integer
      t,I,J;                   //  Temp-integers
  for(;i-->0;)                 //  Loop over the rows of the matrix
    for(j=m[i].length;j-->0    //   Inner loop over the columns
        ;c+=                   //     After every iteration: increase the counter by:
            m[i][j]>98         //      If the current cell contains a 'v'
             f/9               //      And the flag is 9:
                               //       Increase the counter by 1
            :0)                //      Else: leave the counter unchanged by adding 0
      for(f=t=9;               //    Reset the flag to 9
          t-->0;)              //    Loop `t` in the range (9, 0]:
         try{f-=               //     Decrease the flag by:
           m[I=i+t/3-1]        //      If `t` is 0, 1, or 2: Look at the previous row
                               //      Else-if `t` is 6, 7, or 8: Look at the next row
                               //      Else (`t` is 3, 4, or 5): Look at the current row
            [J=j+t%3-1]        //      If `t` is 0, 3, or 6: Look at the previous column
                               //      Else-if `t` is 2, 5, or 8: Look at the next column
                               //      Else (`t` is 1, 4, or 7): Look at the current column
            ==98               //      And if this cell contains a 'b'
            ||Math.abs(I-i+J-j)==1
                               //      Or if a vertical/horizontal adjacent cell
              &m[I][J]<98?     //      contains an 'a'
               1               //       Decrease the flag by 1
            :0;                //      Else: leave the flag unchanged by decreasing with 0
         }catch(Exception e){} //     Catch and ignore any ArrayIndexOutOfBoundsExceptions,
                               //     which is shorter than manual checks
  return c;}                   //  And finally return the virus-counter as result

1

কাঠকয়লা , 39 বাইট

WS⊞υι≔⪫υ⸿θPθ≔⁰ηFθ«≧⁺›⁼ιv⁺№KMb№KVaηι»⎚Iη

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

WS⊞υι≔⪫υ⸿θPθ

\rঅক্ষরের সাথে ইনপুট স্ট্রিংগুলিতে যোগদান করুন এবং ফলাফলটি ক্যানভাসে আঁকুন।

≔⁰η

লাইভ ভিরিয়ির সংখ্যা সাফ করুন।

Fθ«

ইনপুটটিতে অক্ষরগুলির উপর লুপ করুন।

≧⁺›⁼ιv⁺№KMb№KVaη

বর্তমানের চরিত্রটি যদি কোনও ভাইরাস এবং bকোনও দিক বা aসংলগ্নভাবে কোনও সংলগ্ন না থাকে তবে লাইভ ভিরিয়ির সংখ্যা বৃদ্ধি করুন।

ι»

পরবর্তী চরিত্রটি দিয়ে পুনরাবৃত্তি করুন।

⎚Iη

ক্যানভাস সাফ করুন এবং লাইভ ভিরিআইয়ের মোট সংখ্যা মুদ্রণ করুন।


1

পার্ল ( -00lp), 82 বাইট

vস্থান দ্বারা প্রতিস্থাপন করতে regex ব্যবহার করে , তারপর vগুলি গণনা

/.
/;$,="(|..{@-})";$;="(|.{@-,@+})";$_=s/(a$,|b$;)\Kv|v(?=$,a|$;b)/ /s?redo:y/v//

Tio

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