कौन से स्विच चालू हैं?


12

परिचय

आप अपने सहकर्मी के साथ बैठे हैं, दोपहर का भोजन कर रहे हैं, और आप उसके साथ काम कर रहे नवीनतम और कथित रूप से सबसे बड़ी परियोजना के बारे में / उसकी डींग मार रहे हैं। अहंकार के अपने निरंतर प्रदर्शन से बीमार और थके हुए, वह आपको एक चुनौती देता है, ताकि आप चुप रहें। आप जो अहंकारी और खुशमिजाज व्यक्ति हैं, आप निश्चित रूप से स्वीकार करते हैं (क्योंकि आपको हर चुनौती को स्वीकार करना चाहिए )। चुनौती , के रूप में वह / वह बताते हैं यह है, एक दिए गए इनपुट में 1 या प्रत्येक वर्ण के अधिक से युक्त पाठ का कोई खंड की !@#$^&*, उत्पादन किसी भी उचित प्रारूप स्विच (ते) है कि / के निर्देशांक "पर" कर रहे हैं।

आपके सहकर्मी के अनुसार, एक स्विच एक है $, और एक स्विच को "पर" के रूप में वर्गीकृत किया जाता है, अगर और केवल अगर यह निम्न मानदंडों में से कम से कम 1 को संतुष्ट करता है:

  1. यह चारों ओर से घिरा हुआ है ^। इसलिए...

    ^^^
    ^$^
    ^^^
    

    "चालू" स्विच में परिणाम।

  2. यह चारों ओर से घिरा हुआ है &। इसलिए...

    &&&
    &$&
    &&&
    

    "चालू" स्विच में परिणाम।

  3. यह पूरी तरह से कम से कम दो तरफ से ढंका हुआ है *। उदाहरण के लिए,

    ***
    &$&
    ***
    

    "चालू" स्विच में परिणाम, लेकिन

    &*&
    &$&
    &*&
    

    नहीं है, क्योंकि स्विच पूरी तरह से किसी भी दो तरफ से कवर नहीं किया गया है *

  4. इसके चारों ओर के किसी भी कोने में कम से कम 1 !और / या 1 @है। यह गिनती नहीं है अगर इनमें से कोई एक कोने में नहीं है। इसलिए...

    !&&
    ^$@
    @&!
    

    "ऑन" स्विच में परिणाम, क्योंकि कम से कम 1 !और / या @कम से कम 1 कोनों में है (उपरोक्त मामले में, 3 कोनों में 2 मान्य !s और 1 वैध हैं @)। तथा...

    &!&
    ^$@
    ^!&
    

    करता नहीं हालांकि देखते हैं 2, !और 1 @के बाद से उनमें से कोई भी कर रहे हैं, किसी भी कोने में।

  5. 1 या अधिक स्विच के आसपास किसी भी पक्ष पर नहीं# हैं , जब तक कि कम से कम 1 स्विच को घेर नहीं लेता है। दूसरे शब्दों में, यदि किसी पक्ष में कम से कम 1 मौजूद है, तो यह अन्य सभी नियमों से आगे निकल जाता है, जब तक कि कोई वर्तमान भी न हो । इसलिए:&#&

    #&*
    *$*
    !**
    

    "ऑन" स्विच में परिणाम, हालांकि #मौजूद है, क्योंकि &स्विच के आसपास है, और यह उपरोक्त नियमों में से कम से कम 1 का पालन करता है। हालाँकि, यदि विस्मयादिबोधक बिंदु इस तरह मौजूद नहीं थे:

    #&*
    *$*
    ***
    

    स्विच बंद हो जाएगा, क्योंकि यह उपरोक्त नियमों में से कम से कम एक का पालन नहीं करता है। इसलिए, भले ही एक स्विच ए #और ए से घिरा हो सकता है &, यह तब भी बंद रहेगा जब तक कि यह इनमें से एक या अधिक नियमों का पालन नहीं करता है। इसके अलावा, स्विच के वैध होने के लिए हमेशा& s और #s के बीच एक> = 1: 1 अनुपात होना चाहिए। उदाहरण के लिए,

    #&!
    *$*
    **#
    

    फिर भी एक अमान्य स्विच होगा, हालांकि यह इन नियमों में से 1 का अनुसरण करता है, क्योंकि 2 #एस हैं, लेकिन केवल 1 &, और इसलिए &एस और #एस के बीच एक> = 1: 1 अनुपात नहीं है । इसे वैध बनाने के लिए, आपको &किसी भी किनारे पर 1 या अधिक अतिरिक्त एस जोड़ना होगा ताकि संभवतः #एस और &एस की संख्या को संतुलित किया जा सके, जैसे:

    #&!
    *$&
    &*#
    
    3:2 ratio between &s and #s
    

    आखिरकार...

    #^^
    ^$*
    @^!
    

    "बंद" स्विच के परिणामस्वरूप, हालांकि यह उपरोक्त नियमों में से 1 या अधिक का अनुसरण करता है, क्योंकि इसमें इसके चारों ओर कम से कम 1 #होता है, और &इसे आउट करने के लिए कोई एस नहीं है।

  6. वैध स्विच होगा केवल होना अंदर एक इनपुट, और इसलिए, प्रत्येक वैध $घिरा होना चाहिए पूरी तरह से मान्य वर्ण के किसी भी 8 से। उदाहरण के लिए, यदि पूरा इनपुट होना था:

    *$*
    !$!
    !!!
    

    शीर्ष $निश्चित रूप से मान्य स्विच नहीं है क्योंकि स्विच एक किनारे पर है, और इसलिए स्विच पूरी तरह से 8 वैध वर्णों से घिरा नहीं है। इस उदाहरण में, स्विच पर भी विचार नहीं किया जाना चाहिए। हालांकि, बीच में स्विच पूरी तरह से वैध है, और तथ्य के रूप में "पर" है, क्योंकि यह उपरोक्त आवश्यकताओं में से कम से कम एक को पूरा करता है।

वर्णों के इस ब्लॉक को प्रदर्शित करने के लिए:

!@#^^$#!@
!@#$$*$&@
@$^!$!@&&

जिसे हम निर्देशांक के लिए लेबल कर सकते हैं, जैसे कि ऊर्ध्वाधर अक्ष yऔर क्षैतिज अक्ष को कॉल करना x:

y

3 !@#^^$#!@
2 !@#$$*$&@
1 @$^!$!@&&

  123456789 x

निर्देशांक को हमेशा(x,y) दो-आयामी समन्वय ग्रिड के समान प्रारूप में लौटाया जाना चाहिए । अब, कौन से स्विच चालू हैं? अच्छा, चलो पहले उन सभी को ढूंढते हैं। हम पहले से ही देख सकते हैं कि बहुत ऊपर पंक्ति में 1 है, और बहुत नीचे में एक और है। हालाँकि, वे स्वचालित रूप से नो-ऑप हैं, क्योंकि वे पूरी तरह से 8 वर्णों से घिरे नहीं हैं।

अगली पंक्ति में एक आता है 2. विशेष रूप से, यह एक:

#^^
#$$
^!$

हम देख सकते हैं कि इसमें 3 $संकेत हैं , लेकिन हम सिर्फ बीच में एक पर ध्यान केंद्रित करना चाहते हैं, और, जैसा कि आप शायद देख सकते हैं, यह पहले से ही अमान्य है, क्योंकि इसके पास 2 #एस है जिसके चारों ओर कोई &संतुलन नहीं है। बाहर। इसके अतिरिक्त, यह किसी भी नियम का पालन नहीं करता है, इसलिए भले ही यह वैध स्विच था, फिर भी यह "बंद" होगा।

अगला पंक्ति 2 में एक और आता है:

^^$
$$*
!$!

फिर, केवल बीच में स्विच पर ध्यान दें। यह स्विच के बाद से यह है, "पर" है कम से कम 1 !में कम से कम 1 कोने। इस एक के निर्देशांक हैं (5,2)

आगे बढ़ते हुए, हम अंत में अंतिम स्विच पर जाते हैं। यह दूसरी पंक्ति में भी है और ऐसा प्रतीत होता है:

$#!
*$&
!@&

और, जैसा कि आप शायद देख सकते हैं, यह एक वैध स्विच भी है, हालांकि इसके #आस-पास भी है, क्योंकि वहाँ 2 अन्य &असंतुलन हैं #। इसके अलावा, इसमें कम !से कम 1 कोनों में से कम से कम 1 भी है, और इसलिए न केवल स्विच मान्य है, बल्कि यह "ऑन" भी है। इस स्विच के निर्देशांक हैं (7,2)

हम अंत में अंत तक पहुंच गए हैं, और पाठ पर उस पूरे ब्लॉक में "2" को "स्विच" पर पाया है। उनके निर्देशांक हैं (5,2)और (7,2), जो हमारा अंतिम उत्तर है, और आउटपुट क्या होना चाहिए। हालाँकि, यह इनपुट बहुत सरल था। इनपुट बहुत बड़ा हो सकता है, क्योंकि टेक्स्ट का ब्लॉक कितना बड़ा हो सकता है, इसकी कोई सीमा नहीं है। उदाहरण के लिए, इनपुट 200x200पाठ का एक यादृच्छिक ब्लॉक भी हो सकता है ।

contraints

  • मानक ढीले निषिद्ध हैं।

  • इसके लिए संभवतः कोई अंतर्निहित नहीं हो सकता है, लेकिन सिर्फ मामले में (आप की ओर देखते हुए गणितज्ञ), बिल्ट-इन का उपयोग जो सीधे इसे हल करने के लिए निषिद्ध है।

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

प्रारूप में दिया गया है string input -> [array output]:

@#$$&^!&!# 
@*&!!^$&^@
$!#*$@#@$!   ->  [[7,3],[9,2]]
*@^#*$@&*#

#^&!$!&$@@#&^^&*&*&&
!^#*#@&^#^*$&!$!*^$$
#^#*#$@$@*&^*#^!^@&* -> [[19,3],[15,3],[8,2]]
#$@$!#@$$^!#!@^@^^*#

@!@!^&*@*@
*$*^$!*&#$
@$^*@!&&&#
**$#@$@@#!  -> [[2,8],[5,8],[6,6],[9,3]]
##*&*#!^&^
$&^!#$&^&@
^^!#*#@#$*
$@@&#@^!!&
#@&#!$$^@$


!!@##!$^#!&!@$##$*$#
$^*^^&^!$&^!^^@^&!#!
@*#&@#&*$!&^&*!@*&** -> [[9,4],[9,3]]
^!!#&#&&&#*^#!^!^@!$
&$$^*$^$!#*&$&$#^^&$

अधिक जल्द ही आ रहा

अतिरिक्त नोट्स

  • आप मान सकते हैं कि इनपुट हमेशा एक पूर्ण ब्लॉक के रूप में होगा (यानी एक आयत या वर्ग)
  • इनपुट में किसी भी अन्य वर्ण की तुलना में कभी नहीं होगा !@#$^&*

याद रखें, यह एक इसलिए सबसे छोटा कोड जीतता है!


12
थोड़ा लंबा और मनमाना लगता है।
orlp

@orlp यही तो मैं जा रहा हूं। वैसे भी यह एक चुनौती है। आप यह क्यों कहते हैं कि यह मनमाना है?
आर। काप

6
@ R.Kap किसी भी नियम का कोई औचित्य नहीं है; वे बिना किसी कारण के जटिलता को जोड़ने के लिए बने लगते हैं।
निधि मोनिका का मुकदमा

6
@QPaysTaxes इस औचित्य की क्या आवश्यकता है? ये चुनौती के लिए बने हैं । यह है एक चुनौती है, और एक चुनौती सचमुच हो सकता है कुछ भी । यह सब वास्तव में जरूरत है नियमों का एक सेट, एक इनपुट, और आउटपुट उन नियमों पर आधारित होना चाहिए।
आर। काप

1
मैं यह नहीं कह रहा हूं कि मैं सहमत हूं, मैं बता रहा हूं कि यह मनमाना क्यों लगता है। एक उदाहरण के रूप में मेरी सबसे लोकप्रिय चुनौती को लें : यदि आपने सभी संदर्भों को छीन लिया और कहा, "आपको स्ट्रिंग्स का एक सेट दिया गया है। इंडेंटेशन के आधार पर, उन्हें समूह दें, समूहों को फेरबदल करें, फिर आंतरिक समूहों को फेरबदल करें, लेकिन सदस्यों को रखें। यदि वे मौजूद हों, तो निचले हिस्से में आंतरिक समूह ", जो बहुत मायने नहीं रखेगा।" हालाँकि, क्योंकि इसका संदर्भ है, उन सभी अजीब नियमों और प्रतिबंधों ने कम से कम समझ में आने का नाटक किया।
निधि मोनिका का मुकदमा

जवाबों:


2

हास्केल, 304 बाइट्स

import Data.List
s!c=sum[1|a<-s,a==c]
f t|Just w<-elemIndex '\n't,h<-t!'\n'=[c|c<-mapM(\a->[2..a-1])[w,h],s<-[(\[x,y]->t!!((h-y-1)*(w+1)+x))<$>mapM(\a->[a-2..a])c],s!!4=='$',foldr1(-)((s!)<$>"#&")<1,or$("@!"/="@!"\\map(s!!)[0,2..8]):zipWith(\c i->all(==c)$(s!!)<$>[0..8]\\(4:i))"^&**"[[],[],[1,7],[3,5]]]

यह फ़ंक्शन को परिभाषित fकरता है जो दिए गए कार्य करता है।


2

जावास्क्रिप्ट (ईएस 6), 363 339 312 309 298 बाइट्स

यह एक फ़ंक्शन है जो इनपुट को एक स्ट्रिंग के रूप में लेता है और निर्देशांक की एक सूची लौटाता है। यह 2 मुख्य भागों में विभाजित है: निर्देशांक और उसके आस-पास के पात्रों की एक जोड़ी में परिवर्तन का परिवर्तन, और आसपास के पात्रों पर चुनौती के नियमों के आधार पर एक 'यह' चेक पर है।

a=>[...a].map((z,p,m)=>(y-=z==B,z)=='$'&&(r=m[p-n-2]+m[p-n]+m[p+n]+m[p+n+2]+m[p-n-1]+m[p-1]+m[p+1]+m[p+n+1],r=r[L]<9?r:'')[T]`&`[L]>=r[T]`#`[L]&&(/(\^|&){8}|\*{4}(.\*\*.|\*..\*)/.exec(r)||/!|@/.exec(r.substr(0,4)))&&[1+(p-(w-y))%n,y],y=w=a[T='split'](B='\n')[L='length'],n=a.search(B)).filter(e=>e)

2

पायथन 2 , 299 297 279 275 261 259 बाइट्स

m=input()
R=range
h=len(m)
for y in R(h-2):
 for x in R(len(m[0])-2):
	a=''.join(m[y+o][x:x+3]for o in R(3))
	if(a.count('&')>=a.count('#'))*(a[:4]+a[5:]in('^'*8,'&'*8)or'*'*6in(a[:3]+a[6:],a[::3]+a[2::3])or'!'in a[::2]or'@'in a[::2])*a[4]=='$':print x+2,h+~y

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

इनपुट को स्ट्रिंग्स की सूची के रूप में लेता है

एक्स की एक जोड़ी के रूप में आउटपुट प्रिंट करता है, वाई प्रत्येक लाइन पर निर्देशांक करता है

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