Use esse bom meme

12

Atualmente, existe um meme na internet que consiste em tomar uma sentença, reverter o significado e adicionar n'tno final. Por exemplo, I am smalltorna-seI am talln't

Desafio

Para o desafio, simplificaremos o seguinte: sua tarefa será detectar sempre que houver uma negação em uma frase e substituí-la pela positiva, n'tadicionando no final. Haverá algumas partes complicadas que serão explicadas nas regras.

Regras

  • Você precisa pegar uma String como entrada e retornar uma String como saída .
  • A entrada será uma frase em minúscula , com apenas .e ,como sinais de pontuação.
  • Você tem que substituir qualquer no <any_word>ou not <any_word>com <any_word>n't.
  • no/ nottem que ser uma palavra e não uma substring: você não precisa alterar nadanone of those
  • Se a palavra já terminar com a n, você deverá substituir n'tpor 't: no plantorne plan'te não plann't
  • Quando noou notnão for seguido por nenhuma palavra, um sinal de pontuação ou outro no/ not, você deverá substituí-lo por yesn't.
  • palavras compostas contam como uma palavra. portanto, mesmo que no-opcontenha a substring no, não contém a palavra não. Então o resultado será no-ope não -opn't .
  • Você não precisa se preocupar com erros gramaticais. Por exemplo, there is no wayresultará em there is wayn't.
  • Não são permitidas brechas padrão.
  • Este é um , então o código mais curto vence.

Existem alguns exemplos, mesmo que esse desafio pareça claro, não por enquanto.

Exemplos

Entrada: eu amo codegolfing, mas eu não gosto de programas curtos. essa frase faz sentido ... é claro que não.
Saída: eu amo codegolfing, mas eu não gosto de programas curtos. Essa frase faz sentido ... é claro que não.

Entrada : você não está convidado. saia.
Saída : você não está convidado. saia.

Entrada : não estou bem, não tenho plano e não tenho armas
Saída : não estou bem, tenho plano e não tenho armas

Entrada : oh não não não eu recuso.
Saída : ah, sim, não, não, não se recusa.

Entrada : oh não não não, eu me recuso.
Saída : oh sim não sim não sim não, eu recuso.

Entrada : não acredito nisso, você não pode codegolf.
Saída : não acredito nisso, você não pode codegolf.

Entrada : oh não ... ele fez isso de novo.
Saída : oh sim não ... ele fez isso de novo.

Entrada : n't não é uma palavra, kevin. então isso não é não.
Saída : n't não é uma palavra, kevin. então isso não é não.

Entrada : isso não está claro, não é para todos
Saída : isso não está claro, não é para todos

Entrada : isso não faz sentido ...
Saída : isso não faz sentido ...

O cara aleatório
fonte
1
Na introdução, não deveria se I am smalltornar I am bign't?
RedClover
4
Um ponto diz "Entrada será apenas [...] apenas com. E". Outro refere-se a "no-op". Mas isso contém um "-". Então "-" é permitido ou não?
recursivo
Deve no nresultar em nn'tou n't?
Kevin Cruijssen
no ndeve resultar n'tporque a 'palavra' ntermina com a n.
O cara aleatório
@Saku pequeno, alto, grande, minúsculo, grande, longo, curto, etc. são todos usados ​​de forma intercambiável. Realmente não importa para o bem da questão. Mas o antônimo mais lógico para pequenos seria grande, sim.
Yates

Respostas:

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 graças a @Neil .
-5 bytes graças a @ovs .

Experimente online.

Explicação:

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
fonte
Eu acho que este não deve ser o caso
Morto Possum
@DeadPossum Sim, pensei nisso ainda e já perguntei à OP se "nn't" é possível na entrada.
Kevin Cruijssen
1
Isso é muito estranho
Morto Possum
1
Acho que reduzi para 70 bytes .
305 Neil
1
LAqui está uma abreviação de A-Z, economizando 2 bytes T`-'`ABe vice-versa.
305 Neil
4

Python 2 , 208 123 113 146 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

Experimente online!

Perdeu um monte de bytes por causa das palavras que terminam em n'tou n. Ou é mais curto, mas o manuseio de ambos foi mais longo.

TFeld
fonte
2

Stax , 75 73 50 bytes

ä§▀t9lJ₧5M#|+4╖¼├n▌ ·=┌«∙£╣▀K╖¥y▐▲·(■◄╙→á╣ó•ô╓╢Θ₧○

Execute e depure

recursivo
fonte
1

Japonês , 72 bytes

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

Experimente online!

Logern
fonte
Pois "yes-no maybe-so"produz "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 criando uma porta da resposta @recursive 's Stax' .

Experimente online.

Kevin Cruijssen
fonte