यह चुनौती Zachtronics गेम Infinifactory से काफी हद तक प्रेरित है ।
आपको एक आयताकार ग्रिड के शीर्ष-नीचे का दृश्य दिया जाता है, जिसका प्रतिनिधित्व किया जाता है >v<^
। वहाँ कन्वेयर के बिना कोशिकाओं हो सकता है, रिक्त स्थान द्वारा प्रतिनिधित्व किया। यहाँ एक उदाहरण है:
> <vv <
v ^ >v v
>v^^>vv^
^>^ v
> v<v >>
>v v<^
यह सेटअप कई अनंत स्थानों से घिरा हुआ है।
इसके अलावा, आपको कार्गो के एक आयताकार टुकड़े के आयाम दिए गए हैं जो ग्रिड के शीर्ष बाएं कोने में कन्वेयर पर रखा गया है। आपका काम यह पता लगाना है कि क्या कार्गो कभी आराम करता है या क्या यह एक लूप में आगे बढ़ जाएगा।
बेशक, कार्गो को एक साथ कई कन्वेयर को कवर करने की संभावना है, इसलिए यहां प्रत्येक में कार्गो की दिशा का पता लगाने के नियम हैं:
विरोधी कन्वेयर एक दूसरे को रद्द करते हैं। इसलिए यदि कोई 3x2 कार्गो किसी भी पैच को कवर करता है (स्पष्टता के लिए हाइफ़न और पाइप के साथ उल्लिखित), तो परिणाम समान होगा:
+---+ +---+ +---+ |>>^| | ^| |v^^| |^<<| |^ | |^^v| +---+ +---+ +---+
वही इन के लिए जाता है:
+---+ +---+ +---+ |v^<| | | |><>| |>>>| |>> | |>><| +---+ +---+ +---+
चूंकि कार्गो के नीचे एक कन्वेयर की सटीक स्थिति अप्रासंगिक है, इससे कोई फर्क नहीं पड़ता कि आप कौन से जोड़े रद्द करते हैं।
यह रद्दीकरण अन्य नियमों से पहले लागू किया जाता है। इसलिए, अन्य नियमों के लिए ज्यादातर दो दिशाओं में केवल कन्वेयर होंगे।
- यदि कार्गो किसी भी कन्वेयर को कवर नहीं करता है (या तो क्योंकि सभी कन्वेयर रद्द हो जाते हैं, क्योंकि यह केवल रिक्त स्थान को कवर करता है या क्योंकि यह पूरी तरह से ग्रिड से दूर चला गया है), यह आराम करने के लिए आता है।
यदि कार्गो एक दिशा के अन्य से अधिक कन्वेयर को कवर करता है, तो कार्गो उस दिशा में आगे बढ़ता है। जैसे, यदि एक 3x2 कार्गो निम्नलिखित पैच को कवर करता है
>> ^>^
यह दाईं ओर ले जाएगा, क्योंकि वहाँ अधिक
>
से अधिक कर रहे हैं^
। दूसरी ओर, यदि यह कवर किया गया है>>^ ^
यह नियम लागू नहीं होगा, क्योंकि इसके बीच एक टाई है
>
और^
।यह केवल उन मामलों को छोड़ता है जिसमें आसन्न दिशाओं के बीच एक टाई होती है (विपरीत दिशाओं के बीच एक टाई रद्द हो जाती थी)। इस स्थिति में, कार्गो उस अक्ष के साथ आगे बढ़ता रहता है, जिसमें वह पहले से ही घूम रहा होता है। जैसे अगर कोई दाईं-चलती या बाईं ओर घूम रहा 3x2 कार्गो अब पैच को कवर कर रहा है
>>^ ^
यह दाईं ओर ले जाएगा। यदि यह ऊपर या नीचे की ओर इस पैच पर आ जाता, तो यह अब ऊपर की ओर बढ़ता। यदि सिमुलेशन के पहले चरण पर इस तरह का संघर्ष होता है, तो मान लें कि कार्गो दाईं ओर जा रहा था।
विस्तृत उदाहरण
शीर्ष पर कन्वेयर ग्रिड और एक 3x2 कार्गो पर विचार करें। निम्नलिखित प्रक्रिया का चरण-दर-चरण दृश्य है। प्रत्येक चरण में ग्रिड होता है, जिसमें कार्गो द्वारा प्रतिनिधित्व किया जाता है #
, एक छोटा बॉक्स जो कार्गो द्वारा कवर किए गए कन्वेयर को दर्शाता है, रद्द होने के बाद कन्वेयर के साथ एक और बॉक्स, और वह नियम जो निर्धारित करता है कि कार्गो कहां चलता है:
###vv < > <vv < > <vv < > <vv < > <vv < > <vv <
###^ >v v ###^ >v v v ^ >v v v ^ >v v v ^ >v v v ^ >v v
>v^^>vv^ ###v^^>vv^ ###v^^>vv^ ###^^>vv^ ###^>vv^ >###>vv^
^>^ v ^>^ v ### ^>^ v ###^>^ v ###>^ v ###^ v
> v<v >> > v<v >> > v<v >> > v<v >> > v<v >> > v<v >>
>v v<^ >v v<^ >v v<^ >v v<^ >v v<^ >v v<^
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
|> <| | | | v | | v | | >| | >| | >v| | >v| |>v^| |> ^| |v^^| | ^^|
| v | | v | | >| | >| | | | | | | | | | ^| | | | ^>| | >|
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
Rule 3 Rule 4 Rule 3 Rule 4 Rule 4 Rule 3
================================================================================
> <vv < > <### < > <vv <
v ###v v v ###v v v ###v v
>###>vv^ >v^^>vv^ >###>vv^
^>^ v ^>^ v ^>^ v
> v<v >> > v<v >> > v<v >>
>v v<^ >v v<^ >v v<^
+---+ +---+ +---+ +---+ +---+ +---+
|^ >| | >| |vv | | v | |^ >| | >|
|v^^| | ^^| |^ >| | >| |v^^| | ^^|
+---+ +---+ +---+ +---+ +---+ +---+
Rule 3 Rule 4 Rule 3
इस बिंदु पर, कार्गो अंतिम दो फ़्रेमों के बीच एक लूप में प्रवेश करता है।
अब इसके बजाय एक 2x3 कार्गो पर विचार करें:
##<vv < >##vv < > <vv < > <vv < > <vv < > <vv <
## ^ >v v ##^ >v v ##^ >v v v ^ >v v v ^ >v v v ^ >v v
##>v^^>vv^ ##v^^>vv^ ##v^^>vv^ ##v^^>vv^ ##^^>vv^ >v^^>vv^
^>^ v ^>^ v ## ^>^ v ## ^>^ v ##^>^ v ##^>^ v
> v<v >> > v<v >> > v<v >> >##v<v >> > ##<v >> > ##<v >>
>v v<^ >v v<^ >v v<^ >v v<^ >v v<^ ## v<^
+--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
|> | |> | | <| | | |v | |v | | >| | >| |>v| |>v| | | | |
| v| | v| |v | |v | | >| | >| | | | | | | | | | v| | v|
| | | | | >| | | | | | | | | | | | v| | v| |>v| |>v|
+--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
Rule 4 Rule 3 Rule 4 Rule 3 Rule 3 Rule 3
================================================================================
> <vv < > <vv < > <vv <
v ^ >v v v ^ >v v v ^ >v v
>v^^>vv^ >v^^>vv^ >v^^>vv^
^>^ v ^>^ v ^>^ v
> ##<v >> > v<v >> > v<v >>
## v<^ ## v<^ >v v<^
## ## ##
## ##
##
+--+ +--+ +--+ +--+ +--+ +--+
| v| | v| |>v| |>v| | | | |
|>v| |>v| | | | | | | | |
| | | | | | | | | | | |
+--+ +--+ +--+ +--+ +--+ +--+
Rule 3 Rule 4 Rule 2
अंतिम चरण में, नियम 2 लागू होता है क्योंकि कार्गो ग्रिड से हट गया है, इसलिए यह आराम करने के लिए आता है और लूप नहीं होगा।
नियम और मान्यताएँ
आपका इनपुट कार्गो की चौड़ाई और ऊंचाई के साथ ऊपर वर्णित कन्वेयर ग्रिड होगा। आप किसी भी सुविधाजनक क्रम और प्रारूप में इन तीन मापदंडों को ले सकते हैं। ग्रिड के लिए, इसका मतलब है कि आप एक तार को नईलाइनों या अन्य वर्णों, या तार की एक सरणी, या वर्णों के सरणियों की एक सरणी के रूप में पढ़ सकते हैं, जब तक कि अलग-अलग ग्रिड कोशिकाएं अभी भी वर्णों का प्रतिनिधित्व करती हैं >v<^
और रिक्त स्थान।
आप उत्पादन एक चाहिए truthy यदि कम से कम दो फ्रेम या एक के एक पाश में सेटअप परिणाम मूल्य falsy मूल्य अगर माल आराम आ जाएगा।
आप मान सकते हैं कि ग्रिड को रिक्त स्थान के साथ एक आयत में गद्देदार किया जाएगा, और यह कि कार्गो शुरू में ग्रिड में फिट होगा।
आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से इनपुट ले रहे हैं और STDOUT (या निकटतम विकल्प), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से परिणाम लिख सकते हैं।
यह कोड गोल्फ है, इसलिए सबसे छोटा उत्तर (बाइट्स में) जीतता है।
परीक्षण के मामलों
परीक्षण मामलों को ग्रिड द्वारा समूहीकृत किया जाता है।
Grid (2x2):
>v
^<
Width Height Loop?
1 1 True
1 2 True
2 1 True
2 2 False
Grid (3x3):
> v
^ <
Width Height Loop?
1 1 False
1 2 False
1 3 False
2 1 False
2 2 True
2 3 True
3 1 False
3 2 True
3 3 False
Grid (4x3):
>^>v
v^v
^ <<
Width Height Loop?
2 2 False
Grid (6x5):
>v>v>v
^v^v^v
^v^v^v
^>^>^v
^<<<<<
Width Height Loop?
1 1 True
1 2 False
2 1 True
2 2 True
2 4 True
2 5 False
3 1 False
3 2 True
3 3 True
3 5 True
6 2 False
6 3 True
6 5 False
Grid (10x6):
> <vv <
v ^ >v v
>v^^>vv^
^>^ v
> v<v >>
>v v<^
Width Height Loop?
1 1 False
2 3 False
2 6 False
3 2 True
5 4 False
6 1 True
10 6 False
परीक्षण मामलों के एक अतिरिक्त सेट के रूप में, विचार करें कि किसी भी इनपुट जहां ग्रिड में पूरी तरह से रिक्त स्थान होते हैं, एक मिथ्या परिणाम प्राप्त करना चाहिए।
मैंने सभी परीक्षण मामलों को मैन्युअल रूप से जांचा है, इसलिए मुझे बताएं कि क्या आपको लगता है कि मैंने गलती की है।
[^^/v<]
बन जाता है [[0,1] [0,1];[0,-1] [-1,0]]
? या आप इसका मतलब यह है कि यह हमारे ऊपर है कि क्या यह एक तार इनपुट, एक चार सरणी इनपुट, आदि है, लेकिन यह अभी भी ^, v,> और <के रूप में होना चाहिए?
><^v
या एक स्थान द्वारा दर्शाया जाना चाहिए । मैं स्पष्ट कर दूंगा।