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
-n
bandera.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,
1
si es falso.Pruébalo en línea!
Descargué un archivo de diccionario y la palabra más larga que encontré fue 11 letras:
tattletales
fuente
co?
debería ser suficiente yasin
que 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
cos
se puede formar a partir deco
ys
, haciéndolo innecesario:Algunos de estos, como
sin
ysi
, se pueden combinar haciendo que la última letra sea opcional:Esto funciona porque
sin?
coincidesi
con o sin unn
al final, cubriendo así ambossin
ysi
.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.test
por 42 bytes. Creo que esto está permitido, porquea.test
es una función anónima.f=a.test
no 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
xxd
hexdump.Pruébalo en línea.
Extremadamenteastronómicamente ineficiente. La complejidad de tiempo y espacio esO (16 n )O (24 n ).Explicación
Primero,
Q
se 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.tan
aparecer explícitamente en la lista?Perl 6 ,
60 5044 bytesprimer intento ( 60 )
traducción de la respuesta Perl 5 ( 50 )
usando el
-n
interruptor ( 43 + 1 )El primero
?
convierte el resultado a booleano, y el primero lo+
convierte a un número (1
paraTrue
,0
paraFalse
)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
StringMatchQ
yRegularExpression
. 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
True
oFalse
no un solo carácter.Maravilla , 41 bytes
Uso:
Totalmente mal entendido la pregunta antes, pero ahora todo está solucionado Salidas
F
para partido yT
para no partido.Sin competencia, 35 bytes
Uso:
Esto hace uso de expresiones regulares aplicables, que se implementó después de este desafío.
fuente
n
no se puede escribir sinosin
yln
.sa
como 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).coelostats
desencadena la trampa (enlo
yta
).Procesamiento, 223 bytes
Finalmente decidió hacer una respuesta sin expresiones regulares. Para llamar a la función, use
l("tasteless");
. Devuelve0
falso y1
verdadero.Código ampliado con explicación
Básicamente, iteramos sobre la cadena dada, construyendo
b
char 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,0
se devolverá o, de lo contrario, seguirá siendo válido. Al final, si el programa aún no ha devuelto algo, devuélvalo1
.fuente
d
función devolver abool
?boolean
queint
. Tambiéntrue
yfalse
requieren más bytes que1
y0
Scala, 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
1
para tipificable,0
para 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
1
significaPREG_SPLIT_NO_EMPTY
y le dicepreg_split
que solo devuelva resultados no vacíos. Si la entrada es tipificable,preg_split
solo 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
1
si 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:ta
tiene que estar parado antest
o 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
false
si la palabra no encaja en la expresión regular, de lo contrariotrue
.fuente