Gunakan meme yang bagus itu

12

Saat ini ada meme di internet yang terdiri dari mengambil kalimat, membalikkan makna dan menambahkan n'tdi akhir. Misalnya, I am smallmenjadiI am talln't

Tantangan

Demi tantangan, kami akan menyederhanakan ini: Tugas Anda adalah untuk mendeteksi setiap kali ada negasi dalam kalimat, dan menggantinya dengan yang 'positif' dengan n'tmenambahkan di akhir. Akan ada beberapa bagian rumit yang akan dijelaskan dalam aturan.

Aturan

  • Anda harus mengambil sebuah String sebagai input , dan mengembalikan sebuah String sebagai output .
  • Input akan berupa kalimat dalam huruf kecil , hanya dengan .dan ,sebagai tanda baca.
  • Anda harus mengganti no <any_word>atau not <any_word>dengan <any_word>n't.
  • noSaya notharus menjadi kata dan bukan substring: Anda tidak perlu mengubah apa pun dinone of those
  • Jika kata sudah selesai dengan a n, Anda harus mengganti n'tdengan 't: no planmenjadi plan'tdan tidak plann't
  • Ketika noatau nottidak diikuti oleh kata apa pun, tanda baca atau yang lain no/ not, Anda harus menggantinya dengan yesn't.
  • kata majemuk dihitung sebagai satu kata. jadi meskipun no-opmengandung substring no, itu tidak mengandung kata no. Jadi hasilnya akan no-opdan tidak -opn't .
  • Anda tidak perlu khawatir tentang kesalahan tata bahasa. Misalnya, there is no wayakan menghasilkan there is wayn't.
  • Tidak ada celah standar yang diizinkan.
  • Ini , jadi kode terpendek menang.

Ada beberapa contoh, bahkan jika tantangan ini terlihat jelas bukan untuk saat ini.

Contohnya

Input: Saya suka codegolfing, tetapi saya tidak suka program pendek. apakah kalimat ini masuk akal ... tentu saja tidak.
Keluaran: Saya suka codegolfing, tetapi saya tidak suka program pendek. apakah kalimat ini masuk akal ... tentu saja tidak.

Input : Anda tidak diundang. keluar.
Keluaran : Anda diundang bukan. keluar.

Input : saya tidak baik-baik saja, saya tidak punya rencana dan saya tidak punya gunn
Output : saya tidak baik-baik saja, saya tidak punya apa-apa

Input : oh tidak, tidak, tidak saya tolak.
Keluaran : oh ya tidak ya tidak menolak.

Input : oh tidak tidak tidak, saya menolak.
Keluaran : oh ya tidak ya tidak ya tidak, saya menolak.

Input : saya tidak percaya ini, Anda tidak bisa codegolf.
Keluaran : saya tidak percaya ini, Anda tidak bisa codegolf.

Input : oh tidak ... dia melakukannya lagi.
Output : oh ya tidak ... dia melakukannya lagi.

Masukan : bukan bukan kata, kevin. jadi ini bukan bukan.
Keluaran : bukan, bukan kata, kevin. jadi ini bukan.

Input : apakah tidak jelas untuk semua orang
Keluaran : apakah ini jelas untuk semua orang?

Input : ini tidak masuk akal ...
Output : ini tidak masuk akal ...

Pria acak
sumber
1
Dalam pengantar, seharusnya tidak I am smallmenjadi I am bign't?
RedClover
4
Satu titik mengatakan "Input hanya akan [...] hanya dengan. Dan,". Lainnya mengacu pada "no-op". Tapi itu mengandung "-". Jadi apakah "-" diizinkan atau tidak?
rekursif
Haruskah no nmenghasilkan nn'tatau n't?
Kevin Cruijssen
no ndapat mengakibatkan n'tkarena 'kata' ndiakhiri dengan a n.
Pria acak
@ Soaku kecil, tinggi, besar, kecil, besar, panjang, pendek dll semua digunakan secara bergantian. Tidak benar-benar peduli demi pertanyaan. Tapi antonim paling logis untuk kecil adalah besar, ya.
Yates

Jawaban:

5

Retina , 86 70 65 byte

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

-16 byte terima kasih kepada @Neil .
-5 byte terima kasih kepada @ovs .

Cobalah online.

Penjelasan:

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
sumber
Saya pikir ini seharusnya tidak terjadi
Dead Possum
@DeadPossum Ya, pikirkan tentang itu sendiri dan sudah bertanya OP apakah "tidak" mungkin dalam input.
Kevin Cruijssen
1
Ini aneh juga
Dead Possum
1
Saya pikir saya sudah mendapatkannya hingga 70 byte .
Neil
1
Ldi sini adalah singkatan untuk A-Z, menghemat 2 byte lebih T`-'`ABdan sebaliknya.
Neil
4

Python 2 , 208 123 113 146 byte

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

Cobalah online!

Kehilangan banyak byte karena kata-kata yang berakhiran n'tatau n. Baik atau lebih pendek, tetapi menangani keduanya lebih lama.

TFeld
sumber
2

JavaScript (Node.js) , 95 byte

s=>s.replace(/\bnot?\b( (?!not?\b)(['\w-]*(\w)))?/g,(a,b,s,t)=>(s||'yes')+(t=='n'?'':'n')+"'t")

Cobalah online!

Terima kasih kepada Rick Hitchcock untuk 2 byte

l4m2
sumber
2

Stax , 75 73 50 byte

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

Jalankan dan debug itu

rekursif
sumber
1

Japt , 72 byte

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

Cobalah online!

Logern
sumber
Sebab "yes-no maybe-so", itu menghasilkan "yes - mayben't - so".
rekursif
0

Java 8, 163 136 byte

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

-27 byte dengan membuat port jawaban 's Stax' @recursive .

Cobalah online.

Kevin Cruijssen
sumber