Быть или не быть


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 1333? «
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, если правда.

Это легко может быть короче (и если люди действительно хотят, чтобы у меня длина слова могла быть сокращена), но сделать это было бы пощечиной доброй воле. Я всегда чувствовал, что Горацио - незамеченный герой Гамлета, поэтому я позаботился о том, чтобы именно он доставил интенсивный монолог Гамлету, где Гамлет должен в конечном итоге доказать, что он так же хорош, как Горацио (который представляет новую строку).

Сам код довольно прост. Все символы без Гамлета являются значениями 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 ноль) для первого значения
Nic Robertson

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

Возвращает один ряд для правдивых и не ряд для фалси.


3

05AB1E , 39 45 байт

Код:

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

Попробуйте онлайн!

Использует кодировку CP-1252. Истина - это когда выводится число, а ложь - когда ничего не выводится.

Неконкурентная версия (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 это самое короткое регулярное выражение, которое я могу придумать, чтобы соответствовать всем трем гомофонам.

Если разрешено передавать два значения в виде одного массива параметров, тогда параметр rest может стать обычным параметром, сохранив еще 5 байтов.


@ user81655 Неплохо, но я улучшил его.
Нил

1
если вы используете параметр rest для ввода, он сэкономит вам 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! Если вы потратили время на написание и игру в гольф ответа и не занимались плагиатом (без указания авторства), вы можете опубликовать свой ответ!
Цифровая травма

О, и у большинства языков есть вопрос стиля подсказок игры в гольф здесь. Питон не исключение
цифровая травма

Обратите внимание, что это работает с вводом 2(целое число)
wnnmaw

3
Это возвращает True также для e('oo', '3')и подобных подстрок .
manatwork

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это правда, nilэто фальси

Проверьте это здесь



1

Pyth, 39 байт

-3 байта @FryAmtheEggman

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

Попробуй это здесь .


Я исправлю это, когда доберусь до компьютера.
lirtosiast

1

Python, 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()для второго массива не имеет значения.
manatwork

Блин да я пробовал '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ли второй массив вторым (что будет автоматически приводить логическое значение как целое число). ). Это работает, потому что, x*y == x&yесли xи yможет быть только 1или 0.

PowerShell по умолчанию не учитывает регистр, поэтому мы получаем это бесплатно. Будет выходной 0или 1для фальси / правды, соответственно. Требуется v3 или новее для -inоператора.

Редактировать - 4 байта сохранены с помощью унарного сплита


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?
Нил

Что вы имеете в виду?
Дж Аткин

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

Оооо, хорошо, я понял. Да, это вернуло бы неправильную вещь.
Дж. Аткин

0

MATL , 32 41 43 байта

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

Тот же подход, что и у ответа @ DigitalTrauma Retina . Входы разделяются запятой. Истинный вывод - это строка с двумя входами в нижнем регистре; Ложь не выводится.

Попробуйте онлайн!

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

Использует регулярное выражение Digital Trauma. Ввод - это одна строка, разделенная запятой. Не уверен, что этот формат разрешен для ввода ...

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.