Introducción
La conversación callejera puede ser realmente difícil de entender, en particular para los programadores, que no son conocidos por ser muy callejeros.
Es su trabajo crear un intérprete para ayudarnos a todos a sobrevivir en el entorno urbano.
Reto
Dada una oración en inglés como entrada, cree un programa o una función que determine si el resultado de la oración es positivo o negativo.
La sentencia contendrá 0
a 2
palabras negativas. Como cualquier programador sabe, un doble negativo resulta positivo. Por lo tanto, su código debe generar o devolver un valor verdadero / falso según la siguiente regla:
No negative words -> truthy
One negative word -> falsey
Two negative words -> truthy
La lista de palabras negativas:
no
`not
`none
- Cualquier cosa que termine en
n't
never
`neither
`nor
nobody
`nothing
`nowhere
Hay un caso de borde. Cada vez que comienza una oración No,
, esa palabra no se trata como una palabra negativa al determinar el resultado (cuenta para el número de palabras negativas, por lo que puede haber solo una más).
La oración seguirá las reglas gramaticales básicas (mayúsculas, puntuación) y solo contendrá palabras que se pueden encontrar en un diccionario (por suerte, esto no invalida el título de la pregunta). La oración no contendrá ningún nombre propio (lo siento, Dr. No, estás fuera).
Casos de prueba
Verdad:
Yes.
It's noon.
Hello, World!
What is this?
Ain't no thang!
Never say never.
No, it's noon now.
Neither me nor you.
I didn't do nothing!
No, I am your father.
A non-alcoholic drink.
I can't get no satisfaction.
All your base are belong to us.
Falsey
No.
No, no!
Not today.
Neither am I.
Don't do that!
That's no moon!
And none survived.
Is this not my car?
No man is an island.
Nosebleeds are no fun.
Nothing compares to you.
That's a no, I'm afraid.
No, I am not your mother.
La ironía aquí, por supuesto, es que algunos de estos deben interpretarse de manera diferente. Pero bueno, no puedes culpar al orador por no ajustarse a nuestra lógica.
Reglas
Las lagunas estándar están prohibidas. Este es el código de golf , ¡así que sé conciso!
been
una oración 100% negativa!Respuestas:
Retina , 63 bytes
Pruébalo en línea!
Explicación
Eliminar
No,
de la entrada. Debido a las reglas de capitalización, esto solo puede aparecer al comienzo de la entrada, por lo que no necesitamos un explícito^
.Cuente el número de coincidencias de la expresión regular sin distinción entre mayúsculas y minúsculas después de
`
. Simplemente coincide con todas las palabras relevantes, donde he extraído prefijos / sufijos comunes con las alternativas.Cuenta
0
o2
s, entonces convertimos incluso cuentas en1
pares en cuentas impares0
.fuente
n't
no es necesario\b
después de eso, ya que las palabras tienen que venir de un diccionario. Además, tenía lo mismo, pero no tenía la esencia de la respuesta de manera concisa, usando un par de bytes más.Bash,
1151079998979585 bytesUtiliza paquetes Core Utilities (para
wc
) ygrep
. Suponga que la oración se da a través de la entrada estándar. La expansión del historial está deshabilitada porset +o histexpand
.Verifique el resultado: en Bash 0 es verdadero, 1 es falso
¿Como funciona?
18 bytes (115 a 99) guardados por la inspiración de Qwertiy 's respuesta y Martin Ender ' s respuesta . 1 byte gracias a Nahuel Fouilleul .
fuente
noon
y noThat's a no, I'm afraid.
((~$(grep -Pio "(?!^no,)\b(no(|t|r|ne|body|thing|where)|ne(v|ith)er)\b|.*n't\b"|wc -l)%2))
$(..)
guardar 1 byteJavascript ES6,
898786 caracteresPrueba:
fuente
Perl 5 , 74 bytes
Código de 73 bytes + 1 para
-p
.Pruébalo en línea!
fuente