Użyj tego dobrego nie memu

12

Obecnie w Internecie jest mem, który polega na zrobieniu zdania, odwróceniu znaczenia i dodaniu n'tna końcu. Na przykład I am smallstaje sięI am talln't

Wyzwanie

Dla uproszczenia uprościmy to: Twoim zadaniem będzie wykrycie, gdy w zdaniu występuje zaprzeczenie, i zastąpienie go „pozytywnym” z n'tdodanym na końcu. Będą pewne trudne części, które zostaną wyjaśnione w zasadach.

Zasady

  • Musisz wziąć String jako dane wejściowe i zwrócić String jako dane wyjściowe .
  • Wejście będzie zdanie małymi literami , a tylko .i ,jako znaki interpunkcyjne.
  • Trzeba zastąpić dowolny no <any_word>lub not <any_word>z <any_word>n't.
  • no/ notmusisz być słowem, a nie podciągiem: nie musisz niczego zmieniaćnone of those
  • Jeśli słowo już skończyć z n, trzeba wymienić n'tz 't: no planstać plan'ti nie plann't
  • Kiedy nolub notnie następuje jakiekolwiek słowo, znak interpunkcyjny lub inny no/ not, trzeba go zastąpić yesn't.
  • słowa złożone liczą się jako jedno słowo. więc nawet jeśli no-opzawierają podłańcuch no, nie zawiera słowa „ nie”. Tak więc wynik będzie no-opi nie -opn't .
  • Nie musisz się martwić błędami gramatycznymi. Na przykład there is no wayspowoduje there is wayn't.
  • Niedozwolone są standardowe luki.
  • To jest , więc wygrywa najkrótszy kod.

Istnieje kilka przykładów, nawet jeśli na razie to wyzwanie nie wydaje się jasne.

Przykłady

Wejście: uwielbiam codegolfing, ale nie lubię krótkich programów. czy to zdanie ma sens ... oczywiście nie.
Wyjście: kocham kodowanie, ale nie lubię krótkich programów. czy to zdanie ma sens ... oczywiście, że nie.

Wejście : nie jesteś zaproszony. wyjść.
Wyjście : nie jesteś zaproszony. wyjść.

Wejście : Nie jestem w porządku, nie mam planu i nie mam Gunn
Output : jestem okn't, mam plan't i mam gunn't

Dane wejściowe : o nie nie nie odmawiam.
Wyjście : o tak nie tak nie odmów.

Dane wejściowe : o nie nie nie, odmawiam.
Wyjście : och tak nie tak nie tak nie, odmawiam.

Wkład : nie mogę w to uwierzyć, nie możesz kodegolfa.
Wyjście : nie mogę w to uwierzyć, nie możesz kodegolfa.

Wkład : och nie ... zrobił to jeszcze raz.
Wyjście : o tak nie ... zrobił to ponownie.

Wejście : n nie jest słowem, Kevin. więc to nie jest nie to.
Wyjście : n nie jest słowem an't, Kevin. więc tak nie jest.

Dane wejściowe : czy nie jest to jasne, nie dla wszystkich Dane
wyjściowe : czy to nie jest jasne, nie dla wszystkich

Dane wejściowe : to nie ma sensu ... Dane
wyjściowe : to nie ma sensu ...

Przypadkowy facet
źródło
1
Na wstępie nie powinno I am smallsię stać I am bign't?
RedClover
4
Jeden punkt mówi: „Dane wejściowe będą tylko [...] tylko z i.”. Inny odnosi się do „no-op”. Ale to zawiera „-”. Czy więc „-” jest dozwolone, czy nie?
rekurencyjny
Powinien no nskutkować nn'tlub n't?
Kevin Cruijssen
no nmoże wynikać z n'ttego, że „słowo” nkończy się na n.
Przypadkowy facet
@Soaku małe, wysokie, duże, małe, duże, długie, krótkie itp. Są używane zamiennie. To tak naprawdę nie ma znaczenia ze względu na pytanie. Ale najbardziej logiczny antonim dla małych byłby duży, tak.
Yates

Odpowiedzi:

5

Siatkówka , 86 70 65 bajtów

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

-16 bajtów dzięki @Neil .
-5 bajtów dzięki @ovs .

Wypróbuj online.

Wyjaśnienie:

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
źródło
Myślę, że tak nie powinno być
Dead Possum
@DeadPossum Tak, jeszcze o tym pomyślałem i już zapytałem OP, czy „n nie” jest możliwe w danych wejściowych.
Kevin Cruijssen
1
To również dziwne
Dead Possum
1
Myślę, że mam to do 70 bajtów .
Neil
1
Ltutaj jest skrót A-Z, oszczędzając 2 bajty T`-'`ABi na odwrót.
Neil
4

Python 2 , 208 123 113 146 bajtów

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

Wypróbuj online!

Straciłem kilka bajtów z powodu słów kończących się na n'tlub n. Albo albo jest krótszy, ale obsługa obu była dłuższa.

TFeld
źródło
2

Stax , 75 73 50 bajtów

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

Uruchom i debuguj

rekurencyjny
źródło
1

Japt , 72 bajty

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

Wypróbuj online!

Logern
źródło
Ponieważ "yes-no maybe-so"produkuje "yes - mayben't - so".
rekursywny
0

Java 8, 163 136 bajtów

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

-27 bajtów poprzez utworzenie portu odpowiedzi Stax na @recursive .

Wypróbuj online.

Kevin Cruijssen
źródło