चलो हैलोवीन के लिए तैयार हो जाओ


15

मैं आप सभी के बारे में नहीं जानता, लेकिन मैं हैलोवीन की तैयारी नहीं कर रहा हूं -कभी नहीं किया होगा-लेकिन, मेरा पड़ोसी है, इसलिए हम उसकी मदद करेंगे।

उसे कैंडी के किस ब्रांड के बारे में पता लगाने में मदद की ज़रूरत है, लेकिन उसके पास इतनी कैंडी है कि वह हैलोवीन से पहले खत्म नहीं कर पाएगी।

उसके पास:

  • मज़ाक
  • किट कैट
  • स्टारबर्स्ट
  • चिपचिपे भालू
  • Twix

इनपुट

एक बहुस्तरीय स्ट्रिंग (या कोई अन्य उचित रूप) जिसमें केवल अक्षर और रिक्त स्थान होते हैं।

उत्पादन

एक मिथ्या मूल्य यदि यह एक वैध कैंडी नहीं है, या जो कैंडी है तो वह कैंडी है।

कैसे तय करें कि यह कौन सी कैंडी है

एक कैंडी वैध है अगर यह उस पर उपरोक्त ब्रांडों में से एक कहता है। हालाँकि, यह इतना आसान नहीं है, क्योंकि यह एक वैध कैंडी है:

K i t
       K a
           t

एक वैध कैंडी वह है जहां:

  • पत्र बाएं से दाएं क्रम में हैं
  • अक्षरों को सही ढंग से कैपिटल किया गया है
  • अक्षर, बाएं से दाएं, दोनों चढ़ते और उतरते नहीं हैं
  • व्हाट्सएप के साथ पत्र उपरोक्त ब्रांडों में से एक को हटा दिया

यह , बाइट जीत में सबसे छोटा कोड है!

उदाहरण

Truthys:

1.
              kers
           c
        i
       n
    S    

2.
  Kit K a t

3. 
St a
    r b u
         r st 

4.
         Bear s
G ummy

5.
T w i
                          x

Falsys:

1.
SNICKERS

2.
 C   n

   a   d y

3. 
xiwT

4.
S C I
       ss o
              r       s

5.
Kit
Kat

क्या रिक्त स्थान के साथ इनपुट पेड किया जा सकता है?
लोजोवो

इसके अलावा, एक त्रुटि गणना को गलत मान के रूप में फेंकने से क्या होता है?
बजे लोजो

@ ललोवो, हाँ और हाँ
डैनियल

क्या हम कोई रिक्त रेखा मान सकते हैं?
अनाम 2

@ अनाम 2, इनपुट खाली नहीं होगा
डैनियल

जवाबों:


0

पायथ - 72 बाइट्स

मुझे उम्मीद है कि मैंने सभी किनारे मामले पकड़े। कैंडी सूची को संकुचित करेगा।

&sSIM_Bmxdh-d;fnd{TK.tQd}-sKdc"Snickers KitKat Starburst GummyBears Twix

टेस्ट सूट


1

जावास्क्रिप्ट (ईएस 6), 221 218 216 212 208 205 बाइट्स

f=a=>(c=d=L=0,e=1,s=[],[...a].map(a=>a=='\n'?c=L=0:c++-(a!=' '&&(s[c]?e=0:(!L&&(d?d-1?e&=c>Q>d-3:d=c>Q>2:d=1),L=s[Q=c]=a)))),e&&'Snickers0KitKat0Starburst0GummyBears0Twix'.split(0).indexOf(s.join``)+1)

इसे यहाँ आज़माएँ।


PPCG में आपका स्वागत है, और पहला उत्तर! दुर्भाग्य से, मेरा मानना ​​है कि यह मान्य नहीं है; यह आदि के लिए एक सत्य मान देता है Snick, ears|Tमुझे लगता है कि आप .split('|')पहले जोड़कर इसे ठीक कर सकते हैं .indexOf
ETHproductions

यह अब मान्य है।
ओलिवर नी

@ETHproductions। यह ears|Tसमस्या नहीं है क्योंकि परीक्षण के मामलों में केवल पत्रों की अनुमति है। हालाँकि, आप सही हैं, के लिए Snick
sbisit


आप इस ट्रिक का उपयोग कई बाइट्स को बचाने के लिए भी कर सकते हैं ।
ETHproductions

1

रैकेट 446 बाइट्स

(let((lr list-ref)(ls list-set)(sl string-length)(ss substring)(l(string-split s "\n")))(let loop((changed #f))(for((i(sub1(length l))))
(let*((s(lr l i))(r(lr l(add1 i)))(n(sl s))(m(sl r)))(when(> n m)(set! l(ls l i(ss s 0 m)))(set! l(ls l(add1 i)
(string-append r(ss s m n))))(set! changed #t))))(if changed(loop #f)(begin(let*((l(for/list((i l))(string-trim i)))(l(string-join l))
(l(string-replace l " " "")))(ormap(λ(x)(equal? x l))cl))))))

Ungolfed:

(define (f s cl)
  (let ((lr list-ref)
        (ls list-set)
        (sl string-length)
        (ss substring)
        (l (string-split s "\n")))
    (let loop ((changed #f))
      (for ((i (sub1 (length l))))
        (let* ((s (lr l i))
               (r (lr l (add1 i)))
               (n (sl s))
               (m (sl r)))
               (when (> n m)
                 (set! l (ls l i (ss s 0 m)))
                 (set! l (ls l (add1 i)(string-append r (ss s m n))))
                 (set! changed #t))))
        (if changed (loop #f)
            (begin
              (let* ((l (for/list ((i l))
                          (string-trim i)))
                     (l (string-join l))
                     (l (string-replace l " " "")))
                (ormap (λ(x) (equal? x l)) cl)))
            ))))

परिक्षण:

(f "
              kers
           c
        i
       n
    S"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))


(f "  Kit K a t"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))

(f "St a
    r b u
         r st "
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))

(f "         Bear s
G ummy"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))

(f "T w i
                          x"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))

(f "SNICKERS"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))
(f " C   n
          y
   a   d"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))

(f "xiwT"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))

(f "S C I
       ss o
              r       s"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))

(f "Kit
Kat"
   (list "Snickers""KitKat""Starburst""GummyBears""Twix"))

आउटपुट:

#t
#t
#t
#t
#t
#f
#f
#f
#f
#t

मुझे लगता है कि आपने अपने उत्पादन का नाम "अनगोल्फड" रखा है
रोमन ग्रैफ़

हाँ। मैंने गलती सुधार ली है। धन्यवाद।
rnso

1

जावास्क्रिप्ट (ईएस 6), 139 बाइट्स

a=>/^(Snickers|KitKat|Starburst|GummyBears|Twix)$/.test(a.reduce((s,t)=>s.replace(/./g,(c,i)=>c<'!'?t[i]:t[i]<'!'?c:'!')).replace(/ /g,''))

अंतरिक्ष-पेड स्ट्रिंग्स की एक सरणी के रूप में इनपुट को स्वीकार करता है।


0

आर, 199 चार्ट

function(M){if(any(outer(z<-diff(apply(M,1,function(r)which.min(r==" ")))),z<0))return(F);C=c("Twix","KitKat","Starburst","Snickers","GummyBears");C[match(paste0(gsub(" ","",c(t(M))),collapse=""),C)}

इनपुट एक वर्ण मैट्रिक्स के रूप में है।

matchयह किस कैंडी की देखभाल करता है (यह पूंजीकरण भी जांचता है)।

यह जांचने के लिए कि पत्र एक "आरोही" या "अवरोही" अनुक्रम हैं, हमें बस यह जांचने की आवश्यकता है कि प्रत्येक पंक्ति में पहले गैर-अंतरिक्ष वर्ण (यदि वहाँ) के स्थान बढ़ते या घट रहे हैं। करने के लिए, यह हम

  • का उपयोग कर, प्रत्येक पंक्ति में एक nonspace चरित्र का पहला स्थान लें apply
  • ले लो diff। इसमें कुछ शून्य हो सकता है, अन्यथा सभी सकारात्मक या सभी नकारात्मक होने चाहिए
  • नाम दें diff z, और बाहरी उत्पाद को अपने साथ ले जाएं। यदि फ़ॉर पॉज़िटिव और नेगेटिव एंट्रीज़ को मिलाया जाता है, तो इसके बाहरी उत्पाद में कहीं न कहीं नेगेटिव एंट्री होगी। यदि हां, तो FALSE लौटें।

ध्यान दें कि मामलों की तरह

"    i "
"   w x"
"  T   "

एक खाली चरित्र वेक्टर (विशेष रूप से match"ट्विक्स" नहीं) पर लौटेगा , क्योंकि "ट्वसी" से मिलान करने की कोशिश की जाएगी।


0

पायथन 2.7, 254 बाइट्स

मुझे यकीन है कि यह अधिक गोल्फ हो सकता है। इनपुट लाइनों की एक सरणी है s

x=len
p=lambda a:x(a)-x(a.lstrip())
g=sorted
a=map(p,l)
j=''.join
z=[i.replace(' ','')for i in l]
if g(a)==a:q=j(z)
elif g(a)==a[::-1]:q=j(z[::-1])
else:q=''
if x(set(a))<x(a):q=''
print 1if q in('Snickers','KitKat','Starburst','GummyBears','Twix')else 0

यहाँ यह कोशिश करो!


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