Lundi Mini-Golf # 5: <s> Ne pas </s> essayez ceci à la maison

24

Lundi mini-golf: une série de courtes questions sur le , affichées (avec un peu de chance!) Chaque lundi

Parfois, les gens se lassent des règles de la vie: "ne faites pas ceci", "vous ne pouvez pas faire cela", "nous ne vous laisserons pas faire cela". Cela peut parfois sembler vraiment contraignant! Mais de temps en temps, il est bon de s'amuser un peu, alors écrivons du code pour modifier ces règles. Et tant que nous y sommes, cela pourrait tout aussi bien modifier d'autres aspects négatifs. (Bien sûr, ces modifications ne seront PAS temporaires, nous conserverons donc également le libellé d'origine.)

Défi

Votre défi est d'écrire un programme ou une fonction qui place des <s>barrages HTML </s>autour de mots restrictifs - c'est-à-dire, des mots se terminant par n'tou suivis par not- et après chacun d'eux, insère son équivalent positif dans TOUS LES MAJUSCULES. À la fin, après un espace, le nombre de remplacements effectués doit être inclus. Par exemple:

Please don't jump into the pool.

devient

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

Pour les mots se terminant par n'tou suivis par not(ainsi que cannot), l'équivalent positif est tout ce qui précède not(à l'exclusion des espaces). Voici ce que je veux dire:

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

Il existe cependant quelques exceptions. Assurez-vous que ceux-ci sont traités correctement.

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

Détails

  • L'entrée ne contiendra jamais d'espace, sauf les espaces normaux (pas de tabulations, de nouvelles lignes, etc.).
  • L'entrée ne contiendra jamais de double négatif (par exemple we can't not do this).
  • Si un notapparaît immédiatement après un signe de ponctuation ou dans le cadre d'un autre mot, laissez-le.
  • Veillez à conserver le texte d'origine, y compris les majuscules / minuscules, entre les <s></s>balises.
  • Si vous le souhaitez, vous pouvez utiliser <strike></strike>à la place de <s></s>.

Cas de test

Contributions:

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.

Les sorties:

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

Notation

Il s'agit de , donc le code valide le plus court en octets l'emporte. Tiebreaker va à la soumission qui a atteint son nombre d'octets final en premier. Le gagnant ne sera pas choisi le lundi 26 octobre prochain. Bonne chance!

ETHproductions
la source
@FryAmTheEggman Oui, sauf s'il y en a d'autres qui méritent d'être ajoutés à la liste. Je préfère être bref, mais avez-vous des suggestions?
ETHproductions
Non, je ne voulais tout simplement pas que cela souffre du syndrome du défi "vous avez changé la spécification maintenant ça craint": P
FryAmTheEggman
1
Cas de test suggéré:Can't we capitalize special cases?
DLosc
Faut-il être prudent avec des chaînes comme: Oh this? It's nothing...ou I wonder if we'll notice any words like this??
Dom Hastings du
2
Un <strike> ne </strike> PAS convertit simplement les mèmes en concours!
janvier

Réponses:

7

Pip , 138 140 octets

Yeesh, cette cannot/ knotdistinction est délicate.

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

Lit une ligne depuis stdin, sort vers stdout. Le regex:

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

correspond à un mot (y compris les apostrophes) suivi de l'une des trois choses suivantes:

  • not
  • n't
  • not sans espace, à condition que la première moitié du mot soit can

L' -opérateur sur une expression régulière le rend insensible à la casse.

Les correspondances sont remplacées par le résultat de la fonction suivante. (Remarque: dans la fonction, acorrespond à l'intégralité de la correspondance et bcorrespond au groupe de capture 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)

Une fois la chaîne modifiée terminée, nous affichons également un espace et le nombre de remplacements i.

DLosc
la source
3

GNU Sed, 321 octets

(dont +1 pour -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/ /

"Remplacement de cordes - un travail pour sed!" J'ai pensé. Mais cela a été étonnamment difficile, et j'ai continué à m'incliner avec la substitution du texte original. Et le comptage! Au moins, il n'y a pas d'interdiction d'unaire dans la question ...

Toby Speight
la source
2

Perl, 153 octets

150 script + 3 pour -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
/

Donc, alors que je correspond à tous les cas de test maintenant, mais cette expression régulière m'a coûté cher ... J'y pense!

Exemple de sortie:

$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
Dom Hastings
la source
Wow, c'est compact! Un problème: I'm notne fonctionne pas correctement - il devrait être I AMau lieu de I'M. Mais je pense que vous avez juste besoin de changer I'mpour i'mle code pour le fixer.
DLosc
Oh - aussi, essayez-le sur des phrases comme Tie a slipknot in the rope.ou Would you like Pinot Noir?. Ils ne sont pas encore dans les cas de test, mais l'intention du PO était d'exclure tout mot se terminant par notexcepté cannot.
DLosc
@DLosc Excellents cas de test! Je ne pouvais pas penser à des mots plus longs se terminant par not! Le I'métait un mauvais coup manqué, merci pour la première place!
Dom Hastings du