Вызов
Мы собираемся дать восклицательные и вопросительные знаки перевернутым друзьям!
Заданный текст, содержащий предложения, оканчивающиеся на .
, ?
или !
прерывающие перевернутые знаки вопроса ¿
, на вопросительные предложения (предложения, оканчивающиеся на ?
) и перевернутые восклицательные знаки ¡
, на восклицательные (предложения, оканчивающиеся на !
). Предложения, оканчивающиеся на .
, должны игнорироваться.
Предложения будут разделены пробелами (пробелы, табуляции и / или новые строки) и будут содержать только буквенно-цифровые символы, запятые, апострофы и пробелы. В каждом предложении будет хотя бы одно слово. Первое слово каждого предложения гарантированно пишется с заглавной буквы. Ввод может начинаться и заканчиваться любым пробелом.
пример
Входные данные:
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.
Выход:
¡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.
правила
- Применяются все правила Code Golf по умолчанию.
- Программа с самым коротким количеством байтов побеждает.
Бонус (скидка 17%) - парсинг нескольких оценок
Предложение также может заканчиваться несколькими восклицательными / вопросительными знаками. Дайте каждой из этих меток парный обратный восклицательный знак / вопросительный знак для дополнительных 17% от вашего количества байтов.
пример
Входные данные:
I am a man in a can doing a dance?? Maybe...
Doing it for the views??!???!
Выход:
¿¿I am a man in a can doing a dance?? Maybe...
¡¿¿¿¡¿¿Doing it for the views??!???!
Неверный вывод:
¿¿I am a man in a can doing a dance?? Maybe...
¿¿¡¿¿¿¡Doing it for the views??!???!
источник
Ответы:
Сетчатка ,
393734 байтаПопробуйте онлайн.
объяснение
Это соответствует предложению, оканчивающемуся на восклицательный знак или вопросительный знак, и добавляет этот знак препинания к предложению. Теперь мы знаем, что все
!
или, за?
которыми сразу следует непробельный символ, должны быть теми, которые мы вставили, потому что исходные должны быть отделены от следующего символа пробелом.Эта стадия транслитерации превращает все
!
и?
в¡
и¿
, соответственно, при условии, что они найдены в совпадении\S\b
, которое применяется только к тем, которые мы только что вставили. Замена обоих в двух отдельных подстановках в одном и том же количестве байтов, но я предпочитаю семантику стадии транслитерации здесь.источник
Mathematica 137 байтов
Не самое короткое, но это было весело.
TextSentences
разбивает входной текст на предложения иStringPosition
находит начальную и конечную позиции каждого предложения в тексте. Знаки препинания вставляются в начале каждого предложения по мере необходимости.Использование, предполагая, что текст вводится в
t
,источник
Sed, 61 байт
Тестовый забег :
источник
-r
флаг для (GNU) sed, вам не нужно избегать(
и,)
что должно вас спасти. 8. Однако вам нужно добавить дополнительное очко для использования этой опции не по умолчанию.Javascript (ES6),
86796663 байтаUngolfed:
Использование:
Скоро внедрит бонусное решение.
Спасибо:
@ user81655 , 86 => 79 байт
источник
i=>i.replace(/[A-Z][^.!?]*[.!?]/g,k=>(r=k.slice(-1))<'.'?'¡'+k:r>'.'?'¿'+k:k)
.
.Mathematica,
1019291 байтисточник
Python 2, 127,82 (154-17%) байтов
источник
𝔼𝕊𝕄𝕚𝕟, 36 символов / 53 байта
Try it here (Firefox only).
источник