Usa quel meme non buono


12

Attualmente esiste un meme su Internet che consiste nel prendere una frase, capovolgere il significato e aggiungere n'talla fine. Ad esempio, I am smalldiventaI am talln't

Sfida

Per il bene della sfida, semplificheremo questo: il tuo compito sarà quello di rilevare ogni volta che c'è una negazione in una frase e sostituirla con quella "positiva" con n'taggiunta alla fine. Ci saranno alcune parti difficili che verranno spiegate nelle regole.

Regole

  • Devi prendere una stringa come input e restituire una stringa come output .
  • L'input sarà una frase in minuscolo , con solo .e ,come segni di punteggiatura.
  • Devi sostituire qualsiasi no <any_word>o not <any_word>con <any_word>n't.
  • no/ notdeve essere una parola e non una sottostringa: non devi cambiare nulla innone of those
  • Se la parola termina già con a n, devi sostituirla n'tcon 't: no plandiventa plan'te no plann't
  • Quando noo notnon è seguito da nessuna parola, un segno di punteggiatura o un altro no/ not, è necessario sostituirlo con yesn't.
  • le parole composte contano come una parola. quindi anche se no-opcontiene la sottostringa no, non contiene la parola no. Quindi il risultato sarà no-ope non -opn't .
  • Non devi preoccuparti di errori grammaticali. Ad esempio, there is no wayrisulterà there is wayn't.
  • Non sono ammesse scappatoie standard.
  • Questo è , quindi vince il codice più corto.

Ci sono alcuni esempi, anche se questa sfida sembra chiara, per ora.

Esempi

Input: adoro il codegolfing, ma non mi piacciono i programmi brevi. ha senso questa frase ... certo che no.
Output: amo il codegolfing, ma non mi piacciono i programmi brevi. ha senso questa frase ... certo che no.

Input : non sei invitato. esci.
Output : non sei invitato. esci.

Input : non sto bene, non ho un piano e non ho un gunn
Output : non sto bene, non ho un piano e non ho una pistola

Input : oh no no no rifiuto.
Uscita : oh sì, non sì, non rifiutare.

Input : oh no no no, rifiuto.
Uscita : oh sì no sì no sì, rifiuto.

Input : non ci posso credere, non puoi codegolf.
Output : non ci posso credere, non puoi codegolf.

Input : oh no ... l'ha fatto di nuovo.
Uscita : oh sì no ... l'ha fatto di nuovo.

Input : n't non è una parola, Kevin. quindi non è così.
Risultato : n't is an't word, kevin. quindi non è così.

Input : non è chiaro non per tutti
Output : è chiaro non è per tutti

Input : questo non ha senso ...
Output : questo non ha senso ...


1
Nell'introduzione, non dovrebbe I am smalldiventare I am bign't?
RedClover,

4
Un punto dice "L'ingresso sarà [...] solo con solo. E,". Un altro si riferisce a "no-op". Ma questo contiene un "-". Quindi "-" è permesso o no?
ricorsivo

Dovrebbe no nrisultare in nn'to n't?
Kevin Cruijssen,

no npotrebbe risultare n'tperché la "parola" ntermina con a n.
Il ragazzo a caso

@Soaku piccoli, alti, grandi, piccoli, grandi, lunghi, corti ecc. Sono tutti usati in modo intercambiabile. Non importa davvero per il bene della domanda. Ma il più logico antonimo per i piccoli sarebbe grande, sì.
Yates,

Risposte:


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 grazie a @Neil .
-5 byte grazie a @ovs .

Provalo online.

Spiegazione:

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

Credo che questo non dovrebbe essere il caso
Morto Possum

@DeadPossum Sì, ci ho già pensato e ho già chiesto a OP se "n't" è possibile nell'input.
Kevin Cruijssen,


1
Penso di averlo ridotto a 70 byte .
Neil,

1
Lecco una scorciatoia per A-Z, risparmiando 2 byte sopra T`-'`ABe viceversa.
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

Provalo online!

Perso un mucchio di byte a causa delle parole che terminano con n'to n. O è più breve, ma la gestione di entrambi è stata più lunga.





Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.