เตรียมตัวให้พร้อมสำหรับวันฮาโลวีน


15

ฉันไม่รู้เกี่ยวกับคุณทั้งหมด แต่ฉันไม่ได้เตรียมสำหรับวันฮัลโลวีน - - ไม่เคยทำ - - แต่เพื่อนบ้านของฉันคือดังนั้นเราจะช่วยเธอ

เธอต้องการความช่วยเหลือในการหาแบรนด์ขนมที่เธอมี แต่เธอมีขนมมากมายที่เธอไม่สามารถทำก่อนวันฮัลโลวีนได้

เธอมี:

  • Snickers
  • คิทแคท
  • ดาวกระจาย
  • เยลลี่หมี
  • Twix

อินพุต

สตริงหลายบรรทัด (หรือรูปแบบที่เหมาะสมอื่น ๆ ) ที่มีตัวอักษรและช่องว่างเท่านั้น

เอาท์พุต

ค่า falsy ถ้าไม่ใช่ลูกอมที่ถูกต้องหรือลูกอมใดเป็นลูกอม

วิธีการตัดสินใจลูกอมมันคืออะไร

ขนมที่ถูกต้องถ้ามันบอกว่าหนึ่งในแบรนด์ดังกล่าวข้างต้น อย่างไรก็ตามมันไม่ง่ายอย่างนั้นเพราะนี่เป็นขนมที่ถูกต้อง:

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

อินพุตสามารถเสริมด้วยช่องว่างได้หรือไม่?
Loovjo

นอกจากนี้การขว้างข้อผิดพลาดจะนับเป็นการคืนค่าที่ผิดพลาดหรือไม่?
Loovjo

@ Loovjo ใช่และใช่
Daniel

เราสามารถสมมติไม่มีบรรทัดว่างได้หรือไม่?
ไม่ระบุชื่อ 2

@ anonymous2 ข้อมูลจะไม่ว่างเปล่า
Daniel

คำตอบ:


0

Pyth - 72 ไบต์

ฉันหวังว่าฉันจะจับเคสทั้งหมด จะบีบอัดรายการลูกกวาดฐาน

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

Test Suite


1

JavaScript (ES6), 221 218 216 212 208 205 201 ไบต์

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 และคำตอบแรกที่ยอดเยี่ยม! น่าเสียดายที่ฉันไม่เชื่อว่าสิ่งนี้ถูกต้อง ก็จะส่งกลับค่า truthy สำหรับSnick, ears|Tฯลฯ ผมคิดว่าคุณสามารถแก้ไขปัญหานี้โดยการเพิ่มก่อน.split('|') .indexOf
ETHproductions

สิ่งนี้ใช้ได้ตอนนี้
Oliver Ni

@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

ฉันคิดว่าคุณตั้งชื่อผลลัพธ์ของคุณว่า "Ungolfed"
Roman Gräf

ใช่. ฉันแก้ไขข้อผิดพลาดแล้ว ขอบคุณ
rnso

1

JavaScript (ES6), 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

R, 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ดูแลซึ่งลูกอมมันเป็น (มันจะตรวจสอบตัวพิมพ์ใหญ่เกินไป)

ในการตรวจสอบว่าตัวอักษรเป็นลำดับ "น้อยไปมาก" หรือ "มากไปหาน้อย" เราเพียงแค่ต้องตรวจสอบว่าตำแหน่งของอักขระที่ไม่ใช่ช่องว่างตัวแรก (ถ้ามี) ในแต่ละแถวเพิ่มขึ้นหรือลดลง ในการทำเช่นนี้เรา

  • ใช้ตำแหน่งแรกของอักขระที่ไม่มีพื้นที่ว่างในแต่ละแถวโดยใช้ apply
  • diffใช้ นี่อาจมีค่าศูนย์อยู่บ้างไม่เช่นนั้นจะเป็นค่าบวกหรือค่าลบทั้งหมด
  • ชื่อdiff zและใช้ผลิตภัณฑ์ด้านนอกด้วยตัวเอง หากความแตกต่างมีการรวมรายการบวกและลบจะมีรายการเชิงลบอยู่ที่ไหนสักแห่งในผลิตภัณฑ์ชั้นนอก ถ้าเป็นเช่นนั้นกลับ FALSE

โปรดทราบว่ากรณีที่ชอบ

"    i "
"   w x"
"  T   "

จะคืนค่าเวกเตอร์อักขระว่าง (โดยเฉพาะอย่างยิ่งไม่ใช่ "Twix") เนื่องจากmatchจะพยายามจับคู่ "Twxi"


0

Python 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

ลองที่นี่!


คุณสามารถรับอินพุตเป็นอาร์เรย์สตริง / รายการดังนั้นไม่จำเป็นต้องแยกมันในบรรทัดแรกของรหัสของคุณ
Daniel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.