Recentemente, tenho tido alguns problemas com o novo intérprete TeaScript . O maior problema é identificar se uma sequência contém ou não caracteres especiais.
Desafio
Um caractere especial é definido como um caractere com pontos de código 160 a 255. Você receberá uma entrada que é uma sequência de caracteres com pontos de código de 0 a 255, no máximo um dos quais é um caractere especial. A entrada consistirá em um prefixo de zero ou mais caracteres, uma string entre aspas e um sufixo de zero ou mais caracteres. Se houver um caractere especial na cadeia de caracteres citada, você deve gerar um valor verdadeiro, caso contrário, um valor falsey.
Detalhes
- Os caracteres
"'
são considerados aspas. - Dentro da cadeia de caracteres citada, uma barra invertida
\
será usada para escapar do seguinte caractere. No prefixo e sufixo, ele não tem significado especial. - As cotações sempre serão equilibradas.
- Haverá apenas uma string entre aspas.
Exemplos
"Hello, World¡"
true
"Hello, World"¡
false
"Hello' Wo\"rld\\"¡
false
ab"cd\"ef\\gh\i\\"£
false
\"foo¡"
true
'
cadeias e várias cadeias em um único caso de teste (idealmente com o caractere Unicode entre eles).Respostas:
Retina ,
1917 bytesAgradecemos a user81655 por salvar 2 bytes.
A contagem de bytes usa a ISO 8859-1.
A saída é 0 ou 1.
Experimente online.
Explicação
Devido às suposições do desafio, o primeiro
'
ou"
iniciará a única sequência da entrada e a última'
ou a"
finalizará. Também não precisamos nos preocupar se eles são os mesmos, porque eles são garantidos para serem os mesmos.Portanto, a regex apenas tenta encontrar um caractere com os pontos de código 161 a 255, inclusive, que é precedido por uma citação e seguido por outro. Sempre haverá 0 ou 1 correspondência.
fonte
"abc"¡'
? (Eu acho que dependendo de como você ler o OP, que aspas simples nua nunca pode ocorrer em uma entrada, mas tecnicamente há apenas um conjunto de citações neste entrada.)(['"]).*[¡-ÿ].*\1
. Acontece ser mais prático.Nota: Isso pode ser feito com uma expressão regular simples.
s=>s.match`['"].*[¡-ÿ].*['"]`
tem 29 bytes em JavaScript, mas é mais divertido sem expressões regulares:JavaScript (ES6),
8482 bytesExplicação
Retorna
1
paratrue
e0
parafalse
. O" "
código abaixo é umU+00A0 NO-BREAK SPACE
(ponto de código 160).Teste
Mostrar snippet de código
fonte