Sein oder nicht sein

28

Bestimmen Sie in möglichst wenigen Bytes, ob die beiden angegebenen Werte mit einem der folgenden Werte übereinstimmen:

Erster Wert

2      string or integer - whichever you prefer
to     case insensitive
too    case insensitive
two    case insensitive
t0     case insensitive (t zero)

Zweiter Wert

b      case insensitive
be     case insensitive
bee    case insensitive
b3     case insensitive

Beispiele

2          'Bee'            true
'2'        'b'              true
'not to'   'be'             false
'that is'  'the question'   false
rybo111
quelle
5
Nein, 33t? "T0 b3"
Handarbeit
7
Warum muss es eine Funktion sein ?
Dennis
2
@ Rybo111 Nun! Das scheint, als hätten sie das Konzept damals nicht verstanden;)
Draco18s
13
Dieser bittet um eine Shakespeare- Lösung. Nicht konkurrierend natürlich, da die Byteanzahl zweifellos sehr groß sein würde ...
Darrel Hoffman
1
@ LuisMendo OK. Beides ist in Ordnung. Beides zu unterstützen ist nicht notwendig.
Rybo111

Antworten:

34

Shakespeare , 4778 Bytes

Hinweis: Diese Antwort ist kein ernstzunehmender Konkurrent

To Be or Not To Be, This is the Answer.

Hamlet, the main player in our story.
Horatio, Hamlet's guide through his internal struggles.
The Ghost, a handsome honest bold fair gentle king.
Claudius, the worthless usurper of the throne.
Ophelia, who Hamlet always writes two.
Polonius, the unfortunate third man caught between Hamlet and Claudius.
Brabantio, the greater.
Banquo, the lesser.
Emilia, the greater.
Egeus, the lesser.
Othello, the greater.
Orsino, the lesser.
Tybalt, the greater.
Titania, the lesser.
Valentine, who doubled is greater.
Viola, who doubled is lesser.

Act I: A simple question in so many words.

Scene I: Hamlet passes judgment over the cast.

[Enter Hamlet and Horatio]
Hamlet:
    Thou art the sum of a good healthy sunny warrior and a lovely day.
[Exit Horatio]
[Enter Claudius]
Hamlet:
    Thou art the sum of The Ghost and warm cute brave trustworthy hero.
[Exit Claudius]
[Enter Ophelia]
Hamlet:
    Thou art the sum of Claudius and a smooth spaceman.
[Exit Ophelia]
[Enter Polonius]
Hamlet:
    Thou art the sum of Ophelia and a plum.
[Exit Polonius]
[Enter Brabantio]
Hamlet:
    Thou art the sum of The Ghost and the sum of The Ghost and a rich kingdom.
[Exit Brabantio]
[Enter Banquo]
Hamlet:
    Thou art the sum of Brabantio and The Ghost.
[Exit Banquo]
[Enter Emilia]
Hamlet:
    Thou art the sum of Brabantio and the sum of joy and a gentle girl.
[Exit Emilia]
[Enter Egeus]
Hamlet:
    Thou art the sum of Emilia and The Ghost.
[Exit Egeus]
[Enter Othello]
Hamlet:
    Thou art the sum of Emilia and the sum of a cunning lover and the sweetest golden embroidered rose.
[Exit Othello]
[Enter Orsino]
Hamlet:
    Thou art the sum of Othello and The Ghost.
[Exit Orsino]
[Enter Tybalt]
Hamlet:
    Thou art the sum of Othello and the sum of happiness and fair fine heaven.
[Exit Tybalt]
[Enter Titania]
Hamlet:
    Thou art the sum of Tybalt and The Ghost.
[Exit Titania]
[Enter Valentine]
Hamlet:
    Thou art the sum of Tybalt and the sum of a happy day and a pony.
[Exit Valentine]
[Enter Viola]
Hamlet:
    Thou art the sum of Valentine and The Ghost.
[Exeunt]

Scene II: The beginning of Horatio's interrogation.
[Enter Hamlet and Horatio]
Hamlet:
Horatio:
    Open your mind.
    Art thou as good as Tybalt?  If so, let us proceed to Scene IV.
    Art thou as good as Titania?  If so, let us proceed to Scene IV.
    Art thou as good as Ophelia?  If not, let us proceed to Scene XII.


Scene III: Are we to?
Horatio:
    Open your mind.
    Art thou as good as The Ghost?  If so, let us proceed to Scene VII.
    Let us proceed to Scene XII.

Scene IV: Can we go further than t?
Horatio:
    Open your mind.
    Art thou as good as Claudius?  If so, let us proceed to Scene III.
    Art thou as good as Valentine?  If so, let us proceed to Scene VI.
    Art thou as good as Viola?  If so, let us proceed to Scene VI.
    Art thou as good as Othello?  If so, let us proceed to Scene V.
    Art thou as good as Orsino?  If not, let us proceed to Scene XII.

Scene V: Oone oor twoo?
Horatio:
    Open your mind.
    Art thou as good as The Ghost?  If so, let us proceed to Scene VII.
    Art thou as good as Othello?  If so, let us proceed to Scene III.
    Art thou as good as Orsino?  If so, let us proceed to Scene III.
    Let us proceed to Scene XII.

Scene VI: Hamlet desperately searches for whOo?.
Horatio:
    Open your mind.
    Art thou as good as Othello?  If so, let us proceed to Scene III.
    Art thou as good as Orsino?  If so, let us proceed to Scene III.
    Let us proceed to Scene XII.

Scene VII: Knowing to, what to do?
Horatio:
    Open your mind.
    Art thou as good as Brabantio?  If so, let us proceed to Scene VIII.
    Art thou as good as Banquo?  If not, let us proceed to Scene XII.

Scene VIII: Learning what to Bleive.
Horatio:
    Open your mind.
    Art thou as good as me?  If so, let us proceed to Scene XI.
    Art thou as good as Emilia?  If so, let us proceed to Scene X.
    Art thou as good as Egeus?  If so, let us proceed to Scene X.
    Art thou as good as Polonius?  If not, let us proceed to Scene XII.

Scene IX: The Eend is nigh?
Horatio:
    Open your mind.
    Art thou as good as me?  If so, let us proceed to Scene XI.
    Let us proceed to Scene XII.

Scene X: Wee may havee succeeeedeed.
Horatio:
    Open your mind.
    Art thou as good as Emilia?  If so, let us proceed to Scene IX.
    Art thou as good as Egeus?  If so, let us proceed to Scene IX.
    Art thou as good as me?  If not, let us proceed to Scene XII.

Scene XI: Hamlet is at peace.
Horatio:
    Thou art a beacon of happiness. 
    Let us proceed to Scene XIII

Scene XII: The demons have won.
Horatio:
    Thou art nothing.

Scene XIII: Hamlet opens up.
Horatio:
    Hamlet! Open your heart.
[Exeunt]

Gibt 0 aus, wenn falsch, 1, wenn wahr.

Dies könnte leicht kürzer sein (und wenn die Leute es wirklich wollen, könnten die Wortlängen gekürzt werden), aber dies wäre ein Schlag ins Gesicht des guten alten Willens. Ich habe immer gedacht, dass Horatio der unbesungene Held von Hamlet ist, also habe ich sichergestellt, dass er derjenige ist, der Hamlet den intensiven Monolog liefert, in dem Hamlet letztendlich beweisen muss, dass er so gut ist wie Horatio (der die Newline repräsentiert).

Der Code selbst ist ziemlich einfach. Alle Zeichen ohne Hamlet sind ASCII-Werte (in der Reihenfolge:), newline,space,0,2,3,B,b,E,e,O,o,T,t,V,vund der Code ist dann eine einfache Zustandsmaschine (insbesondere ein DFA ), die in Scene XIeinen Akzeptanzzustand und Scene XIIeinen Zurückweisungszustand übergeht.

Dies ist die Grundeinstellung, an der ich gearbeitet habe.

Nachdem ich das gemacht hatte, steckte ich es einfach in Shakespeare ein und nutzte die Tatsache, dass ich in den nächsten Zustand fallen konnte, wenn sie numerisch benachbart waren. Ich habe es nur mit der Version von Shakespeare getestet, die ich im Titel verlinkt habe, aber ich glaube, wir definieren eine Sprache durch eine Implementierungs-Iirc.

Kevin W.
quelle
2
Als ich diese Frage stellte, hätte ich nie gedacht, dass ich eine so komplexe und doch sehr passende Antwort bekommen würde!
Rybo111
18

Retina , 28

  • 1 Byte gespart dank @ MartinBüttner.

Wahrscheinlich meine schnellste Code-Golf-Antwort - 9 Minuten nach OP.

Eingabeparameter sind durch Kommas getrennt. Die Ausgabe ist 1 für wahr und 0 für falsch.

i`^(2|t[ow]?o|t0),b(e?e?|3)$

Probieren Sie es online aus.

Digitales Trauma
quelle
Ich liebe es immer, wenn das Beheben von Fehlern Bytes spart!
Neil
5
@ Neil yep - gelöschter Code ist Debug-Code :)
Digital Trauma
1
@DigitalTrauma In unserer schönen neuen Welt kann wirklich nur ausreichend bußfertiger Code zugelassen werden.
FryAmTheEggman
7

Pyth, 34 Bytes

.A}Lrw1c2c." Wô-WûÄæ­§Òé
}

Probieren Sie es online aus: Demonstration

Erläuterung:

          ."...   packed string, gets decoded to: "2 TO TOO TWO T0 B BE BEE B3"
         c        split by spaces
       c2         split into 2 lists: [['2', 'TO', 'TOO', 'TWO', 'T0'], 
                                       ['B', 'BE', 'BEE', 'B3']]
   L              for each list:
     w               read a line
    r 1              convert it to uppercase
  }                  and test if it is part of this list list
.A                test if both return true
Jakube
quelle
Irgendwie wird die Zeichenfolge unterbrochen, wenn ich den Code vor der gepackten Zeichenfolge entferne.
Busukxuan
@FryAmTheEggman habe ich getan. Die Ausgabe war "! $ 7C <Q / = / LF $ VF4K: .- E"
busukxuan
@FryAmTheEggman Ich habe es ein paar Mal versucht und den Permalink verglichen, es fehlte etwas. Es scheint, weil ich kopiert und eingefügt habe, anstatt den Link in der Antwort zu verwenden. Ich wusste nicht, dass Sie einige Bytes verpassen, wenn Sie gepackte Zeichenfolgen in SE einfügen.
Busukxuan
@busukxuan Ja, mir ist gerade dasselbe aufgefallen: P SE verbirgt leider die meisten nicht druckbaren Zeichen.
FryAmTheEggman
1
Dies scheint die Bedingung (t Null) für den ersten Wert
Nic Robertson
4

Pyth, 41 Bytes

&xrw0c"2 to too two t0"dxrw0c"b be bee b3

Probieren Sie es hier aus!

Einfache Suche nach Listen. Gibt eine leere Liste als falschen Wert und eine nicht leere Liste als wahren Wert aus.

Sieht so aus oder so, ich mag diesen nicht wirklich.

Denker
quelle
4

Oracle SQL 11.2, 86 Byte

SELECT 1 FROM DUAL WHERE:1 IN('2','to','too','two','t0')AND:2 IN('b','be','bee','b3');

Gibt eine Zeile für wahrheitsgemäß und keine Zeile für falsch zurück.

Jeto
quelle
3

05AB1E , 39 45 Bytes

Code:

“2€„…«Œ† t0“' ¡)Ilrk\U“b€ïÍÝ b3“' ¡)Ilrk\>X>*

Probieren Sie es online!

Verwendet CP-1252-Codierung. Wahrheit ist, wenn eine Zahl ausgegeben wird, und falsch, wenn nichts ausgegeben wird.

Nicht konkurrierende Version (39 Bytes) , funktioniert mit der neuesten Version:

“2€„…«Œ† t0“ð¡)IlkU“b€ïÍÝ b3“ð¡)Ilk>X>*
Adnan
quelle
3

ES6, 56 48 45 Bytes

(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/i.test(a)

5 Bytes gespart dank @ user81655. 3 Bytes durch weitere Optimierung eingespart. Dank @Patrick Roberts konnten weitere 3 Bytes eingespart werden.

t[wo]?o ist die kürzeste Regex, die ich mir vorstellen kann, um alle drei Homophone zu erreichen.

Wenn die beiden Werte als einzelnes Parameterarray übergeben werden dürfen, kann der restliche Parameter ein normaler Parameter werden und weitere 5 Byte einsparen.

Neil
quelle
@ user81655 Nicht schlecht, aber ich habe es weiter verbessert.
Neil
1
Wenn Sie den Parameter rest für die Eingabe verwenden, werden 3 Bytes gespart:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
Patrick Roberts
@PatrickRoberts Huh, ich hatte darüber nachgedacht, aber ich muss mich verrechnet haben, weil ich nicht dachte, dass ich etwas speichere.
Neil
Die iFlagge fehlt.
Florent
@Florent Danke, dass du das entdeckt hast. (Vielleicht sollten die Beispiele nicht alle Kleinbuchstaben sein ...)
Neil
3

Perl 6, 45 44 Bytes

Vielen Dank an die Leute im IRC, die mir geholfen haben, Golf zu spielen

{@_~~(~2|/:i^t[0|oo?|wo]$/,/:i^b[ee?|3]?$/)}

Verwendung

> my &f = {@_~~(~2|/:i^t[0|oo?|wo]$/,/:i^b[ee?|3]?$/)}
-> *@_ { #`(Block|309960640) ... }
> f("2", "Bee")
True
> f("2", "b")
True
> f("not to", "be")
False
> f("that is", "the question")
False

Nicht konkurrierende Alternative, 54 Bytes

Dies ist eine schöne Alternative zu den oben genannten, wenn Sie denken, Regexes sind eklig, aber es ist ein bisschen länger. Es könnte ein paar Bytes länger sein, aber da es nicht konkurrierend ist, lasse ich es wie es ist.

{@_».lc~~(qw<to too two t0 2>.any,<b be bee b3>.any)}
Hotkeys
quelle
1
Für alle, die sich das ansehen [und Perl 6 nicht kennen und ]eine nicht erfassende Gruppe in einem regulären Ausdruck bezeichnen, der wie (?:und )in Perl 5 geschrieben würde . Um eine Zeichenklasse zu erhalten, müssen Sie sie in spitze Klammern <[und setzen ]>.
Brad Gilbert b2gills
b2gills ++, ich habe nicht einmal darüber nachgedacht, die Unterschiede in regulären
Ausdrücken von
Ich hatte eine Ablehnung, weil jemand das nicht wusste, also weise ich immer darauf hin.
Brad Gilbert b2gills
Gibt es eine PP & CG-Regel, die Sie davon abhält, das elegantere Golf als eigene Antwort zu veröffentlichen? Ich denke eine etwas längere * Version wäre es wert. * Ich erkläre hiermit, dass elegante Golf-Redewendungen beinhalten, dass Whitespace nicht berücksichtigt (nicht mitgezählt) wird.
Raiph
3

Python 2.7, 133 Bytes

def e(a, b):
        c, d = """2,too,to,t0,two""","""be,b,bee,b3"""
        return a.lower() in c and b.lower() in d

print e('2', 'bee')

Ich bin nicht sicher, ob wir Lösungen veröffentlichen sollen, wenn es eine kleinere Version in den Kommentaren gibt, aber hier ist meine Version in Python.

Edit: Ohne die Funktion sind es nur 73 Bytes (und das sind nicht mal die besten Antworten. Verzeih mir, dass ich neu bin

a, b = "to", "bee"
print a in "2 too to t0 two" and b in "be b bee b3"
TheLateOne
quelle
2
Willkommen bei PPCG! Wenn Sie Zeit damit verbracht haben, eine Antwort zu schreiben und zu golfen und keine Plagiate (ohne Zuschreibung) gemacht haben, können Sie Ihre Antwort gerne posten!
Digital Trauma
Oh, und die meisten Sprachen haben hier eine Frage im Stil von Golftipps. Python ist keine Ausnahme
Digital Trauma
Beachten Sie, dass dies mit der Eingabe von 2(integer)
wnnmaw
3
Dies gibt True auch für e('oo', '3')und ähnliche Teilzeichenfolgen zurück .
Manatwork
1
@TheLateOne, Python ist nicht besonders gut zum Golfen geeignet, daher werden Sie die Golfsprachen wie Pyth oder Cjam so gut wie nie schlagen, aber in den Bereichen 50, 60 oder 70 anzukommen, ist für uns bei den meisten Herausforderungen ziemlich gut. Lass dich nicht entmutigen!
wnnmaw
2

Ruby, 53 55 52 Bytes

f=->(a,b){/^(2|t[wo]?o|t0)$/i=~a&&/^b(e?e?|3)$/i=~b}

Ich bin ehrlich, das ist mein erster Versuch, ein Problem zu lösen.

Funktionsaufruf in Form von f.call(firstValue, secondValue)

0ist Wahrheit, nilist falsch.

Testen Sie es hier

Herr Public
quelle
1

Japt, 36 Bytes

!Uv r"2|t(0|wo|oo?)" «Vv r"b(e?e?|3)

Vielleicht habe ich etwas verpasst, aber das sollte völlig funktionieren. Online testen!

ETHproductions
quelle
1

Pyth, 39 Bytes

-3 Bytes von @FryAmtheEggman

.A.b}rN1cY\@Q,."0Wѳ5YYÅJB"."3EW´l¢ï

Probieren Sie es hier aus .

Lirtosiast
quelle
Ich werde es reparieren, wenn ich an einen Computer komme.
Lirtosiast
1

Python, 85 83 Bytes

@Manatwork hat mir zwei Bytes gespart.

Das ist ziemlich brachial. Ich werde als nächstes auf Regex-Lösungen eingehen.

lambda a,b:a.lower()in'2 to too two t0'.split()and b.lower()in['b','be','bee','b3']
Ogaday
quelle
1
Für das erste Array: '2 to too two t0'.split()Für das zweite Array macht das keinen Unterschied.
Manatwork
Verdammt, ja, ich habe es versucht '2,to,too,two,t0'.split(','). Wie dumm von mir.
Ogaday
1

PowerShell v3 +, 74 bis 70 Byte

param($a,$b)+($a-in-split'2 to too two t0')*($b-in-split'b be bee b3')

Regex wird nicht verwendet. Nimmt zwei Eingaben an, überprüft, ob das erste -inArray vom -splitOperator dynamisch erstellt wurde , konvertiert diesen Booleschen Wert in einen int-Wert mit +und multipliziert diesen *mit der Überprüfung, ob -indas zweite Array das zweite Array ist (wodurch der Boolesche Wert automatisch als int umgewandelt wird ). Das funktioniert denn x*y == x&ywenn xund ykann nur 1oder sein 0.

Bei PowerShell wird standardmäßig die Groß- und Kleinschreibung nicht berücksichtigt, daher erhalten Sie diese kostenlos. Wird ausgegeben 0bzw. 1für Falsch / Wahrhaftigkeit. Benötigt v3 oder neuer für den -inBetreiber.

Bearbeiten - 4 Bytes mit unary -split gespeichert

AdmBorkBork
quelle
0

Groovy, 52 Bytes

f={x,y->"$x $y"==~"(?i)(2|t([wo]o?|0)) (b(ee?|3)?)"}

==~ ist ein cooler Regex-Operator in Groovy, der auf Gleichheit prüft.

Tests:

Regex101- Test.

assert f('2', 'Bee') == true
assert f('2', 'b') == true
assert f('not to', 'be') == false
assert f('that is', 'the question') == false
J Atkin
quelle
Was passiert , wenn xist tund yist 0b?
Neil
Was meinst du?
J Atkin
Ich würde erwarten f('t', '0b'), falsch zu sein, aber ich bin besorgt, dass Ihr Code true zurückgeben würde.
Neil
Ohhhh, ok, ich habe es verstanden. Ja, es würde das Falsche zurückbringen.
J Atkin
0

MATL , 32 41 43 Bytes

jk'^(2|t[ow]?o|t0),b(e?e?|3)$'XX

Gleicher Ansatz wie die Retina-Antwort von @ DigitalTrauma . Eingaben werden durch ein Komma getrennt. Die Ausgabe von Truthy ist eine Zeichenfolge, bei der die beiden Eingaben in Kleinbuchstaben geschrieben sind. Falsch ist keine Ausgabe.

Probieren Sie es online!

j                                % input as a string
k                                % convert to lowercase
'^(2|t[ow]?o|t0),b(e?e?|3)$'     % regular expression to match the two inputs
XX                               % match regular expression
Luis Mendo
quelle
0

C # 6, 132 Bytes

bool t(string x,string y)=>new[]{"2","to","too","two","t0"}.Contains(x.ToLower())&&new[]{"b","be","bee","b3"}.Contains(y.ToLower());

Ungolfed-Version (nur geringfügig besser lesbar):

bool t(string x, string y) => new[] { "2", "to", "too", "two", "t0" }.Contains(x.ToLower()) && new[] { "b", "be", "bee", "b3" }.Contains(y.ToLower());
Farhan Anam
quelle
0

Python 2, 67 Bytes

Verwendet den regulären Ausdruck von Digital Trauma. Die Eingabe ist eine einzelne Zeichenfolge, die durch ein Komma getrennt ist. Ich bin mir nicht sicher, ob dieses Format für die Eingabe zulässig ist ...

import re
f=lambda x:bool(re.match('^(2|t[ow]?o|t0),b(e?e?|3)$',x))
mbomb007
quelle