এন-কুইন্স ধাঁধা


17

( ট্যাগ হওয়া 60+ টি প্রশ্ন থাকা সত্ত্বেও , আমাদের কাছে একটি সহজ এন-কুইন্স চ্যালেঞ্জ নেই))

দাবাতে, এন-কুইন্স ধাঁধাটি নিম্নরূপ বর্ণিত হয়েছে: একটি n x nদাবাবোর্ড এবং nকুইন্স দেওয়া, দাবাড়ীতে রানীগুলি এমনভাবে সাজান যাতে কোনও দুটি রানী একে অপরকে হুমকি না দেয়। নীচে n = 8উইকিপিডিয়া থেকে ধার করা, এর একটি উদাহরণ সমাধান রয়েছে ।

8-কুইন্স উইকিপিডিয়া থেকে উদাহরণ সমাধান

বা, ASCII রেন্ডারিংয়ে:

xxxQxxxx
xxxxxxQx
xxQxxxxx
xxxxxxxQ
xQxxxxxx
xxxxQxxx
Qxxxxxxx
xxxxxQxx

এখানে চ্যালেঞ্জটি হবে ইনপুট নেওয়া nএবং n-উইউন ধাঁধাটির সমাধানের একটি ASCII উপস্থাপনা আউটপুট । যেহেতু একাধিক সম্ভাব্য সমাধান রয়েছে (উদাহরণস্বরূপ, কমপক্ষে কোনও আবর্তন বা প্রতিবিম্ব), আপনার কোডটিতে কেবল কোনও বৈধ সমাধান আউটপুট করা দরকার।

ইনপুট

একটি একক ধনাত্মক পূর্ণসংখ্যা nসঙ্গে n >= 4 কোনো সুবিধাজনক বিন্যাসে । (n = 2 এবং n = 3 এর কোনও সমাধান নেই, এবং n = 1 তুচ্ছ, সুতরাং সেগুলি বাদ দেওয়া হয়েছে)

আউটপুট

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

বিধি

  • শীর্ষস্থানীয় বা পিছনের নতুন লাইনের বা হোয়াইটস্পেস হ'ল সমস্ত alচ্ছিক, পাশাপাশি অক্ষরের মধ্যে শ্বেত স্পেস, যতক্ষণ না অক্ষরগুলি যথাযথভাবে লাইনে থাকে।
  • আপনি হয় সম্ভাব্য অবস্থানগুলি গণনা করতে একটি অ্যালগরিদম ব্যবহার করতে পারেন, বা আপনার কোডের জন্য যে কোনওটি গল্ফিয়ার, সুস্পষ্ট "সিঁড়ি-পদক্ষেপ" সমাধানের স্টাইল ব্যবহার করতে পারেন।
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন হয় তবে আপনি আউটপুটটি মুদ্রণের পরিবর্তে ফিরিয়ে দিতে পারেন।
  • যদি সম্ভব হয় তবে দয়া করে একটি অনলাইন পরীক্ষার পরিবেশের একটি লিঙ্ক অন্তর্ভুক্ত করুন যাতে অন্য লোকেরা আপনার কোডটি চেষ্টা করে দেখতে পারে!
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

উদাহরণ

n=4
xQxx
xxxQ
Qxxx
xxQx

n=7
xxQxxxx
xxxxxxQ
xQxxxxx
xxxQxxx
xxxxxQx
Qxxxxxx
xxxxQxx

n=10
xxxxQxxxxx
xxxxxxxxxQ
xxxQxxxxxx
xxxxxxxxQx
xxQxxxxxxx
xxxxxxxQxx
xQxxxxxxxx
xxxxxxQxxx
Qxxxxxxxxx
xxxxxQxxxx


1
আপনি বিজোড় ইনপুট জন্য টেস্টকেস দিতে পারেন?
ক্রিটসি লিথোস

@ কৌজ্যাক যুক্ত করেছে এন = 7 উদাহরণ
অ্যাডমবর্কবর্ক

1
@ কেয়ুগান এমএটিএল উত্তরটির মতো কিছু? হুম ভালো.
অ্যাডমবর্কবার্ক

2
@ জোনাথান অ্যালান এ জাতীয় কোনও বর্জনের উদ্দেশ্য ছিল না, যতক্ষণ না প্রোগ্রামটি সম্ভাব্যতার সাথে সীমাবদ্ধভাবে শেষ হয় (সমস্ত আজ্ঞার মান হিসাবে)।
অ্যাডমবর্কবার্ক

উত্তর:


5

এমএটিএল , 33 32 27 বাইট

`x,GZ@]1Z?tt!P!,w&TXds]h1>a

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

আধা-বক্ষ বল, অ-সংঘবদ্ধ পদ্ধতি:

  1. সারি অবস্থানগুলির একটি এলোমেলোভাবে ক্রম উত্পাদন
  2. কলাম পজিশনের এলোমেলোভাবে ক্রম উত্পাদন করুন
  3. কোনও রানী একটি তির্যক বা অ্যান্টি-ডায়াগোনাল ভাগ করে নিন তা পরীক্ষা করুন
  4. প্রয়োজনে পুনরাবৃত্তি করুন।

প্রাপ্ত সমাধান এলোমেলো। আপনি যদি আবার কোড চালনা করেন তবে আপনি একটি ভিন্ন বৈধ কনফিগারেশন পেতে পারেন। চলমান সময়ও এলোমেলো, তবে দীর্ঘতম পরীক্ষার কেস ( n = 10) টিআইওতে প্রায় 30 সেকেন্ডে শেষ হয়।


আমি নিশ্চিত নই যে এটি সমাধান হিসাবে গণনা করা হয়েছে, এটি সর্বদা সঠিক উত্তর দেয় না given
জাঙ্কমেল

1
@ জাঙ্কমেল হাহ? সেখানে যেমন জিনিস হল সঠিক উত্তর, যেমন একটা বিভিন্ন সমাধান (যেমন চ্যালেঞ্জ বলেছেন)। কোড সবসময় দেয় একটি সঠিক উত্তরের শুধু প্রত্যেক সময় একই নয়,
লুইস Mendo

তাত্ত্বিকভাবে প্রোগ্রামটি অনেকবার নির্বিচারে চালানো সম্ভব এবং এখনও কোনও উত্তর দিতে ব্যর্থ।
জাঙ্কমেল

1
@ জাঙ্কমেল তবে এটি সম্ভাব্যতার সাথে সীমাবদ্ধ সময়ে শেষ
লুইস মেন্ডো

1
@ জামেসহোলিস এটি অন্যের তুলনায় কিছু ক্রিয়াকলাপকে আরও বেশি সম্ভাবনা তৈরি করতে পারে তবে এটি কোনও ক্রমান্বয়ে উপস্থিত হতে বাধা দেয় না। সুতরাং সমাধানটি শেষ পর্যন্ত পৌঁছে যাবে। এবং তদতিরিক্ত, এলোমেলো জেনারেটর আদর্শ হিসাবে ধরে নেওয়া সাধারণত গ্রহণ করা হয়
লুইস মেন্ডো

5

সি, 114 বাইট

Q(n,o,y){o=n%2;n-=o;for(y=0;y<n+o;++y)printf("%*c\n",y<n?o+n-(n+y%(n/2)*2+(n%6?y<n/2?n/2-1:2-n/2:y<n/2))%n:0,81);}

ও (1) সময়ে সরাসরি কোনও সমাধান মুদ্রণ করে।


1
এটি আমার কাছে পরিষ্কার নয় যে এটি কীভাবে ও (1) লুপ পুনরাবৃত্তি করে বারবার করা যায়। এই সমস্ত গণনা সবসময় ধ্রুবক সময়ে কীভাবে করা যায়?
poi830

1
@ poi830 মানে রানির অবস্থান নির্ধারণের জন্য প্রতি সারি প্রতি হে (1) গণনার সময়।
orlp

আপনি একটি নতুন পরিবর্তনশীল তৈরি করে কিছু সংরক্ষণ করতে পারেন না n/2?
জেফমগমা

সুপারিশ n-=o=n%2;for(y=n+o;y--;)পরিবর্তেo=n%2;n-=o;for(y=0;y<n+o;++y)
ceilingcat

2

গণিত, 103 108 110 117 বাইট

DuplicateFreeQ-> জন্য 5 বাইটE!=##&@@@

ReplacePart[Array[],]-> এর জন্য 7 বাইটSparseArray[]

SparseArray[Thread@#&@@Select[Permutations@Range@#~Tuples~2,And@@(E!=##&@@@{#-#2,+##})&@@#&]->1,{#,#}]&

একটি 2D-অ্যারে ফিরিয়ে দিন। এটি গণনা করতে 2.76s লাগে f[6]এবং 135s এর জন্য f[7]। (বর্তমান সংস্করণে, -হয়ে 0এবং Qকরতে 1

আউটপুট

অ্যালগরিদম এমএটিএল উত্তরের অনুরূপ তবে এখানে কোডটি সম্পূর্ণরূপে বলীয়ান।


1

সি - 222 বাইট

v,i,j,k,l,s,a[99];main(){for(scanf("%d",&s);*a-s;v=a[j*=v]-a[i],k=i<s,j+=(v=j<s&&(!k&&!!printf(2+"\n\n%c"-(!l<<!j)," #Q"[l^v?(l^j)&1:2])&&++l||a[i]<s&&v&&v-i+j&&v+i-j))&&!(l%=s),v||(i==j?a[i+=k]=0:++a[i])>=s*k&&++a[--i]);}

কোডটি আমার নয়, আইওসিসি থেকে । আমি আশা করি আমি কোনও নিয়ম ভঙ্গ করছি না এছাড়াও, এটি 4 থেকে 99 এর মধ্যে এন এর সমস্ত সমাধান প্রদর্শন করে I'll আমি পরে টিআইও লিঙ্ক পাওয়ার চেষ্টা করব।


যেহেতু এই কোডটি আপনার নয়, আপনি কি এটি একটি সম্প্রদায় উইকিতে রূপান্তর করতে পারবেন? (ঠিক যে বলে "কমিউনিটি উইকি" সম্পাদনা উইন্ডোর নিচের বাটনে ক্লিক করুন)
caird coinheringaahing

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

1

জেলি , 24 21 বাইট

,JŒc€IF€An/PC
ẊÇ¿=þRG

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

ধরে নিই যে প্রতিটি রানিকে পৃথক সারিতে স্থাপন করা হয়েছে, আমাদের কেবল দ্বন্দ্ব এড়ানোর জন্য প্রতিটি রানিকে স্থাপন করার জন্য কলাম সূচকগুলি খুঁজে পাওয়া দরকার, যা এলোমেলোভাবে ক্রমান্বয়ে উত্পন্ন করে পরীক্ষা করার মাধ্যমে পাওয়া যায় [1, 2, ..., n]

ব্যাখ্যা

,JŒc€IF€An/PC  Helper. Input: permutation of [1, 2, ..., n]
 J             Enumerate indices, obtains [1, 2, ..., n]
,              Join
  Œc€          Find all pairs in each
     I         Calculate the difference of each pair
      F€       Flatten each
        A      Absolute value
               (We now have the distance in column between each queen and
                the distance in rows between each queen. If they are unequal,
                the queens do not conflict with each other)
         n/    Reduce using not-equals
           P   Product, returns 1 only if they are all unequal
            C  Complement
               Returns 1 when there is a conflict, else 0

ẊÇ¿=þRG  Main.  Input: n
Ẋ        Shuffle (When given an integer, it will shuffle [1, 2, ..., n])
 Ç¿      While the helper returns 1, continue shuffling
     R   Range, gets [1, 2, ..., n]
   =þ    Equality table (Generates the board as a matrix)
      G  Pretty-print the matrix

আপনি -1 এর Œc€পরিবর্তে ব্যবহার করতে পারবেন না œc€2?
এরিক আউটগল্ফার

1

পাইথন 3, 204 189 বাইট

import itertools as p
n=int(input())
r=range(n)
b='.'*(n-1)+'Q'
for c in p.permutations(r):
 if len(set((x*z+c[x],z)for x in r for z in[1,-1]))==n+n:[print(*(b[x:]+b[:x]))for x in c];break

নিষ্ঠুর সমস্ত বাধ্যবাধকতা মাধ্যমে অনুসন্ধান। আমি * মুছে ফেলতে এবং তালিকাটি বোঝার মুদ্রণ করতে পারি, তবে সেগুলি দেখতে ভয়ঙ্কর দেখাচ্ছে।

আউটপুট:

10
Q . . . . . . . . .
. . Q . . . . . . .
. . . . . Q . . . .
. . . . . . . Q . .
. . . . . . . . . Q
. . . . Q . . . . .
. . . . . . . . Q .
. Q . . . . . . . .
. . . Q . . . . . .
. . . . . . Q . . .

সামান্য শৃঙ্খলাবদ্ধ:

import itertools as p
n=int(input())
r=range(n)
b='.'*(n-1)+'Q'
for c in p.permutations(r):
    if len(set( (x*z+c[x],z) for x in r for z in[1,-1] )) == n+n:
        [print(*(b[x:] + b[:x])) for x in c]
        break

1

বেফুঞ্জ, 122 বাইট

&::2%-v>2*00g++00g%00g\-\00g\`*4>8#4*#<,#-:#1_$55+"Q",,:#v_@
/2p00:<^%g01\+*+1*!!%6g00-2g01\**!!%6g00-g012!:`\g01:::-1<p01

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

এই উপর ভিত্তি করে বেশী বা কম হয় সি সমাধান দ্বারা orlp

ব্যাখ্যা

কার্যকরকরণের পথগুলির সাথে উত্স কোড হাইলাইট করা

*স্টিডিন থেকে রানীর সংখ্যা, কিউ পড়ুন এবং পরবর্তী ব্যবহারের জন্য দুটি ভেরিয়েবল গণনা করুন: n = q - q%2এবং hn = n/2
*প্রধান লুপটি শুরু করুন, পুনরাবৃত্ত হবে r , সারি সংখ্যা, q থেকে 0 পর্যন্ত, লুপের শুরুতে হ্রাস, সুতরাং প্রথম আর হয় কুই বিয়োগ 1.
*নিম্নলিখিত সূত্র সঙ্গে প্রতিটি সারিতে রাণী অফসেট হিসাব:

offset = (n - (
  (hn <= r) * (2 - hn) * !!(n % 6) + 
  (hn > r) * ((hn - 2) * !!(n % 6) + 1) + 
  (y % hn * 2) + n
) % n) * (n > r)

*আউটপুট স্পেস অক্ষরগুলিকে বর্তমান সারির জন্য রানির অবস্থানটি ইনডেন্ট করতে অফসেটের অক্ষর এবং আরও একটি অতিরিক্ত স্থান কেবলমাত্র এটি আউটপুট লুপকে সহজ করে তোলে। রানির জন্য
*আউটপুট Q, তারপরে পরের সারিতে যাওয়ার জন্য একটি নতুন লাইন। আর শূন্য হয়
*কিনা পরীক্ষা করুন, সেক্ষেত্রে আমরা বোর্ডের শেষে পৌঁছেছি এবং প্রস্থান করতে পারি, অন্যথায় আমরা আবার মূল লুপটি পুনরাবৃত্তি করব।



0

রেটিনা , 136 বাইট

.+
$* 
 
$_;$`Q¶
( +)\1( ?);
:$1;
:( +);\1\1
$1$1
:((   )+);( *)
 $1$1% $3$3
: ( +);( \1)?( *)
 $1 $1%$#2$* $#2$* $#2$* $1$3$3
( +)%\1?

এটি অনলাইন চেষ্টা করুন! @ Orlp এর দুর্দান্ত সি উত্তরের পোর্ট। ব্যাখ্যা:

.+
$* 

স্পেস ব্যবহার করে অ্যানারিতে রূপান্তর করুন (এর পরেও একটি স্থান রয়েছে *)।

$_;$`Q¶

স্পেস, ক , স্পেস এবং তারপরে Nসারি তৈরি করুন । বাকি স্তরগুলি সমস্ত সারিতে প্রযোজ্য।N;0..N-1Q

( +)\1( ?);
:$1;

পূর্ণসংখ্যা 2 দিয়ে বিভাজক করুন N( :;এঙ্কর নিদর্শনগুলিকে আরও সহজ করার জন্য ফলাফলটি মোড়ানোও))

:( +);\1\1
$1$1

যদি লুপ সূচক সমান হয় N/2*2তবে কেবলমাত্র অনেকগুলি স্থান ছেড়ে দিন।

:((   )+);( *)
 $1$1% $3$3

যদি N/23 এর একাধিক হয়, তবে লুপ সূচকটি প্লাস ওয়ান, মডুলোর দ্বিগুণ করুন N/2*2+1

: ( +);( \1)?( *)
 $1 $1%$#2$* $#2$* $#2$* $1$3$3

অন্যথায়, ডাবল লুপ সূচক প্লাস (N/2-1)প্লাসের নীচের অর্ধেকের একটি অতিরিক্ত 3 নিন, মডুলো N/2*2

( +)%\1?

আসলে মডুলো অপারেশন করুন।



0

এপিএল (ডায়ালগ ইউনিকোড) , 18 বাইট এসবিসিএস

nস্টিডিন থেকে সম্পূর্ণ প্রোগ্রামের জন্য অনুরোধ জানানো হচ্ছে । ·ফাঁকা স্কোয়ার এবং কুইন্সের সাহায্যে স্টাডাউটের স্থান-বিচ্ছিন্ন সমাধান মুদ্রণ করে ।

CY'dfns'
queens

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

⎕CY'dfns'সি ওপ "ডিএফএনএস" লাইব্রেরি

 স্টিডিনের কাছ থেকে ইনপুট পান

queens সমস্ত সত্যই অনন্য কুইনের সমাধান (কোনও প্রতিচ্ছবি বা ঘূর্ণন নয়) সন্ধান করুন

 প্রথম সমাধান চয়ন করুন


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