Користуйся тим, що не пам'ятаєш


12

В даний час в Інтернеті є меми, які складаються з прийому речення, перетворення змісту та додавання n'tв кінці. Наприклад, I am smallстаєI am talln't

Виклик

Заради виклику ми спростимо це: Ваше завдання полягатиме в тому, щоб виявити, коли в реченні є заперечення, і замінити його на «позитивне», n'tдодане в кінці. Будуть деякі хитрі частини, які будуть пояснені в правилах.

Правила

  • Ви повинні взяти String як вхід і повернути String як вихід .
  • Введення буде пропозиція в нижньому регістрі , і тільки .та , ,як знаки пунктуації.
  • Ви повинні замінити будь-яку 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не слід ні слова, знак пунктуації або інший no/ not, ви повинні замінити його yesn't.
  • складені слова вважаються одним словом. тому навіть якщо no-opмістить підрядку no, вона не містить слова « ні». Тож результат буде no-opі ні -opn't .
  • Не потрібно турбуватися про граматичні помилки. Наприклад, there is no wayпризведе до there is wayn't.
  • Не допускаються стандартні лазівки.
  • Це , тому найкоротший код виграє.

Є кілька прикладів, навіть якщо цей виклик наразі виглядає не зрозумілим.

Приклади

Вхід: я люблю кодогольфінг, але мені не подобаються короткі програми. чи має сенс це речення ... звичайно, ні.
Вихід: я люблю кодогольфінг, але я не люблю короткі програми. чи має сенс це речення ... звичайно, ні.

Вхід : вас не запрошують. забирайся.
Вихід : вас не запрошують. забирайся.

Вхід : я не в порядку, у мене немає плану, і у мене немає гармати
Вихід : я не в порядку, у мене немає плану, і у мене немає пістолета

Вхід : о ні ні ні я відмовляюся.
Вихід : о так, ні, не, не відмовляйся.

Вхід : о, ні, ні, я відмовляюся.
Вихід : о так, ні, так, ні, я відмовляюся.

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

Вхід : о ні, він це зробив ще раз.
Вихід : о так, ні ... він це зробив ще раз.

Введення : н не слово, кевін. так що це не nn.
Вихід : ні - це не слово, Кевін. тож це ні.

Вхід : чи не зрозуміло не для всіх
Вихід : це ясно не для всіх

Введення : це не має сенсу ...
Вихід : це не має сенсу ...


1
У вступі не слід I am smallставати I am bign't?
RedClover

4
Один момент говорить: "Вхід буде [...] лише лише. І,". Інша стосується "не-оп". Але це містить "-". Так дозволено чи ні?
рекурсивна

Чи має no nпризвести до nn'tабо n't?
Кевін Круїссен

no nможе призвести до того, n'tщо nзакінчується слово " a" n.
Випадковий хлопець

@ Соаку маленькі, високі, великі, крихітні, великі, довгі, короткі і т. Д. Всі використовуються взаємозамінно. Це не дуже важливо , заради питання. Але найбільш логічним антонімом для малих був би великий, так.
Йейтс

Відповіді:


5

Сітківка , 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

Я думаю, це не повинно бути так
Dead Possum

@DeadPossum Так, я ще про це подумав і вже запитував ОП, чи "n't" можливий на вході.
Кевін Круїссен

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. Або коротше, але поводження з обома було довше.





Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.