Lundi mini-golf: une série de courtes questions sur le golf , 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't
ou 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't
ou 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
devientit <s>doesn't</s> DOES work
we cannot
devientwe <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
not
apparaî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 code-golf , 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!
Can't we capitalize special cases?
Oh this? It's nothing...
ouI wonder if we'll notice any words like this?
?Réponses:
Pip ,
138140 octetsYeesh, cette
cannot
/knot
distinction est délicate.Lit une ligne depuis stdin, sort vers stdout. Le regex:
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 soitcan
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,
a
correspond à l'intégralité de la correspondance etb
correspond au groupe de capture 1.)Une fois la chaîne modifiée terminée, nous affichons également un espace et le nombre de remplacements
i
.la source
GNU Sed, 321 octets
(dont +1 pour
-r
)"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 ...
la source
Perl, 153 octets
150 script + 3 pour
-p
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:
la source
I'm not
ne fonctionne pas correctement - il devrait êtreI AM
au lieu deI'M
. Mais je pense que vous avez juste besoin de changerI'm
pouri'm
le code pour le fixer.Tie a slipknot in the rope.
ouWould 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 parnot
exceptécannot
.not
! LeI'm
était un mauvais coup manqué, merci pour la première place!