तोप कहां जा सकती है?


9

परिचय

ज़ियांग्की का खेल , जिसे चीनी शतरंज के रूप में भी जाना जाता है, एक शतरंज जैसा खेल है जो चीन, वियतनाम, ताइवान और अन्य पूर्वी एशियाई देशों में लोकप्रिय है। ज़ियांग्की में दो पक्षों का रंग लाल और काला है। ज़ियांग्की में सात टुकड़े हैं: सामान्य ( G), सलाहकार ( A), हाथी ( E), घोड़ा ( H), रथ ( R), तोप ( C), और सैनिक ( S)। इस चुनौती के उद्देश्यों के लिए, अपरकेस टुकड़ों को लाल और निचले टुकड़ों को काला माना जाता है। इनमें से अधिकांश टुकड़े पश्चिमी शतरंज में एक बराबर हैं, लेकिन एक पूरी तरह से अद्वितीय टुकड़ा है: तोप।

तोप शतरंज में किश्ती या Xiangqi में एक रथ (या तो एक्स या वाई अक्ष पर रिक्त स्थान के किसी भी संख्या बढ़ रहा) की तरह चलता रहता है, लेकिन इस तरह से हमला नहीं कर सकते हैं। इसके बजाय, यह किसी भी रंग (दोस्त या दुश्मन) के एक टुकड़े पर एक्स या वाई कुल्हाड़ियों (उसी तरह से चलता है) के साथ कूदकर हमला करता है और विपरीत रंग के टुकड़े पर उतरता है, जिसे वह तब पकड़ लेता है। ध्यान दें कि सभी शतरंज और जियांग्की टुकड़े की तरह, तोप अपने स्वयं के रंग पर कब्जा नहीं कर सकते हैं।

उदाहरण के लिए, निम्नलिखित आरेख में, जिस स्थान पर तोप ( C) स्थानांतरित हो सकती है, उसके साथ चिह्नित किया जाता है *, और जिन पर वह कूद सकता है और कब्जा कर सकता है X, उन्हें यह मानकर चिह्नित किया जाता है कि वहां एक काला / निचला टुकड़ा है।

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

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें, जो कि एक बोर्ड के रूप में xiangqi बोर्ड और एक बोर्ड के निर्देशांक को इनपुट के रूप में दिया गया हो, निर्देशांक की एक सूची को आउटपुट करता है जिससे तोप आगे बढ़ सकती है या कूद सकती है।

सभी I / O का प्रारूप लचीला है।

जियांग्की बोर्ड के लिए स्वीकार्य प्रारूपों में एक नईलाइन-अलग स्ट्रिंग, तार की एक सूची या किसी अन्य विभाजक के साथ एक स्ट्रिंग शामिल है aceghrsACEGHRS.। आप मान सकते हैं कि बोर्ड हमेशा 9x10 होगा, एक ज़ियांग्की बोर्ड का आकार।

बोर्ड की सामग्री में कई अवधियों ( .), बोर्ड पर खाली बिंदुओं का प्रतिनिधित्व करने वाले और टुकड़ों का प्रतिनिधित्व करने वाले पात्र शामिल होंगे। टुकड़ा-से-चरित्र मानचित्रण इस प्रकार है:

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

अपरकेस अक्षर लाल टुकड़ों का प्रतिनिधित्व करते हैं, और निचले अक्षर काले टुकड़ों का प्रतिनिधित्व करते हैं। यहां सूचीबद्ध वर्ण (अर्थात नहीं aceghrsACEGHRS.) बोर्ड में दिखाई नहीं देंगे।

इनपुट समन्वय का प्रारूप लचीला है, और आउटपुट निर्देशांक के प्रारूप से मेल खाने के लिए आवश्यक नहीं है। यह उदाहरण के लिए दो पूर्णांक तत्वों, 2-ट्यूपल, दो संख्याओं के साथ किसी भी विभाजक या दो वर्णों की सूची हो सकती है। यह या तो 0-अनुक्रमित या 1-अनुक्रमित भी हो सकता है। आप यह मान सकते हैं कि बोर्ड पर समन्वय हमेशा एक तोप ( Cया c) को हल करेगा ।

निर्देशांक जिसमें तोप कूद सकती है और स्थानांतरित हो सकती है, आउटपुट में समान सूची में दिखाई देनी चाहिए; दोनों के बीच अंतर करना आवश्यक नहीं है। किसी भी व्यक्तिगत आउटपुट निर्देशांक के लिए स्वीकार्य प्रारूप इनपुट समन्वय के लिए समान हैं। निर्देशांक न्यूलाइन-सेपरेटेड, आउटपुट एक सूची या किसी अन्य प्रतिनिधित्व के रूप में हो सकते हैं। कोई विशेष आदेश आवश्यक नहीं है; आदेश को निर्धारक भी नहीं होना चाहिए।

ध्यान दें कि तोप के एक ही रंग (मामले) के एक टुकड़े पर कूदता कानूनी नहीं है, और इस प्रकार आउटपुट में प्रकट नहीं हो सकता है।

परीक्षण के मामलों

ध्यान दें कि सभी परीक्षण मामले संभव नहीं हैं।

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। यह एक भयानक खेल है, जब मुझे अपने सहयोगियों से सीखने का अवसर मिला था जब मैंने एक चीनी कंपनी के लिए काम किया था। सामान्य लग रहा है सिर्फ शतरंज (रक्षा के लिए एक तेज नजर रखना लेकिन आक्रामक तरीके से खेलते हैं) खेल रहे हैं की तरह है, लेकिन रणनीति अलग हैं (जबकि यह बुरा शतरंज में किश्ती को बाहर लाने के शुरू करने के लिए, जल्दी रथ बाहर लाने के लिए यह अच्छा है।) En.wikipedia .org / wiki / जियांगकी
लेवल रिवर सेंट

@LevelRiverSt यह शतरंज की तुलना में बहुत कम तकनीकी है और एक अलग रणनीतिक अनुभव के साथ एक वीडियोगेम की तरह लगता है। मुझें यह पसंद है!
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) को असाइन करते हैं ।

अब हम एक फंक्शन को परिभाषित करते हैं f। यह फ़ंक्शन दो तर्क लेता है: एक स्ट्रिंग जो बोर्ड की एक पंक्ति या स्तंभ का प्रतिनिधित्व करती है, और उस स्ट्रिंग में तोप का सूचकांक। ये तर्क फ़ंक्शन के अंदर aऔर के रूप में उपलब्ध हैं b। यह फ़ंक्शन उन सभी सूचकांकों की सूची लौटाएगा जो स्पॉट का प्रतिनिधित्व करते हैं कि तोप स्थानांतरित हो सकती है या कब्जा कर सकती है।

सबसे पहले, हम परीक्षण करते हैं कि क्या a@bहै Cया नहीं c। यदि यह है C, तो हम चाहते हैं कि रेगेक्स [a-z]टुकड़ों पर कब्जा कर सके। यदि यह है c, regex है [A-Z]। (गोल्फ कोड इन रेगेक्स को निचले- और अपरकेस वर्णमाला के लिए बिलियन वेरिएबल्स से उत्पन्न करता है।) हम चर Yमें उपयुक्त रेगेक्स को बनाते हैं y

हम तोप के चरित्र को स्ट्रिंग में बदलते हैं @(उसी पंक्ति / स्तंभ में अन्य तोपों से इसे अलग करने के लिए)।

इसके बाद रेगेक्स रिप्लेसमेंट की एक श्रृंखला आती है, जो हर स्थान को बदल देगी जहां तोप एक अंतरिक्ष पात्र में जा सकती है। पहले regex \.*@\.*से मेल खाता है @अवधि, जो सभी के रिक्त स्थान है जो करने के लिए तोप स्थानांतरित कर सकते हैं प्रतिनिधित्व के किसी भी संख्या से घिरा हुआ। प्रतिस्थापन {aR'.s}सभी अवधियों को अंतरिक्ष में बदलने के लिए कॉलबैक फ़ंक्शन का उपयोग करता है ।

या तो: अगले regex एक टुकड़ा तोप पर कब्जा कर सकते हैं मेल खाता है [a-z]या [A-Z](निर्भर करता है जिस पर एक में yanked था yपहले) द्वारा पीछा \.*\w *@(अवधि के किसी भी संख्या, एक पत्र, रिक्त स्थान के किसी भी संख्या, और @)। यह एक तार की तरह मेल खाता होगा h..R @(बशर्ते तोप हो C)। कॉलबैक फ़ंक्शन s._@>1पहले वर्ण को बंद कर देता है और स्थान खाली कर देता है।

तीसरा रेगेक्स समान है, लेकिन तोप से पहले के बजाय एक आकर्षक टुकड़े से मेल खाता है।

अंत में, फ़ंक्शन लौटता है a@*s, सभी रिक्त स्थान के सूचकांकों की सूची प्राप्त करने के लिए फ़ाइंड-ऑल ऑपरेटर का उपयोग करता है।

अब हम fतोप की पंक्ति पर और फिर से तोप के स्तंभ पर कॉल करते हैं । पंक्ति का तार g@b, स्ट्रिंग के अंदर तोप के सूचकांक के साथ है a। फ़ंक्शन कॉलम संख्याओं की एक सूची देता है, जिनमें से प्रत्येक में हम पंक्ति संख्या को जोड़ते हैं b। जब सूची मुद्रित की जाती है, तो -sध्वज समन्वय जोड़े के बीच एक स्थान रखता है।

कॉलम प्राप्त करने के लिए, हम Zट्रांसफर करने के लिए आईपी ​​ऑपरेटर का उपयोग करते हैं g, इंडेक्स का चयन करते हैं a, और Jपरिणामस्वरूप स्ट्रिंग में वर्णों की सूची को हटाते हैं। इस तार के भीतर तोप का सूचकांक है b। फ़ंक्शन पंक्ति संख्याओं की एक सूची देता है, जिनमें से प्रत्येक में हम स्तंभ संख्या को प्रस्तुत करते हैं a। यह सूची, कार्यक्रम की अंतिम अभिव्यक्ति है, यह स्वतः-प्रदर्शित है।

(यदि कोई सोच रहा था, तो अभिव्यक्ति विभाजक बाइनरी के बजाय एक अपर संचालक के रूप में पार्स करने के ;लिए मजबूर Jकरने के लिए है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.