Algunas versiones de la aplicación de calculadora estándar de Android le permiten presionar una tecla, como 'sin' y luego la tecla 'del' para hacerlo 'si'. Probablemente solo un error que no pueden molestarse en eliminar.
Las siguientes letras / agrupaciones de letras son tipificables:
pecado si s cos co C bronceado ejército de reserva t En l Iniciar sesión lo mi
Entonces, 'insípido' es tipificable, porque ta-steless y también lo es 'obstrucciones' porque 'c-log-s'. Sin embargo, 'got' no se puede escribir, ni 'an' o 'xyz'.
Escriba un programa que tome una sola palabra (o secuencia de letras, solo az en la entrada) como entrada y produzca la salida para indicar si una palabra se puede escribir o no.
La salida puede ser un solo carácter / letra / dígito / etc. o puede ser más grande Todas las palabras que se pueden escribir deben producir la misma salida. Todas las palabras que no se pueden escribir también deben producir la misma salida.
PD: Por curiosidad, ¿es "insípido" la palabra de diccionario más larga que se puede escribir?
fuente


Respuestas:
Perl,
474341 + 1 = 42 bytes-4 bytes gracias a @Sunny Pun. -2 bytes gracias a @Brad Gilbert b2gills y @Downgoat
Corre con la
-nbandera.Definitivamente se puede jugar más, pero en el espíritu de la competencia, estoy dejando la expresión regular en su mayoría original que se me ocurrió al principio. No devuelve nada si es verdadero,
1si es falso.Pruébalo en línea!
Descargué un archivo de diccionario y la palabra más larga que encontré fue 11 letras:
tattletalesfuente
co?debería ser suficiente yasinque se encargará des:) ¡Buen juego con/log?/!i), o que el resultado solo tiene que tiene sentido (uno remove!)/^(s|sin?|co?|t|tan?|ln?|log?|e)+$/o si lo prefiere:/^([celst]|sin?|co|tan?|ln|log?)+$/JavaScript (ES6), 44 bytes
Creo que esta es la expresión regular más corta posible, pero, por supuesto, puedo estar equivocado.
Explicación
Un primer lugar obvio para comenzar sería una expresión regular que simplemente incluye todas las opciones por separado:
Primero, podemos observar que
cosse puede formar a partir decoys, haciéndolo innecesario:Algunos de estos, como
sinysi, se pueden combinar haciendo que la última letra sea opcional:Esto funciona porque
sin?coincidesicon o sin unnal final, cubriendo así ambossinysi.Parece que hay muchos
n?s también. ¿Qué pasa si los juntamos todos?Una forma más de jugar al golf sería combinar las opciones restantes de caracteres únicos en un rango de caracteres, pero esto tiene la misma longitud:
Y así es como se juega al golf una simple expresión regular. Creo que esta es la expresión regular más corta posible que coincide con cada cadena correctamente, pero tal vez no. Otorgaré una recompensa de +100 a cualquiera que logre mejorar esta expresión regular.
fuente
^(s|t|co?|(l|ta|si)n?|log?|e)+$/ /.test.bind(/^((si|ta|l)n?|co?|log?|[ste])+$/).a=/^((si|ta|l)n?|co?|log?|[ste])+$/;a.testpor 42 bytes. Creo que esto está permitido, porquea.testes una función anónima.f=a.testno funciona. Sin embargo, me pregunto si es aceptable llamar con el nombre alternativoa.test...Pyth,
37332928 bytesEl código contiene un carácter no imprimible, así que aquí hay un
xxdhexdump.Pruébalo en línea.
Extremadamenteastronómicamente ineficiente. La complejidad de tiempo y espacio esO (16 n )O (24 n ).Explicación
Primero,
Qse agrega implícitamente a.fuente
s.Jalea ,
3231302826 bytesEmite 0 si la palabra es escribible, 1 si no. ¡Gracias a @JonathanAllan por jugar golf en 1 byte!
Pruébalo en línea!
Cómo funciona
fuente
Brachylog , 33 bytes
Se corrigió un error gracias a @Synoli.
Pruébalo en línea!
Salidas
true.si se pueden escribir ofalse.no.Explicación
Intentamos las desconcatenaciones de la entrada hasta que encontremos una para la cual todas las cadenas que concatenemos sean un prefijo de una
["sin", "cos", "tan", "log", "lne", "eee].fuente
.despuéstrue?true.y de lofalse.contrario. Acabo de volver a implementar esto: si se ignora la salida (como está aquí) y no hay escrituraSTDOUT, se imprimirátrue.ofalse.dependerá de si el predicado principal tiene éxito o falla. Tiene un punto en SWI-Prolog porquetrue.y enfalse.realidad son programas válidos que siempre tienen éxito / siempre fallan.tanaparecer explícitamente en la lista?Perl 6 ,
60 5044 bytesprimer intento ( 60 )
traducción de la respuesta Perl 5 ( 50 )
usando el
-ninterruptor ( 43 + 1 )El primero
?convierte el resultado a booleano, y el primero lo+convierte a un número (1paraTrue,0paraFalse)fuente
Mathematica, 101 bytes
Parece que las partes difíciles de este desafío son encontrar la expresión regular más corta y elegir el lenguaje más conciso para que coincida con la expresión regular. No tengo nada que aportar al primero, y Mathematica no es un buen candidato para el segundo ya que tienes que usar
StringMatchQyRegularExpression. Lo que puedo hacer es responder a su PD: ¿es "insípido" la palabra más larga que puede escribir?Así que "tattletale" parece ser el más largo de un personaje.
fuente
TrueoFalseno un solo carácter.Maravilla , 41 bytes
Uso:
Totalmente mal entendido la pregunta antes, pero ahora todo está solucionado Salidas
Fpara partido yTpara no partido.Sin competencia, 35 bytes
Uso:
Esto hace uso de expresiones regulares aplicables, que se implementó después de este desafío.
fuente
nno se puede escribir sinosinyln.sacomo verdaderagot.?hacer que el dócil sub expresión; ver rexegg.com/regex-quantifiers.html#cheat_sheet . Pero incluso hacerlo codicioso??o posesivo?+no funciona por alguna razón (al menos en PHP).coelostatsdesencadena la trampa (enloyta).Procesamiento, 223 bytes
Finalmente decidió hacer una respuesta sin expresiones regulares. Para llamar a la función, use
l("tasteless");. Devuelve0falso y1verdadero.Código ampliado con explicación
Básicamente, iteramos sobre la cadena dada, construyendo
bchar por char. Comprobamos el uso ded()si alguno de lostan,log, ... comenzar conb. Si lo hace, entonces es válido. De lo contrario, verificamos si el carácter en esa posición es válido y lo reiniciamosb. Ahora, si no es válido,0se devolverá o, de lo contrario, seguirá siendo válido. Al final, si el programa aún no ha devuelto algo, devuélvalo1.fuente
dfunción devolver abool?booleanqueint. Tambiéntrueyfalserequieren más bytes que1y0Scala, 49 bytes
Devuelve verdadero si la cadena dada coincide con la expresión regular, de lo contrario, falso.
fuente
Python 3 , 154 bytes
Pruébalo en línea!
fuente
Python 3 ,
149130 byteseditar # 1: 19 bytes afeitados usando la solución @Henke
fuente
Python 2, 124 bytes
fuente
PHP, 60 bytes
expresiones regulares robadas de ETHproductions :
toma datos del argumento de la línea de comandos; imprime
1para tipificable,0para no mecanografiable.versiones anteriores,
757369 bytesreemplaza todas las palabras posibles con una cadena vacía, devuelve el resultado, niega.
divide la entrada por coincidencias de expresiones regulares. Flag
1significaPREG_SPLIT_NO_EMPTYy le dicepreg_splitque solo devuelva resultados no vacíos. Si la entrada es tipificable,preg_splitsolo tendrá resultados vacíos, por lo que devolverá una matriz vacía, que es falsa.!niega el resultado.Ambas versiones toman la entrada del argumento de la línea de comando
e imprimen
1si el resultado está vacío (la entrada se puede escribir), de lo contrario nada.Notas:
Empacar la expresión regular usando
?no funciona aquí; hace que las expresiones no sean greedy; Probablemente debido al retroceso. Y el orden de las alternativas es importante:tatiene que estar parado antesto el motor dejará de coincidir cuando lo encuentret.Encontré una hoja de trucos cuantificadora , pensé
??o?+podría ayudar; Pero no funcionaron para mí.fuente
Java 8, 55 bytes
Renuncia: Solía ETHproductions' expresiones regulares porque era muchos bytes más corta que la mía. Crédito total en la expresión regular para él. Lo que hice fue agregar 24 bytes para que sea una función Java.
Devuelve
falsesi la palabra no encaja en la expresión regular, de lo contrariotrue.fuente