Mini-golfe de segunda-feira: Uma série de perguntas curtas sobre código de golfe , postadas (espero!) Toda segunda-feira.
Às vezes, as pessoas se cansam das regras da vida: "não faça isso", "você não pode fazer isso", "não vamos deixar você fazer isso". Às vezes pode parecer realmente restritivo! Mas de vez em quando é bom se divertir um pouco, então vamos escrever um código para modificar essas regras. E enquanto estamos nisso, também pode modificar outra negatividade. (É claro que essas modificações não serão apenas temporárias, portanto deixaremos o texto original também.)
Desafio
Seu desafio é escrever um programa ou função que coloque <s>
rasuras em HTML em </s>
torno de palavras restritivas - ou seja, palavras terminadas em n't
ou seguidas de not
- e depois de cada uma delas, insira seu equivalente positivo em TODOS OS CAPS. No final, após um espaço, o número de substituições feitas deve ser incluído. Por exemplo:
Please don't jump into the pool.
torna-se
Please <s>don't</s> DO jump into the pool. 1
Para palavras que terminam em n't
ou são seguidas por not
(assim como cannot
), o equivalente positivo é tudo até o acima mencionado not
(excluindo espaços). Aqui está o que eu quero dizer:
do not speak
torna-se<s>do not</s> DO speak
it doesn't work
torna-seit <s>doesn't</s> DOES work
we cannot
torna-sewe <s>cannot</s> CAN
No entanto, existem algumas exceções. Certifique-se de que eles sejam manuseados corretamente.
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
Detalhes
- A entrada nunca conterá nenhum espaço em branco, exceto os espaços normais (sem guias, novas linhas etc.).
- A entrada nunca conterá nenhum duplo negativo (por exemplo
we can't not do this
). - Se a
not
aparecer imediatamente após um sinal de pontuação ou como parte de outra palavra, deixe-o como está. - Certifique-se de preservar o texto original, incluindo maiúsculas / minúsculas, entre as
<s></s>
tags. - Se desejar, você pode usar
<strike></strike>
no lugar de<s></s>
.
Casos de teste
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.
Saídas:
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
Pontuação
Este é o code-golf , pelo que o código válido mais curto em bytes vence. O desempatador vai para o envio que atingiu sua contagem final de bytes primeiro. O vencedor não será escolhido na próxima segunda-feira, 26 de outubro. Boa sorte!
Can't we capitalize special cases?
Oh this? It's nothing...
ouI wonder if we'll notice any words like this?
?Respostas:
Pip ,
138140 bytesYeesh, que
cannot
/knot
distinção é complicado.Lê uma linha de stdin, sai para stdout. A regex:
corresponde a uma palavra (incluindo apóstrofes) seguida por uma das três coisas:
not
n't
not
sem espaço, desde que a primeira metade da palavra fossecan
O
-
operador em uma regex torna essa distinção entre maiúsculas e minúsculas.As correspondências são substituídas pelo resultado da seguinte função. (Nota: dentro da função,
a
é a correspondência inteira eb
é o grupo de captura 1.)Depois que a string modificada é concluída, também produzimos um espaço e o número de substituições
i
.fonte
GNU Sed, 321 bytes
(incluindo +1 para
-r
)"Substituição de cordas - um trabalho para sed!" Eu pensei. Mas isso foi surpreendentemente difícil, e eu continuei inflando com a substituição do texto original. E a contagem! Pelo menos não há proibição de unário na questão ...
fonte
Perl, 153 bytes
150 scripts + 3 para
-p
Então, enquanto eu jogo todos os casos de teste agora, mas esse regex me custou muito ... vou pensar nisso!
Exemplo de saída:
fonte
I'm not
não está funcionando corretamente - deveria estar emI AM
vez deI'M
. Mas acho que você só precisa mudarI'm
parai'm
no código para corrigi-lo.Tie a slipknot in the rope.
ouWould you like Pinot Noir?
. Eles ainda não estão nos casos de teste, mas a intenção do OP era excluir qualquer palavra que terminasse emnot
excetocannot
.not
! OI'm
era um mau perder, graças para o local!