Recientemente he tenido algunos problemas con el nuevo intérprete de TeaScript . El mayor problema es identificar si una cadena contiene o no caracteres especiales.
Desafío
Un carácter especial se define como un carácter con un punto de código de 160 a 255. Se le dará una entrada que es una cadena de caracteres con puntos de código de 0 a 255, como máximo uno de los cuales es un carácter especial. La entrada consistirá en un prefijo de cero o más caracteres, una cadena entre comillas y un sufijo de cero o más caracteres. Si hay un carácter especial en la cadena entre comillas, debe generar un valor verdadero, de lo contrario, un valor falsey.
Detalles
- Los personajes
"'
se consideran citas. - Dentro de la cadena entre comillas,
\
se utilizará una barra invertida para escapar del siguiente carácter. En el prefijo y sufijo, no tiene un significado especial. - Las cotizaciones siempre serán equilibradas.
- Solo habrá una cadena entre comillas.
Ejemplos
"Hello, World¡"
true
"Hello, World"¡
false
"Hello' Wo\"rld\\"¡
false
ab"cd\"ef\\gh\i\\"£
false
\"foo¡"
true
'
cadenas y cadenas múltiples en un solo caso de prueba (idealmente con el carácter Unicode entre ellos).Respuestas:
Retina ,
1917 bytesGracias a user81655 por guardar 2 bytes.
El recuento de bytes utiliza ISO 8859-1.
La salida es 0 o 1.
Pruébalo en línea.
Explicación
Debido a los supuestos del desafío, el primero
'
o"
iniciará la única cadena de la entrada y el último'
o lo"
finalizará. Tampoco tenemos que preocuparnos de que sean iguales porque de todos modos se garantiza que serán iguales.Por lo tanto, la expresión regular solo intenta encontrar un carácter con el punto de código 161 a 255, inclusive, precedido por una cita y seguido por otra. Siempre habrá 0 o 1 partido.
fuente
"abc"¡'
? (Supongo que dependiendo de cómo lea el OP, esa comilla simple nunca puede aparecer en una entrada, pero técnicamente solo hay un conjunto de comillas en esta entrada).(['"]).*[¡-ÿ].*\1
. Resulta ser más práctico.Nota: Esto se puede hacer con una expresión regular simple.
s=>s.match`['"].*[¡-ÿ].*['"]`
tiene 29 bytes en JavaScript, pero es más divertido sin expresiones regulares:JavaScript (ES6),
8482 bytesExplicación
Devoluciones
1
portrue
y0
parafalse
. El" "
en el código a continuación es unU+00A0 NO-BREAK SPACE
(punto de código 160).Prueba
Mostrar fragmento de código
fuente