Być albo nie być


28

W jak najmniejszej liczbie bajtów sprawdź, czy podane dwie wartości odpowiadają jednej z następujących wartości:

Pierwsza wartość

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

Druga wartość

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

Przykłady

2          'Bee'            true
'2'        'b'              true
'not to'   'be'             false
'that is'  'the question'   false

5
N0 l33t? „
T0

7
Dlaczego to musi być funkcja ?
Dennis

2
@ rybo111 Cóż! Wygląda na to, że wtedy nie zrozumieli tej koncepcji;)
Draco18s,

13
To błaga o rozwiązanie Szekspira . Oczywiście nie konkuruje, bo liczba bajtów byłaby niewątpliwie ogromna ...
Darrel Hoffman

1
@LuisMendo OK. Albo jedno jest w porządku. Wspieranie obu nie jest konieczne.
rybo111

Odpowiedzi:


34

Szekspir , 4778 bajtów

Uwaga: ta odpowiedź nie jest poważnym konkurentem

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]

Zwraca 0, jeśli fałsz, 1, jeśli prawda.

Może to być z pewnością krótsze (a jeśli ludzie naprawdę tego chcą, długość słowa może zostać zmniejszona), ale zrobienie tego byłoby uderzeniem w twarz dobrej woli. Zawsze czułem, że Horatio jest nieznanym bohaterem Hamleta, więc upewniłem się, że to on wygłosił intensywny monolog Hamletowi, gdzie Hamlet musi ostatecznie udowodnić, że jest tak dobry jak Horatio (który reprezentuje nową linię).

Sam kod jest dość prosty. Wszystkie znaki bez Hamleta są wartościami ascii (w kolejności:), newline,space,0,2,3,B,b,E,e,O,o,T,t,V,va następnie kod jest prostą maszyną stanów (w szczególności DFA ), która przechodzi Scene XIw stan akceptacji i Scene XIIstan odrzucenia.

To jest podstawowy, z którego pracowałem.

Po zrobieniu tego, po prostu podłączyłem go do Szekspira, wykorzystując fakt, że mogłem przejść do następnego stanu, gdy były liczbowo przyległe. Testowałem go tylko z wersją Szekspira, do której podałem tytuł, ale wierzę, że definiujemy język przez implementację iirc.


2
Kiedy zadałem to pytanie, nigdy nie spodziewałem się, że otrzymam tak złożoną, a jednocześnie bardzo trafną odpowiedź!
rybo111

18

Retina , 28

  • 1 bajt zapisany dzięki @ MartinBüttner.

Całkiem możliwe, że moja najszybsza odpowiedź na kod-golfa - 9 minut po OP.

Parametry wejściowe są oddzielone przecinkami. Wyjście to 1 dla prawdy i 0 dla falsey.

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

Wypróbuj online.


Zawsze to uwielbiam, gdy naprawianie błędów oszczędza bajty!
Neil,

5
@Neil yep - usunięty kod jest debugowanym kodem :)
Cyfrowa trauma

1
@DigitalTrauma Zaprawdę, w naszym wspaniałym nowym świecie dozwolony jest tylko dostatecznie skruszony kod .
FryAmTheEggman

7

Pyth, 34 bajty

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

Wypróbuj online: demonstracja

Wyjaśnienie:

          ."...   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

W jakiś sposób, jeśli usunę kod przed spakowanym łańcuchem, łańcuch zostanie zerwany.
busukxuan

@FryAmTheEggman I zrobiłem. Wynik był następujący: „! $ 7C <Q / = / LF $ VF4K: .- E”
busukxuan

@FryAmTheEggman Próbowałem kilka razy i porównałem bezpośredni link, czegoś mi brakowało. Wygląda na to, że to dlatego, że skopiowałem i wkleiłem, zamiast używać linku w odpowiedzi. Nie wiedziałem, że przegapisz kilka bajtów podczas wklejania spakowanych ciągów znaków do SE.
busukxuan

@busukxuan Tak, właśnie zauważyłem to samo: P SE niestety ukrywa większość znaków niedrukowalnych.
FryAmTheEggman

1
Wydaje się, że nie spełnia warunku (t zero) dla pierwszej wartości
Nic Robertson

4

Pyth, 41 bajtów

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

Wypróbuj tutaj!

Proste wyszukiwanie listy. Drukuje pustą listę jako wartość fałszowania, a niepustą listę jako wartość prawdziwości.

Patrząc lub lepiej, nie podoba mi się ten.


4

Oracle SQL 11.2, 86 bajtów

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

Zwraca jeden wiersz dla prawdy i żaden wiersz dla falsey.


3

05AB1E , 39 45 bajtów

Kod:

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

Wypróbuj online!

Wykorzystuje kodowanie CP-1252. Prawda jest wtedy, gdy wyprowadzana jest liczba, a fałszem jest, gdy nic nie jest wyprowadzane.

Wersja niekonkurencyjna (39 bajtów) , działa z najnowszą wersją:

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

3

ES6, 56 48 45 bajtów

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

Zaoszczędzono 5 bajtów dzięki @ user81655. Zapisano 3 bajty z dalszej optymalizacji. Zaoszczędź kolejne 3 bajty dzięki @Patrick Roberts.

t[wo]?o jest najkrótszym wyrażeniem regularnym, jakie udało mi się dopasować do wszystkich trzech homofonów.

Jeśli dozwolone jest przekazanie tych dwóch wartości jako tablicy z jednym parametrem, wówczas parametr reszta może stać się normalnym parametrem, oszczędzając kolejne 5 bajtów.


@ user81655 Nieźle, ale ulepszyłem to.
Neil,

1
jeśli użyjesz parametru rest do wprowadzenia danych, zaoszczędzisz 3 bajty:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
Patrick Roberts

@PatrickRoberts Huh, myślałem o tym, ale musiałem przeliczyć, ponieważ nie sądziłem, że coś oszczędzam.
Neil,

iFlag brakuje.
Florent,

@Florent Dziękujemy za wykrycie tego. (Być może przykłady nie powinny być małymi literami ...)
Neil

3

Perl 6, 45 44 bajtów

Podziękowania dla ludzi z IRC za pomoc w tym golfie

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

stosowanie

> 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

Niekonkurencyjna alternatywa, 54 bajty

Jest to miła alternatywa dla powyższego, jeśli uważasz, że wyrażenia regularne są obrzydliwe, ale jest to odrobinę dłużej. Można by go pograć w golfa jeszcze kilka bajtów, ale ponieważ jest niekonkurencyjny, zostawię go takim, jaki jest.

{@_».lc~~(qw<to too two t0 2>.any,<b be bee b3>.any)}

1
Każdemu, kto patrzy na to, kto nie zna Perla 6. [i ]oznacza grupę nie przechwytującą w wyrażeniu regularnym, który zostałby zapisany jako (?:i )w Perlu 5. Aby uzyskać klasę postaci, należy umieścić je w nawiasach ostrych <[i ]>.
Brad Gilbert b2gills

b2gills ++, nawet nie pomyślałem o różnicach w wyrażeniach regularnych w Perlu 6
Hotkeys

Miałem głos negatywny, ponieważ ktoś o tym nie wiedział, więc zawsze to podkreślam.
Brad Gilbert b2gills

Czy istnieje reguła PP&CG, która powstrzymuje cię przed publikowaniem bardziej eleganckiego golfa jako własnej odpowiedzi? Myślę, że nieco dłuższa * wersja byłaby warta. * Niniejszym oświadczam, że eleganckie idiomy golfowe obejmują nie dbanie o (nie liczenie) białych znaków.
raiph

3

Python 2.7, 133 bajty

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

Nie jestem pewien, czy mamy opublikować rozwiązania, jeśli w komentarzach jest mniejsza wersja, ale oto moja wersja w Pythonie.

Edycja: Bez funkcji ma tylko 73 bajty (i to nie jest nawet blisko najlepszych odpowiedzi. Wybacz mi, jestem nowy

a, b = "to", "bee"
print a in "2 too to t0 two" and b in "be b bee b3"

2
Witamy w PPCG! Jeśli spędziłeś czas na pisaniu odpowiedzi i graniu w golfa, a nie plagiatowałeś (bez podania źródła), możesz opublikować swoją odpowiedź!
Cyfrowa trauma

No i większość języków ma tutaj pytanie w stylu wskazówek golfowych. Python nie
Digital Trauma

Zauważ, że działa to z wejściem 2(liczba całkowita)
wnnmaw

3
Zwraca wartość True również dla e('oo', '3')podobnych podciągów .
manatwork

1
@TheLateOne, Python nie jest bardzo golfowy, więc prawie nigdy nie pokonasz języków golfowych, takich jak pyth lub cjam, ale dostanie się w zakresie 50, 60 lub 70 jest dla nas całkiem dobre w przypadku większości wyzwań. Nie zniechęcaj się!
wnnmaw

2

Rubin, 53 55 52 bajtów

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

Będę szczery, to moja pierwsza próba gry w golfa.

Wywołanie funkcji w postaci f.call(firstValue, secondValue)

0jest Prawdą, niljest Fałszem.

Sprawdź to tutaj



1

Pyth, 39 bajtów

-3 bajty przez @FryAmtheEggman

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

Wypróbuj tutaj .


Naprawię to, kiedy dojdę do komputera.
lirtosiast

1

Python, 85 83 bajtów

@Manatwork oszczędził mi dwa bajty.

To dość brutalna siła, przyjrzę się teraz rozwiązaniom regularnym.

lambda a,b:a.lower()in'2 to too two t0'.split()and b.lower()in['b','be','bee','b3']

1
Dla pierwszej tablicy: '2 to too two t0'.split()Dla drugiej tablicy nie ma znaczenia.
manatwork

Cholera, tak, próbowałem '2,to,too,two,t0'.split(','). Głupi ja.
Ogaday

1

PowerShell v3 +, 74 70 bajtów

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

Nie używa wyrażenia regularnego. Pobiera dwa dane wejściowe, sprawdza, czy pierwszy jest -intablicą dynamicznie utworzoną przez -splitoperatora, konwertuje Boolean na int +, następnie mnoży to, *sprawdzając, czy druga jest -indrugą tablicą (która automatycznie rzutuje Boolean na int ). Działa to, ponieważ x*y == x&yjeśli xi ymoże być tylko 1lub 0.

Program PowerShell domyślnie nie rozróżnia wielkości liter, więc otrzymujemy to za darmo. Czy wyjście 0lub 1dla falsey / truthy odpowiednio. Wymaga od -inoperatora wersji 3 lub nowszej .

Edycja - Zapisano 4 bajty za pomocą unary -split


0

Groovy, 52 bajty

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

==~ to fajny operator wyrażeń regularnych w groovy, który sprawdza równość.

Testy:

Test Regex101 .

assert f('2', 'Bee') == true
assert f('2', 'b') == true
assert f('not to', 'be') == false
assert f('that is', 'the question') == false

Co jeśli xjest ti yjest 0b?
Neil,

Co masz na myśli?
J Atkin

Spodziewałbym się, że f('t', '0b')to fałsz, ale obawiam się, że Twój kod zwróci wartość true.
Neil,

Ohhhh, Ok, rozumiem. Tak, zwróciłoby to niewłaściwą rzecz.
J Atkin

0

MATL , 32 41 43 bajtów

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

Takie samo podejście jak odpowiedź Retina @ DigitalTrauma . Wejścia są oddzielone przecinkiem. Prawdziwy wynik to ciąg znaków z dwoma małymi literami; fałsz nie ma wyjścia.

Wypróbuj 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

0

C # 6, 132 bajty

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

Wersja bez golfa (tylko nieco bardziej czytelna):

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

0

Python 2, 67 bajtów

Wykorzystuje regex Digital Trauma. Dane wejściowe to pojedynczy ciąg oddzielony przecinkiem. Nie jestem pewien, czy ten format jest dozwolony do wprowadzania ...

import re
f=lambda x:bool(re.match('^(2|t[ow]?o|t0),b(e?e?|3)$',x))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.