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 ...


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

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

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.





Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.