তোপ কোথায় যাবে?


9

ভূমিকা

চিয়াং দাবা নামে পরিচিত জিয়াংকি খেলাটি দাবা জাতীয় খেলা চীন, ভিয়েতনাম, তাইওয়ান এবং অন্যান্য পূর্ব এশীয় দেশগুলিতে জনপ্রিয়। জিয়াংকি'র দুই পক্ষের রঙগুলি লাল এবং কালো। জিয়াংকি-তে সাতটি টুকরো রয়েছে: জেনারেল ( G), উপদেষ্টা ( A), হাতি ( E), ঘোড়া ( H), রথ ( R), কামান ( C) এবং সৈনিক ( S)। এই চ্যালেঞ্জের উদ্দেশ্যে, বড় হাতের টুকরোগুলিকে লাল এবং লোয়ারকেস টুকরা কালো বলে মনে করা হয়। এই টুকরোগুলির বেশিরভাগ পশ্চিমা দাবাতে মোটামুটি সমান, তবে একটি সম্পূর্ণ অনন্য টুকরা রয়েছে: কামান।

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

উদাহরণস্বরূপ, নিম্নলিখিত চিত্রটিতে, কামান ( C) যে স্থানে যেতে পারে সেগুলি দিয়ে চিহ্নিত করা হয়েছে *এবং যেখানে এটি লাফিয়ে ক্যাপচার করতে পারে সেগুলি চিহ্নিত করা হয়েছে X, ধরে নেওয়া হয়েছে যে সেখানে একটি কালো / ছোট হাতের অংশ রয়েছে piece

....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি জিয়াংকি বোর্ড এবং সেই বোর্ডে একটি কামানের স্থানাঙ্ক হিসাবে ইনপুট হিসাবে দেওয়া হয়, যে স্থানাঙ্কগুলির তোপটি চলতে বা লাফাতে পারে তার একটি তালিকা দেয় out

সমস্ত I / O এর ফর্ম্যাটটি নমনীয়।

Xiangqi বোর্ডের জন্য স্বীকারযোগ্য বিন্যাসের একটি newline বিভাজিত স্ট্রিং, স্ট্রিং একটি তালিকা, বা নেই অন্য কোন বিভাজক সঙ্গে একটি স্ট্রিং অন্তর্ভুক্ত aceghrsACEGHRS.। আপনি ধরে নিতে পারেন বোর্ডটি সর্বদা 9x10, একটি জিয়াংকি বোর্ডের আকারের হবে।

বোর্ডের বিষয়বস্তুগুলিতে বোর্ডের .খালি পয়েন্টগুলি উপস্থাপন করে এবং টুকরোগুলি উপস্থাপনকারী অক্ষরগুলি অনেকগুলি পিরিয়ড ( ) নিয়ে গঠিত হবে । টুকরা থেকে চরিত্রের ম্যাপিংটি নিম্নরূপ:

A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier

বড় হাতের অক্ষরগুলি লাল টুকরোকে উপস্থাপন করে এবং ছোট হাতের অক্ষরগুলি কালো টুকরা উপস্থাপন করে। এখানে তালিকাভুক্ত নয় এমন অক্ষর (যেমন অন্তর্ভুক্ত নয় aceghrsACEGHRS.) বোর্ডে উপস্থিত হবে না।

ইনপুট স্থানাঙ্কের বিন্যাসটি নমনীয় এবং আউটপুট স্থানাঙ্কগুলির বিন্যাসের সাথে মেলে না। এটি দুটি পূর্ণসংখ্যার উপাদানগুলির একটি তালিকা হতে পারে, একটি 2-টিউপল, কোনও বিভাজকের সাথে দুটি সংখ্যা বা দুটি অক্ষর উদাহরণস্বরূপ। এটি 0-ইনডেক্সড বা 1-ইনডেক্সেডও হতে পারে। আপনি ধরে নিতে পারেন বোর্ডে স্থানাঙ্কটি সর্বদা একটি কামানের ( Cবা c) সমাধান করবে ।

যে স্থানাঙ্কগুলিতে কামানটি লাফিয়ে লাফিয়ে যেতে পারে সেগুলি আউটপুটে একই তালিকায় উপস্থিত থাকতে হবে; উভয় মধ্যে পার্থক্য প্রয়োজন হয় না। যে কোনও পৃথক আউটপুট স্থানাঙ্কগুলির জন্য গ্রহণযোগ্য ফর্ম্যাটগুলি ইনপুট কর্ডের মতো those স্থানাঙ্কগুলি নিউলাইন-বিচ্ছিন্ন, তালিকা হিসাবে আউটপুট বা অন্য কোনও উপস্থাপনা হতে পারে। কোন নির্দিষ্ট আদেশ প্রয়োজন; অর্ডার এমনকি ডিটারমিনিস্টিক হতে হবে না।

নোট করুন যে কামানের একই রঙের (কেস) টুকরোতে লাফানো আইনী নয় এবং এভাবে আউটপুটে উপস্থিত হতে পারে না।

পরীক্ষার মামলা

মনে রাখবেন যে পরীক্ষার সমস্ত ক্ষেত্রেই সম্ভব জিয়াংকিউ অবস্থান নয়।

Input board
Input coordinate (0-indexed)
List of output coordinates

.........
.........
.........
.........
.........
....C....
.........
.........
.........
.........
(4, 5)
[(0, 5), (1, 5), (2, 5), (3, 5), (5, 5), (6, 5), (7, 5), (8, 5), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 6), (4, 7), (4, 8), (4, 9)]

.........
.....G...
.........
.........
.....e...
.........
.........
h..R.c..S
.....a...   
.........
(5, 7)
[(4, 7), (6, 7), (7, 7), (5, 6), (5, 5), (5, 1)]

..s......
..A...e..
.........
EACCcsh.H
..r......
.....S...
......s..  
....C....
..g......
(2, 3)
[(2, 0), (2, 2), (4, 3), (2, 9)]

rheagaehr
.........
.c.....c.
s.s.s.s.s
.........
.........
S.S.S.S.S
.C.....C.
.........
RHEAGAEHR
(7, 7)
[(2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (8, 7), (7, 0), (7, 3), (7, 4), (7, 5), (7, 6), (7, 8)]

স্কোরিং

এই , তাই সংক্ষিপ্ত উত্তর (বাইটে) জেতে। শুভ গল্ফিং!


3
জিয়াংকি জন্য +1 1 এটি একটি দুর্দান্ত খেলা, যখন আমি একটি চীনা কোম্পানির হয়ে কাজ করেছি তখন আমার সহকর্মীদের কাছ থেকে শেখার সুযোগ হয়েছিল। সাধারণ অনুভূতি হ'ল দাবা খেলার মতো (প্রতিরক্ষার জন্য তীক্ষ্ণ নজর রাখুন তবে আক্রমণাত্মকভাবে খেলুন) তবে কৌশলগুলি ভিন্ন (রথগুলি তাড়াতাড়ি বের করে আনাই ভাল, তবে দুর্বৃত্তদের দাবাড়াতাড়ি আনা খুব খারাপ)। এন.উইকিপিডিয়া .org / উইকি / জিয়াংকি
স্তর নদী সেন্ট

@ লেভেলরিভারস্ট এটি দাবা থেকে অনেক কম প্রযুক্তিগত এবং ভিন্ন কৌশলগত বোধ সহ একটি ভিডিওগমের মতো অনুভব করে। আমি এটা পছন্দ করি!
noɥʇʎԀʎzɐɹƆ

দেখে মনে হচ্ছে কোন রাজা থাকতে পারে, তবে কি এর চেয়ে বেশি কিছু থাকতে পারে?
l4m2

উত্তর:


1

পিপ , 112 + 1 = 113 বাইট

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়: দুটি স্থানাঙ্ক, বোর্ডের 10 লাইন অনুসরণ করে। স্থানাঙ্কগুলি 0-ভিত্তিক। আউটপুটগুলি 67 77একই-সারি তালিকা এবং একই কলামের তালিকার মধ্যে একটি নতুন লাইন সহ স্থানাঙ্কগুলি পছন্দ করে । -sপতাকাটির জন্য একটি বাইট যুক্ত করা হয়েছে ।

g@>:2P(f:{Ya@bQ'C?X^z;X^AZa@b:'@aR`\.*@\.*`{aR'.s}Ry.`\.*\w *@`s._@>1R`@ *\w\.*`.y_@<v.s@*s}g@ba).ba.(f;J(Zga)b)

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

কিছুটা অবারিত সংস্করণের ব্যাখ্যা

g@>:2
f:{
 Y a@bQ'C ? `[a-z]` `[A-Z]`
 a@b:'@
 aR:`\.*@\.*` {aR'.s}
 aR:y.`\.*\w *@` s._@>1
 aR:`@ *\w\.*`.y _@<v.s
 a@*s
}
P (f g@b a).b
a.(f; J(Zg)@a b)

ডিফল্টরূপে, পিপ তালিকাতে কমান্ড-লাইন আরোগ্যগুলি পড়ে g। এটি ভেরিয়েবলের aমাধ্যমে প্রথম পাঁচটি আর্গুমেন্টও সঞ্চয় করে e। আমাদের প্রথম দুটি যুক্তি, aএবং b, কামানের স্থানাঙ্ক; gবোর্ডের সারিগুলির পরে স্থানাঙ্কগুলি থাকে। কেবল বোর্ডটি পেতে g, আমরা সূচি 2 থেকে এটি টুকরো টুকরো করে ফিরলাম g( g@>:2) back

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

প্রথমত, আমরা পরীক্ষা কিনা a@bহয় Cবা c। যদি এটি হয় তবে Cআমরা এটি পেতে চাইলে [a-z]যে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করার জন্য আমরা চাই । যদি এটি হয় cতবে রেজেক্সটি হ'ল [A-Z]। (গল্ফড কোডটি নিম্ন-এবং বড় হাতের বর্ণমালার জন্য বিল্টিন ভেরিয়েবলগুলি থেকে এই রেজেক্সগুলি উত্পন্ন করে)) আমরা ভেরিয়েবলের Yমধ্যে উপযুক্ত রেজেক্সকে অ্যাঙ্ক করি y

আমরা স্ট্রেনে কামানের চরিত্রটি পরিবর্তন করি @(এটি একই সারি / কলামের অন্যান্য কামান থেকে আলাদা করতে)।

এরপরে রিজেক্স রিপ্লেসমেন্টের একটি সিরিজ আসবে, যা কামান কোনও স্থানের অক্ষরটিতে যেতে পারে এমন প্রতিটি স্থান পরিবর্তন করবে। প্রথম রেজেক্স \.*@\.*ম্যাচগুলি @যেকোন সময়সীমার দ্বারা বেষ্টিত, এগুলি সমস্ত খালি দাগগুলিতে প্রতিনিধিত্ব করে যেখানে কামানটি স্থানান্তর করতে পারে। প্রতিস্থাপনটি {aR'.s}সমস্ত পিরিয়ড স্পেসে পরিবর্তিত করতে একটি কলব্যাক ফাংশন ব্যবহার করে ।

পরবর্তী রেজেক্সটি কামানটি ধরতে পারে এমন একটি টুকরোটির সাথে মেলে: হয় [a-z]বা [A-Z](যার মধ্যে yআগে কোনওটি ইয়ঙ্ক করা হয়েছিল তার উপর নির্ভর করে ) এরপরে \.*\w *@(কোনও পিরিয়ডের সংখ্যা, একটি চিঠি, কোনও স্থানের সংখ্যা এবং @)। এটি এর মতো একটি স্ট্রিংয়ের সাথে মিলবে h..R @(তবে কামানটি দেওয়া হয়েছিল C)। কলব্যাক ফাংশনটি s._@>1প্রথম অক্ষরটি কেটে ফেলে একটি স্পেস সংশোধন করে।

তৃতীয় রেজেক্স একই রকম, তবে কামানের পরে ক্যাপচারযোগ্য টুকরোটির সাথে মিল রেখে তার চেয়ে বেশি।

পরিশেষে, ফাংশনটি a@*sসমস্ত স্থানের সূচকের তালিকা পেতে সন্ধানকারী সমস্ত অপারেটর ব্যবহার করে ফিরে আসে ।

আমরা এখন fকামানের সারি এবং আবার কামানের কলামে কল করি। সারির স্ট্রিংটি হ'ল স্ট্রিংয়ের g@bভিতরে তোপের সূচক a। ফাংশনটি কলাম সংখ্যার একটি তালিকা প্রদান করে, যার প্রতিটিটিতে আমরা সারি সংখ্যা যুক্ত করি b। তালিকাটি মুদ্রিত হলে -sপতাকা স্থানাঙ্ক জোড়াগুলির মধ্যে একটি স্থান রাখে।

কলামটি পেতে, আমরা Zআইপি অপারেটরটি স্থানান্তর করতে g, সূচকটি নির্বাচন করতে aএবং Jঅক্ষরের ফলাফলের তালিকাটিকে স্ট্রিংয়ে ব্যবহার করি। এই স্ট্রিংয়ের মধ্যে তোপের সূচকটি b। ফাংশনটি সারি সংখ্যার একটি তালিকা ফেরত দেয়, যার প্রতিটিটিতে আমরা কলাম নম্বর প্রিপেন্ড করি a। এই তালিকাটি প্রোগ্রামটির সর্বশেষ প্রকাশ হিসাবে স্ব-মুদ্রিত।

(যদি কেউ ভাবছিলেন, এক্সপ্রেশন বিভাজক ;সেখানে Jবাইনারি না হয়ে একটি অমান্যকর অপারেটর হিসাবে পার্স করার জন্য জোর করে)

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