Machen wir uns bereit für Halloween

15

Ich weiß nicht alles über Sie, aber ich bereite mich nicht auf Halloween vor - habe es nie getan -, aber meine Nachbarin ist es, also helfen wir ihr.

Sie braucht Hilfe, um herauszufinden, welche Süßigkeitsmarke sie hat, aber sie hat so viel Süßigkeiten, dass sie nicht in der Lage wäre, vor Halloween fertig zu werden.

Sie hat:

  • Snickers
  • KitKat
  • Starburst
  • Gummibärchen
  • Twix

Eingang

Eine mehrzeilige Zeichenfolge (oder eine andere sinnvolle Form), die nur Buchstaben und Leerzeichen enthält.

Ausgabe

Ein falscher Wert, wenn es sich nicht um eine gültige Süßigkeit handelt oder um welche Süßigkeit es sich handelt, wenn es sich um eine Süßigkeit handelt.

Wie man entscheidet, welche Süßigkeit es ist

Eine Süßigkeit ist gültig, wenn eine der oben genannten Marken darauf steht. Es ist jedoch nicht so einfach, denn dies ist eine gültige Süßigkeit:

K i t
       K a
           t

Eine gültige Süßigkeit ist eine, bei der:

  • Die Buchstaben sind von links nach rechts geordnet
  • Die Buchstaben werden richtig groß geschrieben
  • die Buchstaben, von links nach rechts, nicht sowohl auf- und absteigen
  • Die Buchstaben ohne Leerzeichen gehören zu den oben genannten Marken

Das ist , also gewinnt der kürzeste Code in Byte!

Beispiele

Wahrheiten:

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
Daniel
quelle
Kann die Eingabe mit Leerzeichen aufgefüllt werden?
Loovjo
Gilt das Auslösen eines Fehlers auch als Rückgabe eines falschen Werts?
Loovjo
@ Loovjo, ja und ja
Daniel
Können wir keine Leerzeilen annehmen?
anonymous2
@ anonymous2, die Eingabe wird nicht leer sein
Daniel

Antworten:

0

Pyth - 72 Bytes

Ich hoffe, ich habe alle Randfälle abgefangen. Wird die Süßigkeitenliste komprimieren.

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

Test Suite .

Maltysen
quelle
1

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

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)

Probieren Sie es hier aus.

sbisit
quelle
Willkommen bei PPCG und tolle erste Antwort! Leider glaube ich nicht, dass dies gültig ist; Es gibt einen wahren Wert für Snick, ears|Tusw. zurück. Ich denke, Sie können dies beheben, indem Sie .split('|')vorher hinzufügen .indexOf.
ETHproductions
Dies ist jetzt gültig.
Oliver Ni
@ETHproductions. Das ears|Tist nicht das Problem, da in Testfällen nur Buchstaben erlaubt sind. Sie haben jedoch Recht, z Snick.
Bis zum
Mit diesem Trick können Sie auch mehrere Bytes speichern.
ETHproductions
1

Racket 446 Bytes

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

Testen:

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

Ausgabe:

#t
#t
#t
#t
#t
#f
#f
#f
#f
#t
rnso
quelle
Ich glaube, Sie haben Ihre Ausgabe "Ungolfed" genannt
Roman Gräf
Ja. Ich habe den Fehler behoben. Vielen Dank.
RNSO
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,''))

Akzeptiert Eingaben als Array von mit Leerzeichen aufgefüllten Zeichenfolgen.

Neil
quelle
0

R 199 Zeichen

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

Die Eingabe erfolgt in Form einer Zeichenmatrix.

matchkümmert sich um welche Süßigkeiten es ist (es prüft auch die Großschreibung).

Um zu überprüfen, ob die Buchstaben eine "aufsteigende" oder "absteigende" Folge sind, müssen wir nur überprüfen, ob die Positionen des ersten nicht-Leerzeichens (falls vorhanden) in jeder Zeile zunehmen oder abnehmen. Dazu haben wir

  • nimm die erste Stelle eines Nicht-Leerzeichens in jeder Zeile mit apply
  • nimm die diff. Dies könnte eine Null enthalten, andernfalls sollte entweder alles positiv oder alles negativ sein
  • Nennen Sie die diff zund nehmen Sie das äußere Produkt mit sich. Wenn das Diff positive und negative Einträge gemischt hat, gibt es irgendwo in seinem äußeren Produkt einen negativen Eintrag. Wenn ja, geben Sie FALSE zurück.

Beachten Sie, dass Fälle wie

"    i "
"   w x"
"  T   "

matchGibt einen leeren Zeichenvektor zurück (insbesondere nicht "Twix"), da versucht wird, "Twxi" zu entsprechen.

JDL
quelle
0

Python 2.7, 254 Bytes

Ich bin mir sicher, dass man mehr Golf spielen kann. Die Eingabe ist ein Array von Zeilen 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

Probieren Sie es hier aus!

DerInitializer
quelle
Sie können die Eingabe als Zeichenfolgenarray / -liste verwenden, sodass Sie sie nicht in die erste Codezeile aufteilen müssen.
Daniel