Verwenden Sie das Gute nicht meme

12

Derzeit gibt es ein Mem im Internet, das aus dem Aufnehmen eines Satzes, dem Umkehren der Bedeutung und dem Hinzufügen n'tam Ende besteht. Zum Beispiel I am smallwirdI am talln't

Herausforderung

Im Interesse der Herausforderung vereinfachen wir dies: Ihre Aufgabe ist es, zu erkennen, wann immer ein Satz eine Negation enthält, und diese durch die 'positive' zu ersetzen, die n'tam Ende hinzugefügt wird. Es wird einige knifflige Teile geben, die in den Regeln erklärt werden.

Regeln

  • Sie müssen einen String als Eingabe nehmen und einen String als Ausgabe zurückgeben .
  • Die Eingabe erfolgt in Kleinbuchstaben mit nur .und ,als Interpunktionszeichen.
  • Sie müssen eine no <any_word>oder not <any_word>mit ersetzen <any_word>n't.
  • no/ notHaben ein Wort und seine nicht ein Teil: Sie haben nichts zu ändern innone of those
  • Wenn das Wort bereits mit einem nendet, müssen Sie ersetzen n'tdurch 't: no planwerden plan'tund nicht plann't
  • Wenn nooder notwird von keinem Wort gefolgt, ein Satzzeichen oder ein anderes no/ not, müssen Sie es mit ersetzen yesn't.
  • zusammengesetzte Wörter zählen als ein Wort. Selbst wenn no-opder Teilstring enthalten ist no, enthält er nicht das Wort no. So wird das Ergebnis sein no-opund nicht -opn't .
  • Sie müssen sich nicht um Grammatikfehler kümmern. Zum Beispiel there is no wayergibt sich zu there is wayn't.
  • Keine Standardlücken erlaubt.
  • Das ist , also gewinnt der kürzeste Code.

Es gibt einige Beispiele, auch wenn diese Herausforderung vorerst nicht klar scheint.

Beispiele

Input: Ich liebe Codegolf, aber ich mag keine kurzen Programme. macht dieser satz sinn ... natürlich nein.
Ausgabe : Ich liebe Codegolf, aber ich mag keine kurzen Programme. Ist dieser Satz sinnvoll ... natürlich nicht.

Eingabe : Sie werden nicht eingeladen. geh raus.
Ausgabe : Sie sind nicht eingeladen. geh raus.

Input : Ich bin nicht in Ordnung, ich habe keinen Plan und ich habe kein Gewehr
Output : Ich bin in Ordnung, ich habe keinen Plan und ich habe keinen Gewehr

Eingabe : oh nein nein nein ich lehne ab.
Ausgang : oh ja nicht ja nicht nicht verweigern.

Eingabe : oh nein nein nein, ich lehne ab.
Ausgabe : oh ja nicht ja nicht ja nicht, ich lehne ab.

Input : Ich kann das nicht glauben, du kannst nicht codegolf spielen.
Ausgabe : Ich kann das nicht glauben, du kannst nicht codegolf spielen.

Input : oh nein ... er hat es wieder getan.
Output : oh ja nicht ... er hat es wieder getan.

Eingabe : n't ist kein Wort, Kevin. das ist also nicht n nicht.
Ausgabe : n't ist kein Wort, Kevin. das ist also nicht nicht.

Input : ist es nicht klar, nicht für alle
Output : ist es nicht klar, nicht für alle

Input : Das ist nicht sinnvoll ...
Output : Das ist nicht sinnvoll ...

Der zufällige Typ
quelle
1
In der Einleitung sollte nicht I am smallwerden I am bign't?
RedClover
4
Ein Punkt besagt: "Die Eingabe erfolgt [...] nur mit. Und". Ein anderer bezieht sich auf "no-op". Aber das enthält ein "-". Also ist "-" erlaubt oder nicht?
rekursiver
Sollte in no nFolge nn'toder n't?
Kevin Cruijssen
no nDies kann dazu führen, n'tdass das Wort nmit einem endet n.
Der zufällige Kerl
@ Soaku klein, groß, groß, klein, groß, lang, kurz usw. werden alle austauschbar verwendet. Es ist nicht wirklich wichtig für die Frage. Aber das logischste Antonyme für klein wäre groß, ja.
Yates

Antworten:

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 dank @Neil .
-5 Bytes dank @ovs .

Probieren Sie es online aus.

Erläuterung:

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
quelle
Ich denke, das sollte nicht der Fall sein
Dead Possum
@DeadPossum Ja, ich habe gerade erst darüber nachgedacht und OP bereits gefragt, ob bei der Eingabe "nicht" möglich ist.
Kevin Cruijssen
1
Das ist auch seltsam
Dead Possum
1
Ich glaube, ich habe es auf 70 Bytes reduziert .
Neil
1
LHier ist eine Abkürzung für A-Zund spart 2 Bytes T`-'`ABund umgekehrt.
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

Probieren Sie es online!

Ich habe eine Menge Bytes verloren, weil Wörter auf n'toder enden n. Entweder oder ist kürzer, aber die Bearbeitung beider war länger.

TFeld
quelle
1

Japt , 72 Bytes

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

Probieren Sie es online!

Logern
quelle
Denn "yes-no maybe-so"es produziert "yes - mayben't - so".
rekursiver
0

Java 8, 163 136 Bytes

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

-27 Bytes durch Erstellen eines Ports mit der Antwort @recursive 's Stax' .

Probieren Sie es online aus.

Kevin Cruijssen
quelle