FizzBuzz настолько прост, держу пари, что вы можете сделать это задом наперед. В этом задании вам дадут длину строки FizzBuzz и вы должны дать положительное целое число, которое произвело эту строку.
Описание
Чтобы разбить это, строка FizzBuzz для nгенерируется следующим алгоритмом.
Начните с пустой строки и для каждого i=1..n(включительно):
- Если
iделится на3и5, добавьтеFizzBuzzк строке. - Если
iпросто делится на3добавлениеFizz. - Если
iпросто делится на5добавлениеBuzz. - Если
iне делится ни на один, добавьте десятичное представлениеi.
Так, например, FizzBuzz(15)это следующее:
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz
Вам дадут Length(FizzBuzz(n))и должны определить n. Вы можете предположить, что вход положительный и всегда будет длиной некоторой строки FizzBuzz.
правила
Ваше решение может представлять собой законченную программу или определение функции на любом стандартно приемлемом языке. Ваша программа / функция может принимать аргументы и возвращать ответы любым общепринятым способом . Стандартные лазейки запрещены.
Вы можете предположить, что входные данные являются положительными и допустимыми (описывает длину некоторой строки FizzBuzz) и меньше, чем наибольшее целое число, изначально представленное на вашем языке.
Это кодовый гольф, поэтому выигрывает самый короткий счетчик байтов.
Примеры
Вот несколько примеров
Length(FizzBuzz(n)) -> n
1 -> 1
6 -> 3
15 -> 6
313 -> 100
3677 -> 1001
редактировать
Исправлен последний контрольный пример. Спасибо @SteadyBox.