Minigolf de lunes: una serie de preguntas breves de código de golf , publicadas (¡con suerte!) Todos los lunes
A veces la gente se cansa de las reglas de la vida: "no hagas esto", "no puedes hacer eso", "no te dejaremos hacer esto". ¡Puede parecer realmente restrictivo a veces! Pero de vez en cuando, es bueno divertirse un poco, así que escribamos un código para modificar estas reglas. Y mientras estamos en eso, también podríamos modificar otra negatividad. (Por supuesto, estas modificaciones NO SERÁN solo temporales, por lo que también dejaremos la redacción original).
Reto
Su desafío es escribir un programa o función que ponga <s>
tachados de HTML </s>
alrededor de palabras restrictivas, es decir, palabras que terminen en n't
o seguidas de, not
y después de cada una de ellas, inserte su equivalente positivo en TODAS LAS MAYÚSCULAS. Al final, después de un espacio, se debe incluir el número de reemplazos realizados. Por ejemplo:
Please don't jump into the pool.
se convierte
Please <s>don't</s> DO jump into the pool. 1
Para las palabras que terminan en n't
o seguidas por not
(así como cannot
), el equivalente positivo es todo hasta lo mencionado anteriormente not
(excluyendo espacios). Esto es lo que quiero decir:
do not speak
se convierte<s>do not</s> DO speak
it doesn't work
se convierteit <s>doesn't</s> DOES work
we cannot
se conviertewe <s>cannot</s> CAN
Sin embargo, hay algunas excepciones. Asegúrese de que estos se manejen adecuadamente.
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
Detalles
- La entrada nunca contendrá espacios en blanco, excepto espacios normales (sin pestañas, líneas nuevas, etc.).
- La entrada nunca contendrá ningún negativo doble (p
we can't not do this
. Ej .). - Si
not
aparece inmediatamente después de un signo de puntuación, o como parte de otra palabra, déjelo. - Asegúrese de conservar el texto original, incluidas las mayúsculas y minúsculas, entre las
<s></s>
etiquetas. - Si lo desea, puede usarlo
<strike></strike>
en lugar de<s></s>
.
Casos de prueba
Entradas:
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.
Salidas:
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
Tanteo
Este es el código de golf , por lo que gana el código válido más corto en bytes. Tiebreaker va a la presentación que alcanzó su conteo final de bytes primero. El ganador no será elegido el próximo lunes 26 de octubre. ¡Buena suerte!
Can't we capitalize special cases?
Oh this? It's nothing...
oI wonder if we'll notice any words like this?
?Respuestas:
Pip ,
138140 bytesYeesh, que
cannot
/knot
distinción es difícil.Lee una línea desde stdin, emite a stdout. La expresión regular:
coincide con una palabra (incluidos los apóstrofes) seguida de una de tres cosas:
not
n't
not
sin espacio, siempre que la primera mitad de la palabra fueracan
El
-
operador en una expresión regular hace que no distinga entre mayúsculas y minúsculas.Las coincidencias se reemplazan con el resultado de la siguiente función. (Nota: dentro de la función,
a
es todo el partido yb
es el grupo de captura 1.)Una vez que la cadena modificada está hecha, también mostramos un espacio y el número de reemplazos
i
.fuente
GNU Sed, 321 bytes
(incluido +1 para
-r
)"Reemplazo de cuerdas: ¡un trabajo para sed!" Pensé. Pero esto fue sorprendentemente difícil, y seguí avanzando con la sustitución del texto original. Y el conteo! Al menos no hay prohibición de unario en la pregunta ...
fuente
Perl, 153 bytes
150 script + 3 para
-p
Entonces, aunque coincido con todos los casos de prueba ahora, pero esa expresión regular me ha costado mucho ... ¡Lo pensaré!
Salida de ejemplo:
fuente
I'm not
no funciona correctamente, debería serlo enI AM
lugar de hacerloI'M
. Pero creo que sólo tiene que cambiarI'm
ai'm
en el código para solucionarlo.Tie a slipknot in the rope.
oWould you like Pinot Noir?
. Todavía no están en los casos de prueba, pero la intención del OP era excluir cualquier palabra que terminara ennot
exceptocannot
.not
! ElI'm
fue un mal señorita, gracias por el terreno!