রানী ধাঁধা যাচাই করুন


16

দাবাতে রানী কী তা আপনি যদি না জানেন তবে এটি খুব বেশি গুরুত্ব দেয় না; এটি শুধু একটি নাম :)

আপনার ইনপুটটি নির্বিচারে প্রস্থ এবং উচ্চতার একটি বর্গ হবে যাতে কিছু পরিমাণ রানী থাকে। ইনপুট বোর্ডটি দেখতে এটির মতো হবে (এই বোর্ডটির প্রস্থ এবং উচ্চতা 8):

...Q....
......Q.
..Q.....
.......Q
.Q......
....Q...
Q.......
.....Q..

এই বোর্ডে 8 টি রানী রয়েছে। এখানে যদি বলে, 7, বা 1, বা 10, বোর্ডটি বৈধ হবে না।

এখানে আমরা .একটি খালি জায়গার Qজন্য এবং একটি রানির জন্য ব্যবহার করি। আপনি, বিকল্পভাবে, পরিবর্তে আপনার ইচ্ছুক যে কোনও অ-হোয়াইটস্পেস অক্ষর ব্যবহার করতে পারেন।

এই ইনপুটটি বৈধ হিসাবে যাচাই করা যেতে পারে, এবং আপনার একটি সত্যবাদী মান মুদ্রণ করা (বা প্রত্যাবর্তন) করা উচিত (যদি এটি বৈধ না হয় তবে আপনার একটি মিথ্যা মান মুদ্রণ করা উচিত (বা প্রত্যাবর্তন করা উচিত)। এটি বৈধ কারণ কোনও রানী অন্য সারির মতো একই সারিতে, কলাম, তির্যক বা অ্যান্টি-ডায়াগোনাল নয়

উদাহরণ (ব্রাকেটে জিনিস আউটপুট করবেন না):

...Q....
......Q.
..Q.....
.......Q
.Q......
....Q...
Q.......
.....Q..

1

...Q.
Q....
.Q...
....Q
..Q..

0

Q.
Q.

0

..Q
...
.Q.

0 (this is 0 because there are only 2 queens on a 3x3 board)


..Q.
Q...
...Q
.Q..

1

Q

1 (this is valid, because the board is only 1x1, so there's no queen that can take another)

আমাকে জোর দেওয়া যাক যে কোনও ইনপুট কেবল বৈধ, যদি কোনও রানী অন্য সারির মতো একই সারি, কলাম, তির্যক বা অ্যান্টি-ডায়াগোনাল না হয়

বিধি

  • আপনি কখনও খালি ইনপুট পাবেন না
  • যদি ইনপুটটিতে বোর্ডের ক্ষেত্রফলের স্কোয়ার রুটের চেয়ে কম রানী থাকে তবে এটি বৈধ নয়।
  • নোট করুন 2x2 বা 3x3 বোর্ডের জন্য কোনও বৈধ সমাধান নেই, তবে প্রতিটি অন্যান্য আকারের স্কোয়ার বোর্ডের জন্য একটি সমাধান রয়েছে , যেখানে প্রস্থ এবং উচ্চতা একটি প্রাকৃতিক সংখ্যা।
  • ইনপুট পিপিসিজি নিয়ম অনুসারে যে কোনও যুক্তিসঙ্গত বিন্যাসে থাকতে পারে
  • ইনপুট সর্বদা একটি বর্গক্ষেত্র হবে
  • উদাহরণগুলিতে আমি 1 এবং 0 ব্যবহার করেছি তবে আপনি কোনও সত্যবাদী বা মিথ্যা মান ব্যবহার করতে পারেন (যেমন Why yes, sir, that is indeed the caseএবং Why no, sir, that is not the case)

এটি , সংক্ষিপ্ততম কোডটি জিতেছে!


আসুন আমরা এই আলোচনাটি আড্ডায় চলতে থাকি ।
Okx

1
হায় {(x, y, v)}সঙ্গে vমধ্যে [., Q]একটি বৈধ ইনপুট বিন্যাস হবে?
পিজিজিউডগাস্ট

পছন্দ করুন
Okx

2
@ ওকএক্স অন্য কথায়, তারা ইনপুট হিসাবে স্থানাঙ্ক এবং মানগুলির একটি তালিকা পাওয়ার বিষয়ে জিজ্ঞাসা করছে। উদাহরণস্বরূপ: (0, 0, Q), (0, 1, .), (1, 0, Q), (1, 1, .)তৃতীয় পরীক্ষার কেস হবে।
মেগো

আমি কি কোনও লাইন ব্রেক ছাড়াই স্ট্রিং নিতে পারি?
তিতাস

উত্তর:


7

শামুক , 14 বাইট

&
o.,\Q!(z.,\Q

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

2 ডি সিদ্ধান্ত সমস্যার জন্য 2D প্যাটার্নের সাথে মিলে যাওয়া ভাষার মতো কিছুই নয়। :)

ব্যাখ্যা

&প্রথম লাইনে একটি ম্যাচ মোড বিকল্প যা ইনপুটে প্রতি সম্ভব অবস্থান থেকে মেলে দ্বিতীয় লাইনে প্যাটার্ন প্রয়োজন। যদি এটি হয় তবে প্রোগ্রামটি প্রিন্ট করে 1, অন্যথায় এটি প্রিন্ট করে 0

প্যাটার্ন নিজেই হিসাবে, মনে রাখবেন যে )শেষে একটি অন্তর্নিহিত আছে ।

o       ,, Move in any orthogonal direction (up, down, left or right).
.,\Q    ,, Make sure that there's a Q somewhere in that direction from the
        ,, starting position of the match.
!(      ,, After finding the Q, make sure that the following part _doesn't_ match:
  z     ,,   Move in any orthogonal or diagonal direction.
  .,\Q  ,,   Try to find another Q in a straight line.
)

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


6

জেলি , 17 বা 15 বাইট

ỴµUŒD;ŒD;ZVṀ;V=1Ṃ

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

রানির ¹জন্য এবং ফাঁকা জায়গার জন্য ব্যবহার । (এটি বেশিরভাগই অ্যারের হিসাবে ইনপুট নেওয়ার উপর নিষেধাজ্ঞার একটি পরিণতি, কারণ এটি ইনপুটটিকে স্ট্রিং হতে বাধ্য করে; জিলিতে স্ট্রিংগুলিকে রূপান্তর করা সহজ, সবচেয়ে সহজ পদ্ধতির সাথে মূল্যায়ন হয়, এবং এটি 1 এবং এর পরিবর্তে দেখা যায় যে 0, "অ্যাড 1" ( ) এবং "অ্যাড 0" ব্যবহার করে ¹) বেশ কয়েকটি যোগফল এবং মানচিত্রের নির্দেশাবলী বাদ দেওয়া সম্ভব করে দেয় কারণ এটি মূল্যায়নের মাধ্যমে আমরা একটি তালিকায় রানিকে গণনা করতে পারি)) সত্যবাদী এবং মিথ্যা মানগুলি জেলির স্বাভাবিক 1এবং 0

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

ব্যাখ্যা

ỴµUŒD;ŒD;ZVṀ;V=1Ṃ
Ỵ                    Split on newlines.
 µ                   Set this value as the default for missing arguments.
     ;  ;            Concatenate the following three values:
  UŒD                - the antidiagonals;
      ŒD             - the diagonals;
         Z           - and the columns.
          V          Evaluate (i.e. count the queens on) all of those.
           Ṁ         Take the largest value among the results.
            ;V       Append the evaluation (i.e. queen count) of {each row}.
              =1     Compare each value to 1.
                Ṃ    Take the minimum (i.e. most falsey) result.

সুতরাং মূল ধারণাটি হ'ল আমরা নিশ্চিত করেছি যে প্রতিটি অ্যান্টিডিজোনাল, তির্যক এবং কলামে কমপক্ষে একটি রানী রয়েছে; এবং প্রতিটি সারিতে ঠিক এক রানী। এই শর্তগুলি একসাথে যথেষ্ট প্রয়োজন যে চারটি ধরণের লাইনের প্রতিটিটিতে কমপক্ষে একটি রানী এবং বোর্ডের পাশের দৈর্ঘ্যের সমান বেশ কয়েকটি রানী রয়েছে।

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

আরেকটি আকর্ষণীয় নোট হ'ল (সমস্ত সমান) এ পরিবর্তন =1Ṃকরা Eএকটি জেনারেলাইজড এন- স্কিন চেকারকে দেয় , যা একটি এন × n বোর্ডকেও গ্রহণ করবে যেখানে প্রতিটি সারি, কলাম, তির্যক এবং অ্যান্টিডিজোনাল কে কুইনের চেয়ে বেশি থাকে না এবং বোর্ডটি হুবহু থাকে রাণী। 1 কে সমান 1 তে সীমাবদ্ধ করতে আসলে দুটি বাইট খরচ হয়।


বিধিগুলি আপডেট করা হয়েছিল, এখন "পিপিসিজি নিয়ম অনুসারে ইনপুট কোনও যুক্তিসঙ্গত ফর্ম্যাটে হতে পারে", এটি আরও খাটো করা উচিত :) সম্পাদনা - আমি আপনাকে এটি লক্ষ্য করে দেখছি।
জোনাথন অ্যালান

5

অক্টাভা, 57 70 67 51 52 বাইট

@ লুইস মেন্ডোকে ধন্যবাদ flipনা দিয়ে 1 বাইট ব্যবহার করে rot90সংরক্ষণ করা হয়েছে, তবে 1x1 কেসটিতে একটি বাগ পাওয়া গেছে

@(A)all(sum([A A' (d=@spdiags)(A) d(flip(A))],1)==1)

বাইনারি ম্যাট্রিক্স হিসাবে ইনপুট নেয় 1 সহ একটি রানী এবং 0 টি খালি স্থান উপস্থাপন করে।

একটি অনামী ফাংশন তৈরি করে যা প্রথমে ইনপুট ম্যাট্রিক্স এবং এর ট্রান্সপোজকে সম্মতি দেয়।

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

এখন সংক্ষিপ্ত ম্যাট্রিক্সের প্রতিটি কলামের যোগফল নিন এবং নিশ্চিত করুন যে প্রতিটি কলামটি হ'ল 1।

নমুনা চালানো আদর্শের


আমি মনে করি আপনি এর flipপরিবর্তেrot90
লুইস মেন্ডো

@ লুইস মেন্ডো ইয়েপ, এটি খুব কার্যকর হবে। ধন্যবাদ!
বেকার

এছাড়াও, আপনি এড়াতে পারবেন না all()?
লুইস মেন্ডো

@ লুইস মেন্দো উঘ ... সম্ভবত ... তবে এটি রাতের খাবারের আগে অপেক্ষা করতে হবে;)
বেকার

4

এমএটিএল , 38 34 বাইট

@ বেকারকে ধন্যবাদ 4 বাইট !

sG!sGt&n_w&:&XdsGP5M&Xdsv2<GnGzU=*

ইনপুটটি শূন্য এবং বিভাজক হিসাবে সেমিকোলনগুলি ব্যবহার করে শূন্য এবং এর 2D অ্যারে।

এটি সত্যের হিসাবে কলামের ভেক্টরকে এবং কমপক্ষে ভ্যালি হিসাবে কমপক্ষে একটি শূন্যযুক্ত একটি কলাম ভেক্টরকে আউটপুট করে।

এটি অনলাইন চেষ্টা করুন! ফুটার কোড ifসত্যতা বা মিথ্যাচার প্রদর্শনের জন্য একটি শাখা।

বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

s      % Input binary matrix implicitly. Sum of columns. Gives a row vector
G!     % Paste input again. Transpose
s      % Sum of columns (rows in the original matrix). Gives a row vector
G      % Paste input again
t&n    % Duplicate. Push number of rows and number of columns (will be equal)
_w     % Negate, flip
&:     % Binary range. Gives [-n -n+1 ... n] for input of size n×n
&Xd    % Get diagonals -n through n. This gives all diagonals as colums
s      % Sum of each column (diagonals of original matrix). Gives a row vector
GP     % Paste input again. Flip vertically
5M     % Push [-n -n+1 ... n] again
&Xd    % Get diagonals -n through n (anti-diagonals of original matrix)
s      % Sum of each column. Gives a row vector
v      % Concatenate everything into a column vector
2<     % True for elements that are less than 2
Gn     % Paste input again. Number of elements
Gz     % Paste input again. Number of nonzeros (i.e. of queens)
U      % Square
=      % True if equal
*      % Mutiply, element-wise

আপনি এখন ইনপুট হিসাবে বাইনারি ম্যাট্রিক্স নিতে পারেন যে 2 বাইট সংরক্ষণ করতে পারেন।
বেকার

2

জে , 37 বাইট

(+/&,=#)*1=[:>./+//.,+//.&|.,+/,+/&|:

বেনামে ফাংশন ট্রেন যা বুলিয়ান ম্যাট্রিক্সকে তর্ক হিসাবে গ্রহণ করে।

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

( +/সমষ্টি &এর ,জটিল করে তোলা =সমান #সারির ট্যালি)

* এবং (আলোকিত সময়)

1এক =সমান সর্বোচ্চ[:>./

+/অঙ্কের /.তির্যকভাবে ,এবং (শয়নকামরা করতে catenated)

+/অঙ্কের /.তির্যকভাবে &এর |.বিপরীত ,এবং

+/যোগফলগুলি জুড়ে ,এবং

+/অঙ্কের &এর |:TRANSPOSE


2

স্নেকএক্স , 67 বাইট

m:({q<>}({q<R>}[{q<RF>}{n<RF>}].)*{e<>}<R>)%{4}
e:.$
q:_*Q_*$
n:_+$

_জায়গায় ব্যবহার করে.ইনপুট । সত্যের জন্য 1 বা ততোধিক ম্যাচ, মিথ্যাটির জন্য 0 টি ম্যাচ করে। আপনি শিরোনামের লিঙ্কটিতে একটি অনলাইন দোভাষী খুঁজে পেতে পারেন।

ব্যাখ্যা

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

নীচে থেকে এই প্রোগ্রামটি দেখুন।

n:_+$

এটি এমন একটি সাপকে সংজ্ঞায়িত করে nযা 1 বা আরও আন্ডারস্কোর এবং তারপরে গ্রিডের প্রান্তে মেলে। মনে রাখবেন যে এটি 8 টি মূল দিকের যে কোনও একটিতেও থাকতে পারে - সাপটি বয়ে যাওয়ার সময় দিকটি নির্ধারিত হয়।

q:_*Q_*$

অনুরূপ nউপরে, এই সংজ্ঞায়িত qসাপ যে আন্ডারস্কোর যে কোন সংখ্যার একটি একক ম্যাচ যেমন Q, আন্ডারস্কোর কোন সংখ্যা, এবং গ্রিড প্রান্ত। অন্য কথায়, একটি সারি / কলাম / তিরোনাক যেখানে এর মধ্যে কেবল একটি রানী রয়েছে।

e:.$

e একটি সাপ যা একটি চরিত্র এবং গ্রিডের প্রান্তের সাথে মেলে।

m:({q<>}({q<R>}[{q<RF>}{n<RF>}].)*{e<>}<R>)%{4}

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

  • ( )%{4}প্রথম পক্ষের জন্য একবারের প্রথম বারের জন্য 4 বার বন্ধনীর ভিতরে যা চালায়। (এরপরে কী, এটি একটি নির্দিষ্ট দিকের চিত্রের জন্য সহায়ক - বলুন, গ্রিডের উপরের প্রান্তটি উপরের বাম কোণ থেকে শুরু করে ডান দিকে সরানো))
  • {q<>}qপ্রধান সাপ যেদিকে চলছে সেদিকে একইভাবে একটি সাপ তৈরি করে। এটি যাচাই করে যে বর্তমান প্রান্তটি "ঠিক এক রাণী" বিধি পূরণ করে। নোট করুন যে আবর্তিত সাপগুলি মূল সাপের ম্যাচ পয়েন্টারটি সরায় না, তাই আমরা এখনও প্রান্তের শুরুতে।
  • ( )* প্রথম বন্ধনীর ভিতরে 0 বা আরও কিছু মেলে।
  • {q<R>}একটি qসাপকে মূল সাপের দিক থেকে ডানদিকে ঘুরানো। (উদাহরণস্বরূপ, যদি প্রধান সাপ উপরের প্রান্তে ডানদিকে চলেছে তবে এই সাপটি নীচের দিকে চলে moves) এটি প্রতিটি কলাম / সারি পরীক্ষা করে।
  • [ ] বন্ধনীগুলির মধ্যে যে কোনও একটি বিকল্পের সাথে মেলে:
    • {q<RF>}একটি qসাপকে মূল সাপের দিক থেকে 45 ডিগ্রি ডানদিকের দিকে (অর্থাত্ ight Rএবং Fদিকের দিকে) পরিণত হয় । qসাপ ম্যাচ তির্যক ঠিক একটি রাণী থাকে।
    • {n<RF>}nপরিবর্তে একটি সাপ জন্মায় । nসাপ সাথে মেলে যদি তির্যক কোন কুইন্স ধারণ করে।
  • . ম্যাচের পয়েন্টারটিকে এগিয়ে নিয়ে যাওয়া, কোনও চরিত্রের সাথে মেলে।
  • যতগুলি সম্ভব দিগন্ত এবং তীরচিহ্নগুলি যথাযথভাবে পরীক্ষা করার পরে, আমরা স্পাওয়ার মাধ্যমে নিশ্চিত হয়েছি যে আমরা প্রান্তে আছি {e<>}
  • শেষ অবধি, <R>মূল সর্পটি ডানদিকে ঘুরিয়ে, পরবর্তী প্রান্তটি মেলাতে প্রস্তুত।

অদ্ভুত জিনিস

  • বাইরের কোনায় ম্যাচটি শুরু হয় তা নিশ্চিত করার জন্য প্রোগ্রামটিতে কিছুই নেই। প্রকৃতপক্ষে, সত্যবাদী পরীক্ষার কেসগুলি বেশ কয়েকটি ম্যাচ উপস্থাপন করে, যার কয়েকটি ভিতরে কোথাও শুরু হয়। এটি সত্ত্বেও, আমি চেষ্টা করেছি এমন মিথ্যা মামলাগুলির মধ্যে কোনওটিই কোনও মিথ্যা ইতিবাচক উত্স তৈরি করতে পারেনি।
  • আমি যদি ভাষাটি স্পষ্টভাবে পড়ছি , তবে আমার Xজায়গায় (সমস্ত তির্যক দিকের শাখা) ব্যবহার করা উচিত ছিল RF। দুর্ভাগ্যক্রমে, অনলাইন অনুবাদক বলেছেন যে এটি একটি সিনট্যাক্স ত্রুটি ছিল। আমিও চেষ্টা করেছি* (সমস্ত দিকের শাখা), কিন্তু এটি দোভাষীকে ঝুলিয়ে দিয়েছে।
  • তাত্ত্বিকভাবে, ত্রিভুজগুলিতে _*Q?_*$"সর্বাধিক এক রানী" মিলে যাওয়ার মতো কিছু কাজ করা উচিত, তবে এটি দোভাষীকেও স্তব্ধ করে দেয়। আমার ধারণা খালি ম্যাচের সম্ভাবনা সমস্যা সৃষ্টি করে।

2

রুবি, 120 বাইট

ল্যাম্বদা ফাংশনটি মূল স্পেকের ভিত্তিতে যা স্ট্রিং হিসাবে ইনপুট প্রয়োজন।

->s{t=k=0
a=[]
s.bytes{|i|i>65&&(a.map{|j|t&&=((k-j)**4).imag!=0};a<<k)
k=i<11?k.real+1:k+?i.to_c}
t&&~a.size**2>s.size}

কিউ এর জটিল সংখ্যায় রূপান্তর করে এবং একে অপরের থেকে বিয়োগ করে। যদি কোনও দুটি রানির স্থানাঙ্কের মধ্যে পার্থক্যটি অনুভূমিক, উল্লম্ব বা তির্যক হয়, এটি 4 র্থ শক্তিতে বাড়ানো একটি আসল সংখ্যা অর্জন করবে এবং ব্যবস্থাটি অবৈধ।

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->s{                                 #Take input as string argument.
  t=k=0                                #k=coordinate of character. t=0 (truthy in ruby.)
  a=[]                                 #Empty array for storing coordinates.
  s.bytes{                             #Iterate through all characters as bytes.
    |i|i>65&&(                         #If alphabetical, compare the current value of k to the contents of a
      a.map{|j|t&&=((k-j)**4).imag!=0} #If k-j is horizontal, vertical or diagonal, (k-j)**4 will be real and t will be false
      a<<k)                            #Add the new value of k to the end of a.
    k=i<11?k.real+1:k+?i.to_c          #If not a newline, increment the imaginary part of k. If a newline, set imaginary to 0 and increment real
  }                                    #s.size should be a*a + a newlines. ~a.size = -1-a.size, so ~a.size**2 = (a.size+1)**2
t&&~a.size**2>s.size}                  #compare a.size with s.size and AND the result with t. Return value. 


p f["...Q....
......Q.
..Q.....
.......Q
.Q......
....Q...
Q.......
.....Q.."]

p f["...Q.
Q....
.Q...
....Q
..Q.."]

p f["Q.
Q."]

p f["..Q
...
.Q."]

p f["..Q.
Q...
...Q
.Q.."]

p f["Q"]

2

পাইথন 3 , 232 200 155 বাইট

d=1
f=input()
Q=[]
for i in f:d=[0,d][i.count('Q')==1];Q+=[(len(Q),i.index('Q'))]
print[0,d][sum(k[1]==i[1]or sum(k)==sum(i)for k in Q for i in Q)==len(Q)]

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

-32 বাইটস @ বেকারকে ইনপুট স্পেসিফিকেশনের পরিবর্তন লক্ষ্য করে ধন্যবাদ জানায়; আমি পাইথন থেকে ভাষাটি 3 থেকে 2 এ পরিবর্তন করেছি, এভাবে আমার ব্যবহারের অনুমতি দেয়input স্ট্রিংগুলির অ্যারে বা অক্ষরের অ্যারের অ্যারে হিসাবে ইনপুট নেওয়ার ।

-45 বাইটস @ লিকি নুনকে ধন্যবাদ


ইনপুট প্রয়োজনীয়তা শিথিল করা হয়েছে, যদি এটি আপনাকে কোনও সহায়তা করে।
বেকার

@ বেকার ঠিক আছে, ধন্যবাদ আমি পরিবর্তে স্ট্রিংগুলির অ্যারের হিসাবে ইনপুট নেব। যে ইশারা জন্য ধন্যবাদ!
হাইপারনিউট্রিনো


1

জাভাস্ক্রিপ্ট (ES6), 115 বাইট

a=>!a.some((b,i)=>b.some((q,j)=>q&&h[i]|v[j]|d[i+j]|e[i-j]|!(h[i]=v[j]=d[i+j]=e[i-j]=1))|!h[i],h=[],v=[],d=[],e=[])

Ungolfed:

function queens(arr) {
    horiz = [];
    vert = [];
    diag = [];
    anti = [];
    for (i = 0; i < arr.length; i++) {
        for (j = 0; j < arr.length; j++) {
            if (arr[i][j]) { // if there is a queen...
                if (horiz[i]) return false; // not already on the same row
                if (vert[j]) return false; // or column
                if (diag[i + j]) return false; // or diagonal
                if (anti[i - j]) return false; // or antidiagonal
                horiz[i] = vert[j] = diag[i + j] = anti[i - j] = true; // mark it
            }
        }
        if (!horiz[i]) return false; // fail if no queen in this row
    }
    return true;
}

0

রুবি, 155 বাইট

->x{(y=x.map{|r|(i=r.index ?Q)==r.rindex(?Q)?i:p or-2}).zip(y.rotate).map.with_index{|n,i|n.max-n.min==1&&i<y.size-1?-2:n[0]}.inject(:+)*2==(s=x.size)*~-s}

এটি পড়তে ভয়ঙ্কর, সুতরাং আমি নীচে কিছুটা কম গল্ফযুক্ত সংস্করণ পেয়েছি

->x{
    (y=x.map{|r|(i=r.index ?Q)==r.rindex(?Q)?i:p or-2})
    .zip(y.rotate)
    .map.with_index{|n,i|n.max-n.min==1&&i<y.size-1?-2:n[0]}
    .inject(:+)*2==(s=x.size)*~-s
}

এটি একই কোড, তবে কী ঘটছে তা আলাদা করার জন্য কয়েকটি নতুন লাইনের সাথে।

কোড নিজেই একটি বেনাম ল্যাম্বদা ফাংশন যা বিন্যাসে স্ট্রিংগুলির অ্যারে নেয় ( x)["..Q", "Q..", ".Q."]

প্রথম রেখাটি প্রতিটি স্ট্রিংকে সেই স্ট্রিংয়ের Q অক্ষরের সূচকে ম্যাপিং করে। যদি কোনও Q অক্ষর না থাকে তবে এটি -2 1 দিয়ে প্রতিস্থাপিত হবে । সূচকের এই নতুন অ্যারেটি ভেরিয়েবলের জন্য বরাদ্দ করা হয়েছেy

পরবর্তী লাইনটি সূচকগুলির এই অ্যারেটিকে নিজের সাথে অফসেট করে এক সাথে ঘোরান (ঘোরানো)। এটি পর পর সূচকগুলির জোড়ের অ্যারে তৈরি করে।

পরের লাইনটি বিশেষত জটিল। এটি প্রতিটি সূচকের জুড়িগুলির মধ্য দিয়ে যায় এবং বৃহত্তর থেকে ছোটকে বিয়োগ করে। যদি এটি 1 হয় (এবং আমরা শেষ জোড় 2 এ নেই ), তবে দুটি কুইন রয়েছে যা একই তির্যকটিতে রয়েছে এবং -2 এর মান সন্নিবেশ করা হয়, অন্যথায় স্ট্রিংয়ে রানির মূল সূচকটি সন্নিবেশ করা হয় ।

সর্বশেষ লাইনটি প্রতিটি সূচকের সমষ্টি করে এবং এটি এন -1 এর ত্রিভুজ সংখ্যা কিনা তা পরীক্ষা করে দেখায়, যেখানে n বর্গের প্রস্থ (বা উচ্চতা) is

1: -1 আমার যেতে যেতে পারে, তবে এটি 0 থেকে 1 বাদে, ত্রিভুজগুলি যাচাইয়ের সাথে ঝামেলা করবে। চূড়ান্ত যোগফলটিকে ভুল করা এটির নেতিবাচক-নেস গুরুত্বপূর্ণ। আমি 9 এর মতো একটি উচ্চ সংখ্যা (একক অঙ্ক সহ) সম্পর্কে ভেবেছিলাম, তবে আমি নিশ্চিত হতে পারি না যে এর ফলে ভুল যাচাইয়ের ফলাফল হবে না।
2: বোর্ডটি রাউন্ডটি মোড়ানো করে না, যেখানে রুবির rotateঅ্যারে ফাংশনটি করে, এবং শেষের জুটি যদি আলাদা আলাদা হয় তবে তা কোনও ব্যাপার নয় - এটি তির্যক নয়।


0

পিএইচপি, 137 143 বাইট

নীল এর সমাধান দ্বারা অনুপ্রাণিত

for($n=1+strlen($s=$argv[1])**.5|0;($c=$s[$p])&&!(Q==$c&&$v[$x=$p%$n]++|$h[$x=$p/$n]++|$d[$y-$x]++|$a[$y+$x]++);$p++);echo$n-1==count($a)&&!$c;

প্রথম কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; সাথে চালানো -r। একক বাইট লাইন ব্রেক প্রয়োজন।
আসলে আপনি যে কোনও চরিত্র ব্যবহার করতে পারেন 0তবে লাইন ব্রেকের জন্য।
সত্য মুদ্রণ (1 ) বা মিথ্যা (খালি স্ট্রিং) ।

ভাঙ্গন

for($n=1+strlen($s=$argv[1])**.5|0; // copy input to $s, $n=size+1 (for the linebreak)
    ($c=$s[$p])&&!(                 // loop through characters
        Q==$c&&                         // if queen: test and increment lines
            $v[$x=$p%$n]++|$h[$x=$p/$n]++|$d[$y-$x]++|$a[$y+$x]++
    );                                  // break if a line had been marked before
    $p++);
echo$n-1==count($a)             // print result: true for $n-1(=size) marks
    &&!$c;                      // and loop has finished

0

পাইথন 3 , 185 176 175 172 171 বাইট

lambda x,c=lambda x:x.count("Q")==1:all([*map(c,x+[[l[i]for l in x]for i in range(len(x[0]))])])*~any(map(lambda s:"Q%sQ"%(s*".")in"".join(x),[len(x[0]),len(x[0])-2]))==-1

ইনপুট হিসাবে স্ট্রিংগুলির তালিকা নিচ্ছে এমন একটি বেনামি ফাংশন।

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

lambda x:all([a.count("Q")==1for a in x]+[[l[i]for l in x].count("Q")==1for i in range(len(x[0]))]+[all(map(lambda s:"Q%sQ"%(s*".")not in"".join(x),[len(x[0]),len(x[0])-2]))])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.