Введение
Мы - особенно гики среди нас, которые склонны быть фанатами - все помнят этот старый мультфильм о Дальней стороне :
Очевидно, профессор Шварцман мог бы еще чуть-чуть освежить свои навыки программирования, прежде чем использовать свое изобретение. Но можете ли вы повторить это самостоятельно ... используя как можно меньше байтов?
Входные характеристики
Вы должны создать сценарий, который переводит звуки собак в соответственно интонированные "Эй". Это чистый код гольф; выигрывает наименьшее количество байтов.
Ваш вход будет состоять из некоторой комбинации следующих токенов:
Bark
,Baark
,Baaark
,Baaaark
, ... (то есть,B*rk
по крайней мере , 1a
замена звездочки)Woof
,Wooof
,Woooof
, ... (W*f
с , по меньшей мере , 2o
с заменой звездочки)Grr
,Grrr
,Grrrr
, ..., ( сG
последующим по меньшей мере , 2r
с)- Любое количество символов
.
(точка),!
(восклицательный знак) и / или?
(знак вопроса), которые могут встречаться в любом месте ввода
Обратите внимание, опять же, что токены на Woof
основе и на Grr
основе всегда требуют как минимум двух o
s и r
s соответственно; Wof
и неGr
являются действительными токенами.
Нет ограничений на длину токена (например, сколько повторных a
s может быть в Bark
токене); Однако, ваш декодер должен только работать правильно для входных лексем до 10 полных a
с, o
с, или r
S передать этот вызов.
Выходные характеристики
В соответствии с замыслом Шварцмана, ваша программа-декодер для собак должна обработать его в выходной текст следующим образом:
Bark
,Woof
ИGrr
сталиHey
;Baark
,Wooof
ИGrrr
сталиHeyy
;Baaark
,Woooof
ИGrrrr
сталиHeyyy
; и т.п.- Для всех
Bark
основанных токенов числоy
s в выходномHey
токене должно быть равно количествуa
s; - Для всех
Woof
основанных токенов числоy
s в выходномHey
токене должно быть на единицу меньше числаo
s; - Для всех
Grr
основанных токенов числоy
s в выходномHey
токене должно быть на единицу меньше числаr
s; - Все знаки препинания (
.
,!
и?
) остается без изменений.
Не забудьте удалить один y
из выходных данных только для Woof
s и Grr
s! Ввод Baaaaaaaark?
, с 8 a
с, станет Heyyyyyyyy?
, с совпадающим набором 8 y
с. Правда, Woooooooof?
становится только Heyyyyyyy?
, с 7 y
с.
Опять же, если вы можете заставить свою программу работать на входных токенах неограниченного размера, это здорово, но для этой задачи ваша программа будет проверяться только на то, чтобы убедиться, что она работает правильно для входных токенов, которые имеют не более 10 повторяющихся букв ,
Все Bark
-, Woof
-, и Grr
-На маркеры в вашем входе предполагается начать с заглавной буквы. Таким образом, нет никакой необходимости , чтобы ручки поворота Bark grrr
в Hey heyy
или что - нибудь подобное.
Пример входов и выходов
- Входные данные:
Bark. Bark! Bark!!
- Выход:
Hey. Hey! Hey!!
- Входные данные:
- Вход:
Baaaaaark?
(шестьa
с) - Выход:
Heyyyyyy?
(шестьy
с)
- Вход:
- Ввод:
Grrrrrrrr...
(восемьr
с) - Выход:
Heyyyyyyy...
( семьy
с)
- Ввод:
- Входные данные:
?...!
- Выход:
?...!
- Входные данные:
- Входные данные:
Wooof Woof? Grrrr. Baaaark Grr!
- Выход:
Heyy Hey? Heyyy. Heyyyy Hey!
- Входные данные:
Ответы:
Сетчатка ,
24181716 байт1 байт сохранен на основе идеи в ответе МТ0.
Попробуйте онлайн!
объяснение
Это просто превращает все буквы в
y
, но если за ними следуетf
или, илиk
мы немедленно заменим это. Удаляяf
иk
мы «нормализуем» длины слов, чтобы у всех них было на два больше больше,y
чем нужно.Это превращает первые два
y
каждого слова вHe
, завершая преобразование.источник
Perl,
514139 байтиспользование
вход
Выход
Как это работает
Простая подстановка регулярных выражений с использованием автопечати с
-p
добавлением 1 байта к счетчику./ge
выполняет замену для каждого шаблона и выполняет замену как код.В старой версии использовалось трехстороннее обнаружение, но Мартин Эндер заметил, что я недостаточно агрессивен, что позволило мне сэкономить 10 байт.
msh210 сообщил мне, что вам не нужны кавычки вокруг строки
He
, сохраняя два байта.источник
He
.Python, 106 байт
демонстрация
https://repl.it/C6Rr
источник
JavaScript (ES6) -
57555251 байтТест:
Спасибо @MartinEnder за байты 56 и 51 и вдохновение для некоторых других стружек.
источник
Vimscript,
51393733322928 байт,Regex кредиты для бритья еще 9 байтов: MT0, Мартин Эндер, msh210
демонстрация
Объяснение:
источник
\<yy
вместо\<\hy
?Perl 5, 25 байт
Perl копия ответа Retina Мартина Эндера . 24 байта, плюс 1
-pe
вместо-e
.источник
Javascript,
726664 байтаРедактировать: разделенный
f=
и функция + уменьшенное количество байтовисточник
f=
(по умолчанию PPCG), поэтому работает 64 байта.Пайк, 35 байт
Попробуй это здесь!
Генерирует Heys, Генерирует пунктуацию, объединяет, объединяет
источник
Python 3,
140135134 байтаИспользование регулярных выражений для поиска заменяемых символов.
Редактировать: Гольф 1 байтовый пробел и 4 байта при получении значений из результата findall.
Edit2: Гольф 1 байт ("a" Барка не был посчитан должным образом)
источник