बाण बच जाता है


14

सवाल

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

आप भूलभुलैया के सबसे बाहरी सीमा पर किसी भी सेल से शुरू कर सकते हैं और एक रास्ता खोज सकते हैं जो आपको भूलभुलैया में ले जाता है, और आपको किसी अन्य सेल से बाहर निकलने का कारण बनता है। इनपुट एक सरणी के रूप में दिया जाएगा <,>, ^ और v। आउटपुट एक एकल अंक होगा (बूलियन, पूर्णांक या चरित्र, कुछ भी करेगा) 0 के रूप में (यह दर्शाता है कि कार्य असंभव है) या 1 (यह दर्शाता है कि आपके पास है) कार्य प्राप्त किया)।

उदाहरण (वास्तविक सरणी इससे बड़ी होगी)

^ v < >
> < v <
v > v ^

आउटपुट होगा

1
जैसा कि आप दाईं ओर <से प्रवेश कर सकते हैं, जिसके कारण आप नीचे के मार्ग से <"v v" मार्ग से बाहर निकल जाएंगे

कार्य सबसे छोटा संभव कोड लिखना है जो भूलभुलैया को इनपुट के रूप में प्राप्त करेगा, और यह निर्धारित करेगा कि नियमों में निर्दिष्ट के रूप में इसमें एक पथ मौजूद है और एकल अंक 0 या 1 को आउटपुट करें।

वास्तविक अंकों के बजाय TRUE और FALSE आउटपुट करने की भी अनुमति है।


6
कुछ वास्तविक परीक्षण मामलों के साथ काम करना अच्छा होगा
Liam

क्या इनपुट एक आयामी सरणी या दो आयामी है? और क्या आप केवल एक <द्वारा दाईं ओर प्रवेश कर सकते हैं या आप ^ द्वारा भी दर्ज कर सकते हैं?
बॉबब्लॉक

@bobbel इनपुट को 1 या 2 आयामी सरणी के रूप में दिया जा सकता है, जो भी एक छोटे कोड के लिए आवश्यक है। यहां तक ​​कि तीर को <> ^ v के बजाय 1 2 3 4 के रूप में दर्ज किया जा सकता है, यदि वह कोड को छोटा कर सकता है। और हां, आप ^ के माध्यम से भी प्रवेश कर सकते हैं।
भूत_न_थे_कोड

1
संभावना है कि एक यादृच्छिक, 50 से 50, सरणी में समाधान नहीं होगा लगभग 0. यह बेहतर होगा यदि आपको आवश्यक है कि समाधान में कम से कम एक निश्चित संख्या में कदम हैं या उपयोगकर्ता ने समाधान पथ निर्दिष्ट किया है।
डेविड

1
इसे "एक तीर से बच जाना" कहा जाना चाहिए था ... फिर भी एक समाधान की ओर इशारा किया।
बीकर

जवाबों:


6

सीजेएम, 89 81 बाइट्स

q~"><v^":A2/{f{\*}z}/sA[1W52-52]er:T,,{[52md]51f%0e=1=},:E{[2704{__T=+}*]\-E&},,g

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

q~        e# Read and evaluate all input. This pushes an array of strings.
"><v^":A  e# Push that string and save it in A.
2/        e# Split it into ["><" "v^"].
{         e# For each chunk:
  f{      e#   For each input string, push the string and the chunk; then:
    \*    e#     Join the chunk, using the string as separator.
  }       e#
  z       e#   Transpose rows and columns.
}/        e#
s         e# Flatten the resulting array of strings.
A         e# Push "><v^".
[1W52-52] e# Push [1 -1 52 -52].
er        e# Perform transliteration.
:T        e# Save the result in T.
,,        e# Push [0 ... 2703].
{         e# Filter; for each integer I in [0 ... 2703]:
  [52md]  e#   Push [I/52 I%52].
  51f%    e#   Take both integers modulo 51 to map 51 to 0.
  0e=     e#   Count the number of resulting zeroes.
  1=      e#   Check if the count is 1.
},        e# If it is, keep I.
:E        e# Save the filtered array in E.
{         e# For each integer I in E:
  [2704{  e#   Do 2704 times:
    __    e#     Push two copies of the integer on the stack.
    T=    e#     Select the corresponding element from T.
    +     e#     Add it to the first copy.
  }*]     e#   Collect all results in an array.
  \-      e#   Remove I from that array.
  E&      e#   Intersect with E.
},        e# If the intersection is non-empty, keep the integer.
,g        e# Push the sign of the length of the filtered array.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.