Ser ou não ser

28

No menor número possível de bytes, determine se os dois valores fornecidos a cada correspondem a um dos seguintes:

Primeiro valor

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

Segundo valor

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

Exemplos

2          'Bee'            true
'2'        'b'              true
'not to'   'be'             false
'that is'  'the question'   false
rybo111
fonte
5
N0 l33t? "
T0
7
Por que isso tem que ser uma função ?
Dennis
2
@ rybo111 Bem! Isso parece que não entendeu o conceito então;)
Draco18s
13
Este implora por uma solução de Shakespeare . Não concorrentes é claro, como a contagem de bytes sem dúvida seria enorme ...
Darrel Hoffman
1
@LuisMendo OK. Qualquer um serve. Apoiar ambos não é necessário.
Rybo111

Respostas:

34

Shakespeare , 4778 bytes

Nota: esta resposta não pretende ser um concorrente sério

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]

Emite 0 se falso, 1 se verdadeiro.

Isso poderia ser facilmente mais curto (e, se as pessoas realmente quiserem, o tamanho das palavras poderá ser reduzido), mas fazer isso seria um tapa na cara do bom e velho Will. Eu sempre senti que Horatio é o herói desconhecido de Hamlet, por isso me certifiquei de que ele fosse o responsável por entregar o monólogo intenso a Hamlet, onde Hamlet tem que provar que ele é tão bom quanto Horatio (que representa a nova linha).

O código em si é bem simples. Todos os caracteres sem Hamlet são valores ASCII (em ordem:) newline,space,0,2,3,B,b,E,e,O,o,T,t,V,ve, em seguida, o código é uma máquina de estado simples (especificamente, um DFA ) que faz a transição para Scene XIum estado de aceitação e Scene XIIum estado de rejeição.

Este é o básico do qual trabalhei.

Depois de fazer isso, apenas o pluguei em Shakespeare, usando o fato de que eu poderia descer para o próximo estado quando eles fossem numericamente adjacentes. Eu o testei apenas com a versão de Shakespeare que vinculei no título, mas acredito que definimos uma linguagem por meio de uma implementação iirc.

Kevin W.
fonte
2
Quando postei essa pergunta, nunca pensei em obter uma resposta tão complexa e, no entanto, muito adequada!
Rybo111
18

Retina , 28

  • 1 byte economizado graças a @ MartinBüttner.

Possivelmente, a minha resposta mais rápida em golfe com código - 9 minutos após o OP.

Os parâmetros de entrada são separados por vírgula. A saída é 1 para verdade e 0 para falsey.

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

Experimente online.

Trauma Digital
fonte
Eu sempre adoro quando a correção de bugs salva bytes!
Neil
5
@ Neil yep - o código excluído está com o código de depuração :) #
Digital Trauma
1
@DigitalTrauma Na verdade, apenas códigos suficientemente penitentes podem ser permitidos em nosso admirável mundo novo.
FryAmTheEggman
7

Pitão, 34 bytes

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

Experimente online: Demonstração

Explicação:

          ."...   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
fonte
De alguma forma, se eu remover o código antes da sequência compactada, a sequência será quebrada.
217166Bom
@FryAmTheEggman eu fiz. A saída foi "! $ 7C <Q / = / LF $ VF4K: .- E"
busukxuan
@FryAmTheEggman Eu tentei algumas vezes e comparei o permalink, havia algo faltando. Parece que copiei e colei, em vez de usar o link na resposta. Eu não sabia que você perderia alguns bytes ao colar seqüências de caracteres compactadas no SE.
217162Bom
@busukxuan Sim, acabei de notar a mesma coisa: infelizmente, o P SE esconde os caracteres mais imprimíveis.
FryAmTheEggman
1
Isso não parece passar a condição (t zero) para o primeiro valor
Nic Robertson
4

Pitão, 41 bytes

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

Experimente aqui!

Pesquisa direta na lista. Imprime uma lista vazia como valor falso e uma lista não vazia como valor verdadeiro.

Procurando ou de uma maneira melhor, eu realmente não gosto deste.

Denker
fonte
4

Oracle SQL 11.2, 86 bytes

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

Retorna uma linha para truthy e nenhuma linha para falsey.

Jeto
fonte
3

05AB1E , 39 45 bytes

Código:

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

Experimente online!

Usa a codificação CP-1252. Verdade é quando um número é emitido e falso é quando nada é emitido.

Versão não concorrente (39 bytes) , funciona com a versão mais recente:

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

ES6, 56 48 45 bytes

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

Economizou 5 bytes graças a @ user81655. Economizou 3 bytes de alguma otimização adicional. Economizou mais 3 bytes graças a @Patrick Roberts.

t[wo]?o é o menor regex que eu poderia pensar em combinar os três homofones.

Se for permitido passar os dois valores como uma matriz de parâmetro único, o parâmetro restante poderá se tornar um parâmetro normal, economizando outros 5 bytes.

Neil
fonte
@ user81655 Nada mal, mas eu o melhorei ainda mais.
Neil
1
se você usar o parâmetro rest para entrada, ele economizará 3 bytes:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
Patrick Roberts
@PatrickRoberts Huh, eu tinha pensado nisso, mas devo ter calculado mal, porque não achava que estava salvando nada.
Neil
A ibandeira está faltando.
Florent
@ Florent Obrigado por descobrir isso. (Talvez os exemplos não devem ser todas as letras minúsculas ...)
Neil
3

Perl 6, 45 44 bytes

Obrigado ao pessoal do IRC por me ajudarem a jogar golfe

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

uso

> 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

Alternativa não concorrente, 54 bytes

Essa é uma boa alternativa para as opções acima, se você acha que as expressões regulares são brutas, mas é um pouco mais longa. Poderia ser jogado mais alguns bytes, mas como não é competitivo, deixarei como está.

{@_».lc~~(qw<to too two t0 2>.any,<b be bee b3>.any)}
Teclas de atalho
fonte
1
Para quem olha para isso que não conhece o Perl 6. [e ]indica um grupo que não captura em uma regex, que seria escrito como (?:e )no Perl 5. Para obter uma classe de personagem, você deve colocá-lo entre colchetes <[e ]>.
Brad Gilbert b2gills 12/02
b2gills ++, nem pensei em mencionar as diferenças nas expressões regulares do Perl 6
Hotkeys
Eu tive um voto negativo porque alguém não sabia disso, então eu sempre aponto.
Brad Gilbert b2gills 12/02
Existe uma regra de PP&CG que o impede de publicar o golfe mais elegante como sua própria resposta? Eu acho que uma versão um pouco mais longa * seria digna. * Declaro que elegantes idiomas de golfe incluem não se importar com (sem contar) o espaço em branco.
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')

Não tenho certeza se devemos postar soluções, se houver uma versão menor nos comentários, mas aqui está a minha versão no Python.

Edit: Sem a função, são apenas 73 bytes (e isso nem chega perto das melhores respostas. Desculpe-me, sou novo

a, b = "to", "bee"
print a in "2 too to t0 two" and b in "be b bee b3"
TheLateOne
fonte
2
Bem-vindo ao PPCG! Se você passou um tempo escrevendo e jogando uma resposta no golfe e não plagiou (sem atribuição), pode postar sua resposta!
Digital Trauma
Ah, e a maioria dos idiomas tem uma pergunta sobre o estilo das dicas de golfe aqui. Python não
Digital Trauma
Observe que isso funciona com a entrada de 2(inteiro)
wnnmaw
3
Isso retorna True também para substringse('oo', '3') semelhantes .
manatwork
1
@TheLateOne, Python não é muito jogável, então você quase nunca vence as linguagens de golfe como pyth ou cjam, mas chegar na faixa de 50, 60 ou 70 é muito bom para nós na maioria dos desafios. Não desanime!
wnnmaw
2

Ruby, 53 55 52 bytes

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

Serei honesto, esta é minha primeira tentativa de tentar resolver um problema.

Chamada de função na forma de f.call(firstValue, secondValue)

0é Truthy, nilé Falsy.

Teste aqui

Mr Public
fonte
1

Japonês, 36 bytes

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

Talvez eu tenha perdido alguma coisa, mas isso deve funcionar completamente. Teste online!

ETHproductions
fonte
1

Pitão, 39 bytes

-3 bytes por @FryAmtheEggman

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

Experimente aqui .

lirtosiast
fonte
Vou consertar quando chegar ao computador.
21816 Lirtosiast
1

Python, 85 83 bytes

O @Manatwork me salvou dois bytes.

Esta é uma força bastante bruta, abordarei as soluções regex a seguir.

lambda a,b:a.lower()in'2 to too two t0'.split()and b.lower()in['b','be','bee','b3']
Ogaday
fonte
1
Para a primeira matriz: '2 to too two t0'.split()Para a segunda matriz, não faz diferença.
11386 manatwork
Porra, sim, eu tentei '2,to,too,two,t0'.split(','). Eu tolo.
Ogaday
1

PowerShell v3 +, 74 70 bytes

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

Não usa regex. Pega duas entradas, verifica se a primeira é -ina matriz que foi criada dinamicamente pelo -splitoperador, converte esse booleano em um int +e depois multiplica isso *com a verificação se o segundo é -ino segundo array (que converterá o booleano automaticamente como int ) Isso funciona porque x*y == x&yse xe ysó pode ser 1ou0 .

O PowerShell, por padrão, não diferencia maiúsculas de minúsculas; portanto, obtemos isso gratuitamente. Irá imprimir 0ou 1para Falsey / truthy, respectivamente. Requer v3 ou mais recente para o -inoperador.

Editar - salvou 4 bytes usando -split unário

AdmBorkBork
fonte
0

Groovy, 52 bytes

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

==~ é um operador legal de regex no groovy que verifica a igualdade.

Testes:

Teste Regex101 .

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
fonte
E se xé te yé 0b?
Neil
O que você quer dizer?
precisa
Eu esperava f('t', '0b')ser falso, mas estou preocupado que seu código retorne verdadeiro.
Neil
Ohhhh, ok, entendi. Sim, isso retornaria a coisa errada.
precisa
0

MATL , 32 41 43 bytes

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

Mesma abordagem da resposta Retina da DigitalTrauma . As entradas são separadas por vírgula. Saída de verdade é uma string com as duas entradas em minúsculas; falsy não é saída.

Experimente 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
fonte
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());

Versão ungolfed (apenas um pouco mais legível):

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
fonte
0

Python 2, 67 bytes

Usa o regex do Digital Trauma. Entrada é uma única sequência separada por vírgula. Não tenho certeza se esse formato é permitido para entrada ...

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