让我们为万圣节做准备


15

我不知道你们所有人,但我没有为万圣节做准备-从来没有做过-但我的邻居是,所以我们会帮助她的。

她需要帮助来弄清楚自己拥有的糖果品牌,但是她的糖果太多了,她在万圣节前无法完成。

她有:

  • 士力架
  • 奇巧
  • 星爆
  • 小熊软糖
  • 扭曲

输入值

仅包含字母和空格的多行字符串(或任何其他合理形式)。

输出量

如果不是有效的糖果,则为伪造的值;如果不是糖果,则为虚假的糖果。

如何确定是哪种糖果

如果糖果上面写有上述品牌之一,则该糖果是有效的。但是,这并不是那么简单,因为这是有效的糖果:

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,是的,是的
Daniel Daniel

我们可以假设没有空行吗?
匿名

@ anonymous2,输入将不会为空
Daniel Daniel

Answers:


0

Pyth-72个字节

我希望我能抓住所有的情况。将基本压缩糖果清单。

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

测试套件


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 Snickears|T等我想你可以通过添加解决这个问题.split('|')之前.indexOf
ETHproductions '16

现在有效。
奥利弗·倪

@ETHproductions。这ears|T不是问题,因为在测试用例中只允许使用字母。但是,您是正确的Snick
sbisit '16


您也可以使用此技巧来保存几个字节。
ETHproductions 16-10-23

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

取消高尔夫:

(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”
罗马格拉夫

是。我已改正错误。谢谢。
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   "

由于match将尝试匹配“ Twxi” ,因此将返回一个空字符向量(尤其不是“ Twix”)。


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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.