জঞ্জাল দাবা বোর্ডে ক্যাপচার করুন


17

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

ইনপুট একটি FEN- মত স্বীকৃতিতে রয়েছে যেখানে সাদা এবং কালো প্যাঁদের অবস্থানগুলি বর্ণনা করে যেখানে অন্য কোনও টুকরো উপস্থিত নেই। আপনার সিদ্ধান্ত নেওয়া উচিত যদি এমন কোনও মহিমান রয়েছে যা কোনও শত্রুকে ধরে ফেলতে পারে।

প্রতিটি র‌্যাঙ্কটি বর্ণিত হয়েছে, র‌্যাঙ্ক 8 এর সাথে শুরু করে এবং 1 র‌্যাঙ্ক দিয়ে শেষ হবে; প্রতিটি র‌্যাঙ্কের মধ্যে প্রতিটি স্কোয়ারের বিষয়বস্তু ফাইল "এ" ফাইল "এইচ" এর মাধ্যমে বর্ণিত হয়। প্রতিটি ভাঁটা একক অক্ষর দ্বারা চিহ্নিত করা হয় (সাদা প্যাড = "পি", কালো প্যাড = "পি",)। খালি স্কোয়ারগুলি 1 থেকে 8 পর্যন্ত অঙ্কগুলি (খালি স্কোয়ারের সংখ্যা) ব্যবহার করে এবং "/" স্থান পৃথক করে চিহ্নিত হয়। (আংশিকভাবে উইকিপিডিয়া থেকে নেওয়া)

উদাহরণ স্বরূপ

8/pppppppp/8/8/4P3/8/PPPP1PPP/8

বোর্ড বর্ণনা করে

--------

pppppppp


    P   

PPPP PPP

--------

একটি কালো শ্বেত একটি কালোকে ক্যাপচার করতে পারে যদি কালোটি এর থেকে তির্যকভাবে উপরে অবস্থিত হয় (কালো উপরের-বামে বা ডানদিকে ডানদিকে) এবং যদি একটি সাদা রঙের কালো রঙের শ্বেতকণা একটি সাদাকে ধরে ফেলতে পারে তবে সাদাটি যদি তার থেকে তির্যকভাবে নীচে থাকে (সাদা হয় ডাউন-বাম বা ডাউন-ডান)। অন্য কোনও ক্যাপচার পদক্ষেপ ( এন পাসেন্ট ) বিবেচনা করা উচিত নয়।

ইনপুট

  • অক্ষরের সমন্বয়ে একটি FEN- মত স্ট্রিং 12345678pP/
  • ইনপুটটি একটি বৈধ দাবা গেমের অবস্থানের পদ্মাগুলি বর্ণনা করে। এর অর্থ (অন্যান্য জটিল জটিলতার মধ্যেও) প্রতিটি পক্ষের জন্য সর্বাধিক 8 পাউন্ড থাকবে এবং 1 এবং 8 পদে কোনও পাউনা থাকবে না।

আউটপুট

  • যদি উভয় পক্ষের পক্ষে সম্ভাব্য ক্যাপচার থাকে তবে আপনার উচিত সত্যবাদী মান এবং অন্যথায় মিথ্যা মান output

উদাহরণ

সত্যবাদী আউটপুট সহ ইনপুট (প্রতি লাইনে একটি)

8/7p/6P1/8/8/8/8/8
8/8/p7/1P6/3P3p/8/8/8
8/2P5/8/4P1p1/2p2P2/3p4/3p1P2/8
8/P7/8/5P2/2pp4/3P2p1/3pP3/8
8/P7/p7/p1P1P3/1P3p2/8/1p6/8
8/4p1P1/2P2P1P/2p1pPpp/8/6P1/pP1p4/8

মিথ্যা আউটপুট সহ ইনপুট (প্রতি লাইনে একটি)

8/8/8/8/8/8/8/8
8/7P/6p1/8/8/8/8/8
8/7p/7P/8/8/8/8/8
8/pppppppp/8/8/8/8/PPPPPPPP/8
8/p7/8/1p6/5P2/8/8/8
8/p7/P7/2P1p1p1/2p5/8/PP6/8

এটি কোড গল্ফ তাই সংক্ষিপ্ত এন্ট্রি জিতেছে।


উদাহরণ বোর্ড দ্বারা বর্ণনা করা উচিত নয় 8/pppppppp/8/8/8/7P/PPPP1PPP/8?
TheNumberOne

@ দি নাম্বারওন নং, এর 7Pঅর্থ হ'ল পদ্মটি শেষ, 8 ম ফাইলটিতে রয়েছে। (চিত্রটি যদিও ভুল ছিল, আমি এটি সংশোধন করেছি))
এলোমেলো

1
আমি অনুভব করি যে এন পাসেন্ট অপসারণ এটিকে একটি কম আকর্ষণীয় ধাঁধা দেয়।
কর্সিকা

উত্তর:


6

পাইথ, 25 বাইট

/smC,>JsXz`M9*LN9dJ,8T"Pp

পরীক্ষা স্যুট

পদক্ষেপ:

অঙ্কগুলি সমান্তরাল সংখ্যা ( N) এর সমান সংখ্যার সাথে প্রতিস্থাপন করে ইনপুটটি রূপান্তর করুন । এটি মধ্যে সংরক্ষণ করা হয় J। তারপরে আমরা প্রথম 8 বা 10 টি অক্ষর কেটে ফেলি এবং ফলাফলটি মূল দিয়ে জিপ করি। যে কোনও ক্যাপচারিং জুটি রূপান্তরিত হবে"Pp" , সুতরাং আমরা তারপরে ফলাফলের তালিকায় সেই স্ট্রিংয়ের গণনাটি পাই। এটি আউটপুট।

বোনাস হিসাবে, এটি আসলে ইনপুটটিতে ক্যাপচারের সংখ্যা গণনা করে।


আরও 25 টি সমাধান: :sXz`M9*LN9"p.{7}(..)?P"1দুর্ভাগ্যক্রমে শেষ প্যারামিটারটি alচ্ছিক :নয় (আমার ধারণা এটি হওয়া উচিত)।
জাকুব

3
@ জাকুব করবে
isaacg

12

রেটিনা , 33 29 বাইট

T`d`w
)`\d
$0.
_

p.{7}(..)?P

একটি একক ফাইল থেকে কোড চালানোর জন্য, -sপতাকাটি ব্যবহার করুন ।

পার্লের মতো এমন কিছু দ্বারা সহজেই মারধর করা উচিত যেখানে স্পেসের স্ট্রিংগুলিতে (বা অন্যান্য অক্ষরগুলি) ডিজিটের বিস্তৃতি 17 বাইট নেয় না।

সম্ভাব্য ক্যাপচার থাকলে আউটপুটটি ইতিবাচক (সত্যবাদী) এবং যদি না থাকে তবে শূন্য (মিথ্যা)।

ব্যাখ্যা

T`d`w
)`\d
$0.

এটি দুটি পর্যায়ের লুপ। প্রথমটি হ'ল ট্রান্সলিটেশন পর্যায়ে যা প্রতিটি অঙ্ককে হ্রাস করে এবং শূন্যগুলি আন্ডারস্কোরগুলিতে পরিণত করে। কেন? কারণ dএবং wনিম্নলিখিত দুটি লাইনে প্রসারিত:

0123456789
_0123456789AB...YZab...yz

যদি ট্রান্সলিটেশন পর্যায়ে লক্ষ্য উত্স উত্সের চেয়ে দীর্ঘ হয় তবে বহিরাগত চরিত্রগুলি উপেক্ষা করা হয়, অতএব হ্রাসের আচরণ (সত্যই, ভাগ্যটি ছিল আমি wঅক্ষরের অংশের সামনে যখন অঙ্কের সামনে রাখার সিদ্ধান্ত নিয়েছিলাম ) ।

তারপরে দ্বিতীয় পর্যায়ে প্রতিস্থাপন, যা .প্রতিটি সংখ্যায় একটি যুক্ত করে। মানে প্রতিটি অঙ্ক জন্য যে n, nসময়সীমার আগে যে অঙ্ক একটি আন্ডারস্কোর পরিণত হয় যোগ করা হয়।

_
<empty>

এটি কেবল আন্ডারস্কোরগুলি থেকে মুক্তি পাবে।

p.{7}(..)?P

শেষ পর্যন্ত, আমরা ম্যাচগুলি খুঁজে পাই। যেহেতু আমরা এন পাসেন্টকে উপেক্ষা করছি, কেবল তার নীচে যদি ত্রিভুজ থাকে pতবে ক্যাপচারগুলি কেবল তখনই সম্ভব P। রৈখিক স্ট্রিংয়ের মধ্যে, এর সহজ অর্থ হল যে দুটি প্যাঁকের মধ্যে 7 বা 9 টি অক্ষর থাকতে হবে। এর সাথে মিলেছে .{7}(..)?(অর্থাত্ characters টি অক্ষর মেলে এবং তারপরে allyচ্ছিকভাবে আরও দুটি সাথে মেলে)

এই জাতীয় ম্যাচের মঞ্চ এটি পাওয়া মিলগুলির সংখ্যা প্রদান করে।


পুনরায় পার্লের মতো এমন কিছু দ্বারা সহজেই মারধর করা উচিত যেখানে স্পেসের স্ট্রিংগুলিতে অঙ্কগুলি বা অন্য অক্ষরগুলির বিস্তৃতি 17 বাইট নেয় না " । ( আমার পার্ল উত্তর। ) তবে অন্য কেউ হতে পারে ....
msh210

3

জাভাস্ক্রিপ্ট, 272 টি অক্ষর

function h(t){b=[[]];for(i=-1;i++<7;){c=0;b.push(l=[]);for(j=-1;j++<7;){o=t.split('/')[i][j];switch(o){case'P':l[c++]=-1;break;case'p':l[c++]=1;break;default:c+=parseInt(o);}}}b.push([]);for(i=1;i<9;i++)for(j=0;j<8;j++)if((p=b[i][j])&&(b[i+p][j-1]||b[i+p][j+1]))return 1;}

উন্নতির জন্য সম্ভবত অনেক জায়গা আছে।


3

রুবি, 145 123 46 বাইট

->b{b.gsub(/\d/){|x|?.*x.to_i}=~/p.{7}(..)?P/}

আমি কেন জানি না কেন আমি প্রথমে এটি সম্পর্কে ভাবিনি। এটি অনেক খাটো এবং বেশ পঠনযোগ্যও।

পরীক্ষাটি এখানে: http://ideone.com/Gzav8N


পুরানো পদ্ধতির:

->b{l={}
r=p
b.split(?/).map{|s|c={}
i=0
s.chars.map{|x|n=x.to_i;c[i]=x;i+=n<1?1:n;x==?P&&r||=l[i-2]==?p||l[i]==?p}
l=c}
r}

অনলাইন পরীক্ষা: http://ideone.com/9L01lf , গল্ফ করার আগে সংস্করণ: http://ideone.com/CSmqlW

পরিবর্তনের ইতিহাস এখানে পাওয়া যায়


2

ES6, 64 বাইট

একটি উপযুক্ত বাইট গণনা, যদি এটি স্থায়ী হয়!

f=s=>/p.{7}(..)?P/.test(s.replace(/\d/g,n=>"        ".slice(-n)))

আমি প্রথমে অন্যান্য উত্তরগুলি প্রথমে না পড়েই এই সমাধানটি নিয়ে ভাবলাম, তবে আপনি আমাকে বিশ্বাস না করলে আমার আপত্তি হবে না।



0

পিএইচপি, 94 87 80 বাইট

for(;$i++<8;)$t[$i]=$s.=" ";echo preg_match("#p.{7}(..)?P#",strtr($argv[1],$t));

যে লুপ + + strtrতুলনায় অনেক খাটো preg_replace_callbackসঙ্গে str_pad


0

জেলি, 88 84 79 72 69 65 64 63 60 বাইট

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

ØDṖḊ
”_x
e1£¬
1£iЀ2Ŀ€
x"3Ŀ€;"ÇFṣ”/
w€⁾pPn0
5ĿUŒDÇ
5ĿŒD6ĿoÇS
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.