Chess960 অবস্থান জেনারেটর


11

প্রসঙ্গ

দাবা 960 (বা ফিশার এলোমেলো দাবা) হ'ল দাবা রূপান্তরিত এবং প্রাক্তন ওয়ার্ল্ড দাবা চ্যাম্পিয়ন ববি ফিশার দ্বারা প্রবর্তিত, আর্জেন্টিনার বুয়েনস আইরেসে প্রকাশ্যে 19 জুন, 1996 এ ঘোষণা করেছিলেন। এটি স্ট্যান্ডার্ড দাবা হিসাবে একই বোর্ড এবং টুকরা নিয়োগ করে; যাইহোক, প্লেয়ারদের হোম র‌্যাঙ্কে টুকরোগুলির প্রথম অবস্থানটি এলোমেলোভাবে তৈরি করা হয়

বিধি

  • স্ট্যান্ডার্ড দাবা হিসাবে সাদা প্যাঁচগুলি দ্বিতীয় র‌্যাঙ্কে রাখা হয়
  • সমস্ত অবশিষ্ট সাদা টুকরা এলোমেলোভাবে প্রথম র‌্যাঙ্কে রাখা হয়
  • বিশপগুলি অবশ্যই বিপরীত বর্ণের স্কোয়ারে স্থাপন করতে হবে
  • বাদশাহকে অবশ্যই দুর্বৃত্তদের মাঝে একটি বর্গক্ষেত্রের উপরে স্থাপন করতে হবে।
  • ব্ল্যাকের টুকরোগুলি হোয়াইট টুকরাগুলির সমান এবং বিপরীতে স্থাপন করা হয়েছে।

থেকে: http://en.wikedia.org/wiki/Chess960

উত্তর পোস্ট করতে চাই এমন সমস্ত লোকের জন্য ...

আপনাকে একটি দাবা 960 পজিশনের জেনারেটর তৈরি করতে হবে, উপরে বর্ণিত বিধিগুলি অনুসরণ করে এলোমেলোভাবে 960 পজিশনের একটি তৈরি করতে সক্ষম (এটি 960 এর যে কোনও একটিকে আউটপুট দিতে সক্ষম হতে হবে, হার্ডকোডিং একটি পজিশন গ্রহণযোগ্য নয়!), এবং আপনাকে কেবল দরকার সাদা র‌্যাঙ্ক এক টুকরো আউটপুট।

উদাহরণ আউটপুট:

rkrbnnbq

কোথায়:

  • কে রাজা
  • q রানী
  • বিশপ
  • n নাইট
  • আর রুক

এটি কোড গল্ফ হবে, এবং টাই ব্রেকারটি হবে উন্নতিগুলি।


আপনি যখন বলছেন যে এটি 960 পজিশনের যে কোনওটির আউটপুট করতে সক্ষম হতে হবে, তাদের কি সমকক্ষ হতে হবে?
পিটার টেলর

মজার, আমি সত্যিই এটি ভেবে দেখিনি ... আমি বলতে চাই আদর্শভাবে এটি হওয়া উচিত, আমার মনে হয় ... এখনও পর্যন্ত উত্তরগুলি এই গুণটি সরবরাহ করে, তাই না?
জেসেডানো

দুটি যে ভাষায় রচিত যা অন্তর্নির্মিতভাবে একই রকম বদলে যায়; দুটি গল্ফস্ক্রিপ্টগুলি কাছাকাছি হলেও বেশ অভিন্ন নয়।
পিটার টেলর

আমি বলব যে নিকট যথেষ্ট ভাল
জেসেডানো

এই প্রশ্নটি আমাকে কোডগল্ফ.স্ট্যাককেচেঞ্জ

উত্তর:


6

গল্ফস্ক্রিপ্ট ( 49 টি চর বা আপার ক্ষেত্রে আউটপুট দেওয়ার জন্য 47)

'bbnnrrkq'{{;9rand}$.'b'/1=,1$'r'/1='k'?)!|1&}do

আমরা মানদণ্ড পূরণ না হওয়া পর্যন্ত এলোমেলোভাবে অনুমতি দেওয়ার মানক কৌশলটি ব্যবহার করে। ডাব্লু0এলএফের গল্ফস্ক্রিপ্ট সমাধানের বিপরীতে, এটি স্ট্রিংয়ে উভয়ই চেক করে, তাই এটি আরও বেশি বার লুপের মধ্য দিয়ে চলতে পারে।

উপরের কেস ব্যবহার করে একটি চর সংরক্ষণ করতে পারবেন:

'BBNNRRKQ'{{;9rand}$.'B'/1=,1$'R'/1=75?)!|1&}do

8

রুবি 1.9, 67 65 টি অক্ষর

আহা, পুরানো "যতক্ষণ না কোনও বৈধ কিছু" কৌশল তৈরি করে ততক্ষণ এলোমেলো করে রাখুন ...

$_=%w(r r n n b b q k).shuffle*''until/r.*k.*r/&&/b(..)*b/
$><<$_

(রুবি ২.০ এ, %w(r r n n b b q k)হতে পারে 'rrnnbbqk'.chars)


1
1.9.3 এ আপনি ~যখন উপলব্ধ হন তখন কোনও সতর্কতার মূল্য দিয়ে ছাড়তে পারেন । পেস্টবিন.
com

@ মানটওয়ার্ক এটি দুর্দান্ত, ধন্যবাদ!
পল প্রেসিডেজ

2
"সম্ভাব্যতার তালিকাল বদল করুন, ফিল্টার করুন এবং নিন প্রথম" কৌশলটি "এপিএলের মতো খাঁটি ফাংশনাল ভাষাগুলি উত্পাদন করে:"
জন ডিভোরাক

1
@ ড্যানিরো নিশ্চিতভাবেই এটি $_পরিবর্তনশীল। এটি কাজ করে কারণ রুবির কিছু ঝরঝরে পদ্ধতি রয়েছে যেমন কর্নেল # চপ যা সমতুল্য স্ট্রিং # চপ পদ্ধতির মতো তবে $_তাদের গ্রহণকারী হিসাবে কাজ করে। এটি (যেমন উদাহরণস্বরূপ) আপনি যখন কোনও পঠন / প্রক্রিয়া / লেখার লুপ ব্যবহার করে ruby -nবা ব্যবহার করছেন তখন অনেক সময় সাশ্রয় হয় ruby -p
পল প্রেসিডেজ

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

8

গল্ফস্ক্রিপ্ট 60 49

;'qbbnnxxx'{{9rand*}$.'b'/1=,2%}do'x'/'rkr'1/]zip

(পিটার টেলরের দুর্দান্ত টিপসকে ধন্যবাদ 49 টি সংক্ষিপ্ত করে)

অনলাইন পরীক্ষা এখানে

কোডটির ব্যাখ্যা:

;'qbbnnxxx'         # push the string 'qbbnnxxx' on the clean stack
{

    {9rand*}$       # shuffle the string

    .'b'/1=,2%      # count the number of places between the 'b's
                    # (including the 'b's themselves)
                    # if this count is even, the bishops are on
                    # squares of different colors, so place a 0
                    # on the stack to make the do loop stop

}do                 # repeat the procedure above until a 
                    # good string is encountered

'x'/                # split the string where the 'x's are

'rkr'1/]zip         # and put 'r', 'k' and then 'r' again
                    # where the 'x's used to be

1
bS এর মধ্যে একাধিক অক্ষর রয়েছে তা যাচাই করার জন্য আপনার পদ্ধতিটি খুব দীর্ঘ বলে মনে হচ্ছে। কীভাবে .'b'/1=,2%?
পিটার টেলর

এবং 'qbbnnxxx'লুপের বাইরে টান দিয়ে এবং একই স্ট্রিং পুনরায় সাফ করে আপনি ব্যর্থ প্রচেষ্টা ত্যাগ করতে পারেন ।
পিটার টেলর

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

4

জে, 56 টি অক্ষর

{.(#~'(?=.*b(..)*b).*r.*k.*r.*'&rxeq"1)'kqbbnnrr'A.~?~!8

অযোগ্য অ্যালগরিদমের কারণে এটি আমার মেশিনে কয়েক সেকেন্ড সময় নেয়। কিছু গতি ~.আগে যোগ করে (ডুপ্লিকেট অপসারণ) অর্জন করা যেতে পারে 'kqbbnnrr'

ব্যাখ্যা:

  • ?~!8পুলিশ 8!থেকে র্যান্ডম উপাদান0 ... 8!
  • 'kqbbnnrr'A.~স্ট্রিংগুলিতে এগুলিকে ইনডেক্স হিসাবে ব্যবহার করে kqbbnnrr
  • (#~'...'&rxeq"1)' এগুলিকে উদ্ধৃতিগুলিতে রেজেক্স দ্বারা ফিল্টার করে।
  • {. মানে "প্রথম উপাদান নিন"


3

পাইথন, 105 টি অক্ষর

মূলত ক্রন এর কৌশল, মার্জিত রুবি স্টাফ বিয়োগ।

import re,random
a='rrbbnnkq'
while re.search('b.(..)*b|r[^k]*r',a):a=''.join(random.sample(a,8))
print a

রেজেক্স সংক্ষিপ্ত করার জন্য পিটার টেলরকে ধন্যবাদ।


not s('b(..)*b',a)বলার মতো দীর্ঘ বায়ুযুক্ত মনে হচ্ছে s('b.(..)*b',a)। এছাড়াও, sampleএকটি চরিত্রের চেয়ে ছোট হতে পারে shuffle, তবে এটির জন্য একটি অতিরিক্ত যুক্তি প্রয়োজন।
পিটার টেলর

আপনি রেজেক্স সম্পর্কে ঠিক বলেছেন, পিটার। ধন্যবাদ! যদিও Shuffleফিরে আসে None, তাই এটি কোনও ভাল নয় :(
দানিরো

1
গাছের জন্য বন মিস করলাম। আপনার দুটি রেজেক্সের দরকার নেই, কারণ আপনি একই স্ট্রিংটি পরীক্ষা করছেন এবং orরেজেক্স অল্টারনেশন ( |) এর সমতুল্য । 13 টি অক্ষর সাশ্রয় করে।
পিটার টেলর

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