Бути чи не бути


28

У найменшій кількості можливих байтів визначте, чи відповідають два значення кожному даному одному з наступних:

Перше значення

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

Друге значення

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

Приклади

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

5
N0 l33t? "
T0

7
Чому це має бути функцією ?
Денніс

2
@ rybo111 Ну! Схоже, вони тоді не зрозуміли поняття;)
Draco18s

13
Цей просить рішення Шекспіра . Без конкуренції, звичайно, оскільки кількість байтів, безсумнівно, була б величезною ...
Даррел Гофман

1
@LuisMendo ОК. Або добре. Підтримувати обидва не потрібно.
rybo111

Відповіді:


34

Шекспір , 4778 байт

Примітка: ця відповідь не має серйозного конкурента

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]

Виходи 0, якщо невірно, 1 якщо істинно.

Це легко може бути коротшим (і якщо люди дійсно хочу, щоб я довжину слова можна було скоротити), але зробити це було б ляпкою перед обличчям доброї олі ". Я завжди відчував, що Гораціо - це неособлений герой Гамлета, тому я переконався, що саме він повинен надати напружений монолог Гамлету, де Гамлет повинен остаточно довести, що він такий же хороший, як Гораціо (який представляє новий рядок).

Сам код досить простий. Усі символи sans Hamlet мають значення ascii (Для порядку:), newline,space,0,2,3,B,b,E,e,O,o,T,t,V,vі тоді код є простою машиною стану (конкретно, DFA ), яка переходить у Scene XIстан прийняття та Scene XIIяк стан відхилення.

Це основний, над яким я працював.

Зробивши це, я просто підключив його до Шекспіра, використовуючи той факт, що я міг перейти до наступного стану, коли вони будуть чисельно суміжними. Я протестував його лише з версією Шекспіра, яку я пов'язав у заголовку, але я вважаю, що ми визначаємо мову за допомогою iirc реалізації.


2
Коли я опублікував це запитання, я ніколи не передбачав, що отримаю таку складну і в той же час дуже придатну відповідь!
rybo111

18

Сітківка , 28

  • 1 байт збережено завдяки @ MartinBüttner.

Цілком можливо, моя найшвидша відповідь на гольф з кодом - через 9 хвилин після закінчення ОП.

Вхідні параметри розділені комами. Вихідний результат - 1 для триути і 0 для фальси.

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

Спробуйте в Інтернеті.


Мені завжди подобається, коли виправлення помилок економить байти!
Ніл

5
@Neil yep - видалений код є налагодженим кодом :)
Digital Trauma

1
@DigitalTrauma Дійсно, у нашому сміливому новому світі може бути дозволений лише достатньо покаяний код .
FryAmTheEggman

7

Pyth, 34 байти

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

Спробуйте в Інтернеті: Демонстрація

Пояснення:

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

Якимось чином я видаляю код перед упакованим рядком, рядок стає розірваним.
busukxuan

@FryAmTheEggman я зробив. Вихід був "! $ 7C <Q / = / LF $ VF4K: .-E"
busukxuan

@FryAmTheEggman Я кілька разів спробував і порівняв постійне посилання, щось не вистачало. Здається, це тому, що я скопіював і вставив, а не використовував посилання у відповіді. Я не знав, що ви пропустите кілька байт під час вставлення упакованих рядків у SE.
busukxuan

@busukxuan Так, я просто помітив те саме: P SE, на жаль, приховує більшість недрукованих персонажів.
FryAmTheEggman

1
Здається, це не переходить умову (t нуль) для першого значення
Нік Робертсон

4

Pyth, 41 байт

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

Спробуйте тут!

Простий пошук списку. Друкує порожній список як фальшиве значення, а не порожній список - як істинне значення.

Дивлячись чи кращий спосіб, це мені не дуже подобається.


4

Oracle SQL 11.2, 86 байт

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

Повертає один рядок для truthy та жоден рядок для falsey.


3

05AB1E , 39 45 байт

Код:

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

Спробуйте в Інтернеті!

Використовує кодування CP-1252. Truthy - це коли виводиться число, а фальш - це коли нічого не виводиться.

Неконкурентна версія (39 байт) , працює з новітньою версією:

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

3

ES6, 56 48 45 байт

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

Збережено 5 байт завдяки @ user81655. Збережено 3 байти від деякої подальшої оптимізації. Збережено ще 3 байти завдяки @Patrick Roberts.

t[wo]?o це найкоротший вираз, який я міг би придумати, щоб відповідати всім трьом гомофонам.

Якщо дозволено передавати два значення як масив одного параметра, то решта параметр може стати нормальним параметром, зберігаючи ще 5 байт.


@ user81655 Непогано, але я його ще вдосконалив.
Ніл

1
якщо ви використовуєте параметр "решта" для введення, це заощадить 3 байти:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
Патрік Робертс

@PatrickRoberts Так, я думав про це, але, мабуть, прорахувався, бо не думав, що я щось економив.
Ніл

iПрапор відсутня.
Флорент

@Florent Дякую, що помітили це. (Можливо, приклади не повинні бути усіма малими літерами ...)
Ніл

3

Perl 6, 45 44 байт

Дякую людям у IRC за те, що вони допомагають мені гольфу

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

використання

> 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

Безконкурентна альтернатива, 54 байти

Це приємна альтернатива вищесказаному, якщо ви думаєте, що регулярні виразки є грубими, але це на триваліше. Це могло би бути в гольф ще на пару байтів, але оскільки це не конкурує, я залишу його таким, як є.

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

1
Для тих, хто дивиться на це, хто не знає Perl 6. [і ]позначає групу, що не фіксує, в регексі, яка буде написана як (?:і )в Perl 5. Щоб отримати клас символів, ви повинні розмістити їх у кутових дужках <[та ]>.
Бред Гілберт b2gills

b2gills ++, я навіть не думав згадувати про відмінності в регексах Perl 6
Hotkeys

У мене було голосування, тому що хтось цього не знав, тому я завжди вказую на це.
Бред Гілберт b2gills

Чи існує правило PP&CG, яке не дозволяє вам розміщувати більш елегантний гольф як власну відповідь? Думаю, трохи довша версія * була б гідною. * Постановляю, що елегантні ідіоми гольфу включають не турботу про пробіл (не рахуючи)
raiph

3

Python 2.7, 133 байт

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

Не впевнений, чи слід розміщувати рішення, якщо в коментарях є менша версія, але ось моя версія в Python.

Редагувати: Без функції це лише 73 байти (і це навіть не найкращі відповіді. Пробачте, я новачок

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

2
Ласкаво просимо до PPCG! Якщо ви витратили час на написання та гольф на відповідь та не плагіатували (без атрибуції), то можете залишити свою відповідь!
Цифрова травма

О, і на більшості мов тут виникає питання стилю гольфу. Python не
Digital Trauma

Зауважте, що це працює з введенням 2(integer)
wnnmaw

3
Це повертає True також для e('oo', '3')подібних підрядків .
манатура

1
@TheLateOne, Python не дуже гольфуючий, тому ви майже ніколи не будете перемагати такі ігри для гольфу, як pyth або cjam, але потрапляння в діапазон 50, 60 або 70 досить добре для нас у більшості проблем. Не відволікайтесь!
wnnmaw

2

Рубі, 53 55 52 байти

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

Чесно кажу, це моя перша спроба спробувати проблему з гольфом.

Виклик функції у вигляді f.call(firstValue, secondValue)

0це Truthy, nilце Falsy.

Перевірте тут




1

Пітон, 85 83 байти

@Manatwork врятував мені два байти.

Це досить жорстока сила, я розгляну наступні рішення.

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

1
Для першого масиву: '2 to too two t0'.split()для другого масиву значення не має.
манатура

Чорт, так, я спробував '2,to,too,two,t0'.split(','). Дурний мене.
Огадай

1

PowerShell v3 +, 74 70 байт

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

Не використовує регулярний вираз. Бере два входи, перевіряє, чи є перший -inмасив, який динамічно створюється -splitоператором, перетворює булевий в int з +, а потім помножує, *перевіряючи, чи є -inдругий масив (який автоматично видає булевий як int ). Це працює, тому що x*y == x&yякщо xі yможе бути тільки 1або 0.

PowerShell за замовчуванням нечутливий до регістру, тому ми отримуємо це безкоштовно. Вийде 0або 1для фальси / триутю відповідно. Потрібна версія v3 або новіша для -inоператора.

Редагувати - Збережено 4 байти, використовуючи unary -split


0

Groovy, 52 байти

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

==~ це класний оператор регулярних виразів в groovy, який перевіряє рівність.

Тести:

Тест Regex101

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

Що робити, якщо xє tі yє 0b?
Ніл

Що ви маєте на увазі?
J Atkin

Я очікував f('t', '0b')би помилкового, але я стурбований тим, що ваш код поверне справжній.
Ніл

Ой, добре, я зрозумів. Так, це поверне неправильну річ.
J Atkin

0

MATL , 32 41 43 байт

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

Той самий підхід, що і у відповіді на сітківку @ DigitalTrauma . Введення розділені комою. Truthy вихід - це рядок з двома входами нижнього регістру; фальш - це не вихід.

Спробуйте в Інтернеті!

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 байти

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

Невикористана версія (лише трохи легше для читання):

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 байт

Використовується регекс цифрової травми. Введення - це одна рядок, розділена комою. Не впевнений, чи дозволений цей формат для введення ...

import re
f=lambda x:bool(re.match('^(2|t[ow]?o|t0),b(e?e?|3)$',x))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.