Desafío
¡Vamos a dar exclamación y signos de interrogación amigos invertidos!
Dado un cuerpo de texto que contiene oraciones que terminan en .
, ?
o !
, anteponen signos de interrogación invertidos ¿
, a oraciones interrogativas (oraciones que terminan en ?
) y signos de exclamación invertidos ¡
, a exclamativo (oraciones que terminan en !
). Las oraciones que terminan en .
deben ser ignoradas.
Las oraciones estarán separadas por espacios en blanco (espacios, tabulaciones y / o nuevas líneas) y solo contendrán alfanuméricos, comas, apóstrofes y espacios. Cada oración tendrá al menos una palabra. La primera palabra de cada oración se garantiza con mayúscula. La entrada puede comenzar y finalizar con cualquier espacio en blanco.
Ejemplo
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.
Salida:
¡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.
Reglas
- Se aplican todas las reglas predeterminadas de Code Golf.
- El programa con la menor cantidad de bytes gana.
Bonificación (17% de descuento): analiza múltiples marcas
Una oración también puede terminar en múltiples signos de exclamación / interrogación. Dé a cada una de estas marcas un signo de exclamación / interrogación inverso emparejado para obtener un 17% adicional de descuento en su recuento de bytes.
Ejemplo
Entrada:
I am a man in a can doing a dance?? Maybe...
Doing it for the views??!???!
Salida:
¿¿I am a man in a can doing a dance?? Maybe...
¡¿¿¿¡¿¿Doing it for the views??!???!
Salida incorrecta :
¿¿I am a man in a can doing a dance?? Maybe...
¿¿¡¿¿¿¡Doing it for the views??!???!
fuente
Respuestas:
Retina ,
393734 bytesPruébalo en línea.
Explicación
Esto coincide con una oración que termina en un signo de exclamación o de interrogación, y antepone ese carácter de puntuación a la oración. Ahora sabemos que todos los
!
o?
que son seguidos inmediatamente por un carácter no espacial deben ser aquellos que insertamos, porque los originales deben estar separados del siguiente carácter por un espacio.Esta etapa de transliteración convierte todo
!
y?
en¡
y¿
, respectivamente, siempre que se encuentren en una coincidencia de\S\b
, que se aplica solo a los que acabamos de insertar. Reemplazando ambos en dos sustituciones separadas en el mismo conteo de bytes, pero prefiero la semántica de una etapa de transliteración aquí.fuente
Mathematica 137 bytes
No es el más corto, pero fue divertido hacerlo.
TextSentences
divide el texto de entrada en oraciones yStringPosition
encuentra las posiciones inicial y final de cada oración en el texto. La puntuación invertida se inserta al comienzo de cada oración según sea necesario.Uso, suponiendo que el texto se ingresa en
t
,fuente
Sed, 61 bytes
Prueba de funcionamiento :
fuente
-r
indicador para (GNU) sed, no necesita escapar(
y)
eso debería ahorrarle 8. Sin embargo, debe agregar un punto adicional para usar esta opción no predeterminada.Javascript (ES6),
86796663 bytesSin golf:
Uso:
Implementará una solución de bonificación pronto.
Gracias a:
@ user81655 , 86 => 79 bytes
fuente
i=>i.replace(/[A-Z][^.!?]*[.!?]/g,k=>(r=k.slice(-1))<'.'?'¡'+k:r>'.'?'¿'+k:k)
.
.Mathematica,
1019291 bytesfuente
Python 2, 127.82 (154-17%) bytes
fuente
𝔼𝕊𝕄𝕚𝕟, 36 caracteres / 53 bytes
Try it here (Firefox only).
fuente