Мистер Макки - персонаж из Южного парка, хорошо известный тем, что он добавляет «m'kay» во все, что он говорит.
Напишите программу или функцию, которая преобразует строку текста в то, что сказал бы мистер Макки.
M'kay размещение
m'kay
имеет случайный 50% шанс того , чтобы быть добавлен после пунктуации,
,.
,?
и!
. Если это так, за ним будет следовать точно такой же знак пунктуации, который стоит перед ним и перед ним стоит пробел.Например, в предложении можно добавить
Test, test.
два местаm'kay
: после запятой и после точки с вероятностью 50% в каждом месте. Возможные результаты будутTest, m'kay, test
. илиTest, test. M'kay.
илиTest, m'kay, test. M'kay.
.Всегда должен быть хотя бы один
m'kay
добавленный . Более того, оно не всегда может быть в одном и том же месте, и каждое действительное место, гдеm'kay
его можно добавить, должно происходить с равной вероятностью. То есть вы не можетеm'kay
всегда добавлять в конце строки, если из-за случайности вы никогда не добавляли ни одногоm'kay
. Если есть только одинm'kay
, он должен иметь одинаковую вероятность появления в каждой действительной позиции, даже если его присутствие является обязательным.Если
m'kay
после?
,.
или!
,m
должен быть в верхнем регистре.Количество
m
вm'kay
должно быть uniformely выбрал между 1 и 3. То естьm'kay
,mm'kay
иmmm'kay
есть все возможные варианты, каждый из которых с вероятностью 0,33 ... Если он должен быть в верхнем регистре (см выше правила), всеm
должно быть в верхнем регистре.
Входы, выходы
Входными данными являются строки ASCII, содержащие символы от ASCII дек 32 (пробел) до ASCII дек 126 (тильда
~
). На входе нет разрывов строк. Вы можете предположить, что любой вход будет содержать хотя бы один из, . ? !
.Вы можете предположить, что
m'kay
на входе нет ни одного из вариантов.Входные данные могут быть взяты из STDIN, аргументов функции, командной строки или чего-либо подобного.
Вывод может быть через STDOUT, возврат функции или что-то подобное.
Контрольные примеры
- Входные данные:
Test.
Возможный вывод: Test. M'kay.
- Входные данные:
Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It's 100% free, no registration required.
Возможный вывод: Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. MMM'kay. It's 100% free, mm'kay, no registration required.
- Входные данные:
Drugs are bad, so, if you do drugs, you're bad, because drugs are bad. They can hurt your body, cause drugs are bad.
Возможный вывод: Drugs are bad, m'kay, so, if you do drugs, you're bad, m'kay, because drugs are bad. They can hurt your body, m'kay, cause drugs are bad. M'kay.
- Входные данные:
Do you understand? Really? Good!
Возможный вывод: Do you understand? MM'kay? Really? Good! MMM'kay!
счет
Это код-гольф , поэтому выигрывает самый короткий код в байтах, ладно?
M'kay
вероятность случайного добавления 50% после знаков препинания,.,? и! » кажется несовместимой с « всегда должен быть хотя бы одинm'kay
добавленный ». Пожалуйста, уточните, чтоОтветы:
CJam,
655249 байтовПопробуйте онлайн в интерпретаторе CJam .
Как это устроено
источник
APL (66)
Результат 10 заездов:
Объяснение:
{
...}⍣≢
: применять функцию к входу, пока значение не изменитсяM'kay
для каждого персонажа:{
...}¨⍵
: для каждого символа на входе:'mM'[1+⍵≠',']/⍨?3
: генерировать от 1 до 3m
с илиM
с в зависимости от того, был ли символ запятой или нет.'''kay',⍨
: добавить строку'kay
.⍵,⍨
: добавить символ' ',
: поставить пробел(¯1+⌈?2×⍵∊',.!?')/¨
: для каждогоM'kay
', если соответствующий ему символ является одним из.,!?
, выберите его с вероятностью 50%, в противном случае выберите его с вероятностью 0%.⍉⍵⍪⍉⍪
: сопоставить каждый выбор с его характером,∊
: перечислить все простые элементы (символы) по порядку.источник
⍣≢
применяет функцию несколько раз, пока ввод не совпадет с выводом. Таким образом, если один из них добавлен, выходные данные изменяются, и он останавливается и возвращает выходные данные, а если один из них не добавляется, выходные данные остаются неизменными и снова запускаются до тех пор, пока один из них не будет добавлен.К5,
9990 байтНу, кто-то должен был начать это!
Сохранено 9 байт с использованием менее изящного метода верхнего регистра M.
объяснение
99-байтовая версия
источник
Юлия, мм'кей,
115114 байтовЭто создает рекурсивную функцию, которая принимает строку и возвращает строку.
Ungolfed + объяснение:
Мне не нравится Южный парк, но острые ощущения от гольфа были слишком соблазнительными, чтобы упустить это из виду. Спасибо KRyan за упрощение регулярных выражений, сохранение 1 байта.
источник
JavaScript ES6,
7986108 байтОказывается, выполнение
M
повторения занимает много байтов.Старая версия (не повторяется) (86 байт)
Старая версия (не повторяется, не требует хотя бы одного m'kay) (79 байт) :
Самая старая версия:
источник
Test.
входе.("Test.")
к нему суффикс .Pyth,
515049Сохранено 1 байт благодаря @Maltysen.
Попробуйте онлайн.
Объяснение и больше игры в гольф в ближайшее время.
источник
C 170 байт
Первый треск на это:
Ungolfed:
источник
Scala, 191 байт
источник
Mathematica, 202 байта
Добавлены разрывы строк для удобства чтения. Оценивает анонимную функцию, принимающую строку в качестве аргумента. (
сокращение от\[Function]
.)Ungolfed:
h
принимает знаки препинания полукокса и делает его" m'kay,"
," mm'kay,"
и т.д. случайным образом и капитализированные соответствующим образом .f
берет строку и ищет любой знак пунктуацииx
; когда он его находит, он с вероятностью 50% прибегает к соответствующемуh[x]
, а на 50% - к подобному выражениюa[3, x]
. Также обновляетсяi
общее количество замененных знаков препинания (в обоих случаях). Так чтоf["X, x."]
может оценитьНаконец,
g
разберемся сa
х.Count
посчитаем, сколькоa
мы туда положим; если оно равноi
общему количеству знаков препинания, то мы не добавляли ни одного мейкаса. В этом случае у нас будут выражения типаa[0, _] ... a[i-1, _]
, и мы определим,a
чтобы он возвращал m'kay точно для одного из0..i-1
.источник
Питон,
173168156Ungolfed:
источник
> <>, 150 байт
13 потраченных впустую байтов, но мне стало немного скучно, пытаясь изменить его. Кроме того, случайность в Funge трудно в гольф.
источник
Perl,
938988 байтОпределенно можно играть в гольф еще!
4 байта отрезаны благодаря Дому Гастингсу
источник
C ++ 290
Мое решение
Поясняющая переменная z определяет, какой знак пунктуации и z = 0 указывают на использование «m» вместо «M».
Контрольная работа
источник
string::npos
=>-1
или~0
. Выбор~0
позволяет использовать-
вместо!=
; так что условно становитсяif(z-~0&&r)
, экономя 11 байт.JavaScript ES6, 121 байт
Сбои, если данная строка не содержит подходящей пунктуации.
источник
Луа,
162160 байтисточник