Hãy sẵn sàng cho Halloween


15

Tôi không biết về tất cả các bạn nhưng tôi không chuẩn bị cho Halloween, không bao giờ sẽ không bao giờ, nhưng hàng xóm của tôi là vậy, vì vậy chúng tôi sẽ giúp cô ấy.

Cô ấy cần giúp đỡ để tìm ra thương hiệu kẹo nào cô ấy có, nhưng cô ấy có rất nhiều kẹo mà cô ấy sẽ không thể hoàn thành trước Halloween.

Cô bé có:

  • Snickers
  • Sô cô la kitkat
  • Starburst
  • GummyBears
  • Kết hợp

Đầu vào

Một chuỗi nhiều dòng (hoặc bất kỳ dạng hợp lý nào khác) chỉ chứa các chữ cái và dấu cách.

Đầu ra

Giá trị giả nếu đó không phải là kẹo hợp lệ, hoặc đó là kẹo nếu đó là kẹo.

Làm thế nào để quyết định đó là kẹo nào

Một kẹo là hợp lệ nếu nó nói một trong những thương hiệu trên về nó. Tuy nhiên, nó không đơn giản, bởi vì đây là một loại kẹo hợp lệ:

K i t
       K a
           t

Một kẹo hợp lệ là một trong đó:

  • các chữ cái theo thứ tự từ trái sang phải
  • các chữ cái được viết hoa đúng
  • các chữ cái, đi từ trái sang phải, không cả sấn và đi xuống
  • các chữ cái có khoảng trắng được loại bỏ một trong những thương hiệu trên

Đây là , vì vậy mã ngắn nhất trong byte thắng!

Ví dụ

Sự thật:

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

Đầu vào có thể được đệm với không gian?
Loovjo

Ngoài ra, việc ném một lỗi được tính là trả về giá trị sai?
Loovjo

@Loovjo, có và có
Daniel

Chúng ta có thể giả sử không có dòng trống?
nặc

@ nặc danh2, đầu vào sẽ không trống
Daniel

Câu trả lời:


0

Pyth - 72 byte

Tôi hy vọng tôi bắt được tất cả các trường hợp cạnh. Sẽ cơ sở nén danh sách kẹo.

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

Phòng thử nghiệm .


1

JavaScript (ES6), 221 218 216 212 208 205 201 byte

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)

Hãy thử nó ở đây.


Chào mừng bạn đến với PPCG, và câu trả lời đầu tiên tuyệt vời! Thật không may, tôi không tin rằng điều này là hợp lệ; nó trả về một giá trị trung thực cho Snick, ears|Tv.v ... Tôi nghĩ bạn có thể khắc phục điều này bằng cách thêm vào .split('|')trước đó .indexOf.
Sản phẩm ETH

Điều này là hợp lệ bây giờ.
Oliver Ni

@ETHản xuất. Đây ears|Tkhông phải là vấn đề vì chỉ có các chữ cái được phép trong các trường hợp thử nghiệm. Tuy nhiên, bạn đã đúng, cho Snick.
sbisit


Bạn cũng có thể sử dụng thủ thuật này để lưu một vài byte.
Sản phẩm ETH

1

Vợt 446 byte

(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))))))

Ung dung:

(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)))
            ))))

Kiểm tra:

(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"))

Đầu ra:

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

Tôi nghĩ rằng bạn đã đặt tên đầu ra của mình là "Ungolfed"
Roman Gräf

Đúng. Tôi đã sửa chữa sai lầm. Cảm ơn.
vào

1

JavaScript (ES6), 139 byte

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

Chấp nhận đầu vào dưới dạng một chuỗi các chuỗi đệm không gian.


0

R, 199 ký tự

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)}

Đầu vào ở dạng ma trận ký tự.

matchquan tâm đến loại kẹo nào (nó cũng kiểm tra viết hoa).

Để kiểm tra xem các chữ cái là một chuỗi "tăng dần" hay "giảm dần", chúng ta chỉ cần kiểm tra xem các vị trí của ký tự không phải không gian đầu tiên (nếu có) trong mỗi hàng đang tăng hay giảm. Để làm, điều này chúng tôi

  • lấy vị trí đầu tiên của một ký tự không gian trong mỗi hàng, sử dụng apply
  • lấy diff. Điều này có thể có một số 0 trong đó, nếu không thì tất cả đều dương hoặc tất cả âm
  • Đặt tên diff zvà lấy sản phẩm bên ngoài với chính nó. Nếu khác biệt có các mục tích cực và tiêu cực, sẽ có một mục tiêu cực ở đâu đó trong sản phẩm bên ngoài của nó. Nếu vậy, trả lại SAI.

Lưu ý rằng các trường hợp như

"    i "
"   w x"
"  T   "

sẽ trả về một vectơ ký tự trống (đặc biệt không phải là "Twix"), vì matchsẽ cố gắng khớp với "Twxi".


0

Python 2.7, 254 byte

Tôi chắc chắn rằng điều này có thể được chơi golf nhiều hơn. Đầu vào là một mảng các dòng 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

Hãy thử nó ở đây!


Bạn có thể lấy đầu vào dưới dạng một mảng / danh sách chuỗi, do đó không cần phải phân tách nó trong dòng đầu tiên của mã của bạn.
Daniel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.