할로윈을 준비하자


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

팔 시스 :

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

빈 줄이 없다고 가정 할 수 있습니까?
anonymous2

@ anonymous2, 입력이 비어 있지 않음
Daniel

답변:


0

Pyth-72 바이트

나는 모든 에지 케이스를 잡기를 바랍니다. 사탕 목록을 압축합니다.

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

테스트 스위트 .


1

자바 스크립트 (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))))))

언 골프 드 :

(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

자바 스크립트 (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. 여기에는 0이있을 수 있습니다. 그렇지 않으면 모두 긍정적이거나 모두 부정적이어야합니다
  • 이름을 지정하고 diff z외부 제품을 가져옵니다. diff가 양수와 음수를 혼합 한 경우 외부 제품 어딘가에 음수가 입력됩니다. 그렇다면 FALSE를 반환하십시오.

다음과 같은 경우에 유의하십시오.

"    i "
"   w x"
"  T   "

match"Twxi"와 일치하려고하기 때문에 빈 문자 벡터 (특히 "Twix"가 아님)를 반환합니다 .


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

여기 사용해보십시오!


입력을 문자열 배열 / 목록으로 사용할 수 있으므로 코드의 첫 번째 줄에서 입력을 분리 할 필요가 없습니다.
Daniel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.