Мини-гольф по понедельникам: серия коротких вопросов о код-гольфе , публикуемых (надеюсь!) Каждый понедельник.
Иногда люди устают от жизненных правил: «не делай этого», «ты не можешь этого делать», «мы не позволим тебе сделать это». Это может показаться действительно ограничивающим время от времени! Но время от времени хорошо немного повеселиться, поэтому давайте напишем некоторый код, чтобы изменить эти правила. И в то время как мы на это, могли бы также изменить и другой негатив. (Конечно, эти изменения не будут носить временный характер, поэтому мы также оставим оригинальную формулировку.)
Вызов
Ваша задача состоит в том, чтобы написать программу или функцию, которая ставит <s>
зачеркивание HTML </s>
вокруг ограничительных слов, то есть слов, оканчивающихся на n't
или после которых, not
и после каждого из них вставляет свой положительный эквивалент в ALL CAPS. В конце, после пробела, должно быть указано количество произведенных замен. Например:
Please don't jump into the pool.
становится
Please <s>don't</s> DO jump into the pool. 1
Для слов, заканчивающихся n't
или сопровождаемых not
(а также cannot
) положительным эквивалентом является все до вышеупомянутого not
(исключая пробелы). Вот что я имею в виду:
do not speak
становится<s>do not</s> DO speak
it doesn't work
становитсяit <s>doesn't</s> DOES work
we cannot
становитсяwe <s>cannot</s> CAN
Однако есть несколько исключений. Убедитесь, что они обрабатываются правильно.
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
Детали
- Ввод никогда не будет содержать пробелов, кроме обычных пробелов (без вкладок, новых строк и т. Д.).
- На входе никогда не будет двойных негативов (например
we can't not do this
). - Если
not
сразу после знака препинания появляется знак «А» или как часть другого слова, оставьте его. - Обязательно сохраняйте исходный текст, включая прописные / строчные буквы, между
<s></s>
тегами. - Если вы хотите, вы можете использовать
<strike></strike>
вместо<s></s>
.
Тест-кейсы
Входы:
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.
Выходы:
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
счет
Это код-гольф , поэтому выигрывает самый короткий действительный код в байтах. Tiebreaker переходит к представлению, которое первым достигло конечного числа байтов. Победитель не будет выбран в следующий понедельник, 26 октября. Удачи!
Can't we capitalize special cases?
Oh this? It's nothing...
илиI wonder if we'll notice any words like this?
?Ответы:
Пип ,
138140 байтИш, что
cannot
/knot
различие сложно.Читает строку из стандартного ввода, выводит в стандартный вывод. Регулярное выражение:
соответствует слову (включая апострофы), за которым следует одно из трех:
not
n't
not
без пробела, при условии, что первая половина слова былаcan
-
Оператор на регулярном выражении делает его нечувствительным к регистру.Матчи заменяются результатом следующей функции. (Примечание: внутри функции
a
- все совпадение иb
группа захвата 1.)Как только измененная строка завершена, мы также выводим пробел и количество замен
i
.источник
GNU Sed, 321 байт
(включая +1 за
-r
)«Замена струн - работа для седа!» Я думал. Но это было удивительно сложно, и я продолжал поддаваться замене исходного текста. И считать! По крайней мере, нет запрета на унарный в вопросе ...
источник
Perl, 153 байта
150 сценариев + 3 за
-p
Итак, пока я сопоставляю все тестовые случаи, но это регулярное выражение дорого обошлось мне ... Я подумаю над этим!
Пример вывода:
источник
I'm not
не работает должным образом - это должно бытьI AM
вместоI'M
. Но я думаю , что вам просто нужно изменить ,I'm
чтобыi'm
в коде , чтобы исправить это.Tie a slipknot in the rope.
илиWould you like Pinot Noir?
. Они еще не в тестовых случаях, но намерение ОП состояло в том, чтобы исключить любое слово, оканчивающееся на,not
кромеcannot
.not
! ЭтоI'm
был плохой промах, спасибо за место!