Простой FizzBuzz с использованием строк.
Данный
- 1 слово или фраза (строка)
- 2 уникальных персонажа
Выход
Слово или фраза, в которой каждое вхождение первого символа заменено на fizz, а каждый второй символ заменяется на buzz
правила
- Первая буква в Fizz и Buzz должна оставаться заглавной
- Для остальных слов fizz и buzz вы должны соответствовать регистру замененного символа (если нет регистра, то используйте строчные буквы)
- Если заданных символов нет в фразе, выведите оригинальную фразу
Тестовые случаи
Given: Hello, h, l
Output: FIZZeBuzzBuzzo
Given: test, a, b
Output: test
Given: PCG rocks!, , !
PCGFizzrocksBuzz
Given: This
Is
SPARTA!,
, S
Output: ThiBuzzFizzIBuzzFizzBUZZPARTA!
Given: FizzBuzz, a, b
Output: FizzBUZZuzz
Это код-гольф, поэтому выигрывает самый короткий код в байтах!
Заметка
Технически работа с новой строкой (это СПАРТА!) Является частью проблемы. Тем не менее, я не буду аннулировать ответ за его отсутствие, поскольку в некоторых языках это очень сложно или даже невозможно.
you must match the case of the replaced character
и,Input is not case sensitive
кажется, противоречат друг другу.ThiBuzzFizzIBuzzFizzBUZZPARTA
отсутствует последний восклицательный знак.aa, a, f
? Каков будет ожидаемый результат?BUZZizzBUZZizz
,FizzFizz
Или как разрешено по своему усмотрению?FizzFizz
.Ответы:
Желе , 34 байта
Попробуйте онлайн!
Как?
источник
Python 3 ,
180174168160152 байтаЭто просто более понятная версия ответа Стивена в Python 3. Это отнимает 42% его байтов. Python 2 сохранит один байт на печать, но такова цена прогресса. Это обрабатывает переводы строк правильно.
Спасибо Blckknight за сохранение 8 байтов на входе.
источник
fileinput
модули?from sys import*
иs,a,b=J(stdin).split(', ')
сохранить несколько символов?Python, 109 байт
Попробуйте онлайн!
Принимает два символа в одну строку
Редактировать: Добавлен тестовый пример для ссылки TIO, работает новая строка
источник
Python 2 ,
271, 261 байтПопробуйте онлайн!
Ух ты, этот дурак! Оказывается, Python не будет принимать многострочные входы, поэтому
fileinput
должны быть использованы.редактировать: должны пройти все дела сейчас :)
источник
import fileinput as f
...for m in f.input():
MATLAB / Octave ,
106102111 байтовЭто может быть оптимизировано в дальнейшем.
Он использует простую замену Regex. Однако требуется промежуточный шаг, заменяя сначала введенные символы цифрами. Это так, что если вторая входная буква замены содержалась в
Fizz
этомFizz
не заменяется, когда выполняется следующее регулярное выражение.Это, конечно, предполагает, что на входе нет чисел. Однако, учитывая, что вопрос говорит, что ввод - это слово или фраза, я чувствую, что это приемлемое предположение.
Код будет правильно обрабатывать новые строки на входе.
Вы можете попробовать это онлайн!
источник
Bash 4.4 + GNU sed,
70228222227 байтВидимо,
alias e=echo
выдает ошибку, если ссылка на Bash 4.3 или ниже, по-видимому, использует версия TIO. Поэтому более длинный и эквивалентный код Bash 4.3 приведен в нижеприведенном наборе тестов TIO для тестирования. Это проходит все контрольные примеры, так что это хорошо.Попробуйте онлайн!
источник
JavaScript (ES6), 92 байта
Принимает ввод в виде строки и массива из двух символов. Поддерживает переводы строк.
Контрольные примеры
Показать фрагмент кода
источник
Pyth - 25 байт
Тестовый пакет .
источник
"Hl", Hello
неправильно выводит заглавные буквы и"hL", Hello
не заменяетl
s.GNU sed , 135 + 1 (флаг r) = 136 байт
По умолчанию сценарий sed выполняется столько раз, сколько имеется строк ввода. Для обработки многострочного ввода я использую цикл, чтобы добавить все возможные оставшиеся строки к первой, не запуская новый цикл.
Попробуйте онлайн!
Таблица замены, используемая в строке 4, должна быть в том же порядке, то есть «Fizz» и «Buzz» после их прописных форм. Это потому, что Sed Regex
.*
, используемое при поиске в таблице, является жадным. Если текущий символ, который необходимо заменить, не является буквой (без регистра), тогда нужна строчная строка (соответствует последней).Поскольку у sed нет типов данных, я использую символьный разделитель для итерации строки. Это отметит мою текущую позицию, и в цикле я смещу ее слева направо. К счастью, я могу использовать
,
для этого, так как это разделитель входных данных.Объяснение:
источник
Haskell, 114 байт
r
принимает символы fizz и buzz в качестве списка из 2 элементов в качестве первого аргумента, а входную строку - в качестве второго аргумента. Новые строки и юникод должны обрабатываться надлежащим образом, хотя, к сожалению, эта функция не является полной (с учетом неправильных входных данных, сохраненных 5 байтов).источник
u=Data.Char.toUpper
работает только в ghci, насколько я знаю. В стандартном Haskell вам нуженimport
. Однако вы должны быть в состоянии сохранить некоторые байты, используя=<<
вместоconcatMap
.Mathematica, 94 байта
Анонимная функция. Принимает две строки в качестве входных данных и возвращает функцию, которая принимает строку в качестве входных данных и возвращает строку в качестве выходных данных. Он должен вызываться в формате
prog["c1", "c2"]["s"]
, где"s"
находится целевая строка"c1"
и"c2"
два символа. Возможно, будет в гольф дальше.источник