Ser o no ser

28

En la menor cantidad de bytes posible, determine si los dos valores dados a cada uno coinciden con uno de los siguientes:

Primer 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

Ejemplos

2          'Bee'            true
'2'        'b'              true
'not to'   'be'             false
'that is'  'the question'   false
rybo111
fuente
55
N0 l33t? “
T0
77
¿Por qué tiene que ser una función ?
Dennis
2
@ rybo111 ¡Bien! Parece que entonces no entendieron el concepto;)
Draco18s
13
Éste pide una solución de Shakespeare . Sin competencia, por supuesto, ya que el recuento de bytes sin duda sería enorme ...
Darrel Hoffman
1
@LuisMendo OK. Cualquiera esta bien. Apoyar a ambos no es necesario.
rybo111

Respuestas:

34

Shakespeare , 4778 bytes

Nota: esta respuesta no pretende ser un competidor serio

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 si es falso, 1 si es verdadero.

Esto podría ser fácilmente más corto (y si la gente realmente quiere que lo haga, la longitud de las palabras podría reducirse), pero hacerlo sería una bofetada a la buena voluntad. Siempre he sentido que Horatio es el héroe no reconocido de Hamlet, así que me aseguré de que fuera él quien entregara el intenso monólogo a Hamlet, donde Hamlet tiene que demostrar que es tan bueno como Horatio (que representa la nueva línea).

El código en sí es bastante simple. Todos los caracteres sin Hamlet son valores ascii (en orden:) newline,space,0,2,3,B,b,E,e,O,o,T,t,V,vy luego el código es una máquina de estado simple (específicamente, un DFA ) que pasa a Scene XIun estado de aceptación y Scene XIIun estado de rechazo.

Este es el básico del que trabajé.

Después de hacer esto, simplemente lo conecté a Shakespeare, usando el hecho de que podría desplegarme al siguiente estado cuando fueran numéricamente adyacentes. Solo lo probé con la versión de Shakespeare que vinculé en el título, pero creo que definimos un lenguaje mediante una implementación iirc.

Kevin W.
fuente
2
Cuando publiqué esta pregunta, ¡nunca pensé que obtendría una respuesta tan compleja y muy adecuada!
rybo111
18

Retina , 28

  • 1 byte guardado gracias a @ MartinBüttner.

Posiblemente mi respuesta de código de golf más rápida: 9 minutos después de la OP.

Los parámetros de entrada están separados por comas. La salida es 1 para la verdad y 0 para falsey.

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

Pruébalo en línea.

Trauma digital
fuente
¡Siempre me encanta cuando corregir errores guarda bytes!
Neil
55
@Neil sí - el código eliminado es código depurado :)
Digital Trauma
1
@DigitalTrauma En verdad, solo se puede permitir código suficientemente penitente en nuestro valiente mundo nuevo.
FryAmTheEggman
7

Pyth, 34 bytes

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

Pruébelo en línea: demostración

Explicación:

          ."...   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
fuente
De alguna manera, si elimino el código antes de la cadena empaquetada, la cadena se rompe.
busukxuan
@FryAmTheEggman que hice. El resultado fue "! $ 7C <Q / = / LF $ VF4K: .- E"
busukxuan
@FryAmTheEggman Lo intenté varias veces y comparé el enlace permanente, faltaba algo. Parece que es porque copié y pegué, en lugar de usar el enlace en la respuesta. No sabía que te perderías algunos bytes al pegar cadenas empaquetadas en SE.
busukxuan
@busukxuan Sí, acabo de notar lo mismo: P SE oculta la mayoría de los caracteres no imprimibles desafortunadamente.
FryAmTheEggman
1
Esto no parece pasar la condición (t cero) para el primer valor
Nic Robertson
4

Pyth, 41 bytes

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

Pruébalo aquí!

Lista de búsqueda directa. Imprime una lista vacía como valor falso y una lista no vacía como valor verdadero.

Mirando o una mejor manera aunque, realmente no me gusta este.

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

Devuelve una fila para la verdad y ninguna fila para Falsey.

Jeto
fuente
3

05AB1E , 39 45 bytes

Código:

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

Pruébalo en línea!

Utiliza la codificación CP-1252. La verdad es cuando se emite un número y la falsedad es cuando no se emite nada.

Versión no competitiva (39 bytes) , funciona con la versión más nueva:

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

ES6, 56 48 45 bytes

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

Guardado 5 bytes gracias a @ user81655. Guardado 3 bytes de alguna optimización adicional. Ahorró otros 3 bytes gracias a @Patrick Roberts.

t[wo]?o es la expresión regular más corta que se me ocurre para que coincida con los tres homófonos.

Si se permite pasar los dos valores como una sola matriz de parámetros, entonces el parámetro de descanso puede convertirse en un parámetro normal, ahorrando otros 5 bytes.

Neil
fuente
@ user81655 No está mal, pero lo he mejorado aún más.
Neil
1
si usa el parámetro rest para la entrada, le ahorrará 3 bytes:(...a)=>/^(2|t0|t[wo]?o),b(ee?|3)?$/.test(a)
Patrick Roberts
@PatrickRoberts Huh, había pensado en eso, pero debo haber calculado mal, porque no pensé que estaba guardando nada.
Neil
El iindicador no se encuentra.
Florent
@Florent Gracias por ver eso. (Tal vez los ejemplos no deberían estar en minúsculas ...)
Neil
3

Perl 6, 45 44 bytes

Gracias a la gente de IRC por ayudarme a jugar golf.

{@_~~(~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 no competitiva, 54 bytes

Esta es una buena alternativa a lo anterior si cree que las expresiones regulares son asquerosas, pero es un poco más largo. Podría reducirse un par de bytes más, pero como no compite, lo dejaré como está.

{@_».lc~~(qw<to too two t0 2>.any,<b be bee b3>.any)}
Teclas de acceso rápido
fuente
1
Para cualquiera que esté mirando esto y no conozca Perl 6. [y ]denote un grupo no capturador en una expresión regular, que se escribiría como (?:y )en Perl 5. Para obtener una clase de personaje, debe colocarlos entre paréntesis angulares <[y ]>.
Brad Gilbert b2gills
b2gills ++, ni siquiera pensé en mencionar las diferencias en las expresiones regulares de Perl 6
Teclas de acceso
He tenido un voto negativo porque alguien no lo sabía, así que siempre lo señalo.
Brad Gilbert b2gills
¿Existe una regla de PP&CG que le impida publicar el golf más elegante como su propia respuesta? Creo que una versión un poco más larga * valdría la pena. * Por la presente decreto que las expresiones idiomáticas de golf elegantes incluyen no preocuparse por (sin contar) los espacios en blanco.
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')

No estoy seguro de si debemos publicar soluciones si hay una versión más pequeña en los comentarios, pero aquí está mi versión en Python.

Editar: sin la función solo son 73 bytes (y eso ni siquiera está cerca de las mejores respuestas. Perdóname, soy nuevo

a, b = "to", "bee"
print a in "2 too to t0 two" and b in "be b bee b3"
TheLateOne
fuente
2
Bienvenido a PPCG! Si pasó tiempo escribiendo y jugando golf una respuesta y no plagió (sin atribución), ¡puede publicar su respuesta!
Trauma digital
Ah, y la mayoría de los idiomas tienen una pregunta de estilo de consejos de golf aquí. Python no
Trauma digital
Tenga en cuenta que esto funciona con la entrada de 2(entero)
wnnmaw
3
Esto devuelve True también para subcadenase('oo', '3') y similares .
manatwork
1
@TheLateOne, Python no es muy fácil de jugar, por lo que casi nunca vencerás a los idiomas de golf como pyth o cjam, pero entrar en el rango 50, 60 o 70 es bastante bueno para nosotros en la mayoría de los desafíos. ¡No te desanimes!
wnnmaw
2

Ruby, 53 55 52 bytes

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

Seré honesto, este es mi primer intento de tratar de jugar un problema.

Llamada de función en forma de f.call(firstValue, secondValue)

0es Verdad, niles Falsa.

Pruébalo aquí

Señor público
fuente
1

Japt, 36 bytes

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

Tal vez me perdí algo, pero esto debería funcionar por completo. ¡Pruébalo en línea!

ETHproducciones
fuente
1

Pyth, 39 bytes

-3 bytes por @FryAmtheEggman

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

Pruébalo aquí .

lirtosiast
fuente
Lo arreglaré cuando llegue a una computadora.
lirtosiast
1

Python, 85 83 bytes

@Manatwork me ahorró dos bytes.

Esta es una fuerza bruta bastante, buscaré soluciones regex a continuación.

lambda a,b:a.lower()in'2 to too two t0'.split()and b.lower()in['b','be','bee','b3']
Ogaday
fuente
1
Para la primera matriz: '2 to too two t0'.split()para la segunda matriz no hay diferencia.
manatwork
Maldición, sí, lo intenté '2,to,too,two,t0'.split(','). Tonto de mí.
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')

No usa expresiones regulares. Toma dos entradas, comprueba si la primera es -inla matriz que ha sido creada dinámicamente por el -splitoperador, convierte ese booleano en un int con +, luego lo multiplica *al verificar si el segundo es -inla segunda matriz (que automáticamente convertirá el booleano como un int ) Esto funciona porque x*y == x&ysi xy ysolo puede ser 1o 0.

PowerShell por defecto no distingue entre mayúsculas y minúsculas, por lo que lo obtenemos de forma gratuita. Es la salida 0o 1para Falsey- / Truthy, respectivamente. Requiere v3 o más reciente para el -inoperador.

Editar - Guardado 4 bytes usando unary -split

AdmBorkBork
fuente
0

Groovy, 52 bytes

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

==~ es un operador de expresiones regulares genial en groovy que verifica la igualdad.

Pruebas:

Prueba 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
fuente
¿Qué pasa si xes ty yes 0b?
Neil
¿Qué quieres decir?
J Atkin
Esperaría f('t', '0b')ser falso, pero me preocupa que su código devuelva verdadero.
Neil
Ohhhh, ok, lo tengo. Sí, devolvería lo incorrecto.
J Atkin
0

MATL , 32 41 43 bytes

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

El mismo enfoque que la respuesta Retina de @ DigitalTrauma . Las entradas están separadas por una coma. La salida de verdad es una cadena con las dos entradas en minúsculas; falso es sin salida.

Pruébalo en línea!

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
fuente
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());

Versión sin golf (solo un poco más legible):

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

Python 2, 67 bytes

Utiliza la expresión regular de Digital Trauma. La entrada es una sola cadena separada por una coma. No estoy seguro si ese formato está permitido para la entrada ...

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