পারস্পরিকভাবে কুইন্স আক্রমণ


26

একটি 8x8 দাবাবোর্ড যে কোনও দুটি স্বতন্ত্র মান দ্বারা উপস্থাপিত হোক, যার একটি মান খালি বর্গক্ষেত্র এবং অন্যটি রানী। নিম্নলিখিত উদাহরণগুলিতে, আমি 0 টি খালি স্কোয়ার এবং 1 এস রানী হিসাবে ব্যবহার করি। উদাহরণ স্বরূপ:

দাবাড়িতে কুইন্স

দেওয়া হয়

1 0 1 1 1 0 0 0
1 0 1 0 1 0 1 1
1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1
1 0 0 0 1 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 1

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

আক্রমণ রানী

নিম্নলিখিত পরীক্ষার মামলা দেওয়ার জন্য উপরে 43 টি জুড়ি পাওয়া গেছে:

Input:
1 0 1 1 1 0 0 0
1 0 1 0 1 0 1 1
1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1
1 0 0 0 1 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 1
Output: 43

চ্যালেঞ্জ

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

  • খালি স্কোয়ার এবং কুইনগুলি উপস্থাপন করতে দুটি মান ব্যবহার করে যে কোনও বিন্যাসে আপনি ইনপুট করতে পারেন, যেমন, ফাঁকা স্কোয়ারের জন্য 64 "।" এর স্ট্রিং এবং নীচে থেকে শীর্ষে সারি দ্বারা "Q" s এর রানী, একটি 8x8 বুলিয়ান্সের ম্যাট্রিক্স, 0 এবং 1 ইত্যাদির পূর্ণসংখ্যার তালিকার একটি তালিকা, যতক্ষণ না এটি আপনার সমাধানে ব্যাখ্যা করা হয়
  • আউটপুট একটি পূর্ণসংখ্যা হয়
  • স্ট্যান্ডার্ড আই / ও পদ্ধতিগুলি প্রয়োগ হয় এবং মানক লুফোলগুলি নিষিদ্ধ
  • এটি কোড গল্ফ তাই বাইট জিতে সংক্ষিপ্ত উত্তর

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

0 এবং 1 ফর্ম্যাটটি ব্যবহার করে 0 টি ফাঁকা স্কোয়ার এবং 1 টি রানী রয়েছে:

Input:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Output: 0

Input:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 0

Input:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Output: 1

Input:
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0
0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0
0 0 0 0 0 0 0 0
Output: 10

Input:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 4

Input:
1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 11

আমার দ্বিতীয় সংস্করণ পোস্ট করার আগে আমার জিজ্ঞাসা করা উচিত ছিল: রানীর জন্য 254 এবং খালি স্কোয়ার গ্রহণযোগ্য ইনপুট মানগুলির জন্য 0 ?
আর্নৌল্ড

@ আরনল্ড আপনি যে কোনও ফর্ম্যাটটিতে সর্বাধিক সুবিধাজনক যে ইনপুট করতে পারেন যা খালি স্কোয়ার এবং রানির প্রতিনিধিত্ব করতে দুটি মান ব্যবহার করে। সুতরাং এটি নিশ্চিত হয়ে আছে
জেগমিগস্ট

ধন্যবাদ। আমি জিজ্ঞাসা করেছি কারণ আমি মনে করি যে এই নিয়মটি আক্ষরিকভাবে গ্রহণ করা গেলে কিছুটা অনুমতি দেওয়া হতে পারে। আমি রানির জন্য বেশিরভাগ জেএস কোডযুক্ত একটি স্ট্রিং পাস করতে বলি এবং প্রোগ্রামটিতে কেবল এটি মূল্যায়ন করতে পারি। (তবে এটি কোনও ডিফল্ট লুফোল দ্বারা আটকানো হতে পারে I'm আমি নিশ্চিত নই))
আরনাউল্ড

উত্তর:


14

পাইথন 2 , 105 বাইট

lambda b:sum(b[i+d::d][:(8,7-i%8,i%8)[d%8%5]].find('1')*int(c)>0for i,c in enumerate(b)for d in[1,7,8,9])

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

ব্যাখ্যা

আমরা ইনপুটটি 64 টি অক্ষরের স্ট্রিং হিসাবে গ্রহণ করি '0'বা '1'। পদক্ষেপের টুকরোগুলি ব্যবহার করে, আমরা আমাদের মুখী প্রতিটি রানীর কাছ থেকে চারটি "দৃষ্টির রেখা" ফেলেছি। উদাহরণস্বরূপ, যখন i = 10 এবং d = 7 , রানিকে ♥ হিসাবে চিহ্নিত করুন এবং b[i+d::d]t হিসাবে নির্বাচিত টাইলগুলি :

1 0 1 1 1 0 0 0
1 0  0 1 0 1 1
1  1 0 1 1 0 1
 1 0 1 0 1 0 
0 1 1 0 0 1  1
1 0 0 0 1  0 0
0 1 0 0  1 1 1
0 1 1  0 1 0 1

স্পষ্টতই, আমরা আসলে বোর্ডটির চারপাশে দৃষ্টি মোড়ানো করতে চাই না। সুতরাং আমরা বোর্ডের প্রান্তটি প্রতিটি দিকে কত দূরে রয়েছে তা গণনা করি এবং এতে টাইলগুলি দেখি b[i+d::d][:…]

প্রতিটি টাইল-দিকের জুটির জন্য আমরা গণনা করি:

ray.find('1')*int(c)>0

এটি যখনই ব্যর্থ হবে

  • cরানী নয়; অথবা
  • এই রানিটি দেখতে রানীটি খুব নিকটে ( findফিরে এসেছে 0); অথবা
  • এই রশ্মি কোনও রানী দেখতে পায় না ( findফিরে আসে returns1)।

প্রতি জোড়া রানী কেবল একবার পরীক্ষা করা হয়, যেহেতু একটি "পূর্ববর্তী" রানী থেকে "পরে" একটিতে রশ্মি সবসময় পাঠের ক্রমে এগিয়ে দেওয়া হয়।


10

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

রানির জন্য 254 এবং খালি স্কোয়ারের জন্য 0 দিয়ে 64 পূর্ণসংখ্যার অ্যারের হিসাবে ইনপুট নেয় ।

a=>[s=0,6,7,8].map(d=>a.map(g=(n,p)=>(p%8-(p+=~d)%8)**2<n%4?a[p]?s+=n&1:g(n/2,p):0))|s

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

এই সংস্করণটি পুনরাবৃত্তির অংশে স্টপ শর্তটি পেতে পাটিগণিতের আন্ডারফ্লোটিকে গালাগাল করে।


জাভাস্ক্রিপ্ট (ইএস 7), 89 বাইট

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

a=>[s=0,6,7,8].map(d=>a.map(g=(n,p,x)=>(p%8-(p+=~d)%8)**2>1|p<0?0:a[p]?s+=!x&n:g(n,p)))|s

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

কিভাবে?

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

আরআরম্যাপ (ফাংশন কলব্যাক (বর্তমানভ্যালু [, সূচক [, অ্যারে]])

এটি কোডে এক্স ভেরিয়েবল।

a =>                        // given the input array a[]
  [ s = 0,                  // initialize the sum s to 0
    6, 7, 8 ].map(d =>      // for each direction d in [0, 6, 7, 8]:
    a.map(g = (n, p, x) =>  //   for each square n at position p in a[]:
      (                     //     we are out of the board if:
        p % 8 -             //       - abs(p % 8 - p' % 8) is greater than 1
        (p += ~d) % 8       //         where p' = p - (d + 1)
      ) ** 2 > 1 |          //         (squaring is shorter than using Math.abs)
      p < 0 ?               //       - or p' is less than 0
        0                   //       if so, stop recursion
      :                     //     else:
        a[p] ?              //       if there's a queen on the target square:
          s +=              //         increment s if:
            !x &            //           x is undefined (this is not the 1st iteration)
            n               //           and n = 1 (there's a queen on the source square)
        :                   //       else:
          g(n, p)           //         do a recursive call to g(), with x undefined
    )                       //   end of inner map()
  ) | s                     // end of outer map(); return s

8

শামুক , 14 বাইট

A
rdaa7\1\0+\1

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

ইনপুটটি 0/1 বিন্যাস, লাইনগুলির মধ্যে ফাঁকা ছাড়াই।

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


A "সমস্ত পাথ" বিকল্পটি সেট করে, যাতে কোনও রানী যদি একাধিক জোড়ায় থাকে তবে pairs জোড়াগুলির প্রত্যেকটিই একটি মিল তৈরি করে।

rdaa7এস, এসই, ই, এবং এনই-তে ম্যাচের দিক নির্ধারণ করে। সমস্ত দিকনির্দেশে ( z) সেট করা দ্বিগুণ গণনার কারণ হতে পারে।

\1\0+\1একটি 1, তারপরে এক বা একাধিক 0, এর পরে অন্যটির সাথে মেলে 1


6

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

(+/+⌿-⌈⌿)2<⌿0⍪⊢,⍉,8 31⍴⊢,≠⍨,⌽,≠⍨

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

≠⍨ এটি "নিজের সমান নয়" - একটি 8x8 অল-শূন্য ম্যাট্রিক্স

⊢,≠⍨,⌽,≠⍨- যদি মূল ম্যাট্রিক্স হয় তবে ABC...এই অভিব্যক্তিটি ফিরে আসে:

A B C D E F G H 0 0 0 0 0 0 0 0 H G F E D C B A 0 0 0 0 0 0 0 0
I J K L M N O P 0 0 0 0 0 0 0 0 P O N M L K J I 0 0 0 0 0 0 0 0
Q R S T U V W X 0 0 0 0 0 0 0 0 X W V U T S R Q 0 0 0 0 0 0 0 0
Y Z A B C D E F 0 0 0 0 0 0 0 0 F E D C B A Z Y 0 0 0 0 0 0 0 0
G H I J K L M N 0 0 0 0 0 0 0 0 N M L K J I H G 0 0 0 0 0 0 0 0
O P Q R S T U V 0 0 0 0 0 0 0 0 V U T S R Q P O 0 0 0 0 0 0 0 0
W X Y Z A B C D 0 0 0 0 0 0 0 0 D C B A Z Y X W 0 0 0 0 0 0 0 0
E F G H I J K L 0 0 0 0 0 0 0 0 L K J I H G F E 0 0 0 0 0 0 0 0

8 31⍴ উপাদানগুলি সারি-প্রধান ক্রমে পুনরায় ব্যবহার করে এটি 8x32 থেকে 8x31 এ পুনরায় আকার দেয়:

A B C D E F G H 0 0 0 0 0 0 0 0 H G F E D C B A 0 0 0 0 0 0 0
0 I J K L M N O P 0 0 0 0 0 0 0 0 P O N M L K J I 0 0 0 0 0 0
0 0 Q R S T U V W X 0 0 0 0 0 0 0 0 X W V U T S R Q 0 0 0 0 0
0 0 0 Y Z A B C D E F 0 0 0 0 0 0 0 0 F E D C B A Z Y 0 0 0 0
0 0 0 0 G H I J K L M N 0 0 0 0 0 0 0 0 N M L K J I H G 0 0 0
0 0 0 0 0 O P Q R S T U V 0 0 0 0 0 0 0 0 V U T S R Q P O 0 0
0 0 0 0 0 0 W X Y Z A B C D 0 0 0 0 0 0 0 0 D C B A Z Y X W 0
0 0 0 0 0 0 0 E F G H I J K L 0 0 0 0 0 0 0 0 L K J I H G F E

⊢,⍉, মূল ম্যাট্রিক্স এবং এর ট্রান্সপোজ (স্বচ্ছতার জন্য অতিরিক্ত স্থান) প্রিপেন্ড করে:

A B C D E F G H  A I Q Y G O W E  A B C D E F G H 0 0 0 0 0 0 0 0 H G F E D C B A 0 0 0 0 0 0 0
I J K L M N O P  B J R Z H P X F  0 I J K L M N O P 0 0 0 0 0 0 0 0 P O N M L K J I 0 0 0 0 0 0
Q R S T U V W X  C K S A I Q Y G  0 0 Q R S T U V W X 0 0 0 0 0 0 0 0 X W V U T S R Q 0 0 0 0 0
Y Z A B C D E F  D L T B J R Z H  0 0 0 Y Z A B C D E F 0 0 0 0 0 0 0 0 F E D C B A Z Y 0 0 0 0
G H I J K L M N  E M U C K S A I  0 0 0 0 G H I J K L M N 0 0 0 0 0 0 0 0 N M L K J I H G 0 0 0
O P Q R S T U V  F N V D L T B J  0 0 0 0 0 O P Q R S T U V 0 0 0 0 0 0 0 0 V U T S R Q P O 0 0
W X Y Z A B C D  G O W E M U C K  0 0 0 0 0 0 W X Y Z A B C D 0 0 0 0 0 0 0 0 D C B A Z Y X W 0
E F G H I J K L  H P X F N V D L  0 0 0 0 0 0 0 E F G H I J K L 0 0 0 0 0 0 0 0 L K J I H G F E

2<⌿0⍪শীর্ষে 0 টি যুক্ত করুন এবং এর <নীচের উপাদানগুলির সাথে প্রতিটি উপাদান ব্যবহার করে তুলনা করুন , সুতরাং আমরা 1s এর প্রতিটি উল্লম্ব গ্রুপে নেতৃত্বের জন্য 1 পাই এবং অন্য কোথাও আমরা 0 গুলি পাই

+⌿-⌈⌿ কলাম অনুসারে কলাম দ্বারা ম্যাক্সিমার বিয়োগফলের যোগফল - আমরা প্রতিটি কলামে 1-গোষ্ঠীর মধ্যে ব্যবধানের সংখ্যা গণনা করি, 0 না থাকলে 0

+/ সমষ্টি


5

জেলি , 22 20 বাইট

t0ŒgL:2
Z,U;ŒD$€ẎÇ€S

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


কিভাবে কাজ করে?
lirtosiast

@ লিরিটোসিস্ট আমার মনে নেই ...
ব্যবহারকারী 202729

@lirtosiast প্রথম লিঙ্কটি 1D তে জোড়ের সংখ্যা গণনা করে, দ্বিতীয় লিঙ্কটি সারণির সমস্ত লাইনের উপরে প্রথম লিঙ্কের যোগফল গ্রহণ করে।
ব্যবহারকারী 202729

3

রেটিনা 0.8.2 , 60 58 বাইট

1
¶1$';___¶
_
$n$%`7$*_
(.)(?=.*;(_)*)(?<-2>.)*
$1
m`^10+1

এটি অনলাইন চেষ্টা করুন! 8 টি কমা-বিচ্ছিন্ন 8-অক্ষরের বাইনারি স্ট্রিং হিসাবে ইনপুট নেয়, তবে শিরোনাম আপনার জন্য সরবরাহিত ফর্ম্যাটটিকে রূপান্তর করে। ব্যাখ্যা:

1
¶1$';___¶

বোর্ডের সমস্ত সাবস্ট্রিংগুলি রানী থেকে শুরু করে তৈরি করুন। প্রতিটি স্ট্রিংয়ের জন্য একটি মার্কার মান প্রত্যয় করুন। সম্পাদনা: পিছনে কিছু আবর্জনার স্ট্রিং রেখে 2 বাইট সংরক্ষণ করা; এগুলি কার্যকরভাবে উপেক্ষা করা হয়।

_
$n$%`7$*_

প্রতিটি চিহ্নিতকারীকে একটি অন্তর্ভুক্ত ব্যাপ্তিতে বিভক্ত করুন এবং অ-শূন্য উপাদানগুলিতে 7 যুক্ত করুন।

(.)(?=.*;(_)*)(?<-2>.)*
$1

চিহ্নের দৈর্ঘ্যের সমতুল্য প্রতিটি অক্ষর মুছুন। এটি প্রতিটি রানির কাছ থেকে প্রতিটি পূর্ব, দক্ষিণ-পশ্চিম, দক্ষিণ বা দক্ষিণ-পূর্ব রশ্মির সন্ধানের সমান।

m`^10+1

অন্য রানির সাথে দেখা হওয়ার আগে কমপক্ষে একটি খালি স্কোয়ারের মধ্য দিয়ে যাওয়া সমস্ত রশ্মি গণনা করুন।


3

জাভাস্ক্রিপ্ট (ES6) + স্নেকএক্স , 38 বাইট

s=>snakeEx.run('m:<*>10+1',s).length/2

ফর্ম ইনপুট লাগে '10111000\n10101011\n10101101\n01010100\n01100101\n10001000\n01000111\n01110101'। দেখা যাচ্ছে, স্নেকএক্স এখনও এর মূল চ্যালেঞ্জের বাইরে ব্যবহার করা যেতে পারে!


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