Monday Mini-Golf # 5: <s> Non </s> provalo a casa


24

Mini-golf del lunedì: una serie di domande sul corto , pubblicate (si spera!) Ogni lunedì.

A volte la gente si stanca delle regole della vita: "non farlo", "non puoi farlo", "non ti permetteremo di farlo". A volte può sembrare davvero restrittivo! Ma ogni tanto è bello divertirsi un po ', quindi scriviamo un po' di codice per modificare queste regole. E mentre ci siamo, potrebbe anche modificare altre negatività. (Naturalmente, queste modifiche non saranno solo temporanee, quindi lasceremo anche la formulazione originale.)

Sfida

La tua sfida è quella di scrivere un programma o una funzione che metta le <s>barrette HTML </s>intorno a parole restrittive - ovvero parole che finiscono n'to seguite da not- e dopo ognuna di esse, inserisce il suo equivalente positivo in TUTTI MAIUSCOLI. Alla fine, dopo uno spazio, dovrebbe essere incluso il numero di sostituzioni effettuate. Per esempio:

Please don't jump into the pool.

diventa

Please <s>don't</s> DO jump into the pool. 1

Per le parole che terminano in n'to seguite da not(oltre che cannot), l'equivalente positivo è tutto fino a quanto sopra not(spazi esclusi). Ecco cosa intendo:

  • do not speak diventa <s>do not</s> DO speak
  • it doesn't work diventa it <s>doesn't</s> DOES work
  • we cannot diventa we <s>cannot</s> CAN

Comunque, ci sono alcune eccezioni. Assicurarsi che siano gestiti correttamente.

can't -> <s>can't</s> CAN
won't -> <s>won't</s> WILL
ain't -> <s>ain't</s> AM
shan't -> <s>shan't</s> SHALL
I'm not -> <s>I'm not</s> I AM
you're not -> <s>you're not</s> YOU ARE

Dettagli

  • L'input non conterrà mai spazi bianchi tranne gli spazi normali (senza tabulazioni, newline, ecc.).
  • L'input non conterrà mai doppi negativi (ad es we can't not do this.).
  • Se a notappare immediatamente dopo un segno di punteggiatura o come parte di un'altra parola, lascialo.
  • Assicurati di conservare il testo originale, incluso maiuscolo / minuscolo, tra i <s></s>tag.
  • Se lo desideri, puoi utilizzare <strike></strike>al posto di <s></s>.

Casi test

ingressi:

I'm sorry, but you can't do that.
Driving on the beach isn't allowed.
Driving on the beach is not allowed.
Please don't jump in; I cannot imagine what might come of that.
Don't worry; we won't get into trouble.
I'm not perfect, but you're not either.
You shan't do it 'cause I ain't doin' it!
Can't we capitalize special cases?
I don't like the words can't, shan't, won't, don't, ain't, or ppcgn't.
Oh, this? It's nothing.
Tie a slipknot in the rope.
Would you like Pinot Noir?
This sentence contains none of the replacement words. Not even knot or ca't.
This sentence doesn't contain one of the replacement words.

Uscite:

I'm sorry, but you <s>can't</s> CAN do that. 1
Driving on the beach <s>isn't</s> IS allowed. 1
Driving on the beach <s>is not</s> IS allowed. 1
Please <s>don't</s> DO jump in; I <s>cannot</s> CAN imagine what might come of that. 2
<s>Don't</s> DO worry; we <s>won't</s> WILL get into trouble. 2
<s>I'm not</s> I AM perfect, but <s>you're not</s> YOU ARE either. 2
You <s>shan't</s> SHALL do it 'cause I <s>ain't</s> AM doin' it! 2
<s>Can't</s> CAN we capitalize special cases? 1
I <s>don't</s> DO like the words <s>can't</s> CAN, <s>shan't</s> SHALL, <s>won't</s> WILL, <s>don't</s> DO, <s>ain't</s> AM, or <s>ppcgn't</s> PPCG. 7
Oh, this? It's nothing. 0
Tie a slipknot in the rope. 0
Would you like Pinot Noir? 0
This sentence contains none of the replacement words. Not even knot or ca't. 0
This sentence <s>doesn't</s> DOES contain one of the replacement words. 1

punteggio

Questo è , quindi vince il codice valido più breve in byte. Tiebreaker va all'invio che ha raggiunto per primo il numero di byte finale. Il vincitore non sarà scelto il prossimo lunedì 26 ottobre. Buona fortuna!


@FryAmTheEggman Sì, a meno che non ce ne siano altri che vale la pena aggiungere all'elenco. Preferirei essere breve, ma hai qualche suggerimento?
ETHproductions

No, non volevo che questo soffrisse della sindrome da sfida "hai cambiato le specifiche ora fa schifo": P
FryAmTheEggman

1
Caso di prova suggerito:Can't we capitalize special cases?
DLosc,

Dobbiamo stare attenti con stringhe come: Oh this? It's nothing...o I wonder if we'll notice any words like this??
Dom Hastings,

2
Uno <strike> non </strike> semplicemente converte i meme in concorsi!
Jan

Risposte:


7

Pip , 138 140 byte

Sì, quella cannot/ knotdistinzione è difficile.

x:"ca wo ai sha i'm you're"^sY"CAN0WILL0AM0SHALL0I AM0YOU ARE"^0OqR-`([\w']+)( no|n'|(?<=can)no)t\b`{++i"<s>".a."</s>".s.((yx@?LCb)|UCb)}s.i

Legge una riga da stdin, output a stdout. La regex:

`([\w']+)( no|n'|(?<=can)no)t\b`

corrisponde a una parola (compresi gli apostrofi) seguita da una delle tre cose:

  • not
  • n't
  • not senza spazio, a condizione che la prima metà della parola fosse can

L' -operatore su un regex lo rende insensibile al maiuscolo / minuscolo.

Le partite vengono sostituite con il risultato della seguente funzione. (Nota: all'interno della funzione,a è l'intera corrispondenza ed bè il gruppo di acquisizione 1.)

{++i"<s>".a."</s>".s.((yx@?LCb)|UCb)}
 ++i                                   Increment counter
    "<s>".a."</s>"                     Return entire match wrapped in HTML tags...
                  .s.(             )   plus space, plus the following:
                           LCb         Lowercase first capture group
                        x@?            Find its index in list x of special cases (nil if
                                         not in list)
                      (y      )        Use that as index into list y of replacements
                               |UCb    If it wasn't a special case, this is nil, and we
                                         instead use uppercase(b)

Una volta eseguita la stringa modificata, viene inoltre generato uno spazio e il numero di sostituzioni i.


3

GNU Sed, 321 byte

(incluso +1 per -r)

:
s!(can('|no)t)([^<])!<s>\1</s> CAN\3!i
s!(won't)([^<])!<s>\1</s> WILL\2!i
s!(ain't)([^<])!<s>\1</s> AM\2!i
s!(shan't)([^<])!<s>\1</s> SHALL\2!i
s!(I'm not)([^<])!<s>\1</s> I AM\2!i
s!(you're not)([^<])!<s>\1</s> YOU ARE\2!i
t
s!(([^ .!?]+)(n't| not))([^<])!<s>\1</s> \U\2\4!i
t
h
s/1//g
s/<s>/1/g
s/[^1]//g
x
G
s/\n/ /

"Sostituzione delle stringhe: un lavoro per sed!" Ho pensato. Ma questo è stato sorprendentemente difficile, e ho continuato a diffondermi con la sostituzione del testo originale. E il conteggio! Almeno non c'è divieto di unario nella domanda ...


2

Perl, 153 byte

150 sceneggiatura + 3 per -p

$c=0|s!\b((ca)nnot|([\w']+)(?: not|n't))\b!"<s>$&</s> ".uc({ai,AM,ca,CAN,wo,WILL,sha,SHALL,"i'm","I AM","you're","YOU ARE"}->{lc$+}||$+)!egi;s/
/ $c
/

Quindi, mentre abbino tutti i casi di test ora, ma quel regex mi è costato caro ... Ci penserò!

Esempio di output:

$perl -p can.pl <<< "I'm sorry, but you can't do that.
Driving on the beach isn't allowed.
Driving on the beach is not allowed.
Please don't jump in; I cannot imagine what might come of that.
Don't worry; we won't get into trouble.
I'm not perfect, but you're not either.
You shan't do it 'cause I ain't doin' it!
Can't we capitalize special cases?
I don't like the words can't, shan't, won't, don't, ain't, or ppcgn't.
Oh, this? It's nothing.
This sentence contains none of the replacement words. Not even knot or ca't.
This sentence doesn't contain one of the replacement words.
Tie a slipknot in the rope.
Would you like Pinot Noir?
You cannot be serious\!"
I'm sorry, but you <s>can't</s> CAN do that. 1
Driving on the beach <s>isn't</s> IS allowed. 1
Driving on the beach <s>is not</s> IS allowed. 1
Please <s>don't</s> DO jump in; I <s>cannot</s> CAN imagine what might come of that. 2
<s>Don't</s> DO worry; we <s>won't</s> WILL get into trouble. 2
<s>I'm not</s> I AM perfect, but <s>you're not</s> YOU ARE either. 2
You <s>shan't</s> SHALL do it 'cause I <s>ain't</s> AM doin' it! 2
<s>Can't</s> CAN we capitalize special cases? 1
I <s>don't</s> DO like the words <s>can't</s> CAN, <s>shan't</s> SHALL, <s>won't</s> WILL, <s>don't</s> DO, <s>ain't</s> AM, or <s>ppcgn't</s> PPCG. 7
Oh, this? It's nothing. 0
This sentence contains none of the replacement words. Not even knot or ca't. 0
This sentence <s>doesn't</s> DOES contain one of the replacement words. 1
Tie a slipknot in the rope. 0
Would you like Pinot Noir? 0
You <s>cannot</s> CAN be serious\! 1

Wow, questo è compatto! Un problema: I'm notnon funziona correttamente - dovrebbe essere I AMinvece diI'M . Ma penso che solo bisogno di cambiare I'mper i'mil codice per risolvere il problema.
DLosc,

Oh, prova anche su frasi come Tie a slipknot in the rope.oWould you like Pinot Noir? . Non sono ancora nei casi di test, ma l'intenzione del PO era di escludere qualsiasi parola che termina con l' noteccezione cannot.
DLosc,

@DLosc Ottimi casi di test! Non riuscivo a pensare a più parole che finiscono not! È I'mstata una brutta occasione, grazie per lo spot!
Dom Hastings,
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.