Используйте это хорошо, не мем

12

В настоящее время в Интернете есть мем, который состоит из взятия предложения, изменения его значения и добавления n'tв конце. Например, I am smallстановитсяI am talln't

Вызов

Ради задачи мы упростим это: ваша задача будет обнаруживать, когда в предложении есть отрицание, и заменять его положительным с n'tдобавлением в конце. Будут некоторые хитрые части, которые будут объяснены в правилах.

правила

  • Вы должны взять строку в качестве входных данных и вернуть строку в качестве выходных данных .
  • Ввод будет предложение в нижнем регистре , только .и в ,виде знаков препинания.
  • Вы должны заменить любой no <any_word>или not <any_word>с <any_word>n't.
  • no/ notдолжно быть словом, а не подстрокой: вам не нужно ничего менять вnone of those
  • Если слово уже заканчивается на n, вы должны заменить n'tна 't: no planстать, plan'tа не plann't
  • Если после какого-либо слова, знака препинания или другого символа / noили за notним не следует , вы должны заменить его на .nonotyesn't
  • составные слова считаются одним словом. так что даже если no-opсодержит подстроку no, она не содержит слова нет. Так что результат будет no-opи нет -opn't .
  • Вам не нужно беспокоиться о грамматических ошибках. Например, there is no wayприведет к there is wayn't.
  • Стандартные лазейки не допускаются.
  • Это , поэтому выигрывает самый короткий код.

Есть несколько примеров, даже если этот вызов пока не ясен.

Примеры

Входные данные: я люблю заниматься гольфом, но не люблю короткие программы. имеет ли это предложение смысл ... конечно нет.
Вывод: я люблю заниматься гольфом, но не люблю короткие программы. имеет ли это предложение смысл ... конечно, да нет.

Вход : вы не приглашены. убирайся.
Вывод : вы не приглашены. убирайся.

вход : я не в порядке, у меня нет плана и у меня нет оружия
Выход : я в порядке, у меня нет плана и у меня нет оружия

вход : о нет, нет, я отказываюсь.
Вывод : о, да, нет, да, нет, не отказываюсь.

вход : о нет, нет, я отказываюсь.
Вывод : о да не да да нет нет, я отказываюсь.

вход : я не могу в это поверить, вы не можете кодегольф.
Вывод : я не могу в это поверить, ты не можешь играть в гольф.

вход : о нет ... он сделал это снова.
Вывод : о да нет ... он сделал это снова.

вход : нет, это не слово, Кевин. так что это не так.
Вывод : нет, нет, Кевин. так что это не так.

Вход : разве это не для всех?
Выходные данные : не для всех ли?

Входные данные : это не имеет смысла ...
Выходные данные : это не имеет смысла ...

Случайный парень
источник
1
Во введении не должно I am smallстать I am bign't?
RedClover
4
Одна точка говорит: «Ввод будет [...] только с помощью только. И,». Другое относится к «без операции». Но это содержит "-". Так "-" разрешено или нет?
рекурсивный
Должен no nпривести nn'tили n't?
Кевин Круйссен
no nможет привести к тому, n'tчто «слово» nзаканчивается на n.
Случайный парень
@ Соаку маленький, высокий, большой, крошечный, большой, длинный, короткий и т. Д. - все они взаимозаменяемы. Это не имеет значения ради вопроса. Но самый логичный антоним для малого будет большим, да.
Йейтс

Ответы:

5

Retina , 86 70 65 байт

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

-16 байт благодаря @Neil .
-5 байт благодаря @ovs .

Попробуйте онлайн.

Объяснение:

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
Кевин Круйссен
источник
Я думаю, что это не должно иметь место
Мертвый Опоссум
@DeadPossum Да, я сам еще об этом думал и уже спросил OP, возможно ли на входе "нет".
Кевин Круйссен
1
Это тоже странно
Мертвый Опоссум
1
Я думаю, что у меня это до 70 байтов .
Нил
1
Lвот сокращение для A-Zсохранения 2 байтов T`-'`ABи наоборот.
Нил
4

Python 2 , 208 123 113 146 байт

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

Попробуйте онлайн!

Потерял кучу байтов из-за слов, заканчивающихся на n'tили n. Либо или короче, но обработка обоих была длиннее.

TFeld
источник