क्या पानी अंततः टैंक तक पहुंचता है?


30

ASCII कला की दुनिया में, पानी, हैश दीवारें और पत्र तंत्र हैं।

आप हैश की दीवारों ( #संकेतों) से बने कमरे में हैं :

#######
#     #
#     #
#     #
# ### #
#     #
#######

आप एक एस जल स्रोत ( Sसंकेत) और एक ई पानी की टंकी ( Eसंकेत) स्थापित करते हैं जो किसी भी दिशा से पानी प्राप्त कर सकता है, लेकिन आपके पास केवल एक एस स्रोत और एक ई टैंक है।

#######
#  S  #
#     #
#     #
# ### #
#  E  #
#######

इसलिए आपको समझदारी से चयन करना होगा कि स्रोत कहां रखा जाए। यहीं से आप अपने कौशल को खींच लेते हैं ।

काम

आपको एक इनपुट मिलता है जिसमें एक स्ट्रिंग होती है जो स्रोत और टैंक के साथ एक कमरे का प्रतिनिधित्व करती है:

#######
#  S  #
#     #
#     #
# ### #
#  E  #
#######

आपको यह पता लगाना होगा कि क्या पानी अंततः टैंक तक पहुंचता है। पानी नीचे बहता है, यदि संभव हो तो, यदि संभव हो तो बाईं और दाईं ओर और भी। पानी जमा नहीं होता है क्योंकि यह ऊपर नहीं जाता है।

तो, उपरोक्त इनपुट के लिए, परिणाम है:

#######
#  *  #
#  *  #
#*****#
#*###*#
#**O**#
#######

पानी ख़ुशी से टैंक तक पहुँचता है, इसलिए आपको एक सत्य मूल्य का उत्पादन करना चाहिए।

लेकिन अगर पानी टैंक तक नहीं पहुंचता है:

#######
#S    #
#     #
#  E  #
# ### #
#     #
#######

#######
#*    #
#*    #
#* X  #
#*### #
#*****#
#######

तो फिर तुम एक मिथ्या मूल्य उत्पादन करना चाहिए।

पानी आखिरकार टैंक तक पहुँचता है या नहीं, यह तय करने के लिए एक कार्यक्रम लिखें। आपका कोड यथासंभव छोटा होना चाहिए।

मान्यताओं

  • मान लें कि इनपुट हमेशा वैध है (पूरा कमरा एस और ई के साथ एक संलग्न आयताकार क्षेत्र है)।

  • मान लें कि इनपुट के रूप में केवल एक कमरा दिया गया है।

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

आपके कार्यक्रम को निम्नलिखित परीक्षण मामलों के लिए एक सत्य मान वापस करना चाहिए:

#######
#  S  #
#     #
#     #
# ### #
#  E  #
#######

#######
#  S  #
#     #
#  E  #
#     #
#     #
#######

#######
#     #
#     #
# SE  #
# ### #
#     #
#######

###############################################
#                      S                      #
#                                             #
#                                             #
#                                             #
#               ###############               #
#                                             #
#  ##################     ##################  #
#                                             #
#                                             #
#                    #####                    #
#                      E                      #
###############################################

#######
#  S  #
#     #
#     #
# ### #
#   # #
### ###
## E ##
#     #
#######

लेकिन निम्नलिखित परीक्षण मामलों के लिए एक मिथ्या मूल्य:

#######
#S    #
#     #
#  E  #
# ### #
#     #
#######

#######
#     #
# SE  #
#     #
#     #
#     #
#######

#######
#     #
#  E  #
#     #
#  S  #
#     #
#######

####################################
#                                  #
#                                  #
#                                  #
#S             #                  E#
####################################

यह सच है श्रेणी में पिछले कक्ष और झूठी श्रेणी में पिछले कक्ष से पीछे नहीं बेशर्म थे चोरी से उधार कूद और रन: Koth द्वारा मनु (जो सैंडबॉक्स पोस्ट को हटा दिया)।

ट्रू श्रेणी में अंतिम कमरा रेटिना में मार्टिन बटनर के जवाब से है


नोट: मैंने अपना KOTH सैंडबॉक्स पोस्ट डिलीट कर दिया है, आपकी चुनौती काफी बेहतर है :)
कॉमनग्यू

क्या किसी भी कमरे को भरने तक पानी जमा नहीं होता है? इस प्रकार पानी हमेशा टैंक तक पहुंचता है यदि और केवल यदि वे एक ही कमरे में हैं।
बॉब

1
सच्ची / झूठी चुनौतियों (या कुछ कक्षाओं के साथ वर्गीकरण चुनौतियों) में परीक्षण मामलों को प्रारूपित करने के लिए प्रो टिप: समूह के मामलों को आउटपुट से अलग करें और समूहों को अलग करें ताकि आप from / to/ वास्तव में बिट्स से बच सकें (जो प्रतिभागियों के लिए सभी परीक्षाओं को संसाधित करना आसान बनाता है मामलों में एक बार)।
मार्टिन एंडर

1
तो मूल रूप से Minecraft तरल प्रवाह तर्क। हालांकि Minecraft में मुझे लगता है कि आपके असली परीक्षण के मामलों में 3 झूठे हो जाएंगे क्योंकि पानी केवल बाईं ओर जाएगा।
पैट्रिक रॉबर्ट्स

1
मुझे गिरते रेत के पानी के भौतिकी की याद दिलाता है।
user253751

जवाबों:


15

घोंघे , 20 बाइट्स

\S{d(=\#n)?^#},!(t\E

0फाल्सी मूल्य के लिए और सत्य मूल्य के लिए प्रिंट 1

इसे ऑनलाइन आज़माएं!

  • \SSशुरू में मेल खाता है
  • d नीचे की दिशा निर्धारित करता है
  • {...}, ब्रेसिज़ में सामान का मिलान 0 या अधिक बार करता है
  • =\#एक जोर है जो सफल होता है अगर #घोंघे के आगे एक चार है, लेकिन इसे स्थानांतरित नहीं करता है
  • n किसी भी दिशा में 90 डिग्री बदल जाता है
  • (...)? कोष्ठक में 0 या 1 बार पैटर्न से मेल खाता है
  • \ ​ एक स्थान से मेल खाता है और इस पर घोंघा चलता है
  • !(... एक नकारात्मक दावा है
  • t ग्रिड में किसी भी बेजोड़ वर्ग को टेलीपोर्ट करता है
  • \E माचिस E

मैं इस भाषा को खुद से संकलित नहीं करना चाहता। क्या इसके लिए कोई ऑनलाइन दुभाषिया है?
user48538

@ zyabin101 नहीं, कोई ऑनलाइन दुभाषिया नहीं है।
feersum

ठीक है, डेनिस को फोन करने का समय। : पी मेरा प्रोजेक्टर कहाँ है?
user48538

5
i.imgur.com/dvWrAwP.png मैंने इसे स्वयं बनाया है।
user48538

खैर, मैंने कोशिश की है , लेकिन यह सभी परीक्षण मामलों के लिए 0 मुद्रण कर रहा है , लेकिन मेरे लिए एक है। मैं क्या गलत कर रहा हूं?
डेनिस

11

स्लिप , 20 + 2 = 22 बाइट्स

S>( ^4|^4(?|`#)^T)*E

तो स्लिप अभी भी हमेशा की तरह टूट गई, लेकिन एक बार के लिए यह एक चुनौती थी जो वास्तव में कर सकती थी। यह वास्तव में कभी भी उस गोल्फ के लिए डिज़ाइन नहीं किया गया था, इसलिए यह घोंघे को कभी भी नहीं हराएगा: पी

rसमाप्त करने के लिए ध्वज (दोहराई जाने वाली कोशिकाओं) की आवश्यकता है।

इसे ऑनलाइन आज़माएं । आउटपुट सत्य के लिए लिया गया मार्ग है, मिथ्या के लिए खाली है।

S                 Match S
>                 Rotate pointer downward
(                 Either...
 <space>^4          Match a space and point downwards
 |                  or
 ^4                 Point downwards
 (?|`#)             Match # below then reset pointer
 ^T                 Either turn left or right
)*                ... 0+ times
E                 Match E

6

रेटिना , 87 बाइट्स

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

+mT`E `S`(?<=^(?(1)!)(?<-1>.)*S.*¶(.)*)[E ]|.?S(?=(.)*¶.*#(?<-2>.)*(?(2)!)$)[E ]?
M`E
0

इसे ऑनलाइन आज़माएं!

रेटिना (या सामान्य रूप से .NET रेगेक्स) में जितना संभव हो उतना 2 डी स्ट्रिंग प्रसंस्करण संभव है, यह बिल्कुल संक्षिप्त नहीं है ...

व्याख्या

+mT`E `S`(?<=^(?(1)!)(?<-1>.)*S.*¶(.)*)[E ]|.?S(?=(.)*¶.*#(?<-2>.)*(?(2)!)$)[E ]?

यह एक बाढ़-भराव है जो उन सभी कोशिकाओं को चिह्नित करता है जो पानी के साथ पहुंचते हैं S। यह उन पात्रों के मिलान से होता है, जिन तक पहुंचा जा सकता है और फिर उन्हें Sसाथ-साथ Tट्रांसकोड किया जा सकता है । यह बाढ़-भराव दोनों स्थानों से होकर गुजरता है E+शुरुआत में जब तक उत्पादन बदल रहा बंद हो जाता है इस को दोहराता है।

वास्तविक रेगेक्स में दो अलग-अलग मामले शामिल हैं:

(?<=^(?(1)!)(?<-1>.)*S.*¶(.)*)[E ]

यह एक स्थान से मेल खाता है या Eजो एक के नीचे एक सेल है S। ऊर्ध्वाधर मिलान संतुलन समूहों का उपयोग करके वर्तमान रेखा पर उपसर्ग की गणना करके किया जाता है ताकि हम यह सुनिश्चित कर सकें कि क्षैतिज स्थिति समान है। यह पानी गिरने का ध्यान रखता है।

.?S(?=(.)*¶.*#(?<-2>.)*(?(2)!)$)[E ]?

यह बहुत समान है: यह एक से मेल खाता है Sऔर यदि इसके पहले और बाद में चरित्र उपलब्ध है, बशर्ते कि चरित्र सीधे नीचे Sएक है #। इससे जमीन पर फैले पानी का ध्यान रखा जाता है।

जब हम कर लेते हैं तो यह निर्धारित करना बहुत आसान है कि पानी पहुंच गया या नहीं E। यदि ऐसा किया गया है, तो Eबाढ़-भराव में स्ट्रिंग से हटा दिया गया है, और यदि Eअभी भी नहीं है। तो चलो एस की संख्या की गणना करें E:

M`E

लेकिन अब 0सत्य परीक्षण के मामलों के लिए यह 1(जो मैं झूठेपन पर विचार करूंगा) और झूठे परीक्षण मामलों के लिए (जो मैं सच्चाई पर विचार करूंगा)। 0इस परिणाम में s की संख्या को गिनकर हम इसे बहुत आसानी से उलट सकते हैं :

0

किया हुआ।


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