Usa ese buen meme

12

Actualmente hay un meme en Internet que consiste en tomar una oración, revertir el significado y agregar n'tal final. Por ejemplo, se I am smallconvierteI am talln't

Desafío

En aras del desafío, simplificaremos esto: su tarea será detectar cada vez que haya una negación en una oración, y reemplazarla con la 'positiva' n'tagregada al final. Habrá algunas partes difíciles que se explicarán en las reglas.

Reglas

  • Debe tomar una cadena como entrada y devolver una cadena como salida .
  • La entrada será una oración en minúsculas , con solo .y ,como signos de puntuación.
  • Tienes que reemplazar cualquiera no <any_word>o not <any_word>con <any_word>n't.
  • no/ nottiene que ser una palabra y no una subcadena: no tiene que cambiar nada ennone of those
  • Si la palabra ya termina con a n, debe reemplazarla n'tpor 't: no planconvertirse plan'ty no plann't
  • Cuando noo notno le sigue ninguna palabra, un signo de puntuación u otro no/ not, debe reemplazarlo por yesn't.
  • Las palabras compuestas cuentan como una sola palabra. así que incluso si no-opcontiene la subcadena no, no contiene la palabra no. Entonces el resultado será no-opy no -opn't .
  • No tiene que preocuparse por los errores gramaticales. Por ejemplo, there is no wayresultará en there is wayn't.
  • No se permiten lagunas estándar.
  • Este es , por lo que gana el código más corto.

Hay algunos ejemplos, incluso si este desafío parece claro, no por ahora.

Ejemplos

Entrada: me encanta codegolfing, pero no me gustan los programas cortos. ¿Tiene sentido esta oración ... por supuesto que no.
Salida: me encanta codegolfing, pero no me gustan los programas cortos. ¿Tiene sentido esta oración ... por supuesto que no.

Entrada : no estás invitado. Sal.
Salida : no estás invitado. Sal.

Entrada : no estoy bien, no tengo plan y no tengo pistola
Salida : no estoy bien, tengo plan y no tengo pistola

Entrada : oh no no no me niego.
Salida : oh sí, no sí, no en rechazar.

Entrada : oh no no no, me niego.
Salida : oh sí no sí no sí no, me niego.

Entrada : no puedo creer esto, no puedes codegolf.
Salida : no puedo creer esto, no puedes codegolf.

Entrada : oh no ... lo hizo de nuevo.
Salida : oh sí, no ... lo hizo de nuevo.

Entrada : nn't no es una palabra, Kevin. así que esto no es así.
Salida : no es una palabra, Kevin. así que esto no es así.

Entrada : ¿no está claro para todos?
Salida : ¿no está claro para todos?

Entrada : esto no tiene sentido ...
Salida : esto no tiene sentido ...

El chico al azar
fuente
1
En la introducción, no debería I am smallconvertirse I am bign't?
RedClover
44
Un punto dice "La entrada será [...] solo con solo. Y,". Otro se refiere a "no-op". Pero eso contiene un "-". Entonces, ¿está permitido "-" o no?
recursivo
Debería no nresultar en nn'to n't?
Kevin Cruijssen
no npodría resultar n'tporque la 'palabra' ntermina con a n.
El tipo al azar
@Soaku pequeño, alto, grande, pequeño, grande, largo, corto, etc., todos se usan indistintamente. Realmente no importa por el bien de la pregunta. Pero el antónimo más lógico para pequeño sería grande, sí.
Yates

Respuestas:

5

Retina , 86 70 65 bytes

T`-'`L
\bnot?\s+(?!not?\b)(\w+?)n?\b
$1n't
\bnot?\b
yesn't
T`L`-'

-16 bytes gracias a @Neil .
-5 bytes gracias a @ovs .

Pruébalo en línea.

Explicación:

T`-'`L             # Replace all "-" with "A" and all "'" with "B" to store them

\bnot?             # Then replace the word "no" or "not",
 \s+               #  followed by 1 or more whitespaces,
 (?!not?\b)(\w+?)  #  followed by a word/letter that is not "not" or "no"
 n?\b              #  minus a single trailing "n" if there are any
$1                 # with: the word/letter
 n't               #  appended with "n't"

\bnot?\b           # Then replace any remaining loose "no" or "not"
yesn't             # with "yesn't"

T`L`-'             # And finally replace all "A" with "-" and all "B" with "'" again
Kevin Cruijssen
fuente
Creo que este no debería ser el caso
Dead Possum
@DeadPossum Sí, pensé en eso por mí mismo y ya le pregunté a OP si "nn't" es posible en la entrada.
Kevin Cruijssen
1
Esto también es extraño
Dead Possum
1
Creo que lo he reducido a 70 bytes .
Neil
1
LAquí hay una abreviatura para A-Zguardar 2 bytes T`-'`ABy viceversa.
Neil
4

Python 2 , 208 123 113 146 bytes

lambda s:re.sub(r"\bnot?\b(?!['-])(\s(?!not?(\b)(?!['-]))([\w'-]+))?",lambda m:(m.group(3)or"yes")+"n't"[(m.group(3)or'')[-1:]=='n':],s)
import re

Pruébalo en línea!

Perdió un montón de bytes debido a las palabras que terminan en n'to n. Cualquiera o es más corto, pero manejar ambos fue más largo.

TFeld
fuente
1

Japt , 72 bytes

F=_r"%bnot?%s+(?!not?%b)(%w+?)n?%b|%bnot?%b(?!['-])",@Y=Y||"yes"Y+"n't"}

Pruébalo en línea!

Logern
fuente
Para "yes-no maybe-so", produce "yes - mayben't - so".
recursivo
0

Java 8, 163 136 bytes

s->s.replaceAll("(^|[ ,.])not?(?= *([,.]|$|not?(?=$|[ ,.])))","$1yesn't").replaceAll("(^|[ ,.])not? ([\\w'-]+?)n?(?=$|[ ,.])","$1$2n't")

-27 bytes creando un puerto de respuesta de @recursive 's Stax' .

Pruébalo en línea.

Kevin Cruijssen
fuente