ハロウィンの準備をしましょう


15

私はあなたのすべてについて知りませんが、私はハロウィーンの準備をしていません

彼女は自分が持っているキャンディのブランドを把握するのに助けが必要ですが、彼女はハロウィーンの前に終わらせることができないほど多くのキャンディを持っています。

彼女が持っている:

  • スニッカーズ
  • キットカット
  • スターバースト
  • グミベアーズ
  • トウィックス

入力

文字とスペースのみを含む複数行の文字列(またはその他の合理的な形式)。

出力

有効なキャンディーでない場合は偽の値、キャンディーである場合はどのキャンディーであるか。

キャンディーの決め方

上記のブランドのいずれかが記載されている場合、キャンディーは有効です。ただし、これは有効なキャンディーであるため、それほど単純ではありません。

K i t
       K a
           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

ファルシス:

1.
SNICKERS

2.
 C   n

   a   d y

3. 
xiwT

4.
S C I
       ss o
              r       s

5.
Kit
Kat

入力にスペースを埋め込むことはできますか?
Loovjo

また、エラーをスローすると、誤った値を返すとカウントされますか?
Loovjo

@Loovjo、はい、はい
ダニエル

空白行がないと想定できますか?
匿名2

@ anonymous2、入力は空になりません
ダニエル

回答:


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

これは現在有効です。
オリバー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))))))

ゴルフをしていない:

(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」という名前だと思う
ローマGRAFを

はい。私は間違いを訂正しました。ありがとう。
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

ここで試してみてください!


入力を文字列配列/リストとして受け取ることができるため、コードの最初の行で入力を分割する必要はありません。
ダニエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.