Desafio
¡Vamos dar pontos de interrogação e pontos de interrogação invertidos!
Dado um corpo de sentenças de texto contendo terminando em .
, ?
ou !
, preceder pontos de interrogação invertido, ¿
para frases interrogativas (frases que termina em ?
) e pontos de exclamação invertidos, ¡
, a exclamativas (frases que terminam em !
). As frases terminadas em .
devem ser ignoradas.
As frases serão separadas por espaços em branco (espaços, tabulações e / ou novas linhas) e conterão apenas alfanuméricos, vírgulas, apóstrofes e espaços. Cada frase terá pelo menos uma palavra. A primeira palavra de cada frase é garantida em maiúscula. A entrada pode começar e terminar com qualquer espaço em branco.
Exemplo
Entrada:
Hello there! What is your name?
My name is Ron. What's your name?
My name is Alex. Nice to meet you!
Nice to meet you to! How was your break?
It was great, I spent all my time code golfing!
What's that?
Wow, you're such a n00b! Here, let me show you.
Resultado:
¡Hello there! ¿What is your name?
My name is Ron. ¿What's your name?
My name is Alex. ¡Nice to meet you!
¡Nice to meet you to! ¿How was your break?
¡It was great, I spent all my time code golfing!
¿What's that?
¡Wow, you're such a n00b! Here, let me show you.
Regras
- Todas as regras padrão do Code Golf se aplicam.
- O programa com a menor quantidade de bytes vence.
Bônus (17% de desconto) - Analise várias marcas
Uma frase também pode terminar em vários pontos de exclamação / interrogação. Atribua a cada uma dessas marcas um ponto de exclamação / interrogação inversa emparelhado, com um desconto adicional de 17% em sua contagem de bytes.
Exemplo
Entrada:
I am a man in a can doing a dance?? Maybe...
Doing it for the views??!???!
Resultado:
¿¿I am a man in a can doing a dance?? Maybe...
¡¿¿¿¡¿¿Doing it for the views??!???!
Saída incorreta :
¿¿I am a man in a can doing a dance?? Maybe...
¿¿¡¿¿¿¡Doing it for the views??!???!
fonte
Respostas:
Retina ,
393734 bytesExperimente online.
Explicação
Corresponde a uma frase que termina em um ponto de exclamação ou interrogação e acrescenta esse caractere de pontuação à frase. Agora sabemos que toda a
!
ou?
que são imediatamente seguido por um caractere não-espaço devem ser aqueles que inserido, porque os originais deve ser separado do próximo caractere por um espaço.Esse estágio de transliteração transforma tudo
!
e?
em¡
e¿
, respectivamente, desde que eles sejam encontrados em uma correspondência de\S\b
, que se aplica somente àqueles que acabamos de inserir. Substituindo ambos em duas substituições separadas na mesma contagem de bytes, mas eu prefiro a semântica de um estágio de transliteração aqui.fonte
Mathematica 137 bytes
Não é o mais curto, mas foi divertido de fazer.
TextSentences
divide o texto de entrada em sentenças eStringPosition
localiza as posições inicial e final de cada sentença no texto. A pontuação invertida é inserida no início de cada frase, conforme necessário.Uso, supondo que o texto seja inserido em
t
,fonte
Sed, 61 bytes
Execução de teste:
fonte
-r
sinalizador para (GNU) sed, não precisará escapar do(
e o)
deverá salvar 8. Você precisa adicionar um ponto extra para usar essa opção não padrão.Javascript (ES6),
86796663 bytesUngolfed:
Uso:
Implementará a solução de bônus em breve.
Graças a:
@ user81655 , 86 => 79 bytes
fonte
i=>i.replace(/[A-Z][^.!?]*[.!?]/g,k=>(r=k.slice(-1))<'.'?'¡'+k:r>'.'?'¿'+k:k)
.
.Mathematica,
1019291 bytesfonte
Python 2, 127,82 (154-17%) bytes
fonte
, 36 caracteres / 53 bytes
Try it here (Firefox only).
fonte